Realm
A distributed, event-based tasking library
Loading...
Searching...
No Matches
runtime_impl.h
Go to the documentation of this file.
1/*
2 * Copyright 2026 Stanford University, NVIDIA Corporation, Los Alamos National Laboratory
3 * SPDX-License-Identifier: Apache-2.0
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18// Runtime implementation for Realm
19
20#ifndef REALM_RUNTIME_IMPL_H
21#define REALM_RUNTIME_IMPL_H
22
23#include "realm/runtime.h"
24#include "realm/id.h"
25
26#include "realm/network.h"
27#include "realm/operation.h"
28#include "realm/profiling.h"
29
30#include "realm/dynamic_table.h"
31#include "realm/codedesc.h"
33
34// event and reservation impls are included directly in the node's dynamic tables,
35// so we need their definitions here (not just declarations)
37#include "realm/event_impl.h"
38#include "realm/barrier_impl.h"
39#include "realm/rsrv_impl.h"
40#include "realm/subgraph_impl.h"
41
42#include "realm/machine_impl.h"
43
44#include "realm/threads.h"
45#include "realm/sampling.h"
46
47#include "realm/module.h"
48#include "realm/network.h"
49
50#include "realm/bgwork.h"
51#include "realm/activemsg.h"
52#include "realm/repl_heap.h"
53#include "realm/dynamic_table.h"
54
55#include "realm/shm.h"
57
59
60#include <optional>
61#include <unordered_map>
62#include <memory>
63
64namespace Realm {
65
66 class ProcessorGroupImpl;
67 class MemoryImpl;
68 class IBMemory;
69 class ProcessorImpl;
70 class RegionInstanceImpl;
71 class NetworkSegment;
72
73 class Channel; // from transfer/channel.h
74
75 // use a wide tree for local events - max depth will be 2
76 // use a narrow tree for remote events - depth is 3, leaves have 128 events
77 typedef DynamicTableAllocator<GenEventImpl, 11, 16, GenEventImpl::GenEventImplAllocator>
87
88 // for each of the ID-based runtime objects, we're going to have an
89 // implementation class and a table to look them up in
90 struct Node {
91 Node(void);
92 ~Node(void);
93
94 Node(const Node &) = delete;
95 Node &operator=(const Node &) = delete;
96 Node(Node &&) noexcept = delete;
97 Node &operator=(Node &&) noexcept = delete;
98
99 // not currently resizable
104
109
110 // sparsity maps can be created by other nodes, so keep a
111 // map per-creator_node
115 };
116
117 std::ostream &operator<<(std::ostream &os, const Node &node);
118
119 // the "core" module provides the basic memories and processors used by Realm
121 friend class CoreModule;
122 friend class RuntimeImpl;
123
124 protected:
126
128
129 public:
130 virtual void configure_from_cmdline(std::vector<std::string> &cmdline);
131
132 protected:
133 // configurations
134 // CoreModule
135 int num_cpu_procs = 1, num_util_procs = 1, num_io_procs = 0;
136 int concurrent_io_threads = 1; // Legion does not support values > 1 right now
137 size_t sysmem_size = 512 << 20;
138 size_t sysmem_ipc_limit = 0; // make the sysmem as shared only if share_sysmem_limit
139 // == 0 or sysmem_size <= share_sysmem_limit
140 size_t stack_size = 2 << 20;
141 bool pin_util_procs = false;
142 long long cpu_bgwork_timeslice = 0, util_bgwork_timeslice = 0;
143 bool use_ext_sysmem = true;
144
145 // RuntimeImpl
146 size_t reg_ib_mem_size = 0;
147 size_t reg_mem_size = 0;
148 size_t disk_mem_size = 0;
149 unsigned dma_worker_threads = 0; // unused - warning on application use
150 bool dma_multi_field = true;
151#ifdef EVENT_TRACING
152 size_t event_trace_block_size = 1 << 20;
153 double event_trace_exp_arrv_rate = 1e3;
154#endif
155#ifdef LOCK_TRACING
156 size_t lock_trace_block_size = 1 << 20;
157 double lock_trace_exp_arrv_rate = 1e2;
158#endif
159 // should local proc threads get dedicated cores?
160 bool dummy_reservation_ok = true;
161 bool show_reservations = false;
162 // are hyperthreads considered to share a physical core
163 bool hyperthread_sharing = true;
164 bool pin_dma_threads = false; // unused - silently ignored on cmdline
165 size_t bitset_chunk_size = 32 << 10; // 32KB
166 // based on some empirical measurements, 1024 nodes seems like
167 // a reasonable cutoff for switching to twolevel nodeset bitmasks
168 // (measured on an E5-2698 v4)
169 int bitset_twolevel = -1024; // i.e. yes if > 1024 nodes
170 int active_msg_handler_threads = 0; // default is none (use bgwork)
171 bool active_msg_handler_bgwork = true;
172 size_t replheap_size = 16 << 20;
173 std::string event_trace_file;
174 std::string lock_trace_file;
175#ifdef NODE_LOGGING
176 std::string prefix = ".";
177#endif
178
179 // resources
180 int res_num_cpus = 0;
181 size_t res_sysmem_size = 0;
182
183 // sparstiy maps
184 bool report_sparsity_leaks = false;
185
186 // barriers
187 int barrier_broadcast_radix = 4;
188
189 // topology of the host
190 const HardwareTopology *host_topology = nullptr;
191 };
192
193 class CoreModule : public Module {
194 public:
196 virtual ~CoreModule(void);
197
199
201
202 // create any memories provided by this module (default == do nothing)
203 // (each new MemoryImpl should use a Memory from RuntimeImpl::next_local_memory_id)
204 virtual void create_memories(RuntimeImpl *runtime);
205
206 // create any processors provided by the module (default == do nothing)
207 // (each new ProcessorImpl should use a Processor from
208 // RuntimeImpl::next_local_processor_id)
209 virtual void create_processors(RuntimeImpl *runtime);
210
211 // create any DMA channels provided by the module (default == do nothing)
212 virtual void create_dma_channels(RuntimeImpl *runtime);
213
214 // create any code translators provided by the module (default == do nothing)
215 virtual void create_code_translators(RuntimeImpl *runtime);
216
217 // clean up any common resources created by the module - this will be called
218 // after all memories/processors/etc. have been shut down and destroyed
219 virtual void cleanup(void);
220
221 public:
223
224 protected:
226 };
227
228 template <typename K, typename V, typename LT = Mutex>
229 class LockedMap {
230 public:
231 bool exists(const K &key) const
232 {
233 AutoLock<LT> al(mutex);
234 typename std::map<K, V>::const_iterator it = map.find(key);
235 return (it != map.end());
236 }
237
238 bool put(const K &key, const V &value, bool replace = false)
239 {
240 AutoLock<LT> al(mutex);
241 typename std::map<K, V>::iterator it = map.find(key);
242 if(it != map.end()) {
243 if(replace)
244 it->second = value;
245 return true;
246 } else {
247 map.insert(std::make_pair(key, value));
248 return false;
249 }
250 }
251
252 V get(const K &key, const V &defval) const
253 {
254 AutoLock<LT> al(mutex);
255 typename std::map<K, V>::const_iterator it = map.find(key);
256 if(it != map.end())
257 return it->second;
258 else
259 return defval;
260 }
261
262 // protected:
263 mutable LT mutex;
264 std::map<K, V> map;
265 };
266
268 public:
271
272 bool network_init(int *argc, char ***argv,
273 const Runtime::KeyValueStoreVtable &vtable);
274 bool has_key_value_store(void) const;
275 // Is this an elastic Realm
277 // Are we a single process joining by ourself or part of a group
279 // Our local group
280 std::optional<uint64_t> key_value_store_local_group(void) const;
281 // Our local rank in the group
282 std::optional<uint64_t> key_value_store_local_rank(void) const;
283 // The total number of ranks in our group
284 std::optional<uint64_t> key_value_store_local_ranks(void) const;
285 // Helper for getting integers of unknown size
286 std::optional<uint64_t> key_value_store_get_int(const std::string_view &key) const;
287 bool key_value_store_put(const void *key, size_t key_size, const void *value,
288 size_t value_size) const;
289 bool key_value_store_get(const void *key, size_t key_size, void *value,
290 size_t *value_size) const;
291 bool key_value_store_bar(void) const;
292 bool key_value_store_cas(const void *key, size_t key_size, void *expected,
293 size_t *expected_size, const void *desired,
294 size_t desired_size) const;
295
296 void parse_command_line(std::vector<std::string> &cmdline);
297
299
300 bool configure_from_command_line(std::vector<std::string> &cmdline);
301
302 void start(void);
303
304 bool register_task(Processor::TaskFuncID taskid, Processor::TaskFuncPtr taskptr);
307 const ReductionOpUntyped *redop);
309 const CustomSerdezUntyped *serdez);
310
312 const void *args, size_t arglen,
313 Event wait_on = Event::NO_EVENT, int priority = 0);
314
316 Processor::TaskFuncID task_id, const void *args,
317 size_t arglen, bool one_per_node = false,
318 Event wait_on = Event::NO_EVENT, int priority = 0);
319
320 void run(Processor::TaskFuncID task_id = 0,
321 Runtime::RunStyle style = Runtime::ONE_TASK_ONLY, const void *args = 0,
322 size_t arglen = 0, bool background = false);
323
324 // requests a shutdown of the runtime - returns true if request is a duplicate
325 bool request_shutdown(Event wait_on, int result_code);
326
327 // indicates shutdown has been initiated, wakes up a waiter if already present
329
330 // shutdown the runtime
331 void shutdown(Event wait_on = Event::NO_EVENT, int result_code = 0);
332
333 // returns value of result_code passed to shutdown()
335
336 bool create_configs(int argc, char **argv);
337
338 // return the configuration of a specific module
339 ModuleConfig *get_module_config(const std::string &name) const;
340
341 // three event-related impl calls - get_event_impl() will give you either
342 // a normal event or a barrier, but you won't be able to do specific things
343 // (e.g. trigger a GenEventImpl or adjust a BarrierImpl)
347
351 REALM_INTERNAL_API_EXTERNAL_LINKAGE ProcessorImpl * // needed by librealm_kokkos.so
352 get_processor_impl(ID id); // TODO: refactor it to const version
360
361#ifdef DEADLOCK_TRACE
362 void add_thread(const pthread_t *thread);
363#endif
364 static void realm_backtrace(int signal);
365
366 public:
368
371
373 Node *nodes; // TODO: replace with std::vector<Node>
374 size_t num_nodes;
375
378 LocalEventTableAllocator::FreeList *local_event_free_list{nullptr};
379 BarrierTableAllocator::FreeList *local_barrier_free_list{nullptr};
380 ReservationTableAllocator::FreeList *local_reservation_free_list{nullptr};
381 CompQueueTableAllocator::FreeList *local_compqueue_free_list{nullptr};
382
383 // keep a free list for each node we allocate maps on (i.e. indexed
384 // by owner_node)
385 std::vector<SparsityMapTableAllocator::FreeList *> local_sparsity_map_free_lists;
386 std::vector<SubgraphTableAllocator::FreeList *> local_subgraph_free_lists;
387 std::vector<ProcessorGroupTableAllocator::FreeList *> local_proc_group_free_lists;
388
389 // legacy behavior if Runtime::run() is used
391#ifdef DEADLOCK_TRACE
392 unsigned next_thread;
393 unsigned signaled_threads;
394 pthread_t all_threads[MAX_NUM_THREADS];
395 unsigned thread_counts[MAX_NUM_THREADS];
396#endif
399 bool shutdown_request_received; // has a request for shutdown arrived
402 bool shutdown_initiated; // is it time to start shutting down
403 atomic<bool> shutdown_in_progress; // are we actively shutting down?
404 std::unordered_map<realm_id_t, SharedMemoryInfo> remote_shared_memory_mappings;
405 std::unordered_map<realm_id_t, SharedMemoryInfo> local_shared_memory_mappings;
406
408 bool topology_init = false; // TODO: REMOVE it
414
416
418
419 ReplicatedHeap repl_heap; // used for sparsity maps, instance layouts
420
421 bool shared_peers_use_network_module = true;
422
424 public:
425 void defer(RuntimeImpl *_runtime, Event wait_on);
426
427 virtual void event_triggered(bool poisoned, TimeLimit work_until);
428 virtual void print(std::ostream &os) const;
429 virtual Event get_finish_event(void) const;
430
431 protected:
433 };
435
436 public:
437 // used by modules to add processors, memories, etc.
443
445
450
451 const std::vector<CodeTranslator *> &get_code_translators(void) const;
452
453 template <typename T>
454 T *get_module(const char *name) const
455 {
456 Module *mod = get_module_untyped(name);
457 if(mod)
458 return checked_cast<T *>(mod);
459 else
460 return 0;
461 }
462
463 protected:
464 friend class Runtime;
465
466 Module *get_module_untyped(const char *name) const;
467
471
477 bool share_memories(void);
478
479 ID::IDType num_local_memories, num_local_ib_memories, num_local_processors;
482
486 std::vector<Module *> modules;
487 std::vector<CodeTranslator *> code_translators;
488
489 std::vector<NetworkModule *> network_modules;
490 std::vector<NetworkSegment *> network_segments;
491
492 std::map<std::string, ModuleConfig *> module_configs;
493
495 std::vector<uint8_t> key_value_store_vtable_data;
496 };
497
503
504 // due to circular dependencies in include files, we need versions of these that
505 // hide the RuntimeImpl intermediate
508 {
509 return get_runtime()->get_genevent_impl(e);
510 }
512 {
513 return get_runtime()->get_barrier_impl(e);
514 }
515
516 // active messages
517
521
522 static void handle_message(NodeID sender, const RuntimeShutdownRequest &msg,
523 const void *data, size_t datalen);
524 };
525
528
529 static void handle_message(NodeID sender, const RuntimeShutdownMessage &msg,
530 const void *data, size_t datalen);
531 };
532
533}; // namespace Realm
534
535#endif // ifndef REALM_RUNTIME_IMPL_H
Definition mutex.h:384
Definition bgwork.h:36
Definition barrier_impl.h:100
Definition channel.h:712
Definition codedesc.h:367
Definition comp_queue_impl.h:30
Definition transfer.h:515
Definition runtime_impl.h:120
std::string lock_trace_file
Definition runtime_impl.h:174
virtual void configure_from_cmdline(std::vector< std::string > &cmdline)
CoreModuleConfig(const HardwareTopology *topo)
std::string event_trace_file
Definition runtime_impl.h:173
bool discover_resource(void)
Definition runtime_impl.h:193
static Module * create_module(RuntimeImpl *runtime)
CoreModuleConfig * config
Definition runtime_impl.h:225
MemoryImpl * ext_sysmem
Definition runtime_impl.h:222
virtual void create_code_translators(RuntimeImpl *runtime)
virtual void create_processors(RuntimeImpl *runtime)
virtual void create_dma_channels(RuntimeImpl *runtime)
virtual ~CoreModule(void)
virtual void create_memories(RuntimeImpl *runtime)
static ModuleConfig * create_module_config(RuntimeImpl *runtime)
virtual void cleanup(void)
Definition threads.h:382
Definition custom_serdez.h:150
Definition dynamic_table.h:138
Definition dynamic_table.h:105
Definition dynamic_table.h:65
Definition event_impl.h:85
Definition event_impl.h:66
Definition event_impl.h:49
Definition event.h:50
Definition event_impl.h:198
Represents the topology of the host processor cores and memory.
Definition hardware_topology.h:38
Definition ib_memory.h:30
Definition id.h:30
::realm_id_t IDType
Definition id.h:32
Definition activemsg.h:345
Definition runtime_impl.h:229
V get(const K &key, const V &defval) const
Definition runtime_impl.h:252
bool exists(const K &key) const
Definition runtime_impl.h:231
bool put(const K &key, const V &value, bool replace=false)
Definition runtime_impl.h:238
LT mutex
Definition runtime_impl.h:263
std::map< K, V > map
Definition runtime_impl.h:264
Definition machine_impl.h:94
Definition mem_impl.h:50
Definition memory.h:33
Definition module_config.h:32
Definition module.h:111
Definition module.h:42
Definition network.h:262
Definition operation.h:155
Definition proc_impl.h:254
Definition proc_impl.h:51
Definition processor.h:37
Kind
Definition processor.h:65
::realm_task_func_id_t TaskFuncID
Definition processor.h:58
Definition inst_impl.h:54
Definition repl_heap.h:30
Definition rsrv_impl.h:57
Definition runtime_impl.h:423
virtual void event_triggered(bool poisoned, TimeLimit work_until)
virtual Event get_finish_event(void) const
virtual void print(std::ostream &os) const
void defer(RuntimeImpl *_runtime, Event wait_on)
RuntimeImpl * runtime
Definition runtime_impl.h:432
Definition runtime_impl.h:267
int wait_for_shutdown(void)
SparsityMapImplWrapper * get_sparsity_impl(ID id)
bool register_custom_serdez(CustomSerdezID serdez_id, const CustomSerdezUntyped *serdez)
std::optional< uint64_t > key_value_store_local_ranks(void) const
SamplingProfiler sampling_profiler
Definition runtime_impl.h:417
EventImpl * get_event_impl(Event e)
std::optional< uint64_t > key_value_store_local_group(void) const
BackgroundWorkManager bgwork
Definition runtime_impl.h:410
SubgraphImpl * get_subgraph_impl(ID id)
REALM_INTERNAL_API_EXTERNAL_LINKAGE ProcessorImpl * get_processor_impl(ID id)
void add_proc_mem_affinity(const Machine::ProcessorMemoryAffinity &pma)
int shutdown_result_code
Definition runtime_impl.h:401
Memory next_local_memory_id(void)
LockedMap< CustomSerdezID, CustomSerdezUntyped * > custom_serdez_table
Definition runtime_impl.h:370
bool run_method_called
Definition runtime_impl.h:390
std::vector< SparsityMapTableAllocator::FreeList * > local_sparsity_map_free_lists
Definition runtime_impl.h:385
void create_shared_peers(void)
Auxilary function to create Network::shared_peers using either ipc mailbox or relying on network modu...
std::vector< uint8_t > key_value_store_vtable_data
Definition runtime_impl.h:495
ReplicatedHeap repl_heap
Definition runtime_impl.h:419
Node * nodes
Definition runtime_impl.h:373
Event collective_spawn_by_kind(Processor::Kind target_kind, Processor::TaskFuncID task_id, const void *args, size_t arglen, bool one_per_node=false, Event wait_on=Event::NO_EVENT, int priority=0)
ReservationImpl * get_lock_impl(ID id)
std::vector< NetworkModule * > network_modules
Definition runtime_impl.h:489
atomic< bool > shutdown_in_progress
Definition runtime_impl.h:403
CoreReservationSet & core_reservation_set(void)
void add_code_translator(CodeTranslator *t)
bool configure_from_command_line(std::vector< std::string > &cmdline)
Runtime::KeyValueStoreVtable key_value_store_vtable
Definition runtime_impl.h:494
DeferredShutdown deferred_shutdown
Definition runtime_impl.h:434
LockedMap< ReductionOpID, ReductionOpUntyped * > reduce_op_table
Definition runtime_impl.h:369
OperationTable optable
Definition runtime_impl.h:415
CompQueueImpl * get_compqueue_impl(ID id)
bool has_key_value_store_group(void) const
void parse_command_line(std::vector< std::string > &cmdline)
NetworkSegment reg_ib_mem_segment
Definition runtime_impl.h:480
bool create_configs(int argc, char **argv)
Mutex shutdown_mutex
Definition runtime_impl.h:397
size_t num_nodes
Definition runtime_impl.h:374
atomic< size_t > num_untriggered_events
Definition runtime_impl.h:372
T * get_module(const char *name) const
Definition runtime_impl.h:454
std::map< std::string, ModuleConfig * > module_configs
Definition runtime_impl.h:492
bool key_value_store_put(const void *key, size_t key_size, const void *value, size_t value_size) const
void add_processor(ProcessorImpl *p)
bool key_value_store_get(const void *key, size_t key_size, void *value, size_t *value_size) const
EventTriggerNotifier event_triggerer
Definition runtime_impl.h:412
Processor next_local_processor_id(void)
SparsityMapImplWrapper * get_available_sparsity_impl(NodeID target_node)
Event shutdown_precondition
Definition runtime_impl.h:400
Mutex::CondVar shutdown_condvar
Definition runtime_impl.h:398
void add_ib_memory(IBMemory *m)
bool network_init(int *argc, char ***argv, const Runtime::KeyValueStoreVtable &vtable)
bool register_reduction(Event &event, ReductionOpID redop_id, const ReductionOpUntyped *redop)
Memory next_local_ib_memory_id(void)
void add_dma_channel(Channel *c)
bool shutdown_request_received
Definition runtime_impl.h:399
HardwareTopology host_topology
Definition runtime_impl.h:407
NetworkSegment reg_mem_segment
Definition runtime_impl.h:481
Event notify_register_reduction(ReductionOpID redop_id)
void add_memory(MemoryImpl *m)
ID::IDType num_local_ib_memories
Definition runtime_impl.h:479
IBMemory * get_ib_memory_impl(ID id) const
const std::vector< CodeTranslator * > & get_code_translators(void) const
void free_sparsity_impl(SparsityMapImplWrapper *impl)
std::vector< SubgraphTableAllocator::FreeList * > local_subgraph_free_lists
Definition runtime_impl.h:386
bool shutdown_initiated
Definition runtime_impl.h:402
ModuleConfig * get_module_config(const std::string &name) const
void initiate_shutdown(void)
bool share_memories(void)
Auxilary function for handling the sharing mechanism of all registered memories across the machine.
std::optional< uint64_t > key_value_store_get_int(const std::string_view &key) const
void run(Processor::TaskFuncID task_id=0, Runtime::RunStyle style=Runtime::ONE_TASK_ONLY, const void *args=0, size_t arglen=0, bool background=false)
ProcessorGroupImpl * get_procgroup_impl(ID id)
MachineImpl * machine
Definition runtime_impl.h:367
CoreReservationSet * core_reservations
Definition runtime_impl.h:409
std::vector< ProcessorGroupTableAllocator::FreeList * > local_proc_group_free_lists
Definition runtime_impl.h:387
bool module_configs_created
Definition runtime_impl.h:485
std::vector< NetworkSegment * > network_segments
Definition runtime_impl.h:490
RegionInstanceImpl * get_instance_impl(ID id)
IncomingMessageManager * message_manager
Definition runtime_impl.h:411
void finish_configure(void)
static void realm_backtrace(int signal)
bool has_key_value_store(void) const
ModuleRegistrar module_registrar
Definition runtime_impl.h:483
bool key_value_store_cas(const void *key, size_t key_size, void *expected, size_t *expected_size, const void *desired, size_t desired_size) const
Module * get_module_untyped(const char *name) const
bool request_shutdown(Event wait_on, int result_code)
Event collective_spawn(Processor target_proc, Processor::TaskFuncID task_id, const void *args, size_t arglen, Event wait_on=Event::NO_EVENT, int priority=0)
bool is_key_value_store_elastic(void) const
std::vector< Module * > modules
Definition runtime_impl.h:486
MemoryImpl * get_memory_impl(ID id) const
bool modules_created
Definition runtime_impl.h:484
bool register_task(Processor::TaskFuncID taskid, Processor::TaskFuncPtr taskptr)
std::unordered_map< realm_id_t, SharedMemoryInfo > remote_shared_memory_mappings
Definition runtime_impl.h:404
GenEventImpl * get_genevent_impl(Event e)
CopyAnalyzer copy_analyzer
Definition runtime_impl.h:413
BarrierImpl * get_barrier_impl(Event e)
std::optional< uint64_t > key_value_store_local_rank(void) const
std::unordered_map< realm_id_t, SharedMemoryInfo > local_shared_memory_mappings
Definition runtime_impl.h:405
void shutdown(Event wait_on=Event::NO_EVENT, int result_code=0)
bool key_value_store_bar(void) const
std::vector< CodeTranslator * > code_translators
Definition runtime_impl.h:487
Definition runtime.h:32
RunStyle
Definition runtime.h:257
Definition sampling.h:173
Definition sparsity_impl.h:199
Definition subgraph_impl.h:38
Definition timers.h:129
Definition mutex.h:325
Definition mutex.h:223
Definition atomics.h:31
#define REALM_INTERNAL_API_EXTERNAL_LINKAGE
Definition compiler_support.h:218
Definition activemsg.h:38
DynamicTableAllocator< SubgraphImpl, 10, 4 > SubgraphTableAllocator
Definition runtime_impl.h:86
DynamicTableAllocator< CompQueueImpl, 10, 4 > CompQueueTableAllocator
Definition runtime_impl.h:85
GenEventImpl * get_genevent_impl(Event e)
Definition runtime_impl.h:507
int NodeID
Definition nodeset.h:40
EventImpl * get_event_impl(Event e)
Definition runtime_impl.h:506
int CustomSerdezID
Definition custom_serdez.h:148
DynamicTableAllocator< GenEventImpl, 10, 7, GenEventImpl::GenEventImplAllocator > RemoteEventTableAllocator
Definition runtime_impl.h:80
REALM_INTERNAL_API_EXTERNAL_LINKAGE RuntimeImpl * runtime_singleton
DynamicTableAllocator< BarrierImpl, 10, 4 > BarrierTableAllocator
Definition runtime_impl.h:81
DynamicTableAllocator< SparsityMapImplWrapper, 10, 4 > SparsityMapTableAllocator
Definition runtime_impl.h:84
DynamicTableAllocator< ReservationImpl, 10, 8 > ReservationTableAllocator
Definition runtime_impl.h:82
REALM_INTERNAL_API_EXTERNAL_LINKAGE RuntimeImpl * get_runtime(void)
Definition runtime_impl.h:499
::realm_reduction_op_id_t ReductionOpID
Definition event.h:38
DynamicTableAllocator< ProcessorGroupImpl, 10, 4 > ProcessorGroupTableAllocator
Definition runtime_impl.h:83
BarrierImpl * get_barrier_impl(Event e)
Definition runtime_impl.h:511
DynamicTableAllocator< GenEventImpl, 11, 16, GenEventImpl::GenEventImplAllocator > LocalEventTableAllocator
Definition runtime_impl.h:78
Definition indexspace.h:1279
Definition runtime_impl.h:90
std::vector< Channel * > dma_channels
Definition runtime_impl.h:103
std::vector< ProcessorImpl * > processors
Definition runtime_impl.h:102
Node & operator=(const Node &)=delete
std::vector< atomic< DynamicTable< SubgraphTableAllocator > * > > subgraphs
Definition runtime_impl.h:113
DynamicTable< CompQueueTableAllocator > compqueues
Definition runtime_impl.h:108
std::vector< atomic< DynamicTable< ProcessorGroupTableAllocator > * > > proc_groups
Definition runtime_impl.h:114
std::vector< MemoryImpl * > memories
Definition runtime_impl.h:100
DynamicTable< RemoteEventTableAllocator > remote_events
Definition runtime_impl.h:105
DynamicTable< ReservationTableAllocator > reservations
Definition runtime_impl.h:107
Node(Node &&) noexcept=delete
Node(const Node &)=delete
std::vector< IBMemory * > ib_memories
Definition runtime_impl.h:101
std::vector< atomic< DynamicTable< SparsityMapTableAllocator > * > > sparsity_maps
Definition runtime_impl.h:112
DynamicTable< BarrierTableAllocator > barriers
Definition runtime_impl.h:106
Definition redop.h:56
Definition runtime_impl.h:526
int result_code
Definition runtime_impl.h:527
static void handle_message(NodeID sender, const RuntimeShutdownMessage &msg, const void *data, size_t datalen)
Definition runtime_impl.h:518
static void handle_message(NodeID sender, const RuntimeShutdownRequest &msg, const void *data, size_t datalen)
Event wait_on
Definition runtime_impl.h:519
int result_code
Definition runtime_impl.h:520