20#ifndef REALM_PROC_IMPL_H
21#define REALM_PROC_IMPL_H
42 class ProcessorGroupImpl;
44 namespace ThreadLocal {
100 static const size_t MAX_ENTRIES = 4;
105 size_t counts[MAX_ENTRIES];
106 size_t ages[MAX_ENTRIES];
112 memset(events, 0,
sizeof(events));
113 memset(tasks, 0,
sizeof(tasks));
114 memset(counts, 0,
sizeof(counts));
115 memset(ages, 0,
sizeof(ages));
116 memset(generations, 0,
sizeof(generations));
121 for(
size_t i = 0; i < MAX_ENTRIES; i++) {
122 if(tasks[i] !=
nullptr) {
205 size_t _stack_size,
bool _force_kthreads,
217 bool _force_kthreads,
bool _pin_util_proc,
228 size_t _stack_size,
int _concurrent_io_threads);
312 virtual void print(std::ostream &os)
const;
334 virtual void print(std::ostream &os)
const;
346 virtual void print(std::ostream &os)
const;
360 const void *data,
size_t datalen);
368 const void *data,
size_t datalen);
378 const void *data,
size_t datalen);
386 const void *data,
size_t datalen);
394 const void *data,
size_t datalen);
401 const void *data,
size_t datalen);
404 namespace ThreadLocal {
Definition bytearray.h:30
Definition bytearray.h:53
Definition codedesc.h:249
Definition dynamic_table.h:105
Definition event_impl.h:85
unsigned gen_t
Definition event_impl.h:87
Definition event_impl.h:49
Definition event_impl.h:198
ID_Types
Definition id.h:250
@ ID_PROCGROUP
Definition id.h:260
static ID make_procgroup(unsigned owner_node, unsigned creator_node, unsigned pgroup_idx)
::realm_id_t IDType
Definition id.h:32
Definition proc_impl.h:202
CoreReservation * core_rsrv
Definition proc_impl.h:210
LocalCPUProcessor(RuntimeImpl *runtime_impl, Processor _me, CoreReservationSet &crs, size_t _stack_size, bool _force_kthreads, BackgroundWorkManager *bgwork, long long bgwork_timeslice)
virtual ~LocalCPUProcessor(void)
Definition proc_impl.h:225
CoreReservation * core_rsrv
Definition proc_impl.h:232
virtual ~LocalIOProcessor(void)
LocalIOProcessor(RuntimeImpl *runtime_impl, Processor _me, CoreReservationSet &crs, size_t _stack_size, int _concurrent_io_threads)
Definition proc_impl.h:141
virtual void enqueue_tasks(Task::TaskList &tasks, size_t num_tasks)
void set_scheduler(ThreadedTaskScheduler *_sched)
virtual bool register_task(Processor::TaskFuncID func_id, CodeDescriptor &codedesc, const ByteArrayRef &user_data)
TaskQueue task_queue
Definition proc_impl.h:175
virtual void add_internal_task(InternalTask *task)
ProfilingGauges::AbsoluteRangeGauge< int > ready_task_count
Definition proc_impl.h:176
virtual void spawn_task(Processor::TaskFuncID func_id, const void *args, size_t arglen, const ProfilingRequestSet &reqs, Event start_event, GenEventImpl *finish_event, EventImpl::gen_t finish_gen, int priority)
virtual void execute_task(Processor::TaskFuncID func_id, const ByteArrayRef &task_args)
virtual void start_threads(void)
ThreadedTaskScheduler * sched
Definition proc_impl.h:174
virtual void add_to_group(ProcessorGroupImpl *group)
virtual ~LocalTaskProcessor(void)
virtual void remove_from_group(ProcessorGroupImpl *group)
RWLock task_table_mutex
Definition proc_impl.h:184
virtual void enqueue_task(Task *task)
DeferredSpawnCache deferred_spawn_cache
Definition proc_impl.h:177
virtual void shutdown(void)
std::map< Processor::TaskFuncID, TaskTableEntry > task_table
Definition proc_impl.h:185
LocalTaskProcessor(RuntimeImpl *runtime_impl, Processor _me, Processor::Kind _kind, int num_cores=1)
Definition proc_impl.h:213
CoreReservation * core_rsrv
Definition proc_impl.h:222
virtual ~LocalUtilityProcessor(void)
LocalUtilityProcessor(RuntimeImpl *runtime_impl, Processor _me, CoreReservationSet &crs, size_t _stack_size, bool _force_kthreads, bool _pin_util_proc, BackgroundWorkManager *bgwork, long long bgwork_timeslice)
Definition operation.h:75
Definition operation.h:32
void remove_reference(void)
Definition proc_impl.h:308
virtual void print(std::ostream &os) const
virtual Event get_finish_event(void) const
void defer(ProcessorGroupImpl *_pg, Event wait_on)
virtual void event_triggered(bool poisoned, TimeLimit work_until)
ProcessorGroupImpl * pg
Definition proc_impl.h:316
Definition proc_impl.h:254
static const ID::ID_Types ID_TYPE
Definition proc_impl.h:268
static ID make_id(const ProcessorGroupImpl &dummy, int owner, ID::IDType index)
Definition proc_impl.h:272
DeferredSpawnCache deferred_spawn_cache
Definition proc_impl.h:306
virtual void spawn_task(Processor::TaskFuncID func_id, const void *args, size_t arglen, const ProfilingRequestSet &reqs, Event start_event, GenEventImpl *finish_event, EventImpl::gen_t finish_gen, int priority)
void init(ID _me, int _owner)
ProfilingGauges::AbsoluteRangeGauge< int > * ready_task_count
Definition proc_impl.h:305
ProcessorGroupImpl * next_free
Definition proc_impl.h:300
std::vector< ProcessorImpl * > members
Definition proc_impl.h:298
void set_group_members(span< const Processor > member_list)
bool members_requested
Definition proc_impl.h:297
bool members_valid
Definition proc_impl.h:296
void request_group_members(void)
virtual void enqueue_tasks(Task::TaskList &tasks, size_t num_tasks)
void get_group_members(std::vector< Processor > &member_list)
DeferredDestroy deferred_destroy
Definition proc_impl.h:318
ReservationImpl lock
Definition proc_impl.h:299
TaskQueue task_queue
Definition proc_impl.h:304
virtual void add_to_group(ProcessorGroupImpl *group)
virtual void enqueue_task(Task *task)
virtual ~ProcessorGroupImpl(void)
virtual void remove_from_group(ProcessorGroupImpl *group)
Definition processor.h:199
Definition proc_impl.h:51
int num_cores
Definition proc_impl.h:136
virtual void remove_from_group(ProcessorGroupImpl *group)=0
virtual void enqueue_task(Task *task)=0
void enqueue_or_defer_task(Task *task, Event start_event, DeferredSpawnCache *cache)
ProcessorImpl(RuntimeImpl *runtime_impl, Processor _me, Processor::Kind _kind, int _num_cores=1)
GenEventImpl * create_genevent()
virtual void start_threads(void)
virtual ~ProcessorImpl(void)
virtual void add_internal_task(InternalTask *task)
Processor::Kind kind
Definition proc_impl.h:135
virtual bool register_task(Processor::TaskFuncID func_id, CodeDescriptor &codedesc, const ByteArrayRef &user_data)
static Processor::Kind get_processor_kind(RuntimeImpl *runtime_impl, Processor processor)
virtual void shutdown(void)
virtual void spawn_task(Processor::TaskFuncID func_id, const void *args, size_t arglen, const ProfilingRequestSet &reqs, Event start_event, GenEventImpl *finish_event, EventImpl::gen_t finish_gen, int priority)=0
virtual void execute_task(Processor::TaskFuncID func_id, const ByteArrayRef &task_args)
virtual void enqueue_tasks(Task::TaskList &tasks, size_t num_tasks)=0
void free_genevent(GenEventImpl *)
virtual void add_to_group(ProcessorGroupImpl *group)=0
Processor me
Definition proc_impl.h:134
LocalEventTableAllocator::FreeList free_local_events
Definition proc_impl.h:94
Definition processor.h:37
Kind
Definition processor.h:65
::realm_task_func_id_t TaskFuncID
Definition processor.h:58
void(* TaskFuncPtr)(const void *args, size_t arglen, const void *user_data, size_t user_data_len, Processor proc)
Definition processor.h:59
Definition sampling.h:111
Definition profiling.h:363
Definition proc_impl.h:235
virtual void spawn_task(Processor::TaskFuncID func_id, const void *args, size_t arglen, const ProfilingRequestSet &reqs, Event start_event, GenEventImpl *finish_event, EventImpl::gen_t finish_gen, int priority)
virtual void remove_from_group(ProcessorGroupImpl *group)
virtual void enqueue_tasks(Task::TaskList &tasks, size_t num_tasks)
virtual ~RemoteProcessor(void)
virtual void add_to_group(ProcessorGroupImpl *group)
virtual void enqueue_task(Task *task)
RemoteProcessor(RuntimeImpl *runtime_impl, Processor _me, Processor::Kind _kind, int _num_cores=1)
Definition proc_impl.h:340
virtual void request_cancellation(void)
RemoteTaskRegistration(TaskRegistration *reg_op, int _target_node)
int target_node
Definition proc_impl.h:349
virtual void print(std::ostream &os) const
Definition rsrv_impl.h:57
Definition runtime_impl.h:264
Definition proc_impl.h:323
ByteArray userdata
Definition proc_impl.h:337
TaskRegistration(const CodeDescriptor &_codedesc, const ByteArrayRef &_userdata, GenEventImpl *_finish_event, EventImpl::gen_t _finish_gen, const ProfilingRequestSet &_requests)
virtual void print(std::ostream &os) const
virtual ~TaskRegistration(void)
CodeDescriptor codedesc
Definition proc_impl.h:336
#define REALM_INTERNAL_API_EXTERNAL_LINKAGE
Definition compiler_support.h:218
thread_local int scheduler_lock
thread_local Processor current_processor
Definition activemsg.h:38
int NodeID
Definition nodeset.h:40
Definition proc_impl.h:179
Processor::TaskFuncPtr fnptr
Definition proc_impl.h:180
ByteArray user_data
Definition proc_impl.h:181
Definition proc_impl.h:381
size_t num_members
Definition proc_impl.h:383
static void handle_message(NodeID sender, const ProcGroupCreateMessage &msg, const void *data, size_t datalen)
ProcessorGroup pgrp
Definition proc_impl.h:382
Definition proc_impl.h:397
static void handle_message(NodeID sender, const ProcGroupDestroyAckMessage &msg, const void *data, size_t datalen)
ProcessorGroup pgrp
Definition proc_impl.h:398
Definition proc_impl.h:389
static void handle_message(NodeID sender, const ProcGroupDestroyMessage &msg, const void *data, size_t datalen)
Event wait_on
Definition proc_impl.h:391
ProcessorGroup pgrp
Definition proc_impl.h:390
Definition proc_impl.h:99
size_t current_age
Definition proc_impl.h:107
Mutex mutex
Definition proc_impl.h:101
void clear()
Definition proc_impl.h:109
void flush()
Definition proc_impl.h:119
Definition proc_impl.h:363
static void handle_message(NodeID sender, const RegisterTaskCompleteMessage &msg, const void *data, size_t datalen)
RemoteTaskRegistration * reg_op
Definition proc_impl.h:364
bool successful
Definition proc_impl.h:365
Definition proc_impl.h:353
Processor::TaskFuncID func_id
Definition proc_impl.h:355
RemoteTaskRegistration * reg_op
Definition proc_impl.h:357
NodeID sender
Definition proc_impl.h:354
static void handle_message(NodeID sender, const RegisterTaskMessage &msg, const void *data, size_t datalen)
Processor::Kind kind
Definition proc_impl.h:356
Definition proc_impl.h:371
size_t offset
Definition proc_impl.h:375
size_t total_bytes
Definition proc_impl.h:375
Event finish_event
Definition proc_impl.h:373
Processor::TaskFuncID func_id
Definition proc_impl.h:374
static void handle_message(NodeID sender, const SpawnTaskMessage &msg, const void *data, size_t datalen)
Processor proc
Definition proc_impl.h:372