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
58#include <optional>
59#include <unordered_map>
60#include <memory>
61
62namespace Realm {
63
64 class ProcessorGroupImpl;
65 class MemoryImpl;
66 class IBMemory;
67 class ProcessorImpl;
68 class RegionInstanceImpl;
69 class NetworkSegment;
70
71 class Channel; // from transfer/channel.h
72
73 // use a wide tree for local events - max depth will be 2
74 // use a narrow tree for remote events - depth is 3, leaves have 128 events
75 typedef DynamicTableAllocator<GenEventImpl, 11, 16, GenEventImpl::GenEventImplAllocator>
85
86 // for each of the ID-based runtime objects, we're going to have an
87 // implementation class and a table to look them up in
88 struct Node {
89 Node(void);
90 ~Node(void);
91
92 Node(const Node &) = delete;
93 Node &operator=(const Node &) = delete;
94 Node(Node &&) noexcept = delete;
95 Node &operator=(Node &&) noexcept = delete;
96
97 // not currently resizable
102
107
108 // sparsity maps can be created by other nodes, so keep a
109 // map per-creator_node
113 };
114
115 std::ostream &operator<<(std::ostream &os, const Node &node);
116
117 // the "core" module provides the basic memories and processors used by Realm
119 friend class CoreModule;
120 friend class RuntimeImpl;
121
122 protected:
124
126
127 public:
128 virtual void configure_from_cmdline(std::vector<std::string> &cmdline);
129
130 protected:
131 // configurations
132 // CoreModule
133 int num_cpu_procs = 1, num_util_procs = 1, num_io_procs = 0;
134 int concurrent_io_threads = 1; // Legion does not support values > 1 right now
135 size_t sysmem_size = 512 << 20;
136 size_t sysmem_ipc_limit = 0; // make the sysmem as shared only if share_sysmem_limit
137 // == 0 or sysmem_size <= share_sysmem_limit
138 size_t stack_size = 2 << 20;
139 bool pin_util_procs = false;
140 long long cpu_bgwork_timeslice = 0, util_bgwork_timeslice = 0;
141 bool use_ext_sysmem = true;
142
143 // RuntimeImpl
144 size_t reg_ib_mem_size = 0;
145 size_t reg_mem_size = 0;
146 size_t disk_mem_size = 0;
147 unsigned dma_worker_threads = 0; // unused - warning on application use
148 bool dma_multi_field = true;
149#ifdef EVENT_TRACING
150 size_t event_trace_block_size = 1 << 20;
151 double event_trace_exp_arrv_rate = 1e3;
152#endif
153#ifdef LOCK_TRACING
154 size_t lock_trace_block_size = 1 << 20;
155 double lock_trace_exp_arrv_rate = 1e2;
156#endif
157 // should local proc threads get dedicated cores?
158 bool dummy_reservation_ok = true;
159 bool show_reservations = false;
160 // are hyperthreads considered to share a physical core
161 bool hyperthread_sharing = true;
162 bool pin_dma_threads = false; // unused - silently ignored on cmdline
163 size_t bitset_chunk_size = 32 << 10; // 32KB
164 // based on some empirical measurements, 1024 nodes seems like
165 // a reasonable cutoff for switching to twolevel nodeset bitmasks
166 // (measured on an E5-2698 v4)
167 int bitset_twolevel = -1024; // i.e. yes if > 1024 nodes
168 int active_msg_handler_threads = 0; // default is none (use bgwork)
169 bool active_msg_handler_bgwork = true;
170 size_t replheap_size = 16 << 20;
171 std::string event_trace_file;
172 std::string lock_trace_file;
173#ifdef NODE_LOGGING
174 std::string prefix = ".";
175#endif
176
177 // resources
178 int res_num_cpus = 0;
179 size_t res_sysmem_size = 0;
180
181 // sparstiy maps
182 bool report_sparsity_leaks = false;
183
184 // barriers
185 int barrier_broadcast_radix = 4;
186
187 // topology of the host
188 const HardwareTopology *host_topology = nullptr;
189 };
190
191 class CoreModule : public Module {
192 public:
194 virtual ~CoreModule(void);
195
197
199
200 // create any memories provided by this module (default == do nothing)
201 // (each new MemoryImpl should use a Memory from RuntimeImpl::next_local_memory_id)
202 virtual void create_memories(RuntimeImpl *runtime);
203
204 // create any processors provided by the module (default == do nothing)
205 // (each new ProcessorImpl should use a Processor from
206 // RuntimeImpl::next_local_processor_id)
207 virtual void create_processors(RuntimeImpl *runtime);
208
209 // create any DMA channels provided by the module (default == do nothing)
210 virtual void create_dma_channels(RuntimeImpl *runtime);
211
212 // create any code translators provided by the module (default == do nothing)
213 virtual void create_code_translators(RuntimeImpl *runtime);
214
215 // clean up any common resources created by the module - this will be called
216 // after all memories/processors/etc. have been shut down and destroyed
217 virtual void cleanup(void);
218
219 public:
221
222 protected:
224 };
225
226 template <typename K, typename V, typename LT = Mutex>
227 class LockedMap {
228 public:
229 bool exists(const K &key) const
230 {
231 AutoLock<LT> al(mutex);
232 typename std::map<K, V>::const_iterator it = map.find(key);
233 return (it != map.end());
234 }
235
236 bool put(const K &key, const V &value, bool replace = false)
237 {
238 AutoLock<LT> al(mutex);
239 typename std::map<K, V>::iterator it = map.find(key);
240 if(it != map.end()) {
241 if(replace)
242 it->second = value;
243 return true;
244 } else {
245 map.insert(std::make_pair(key, value));
246 return false;
247 }
248 }
249
250 V get(const K &key, const V &defval) const
251 {
252 AutoLock<LT> al(mutex);
253 typename std::map<K, V>::const_iterator it = map.find(key);
254 if(it != map.end())
255 return it->second;
256 else
257 return defval;
258 }
259
260 // protected:
261 mutable LT mutex;
262 std::map<K, V> map;
263 };
264
266 public:
269
270 bool network_init(int *argc, char ***argv,
271 const Runtime::KeyValueStoreVtable &vtable);
272 bool has_key_value_store(void) const;
273 // Is this an elastic Realm
275 // Are we a single process joining by ourself or part of a group
277 // Our local group
278 std::optional<uint64_t> key_value_store_local_group(void) const;
279 // Our local rank in the group
280 std::optional<uint64_t> key_value_store_local_rank(void) const;
281 // The total number of ranks in our group
282 std::optional<uint64_t> key_value_store_local_ranks(void) const;
283 // Helper for getting integers of unknown size
284 std::optional<uint64_t> key_value_store_get_int(const std::string_view &key) const;
285 bool key_value_store_put(const void *key, size_t key_size, const void *value,
286 size_t value_size) const;
287 bool key_value_store_get(const void *key, size_t key_size, void *value,
288 size_t *value_size) const;
289 bool key_value_store_bar(void) const;
290 bool key_value_store_cas(const void *key, size_t key_size, void *expected,
291 size_t *expected_size, const void *desired,
292 size_t desired_size) const;
293
294 void parse_command_line(std::vector<std::string> &cmdline);
295
297
298 bool configure_from_command_line(std::vector<std::string> &cmdline);
299
300 void start(void);
301
302 bool register_task(Processor::TaskFuncID taskid, Processor::TaskFuncPtr taskptr);
305 const ReductionOpUntyped *redop);
307 const CustomSerdezUntyped *serdez);
308
310 const void *args, size_t arglen,
311 Event wait_on = Event::NO_EVENT, int priority = 0);
312
314 Processor::TaskFuncID task_id, const void *args,
315 size_t arglen, bool one_per_node = false,
316 Event wait_on = Event::NO_EVENT, int priority = 0);
317
318 void run(Processor::TaskFuncID task_id = 0,
319 Runtime::RunStyle style = Runtime::ONE_TASK_ONLY, const void *args = 0,
320 size_t arglen = 0, bool background = false);
321
322 // requests a shutdown of the runtime - returns true if request is a duplicate
323 bool request_shutdown(Event wait_on, int result_code);
324
325 // indicates shutdown has been initiated, wakes up a waiter if already present
327
328 // shutdown the runtime
329 void shutdown(Event wait_on = Event::NO_EVENT, int result_code = 0);
330
331 // returns value of result_code passed to shutdown()
333
334 bool create_configs(int argc, char **argv);
335
336 // return the configuration of a specific module
337 ModuleConfig *get_module_config(const std::string &name) const;
338
339 // three event-related impl calls - get_event_impl() will give you either
340 // a normal event or a barrier, but you won't be able to do specific things
341 // (e.g. trigger a GenEventImpl or adjust a BarrierImpl)
345
349 REALM_INTERNAL_API_EXTERNAL_LINKAGE ProcessorImpl * // needed by librealm_kokkos.so
350 get_processor_impl(ID id); // TODO: refactor it to const version
358
359#ifdef DEADLOCK_TRACE
360 void add_thread(const pthread_t *thread);
361#endif
362 static void realm_backtrace(int signal);
363
364 public:
366
369
371 Node *nodes; // TODO: replace with std::vector<Node>
372 size_t num_nodes;
373
376 LocalEventTableAllocator::FreeList *local_event_free_list{nullptr};
377 BarrierTableAllocator::FreeList *local_barrier_free_list{nullptr};
378 ReservationTableAllocator::FreeList *local_reservation_free_list{nullptr};
379 CompQueueTableAllocator::FreeList *local_compqueue_free_list{nullptr};
380
381 // keep a free list for each node we allocate maps on (i.e. indexed
382 // by owner_node)
383 std::vector<SparsityMapTableAllocator::FreeList *> local_sparsity_map_free_lists;
384 std::vector<SubgraphTableAllocator::FreeList *> local_subgraph_free_lists;
385 std::vector<ProcessorGroupTableAllocator::FreeList *> local_proc_group_free_lists;
386
387 // legacy behavior if Runtime::run() is used
389#ifdef DEADLOCK_TRACE
390 unsigned next_thread;
391 unsigned signaled_threads;
392 pthread_t all_threads[MAX_NUM_THREADS];
393 unsigned thread_counts[MAX_NUM_THREADS];
394#endif
397 bool shutdown_request_received; // has a request for shutdown arrived
400 bool shutdown_initiated; // is it time to start shutting down
401 atomic<bool> shutdown_in_progress; // are we actively shutting down?
402 std::unordered_map<realm_id_t, SharedMemoryInfo> remote_shared_memory_mappings;
403 std::unordered_map<realm_id_t, SharedMemoryInfo> local_shared_memory_mappings;
404
406 bool topology_init = false; // TODO: REMOVE it
411
413
415
416 ReplicatedHeap repl_heap; // used for sparsity maps, instance layouts
417
418 bool shared_peers_use_network_module = true;
419
421 public:
422 void defer(RuntimeImpl *_runtime, Event wait_on);
423
424 virtual void event_triggered(bool poisoned, TimeLimit work_until);
425 virtual void print(std::ostream &os) const;
426 virtual Event get_finish_event(void) const;
427
428 protected:
430 };
432
433 public:
434 // used by modules to add processors, memories, etc.
440
442
447
448 const std::vector<CodeTranslator *> &get_code_translators(void) const;
449
450 template <typename T>
451 T *get_module(const char *name) const
452 {
453 Module *mod = get_module_untyped(name);
454 if(mod)
455 return checked_cast<T *>(mod);
456 else
457 return 0;
458 }
459
460 protected:
461 friend class Runtime;
462
463 Module *get_module_untyped(const char *name) const;
464
468
474 bool share_memories(void);
475
476 ID::IDType num_local_memories, num_local_ib_memories, num_local_processors;
479
483 std::vector<Module *> modules;
484 std::vector<CodeTranslator *> code_translators;
485
486 std::vector<NetworkModule *> network_modules;
487 std::vector<NetworkSegment *> network_segments;
488
489 std::map<std::string, ModuleConfig *> module_configs;
490
492 std::vector<uint8_t> key_value_store_vtable_data;
493 };
494
500
501 // due to circular dependencies in include files, we need versions of these that
502 // hide the RuntimeImpl intermediate
505 {
506 return get_runtime()->get_genevent_impl(e);
507 }
509 {
510 return get_runtime()->get_barrier_impl(e);
511 }
512
513 // active messages
514
518
519 static void handle_message(NodeID sender, const RuntimeShutdownRequest &msg,
520 const void *data, size_t datalen);
521 };
522
525
526 static void handle_message(NodeID sender, const RuntimeShutdownMessage &msg,
527 const void *data, size_t datalen);
528 };
529
530}; // namespace Realm
531
532#endif // ifndef REALM_RUNTIME_IMPL_H
Definition mutex.h:384
Definition bgwork.h:36
Definition barrier_impl.h:100
Definition channel.h:713
Definition codedesc.h:367
Definition comp_queue_impl.h:30
Definition runtime_impl.h:118
std::string lock_trace_file
Definition runtime_impl.h:172
virtual void configure_from_cmdline(std::vector< std::string > &cmdline)
CoreModuleConfig(const HardwareTopology *topo)
std::string event_trace_file
Definition runtime_impl.h:171
bool discover_resource(void)
Definition runtime_impl.h:191
static Module * create_module(RuntimeImpl *runtime)
CoreModuleConfig * config
Definition runtime_impl.h:223
MemoryImpl * ext_sysmem
Definition runtime_impl.h:220
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:227
V get(const K &key, const V &defval) const
Definition runtime_impl.h:250
bool exists(const K &key) const
Definition runtime_impl.h:229
bool put(const K &key, const V &value, bool replace=false)
Definition runtime_impl.h:236
LT mutex
Definition runtime_impl.h:261
std::map< K, V > map
Definition runtime_impl.h:262
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:420
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:429
Definition runtime_impl.h:265
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:414
EventImpl * get_event_impl(Event e)
std::optional< uint64_t > key_value_store_local_group(void) const
BackgroundWorkManager bgwork
Definition runtime_impl.h:408
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:399
Memory next_local_memory_id(void)
LockedMap< CustomSerdezID, CustomSerdezUntyped * > custom_serdez_table
Definition runtime_impl.h:368
bool run_method_called
Definition runtime_impl.h:388
std::vector< SparsityMapTableAllocator::FreeList * > local_sparsity_map_free_lists
Definition runtime_impl.h:383
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:492
ReplicatedHeap repl_heap
Definition runtime_impl.h:416
Node * nodes
Definition runtime_impl.h:371
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:486
atomic< bool > shutdown_in_progress
Definition runtime_impl.h:401
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:491
DeferredShutdown deferred_shutdown
Definition runtime_impl.h:431
LockedMap< ReductionOpID, ReductionOpUntyped * > reduce_op_table
Definition runtime_impl.h:367
OperationTable optable
Definition runtime_impl.h:412
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:477
bool create_configs(int argc, char **argv)
Mutex shutdown_mutex
Definition runtime_impl.h:395
size_t num_nodes
Definition runtime_impl.h:372
atomic< size_t > num_untriggered_events
Definition runtime_impl.h:370
T * get_module(const char *name) const
Definition runtime_impl.h:451
std::map< std::string, ModuleConfig * > module_configs
Definition runtime_impl.h:489
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:410
Processor next_local_processor_id(void)
SparsityMapImplWrapper * get_available_sparsity_impl(NodeID target_node)
Event shutdown_precondition
Definition runtime_impl.h:398
Mutex::CondVar shutdown_condvar
Definition runtime_impl.h:396
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:397
HardwareTopology host_topology
Definition runtime_impl.h:405
NetworkSegment reg_mem_segment
Definition runtime_impl.h:478
Event notify_register_reduction(ReductionOpID redop_id)
void add_memory(MemoryImpl *m)
ID::IDType num_local_ib_memories
Definition runtime_impl.h:476
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:384
bool shutdown_initiated
Definition runtime_impl.h:400
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:365
CoreReservationSet * core_reservations
Definition runtime_impl.h:407
std::vector< ProcessorGroupTableAllocator::FreeList * > local_proc_group_free_lists
Definition runtime_impl.h:385
bool module_configs_created
Definition runtime_impl.h:482
std::vector< NetworkSegment * > network_segments
Definition runtime_impl.h:487
RegionInstanceImpl * get_instance_impl(ID id)
IncomingMessageManager * message_manager
Definition runtime_impl.h:409
void finish_configure(void)
static void realm_backtrace(int signal)
bool has_key_value_store(void) const
ModuleRegistrar module_registrar
Definition runtime_impl.h:480
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:483
MemoryImpl * get_memory_impl(ID id) const
bool modules_created
Definition runtime_impl.h:481
bool register_task(Processor::TaskFuncID taskid, Processor::TaskFuncPtr taskptr)
std::unordered_map< realm_id_t, SharedMemoryInfo > remote_shared_memory_mappings
Definition runtime_impl.h:402
GenEventImpl * get_genevent_impl(Event e)
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:403
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:484
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:84
DynamicTableAllocator< CompQueueImpl, 10, 4 > CompQueueTableAllocator
Definition runtime_impl.h:83
GenEventImpl * get_genevent_impl(Event e)
Definition runtime_impl.h:504
int NodeID
Definition nodeset.h:40
EventImpl * get_event_impl(Event e)
Definition runtime_impl.h:503
int CustomSerdezID
Definition custom_serdez.h:148
DynamicTableAllocator< GenEventImpl, 10, 7, GenEventImpl::GenEventImplAllocator > RemoteEventTableAllocator
Definition runtime_impl.h:78
REALM_INTERNAL_API_EXTERNAL_LINKAGE RuntimeImpl * runtime_singleton
DynamicTableAllocator< BarrierImpl, 10, 4 > BarrierTableAllocator
Definition runtime_impl.h:79
DynamicTableAllocator< SparsityMapImplWrapper, 10, 4 > SparsityMapTableAllocator
Definition runtime_impl.h:82
DynamicTableAllocator< ReservationImpl, 10, 8 > ReservationTableAllocator
Definition runtime_impl.h:80
REALM_INTERNAL_API_EXTERNAL_LINKAGE RuntimeImpl * get_runtime(void)
Definition runtime_impl.h:496
::realm_reduction_op_id_t ReductionOpID
Definition event.h:38
DynamicTableAllocator< ProcessorGroupImpl, 10, 4 > ProcessorGroupTableAllocator
Definition runtime_impl.h:81
BarrierImpl * get_barrier_impl(Event e)
Definition runtime_impl.h:508
DynamicTableAllocator< GenEventImpl, 11, 16, GenEventImpl::GenEventImplAllocator > LocalEventTableAllocator
Definition runtime_impl.h:76
Definition indexspace.h:1279
Definition runtime_impl.h:88
std::vector< Channel * > dma_channels
Definition runtime_impl.h:101
std::vector< ProcessorImpl * > processors
Definition runtime_impl.h:100
Node & operator=(const Node &)=delete
std::vector< atomic< DynamicTable< SubgraphTableAllocator > * > > subgraphs
Definition runtime_impl.h:111
DynamicTable< CompQueueTableAllocator > compqueues
Definition runtime_impl.h:106
std::vector< atomic< DynamicTable< ProcessorGroupTableAllocator > * > > proc_groups
Definition runtime_impl.h:112
std::vector< MemoryImpl * > memories
Definition runtime_impl.h:98
DynamicTable< RemoteEventTableAllocator > remote_events
Definition runtime_impl.h:103
DynamicTable< ReservationTableAllocator > reservations
Definition runtime_impl.h:105
Node(Node &&) noexcept=delete
Node(const Node &)=delete
std::vector< IBMemory * > ib_memories
Definition runtime_impl.h:99
std::vector< atomic< DynamicTable< SparsityMapTableAllocator > * > > sparsity_maps
Definition runtime_impl.h:110
DynamicTable< BarrierTableAllocator > barriers
Definition runtime_impl.h:104
Definition redop.h:56
Definition runtime_impl.h:523
int result_code
Definition runtime_impl.h:524
static void handle_message(NodeID sender, const RuntimeShutdownMessage &msg, const void *data, size_t datalen)
Definition runtime_impl.h:515
static void handle_message(NodeID sender, const RuntimeShutdownRequest &msg, const void *data, size_t datalen)
Event wait_on
Definition runtime_impl.h:516
int result_code
Definition runtime_impl.h:517