52 static void *
operator new(
size_t size);
53 static void operator delete(
void *ptr);
58 virtual void print(std::ostream &os)
const;
95 virtual void print(std::ostream &os)
const;
176 void enqueue_ready_task(
Task *task,
bool front =
false);
226 long long max_timeslice,
int numa_domain);
337 template <
typename PQ>
387 return (read_counter() != old_counter);
432#ifdef REALM_USE_USER_THREADS
439 virtual ~UserThreadTaskScheduler(
void);
441 virtual void add_task_queue(
TaskQueue *queue);
443 virtual void remove_task_queue(
TaskQueue *queue);
445 virtual void start(
void);
446 virtual void shutdown(
void);
448 virtual void thread_starting(
Thread *thread);
450 virtual void thread_terminating(
Thread *thread);
453 virtual bool execute_task(
Task *task);
457 void host_thread_loop(
void);
461 void request_user_thread_cleanup(
Thread *thread);
462 void do_user_thread_cleanup(
void);
464 virtual Thread *worker_create(
bool make_active);
465 virtual void worker_sleep(
Thread *switch_to);
466 virtual void worker_wake(
Thread *to_wake);
467 virtual void worker_terminate(
Thread *switch_to);
469 virtual void wait_for_work(uint64_t old_work_counter);
474 std::set<Thread *> all_hosts;
475 std::set<Thread *> all_workers;
477 int host_startups_remaining;
481 int cfg_num_host_threads;
Definition event_impl.h:85
unsigned gen_t
Definition event_impl.h:87
Definition event_impl.h:49
Definition event_impl.h:198
REALM_PMTA_DEFN(InternalTask, IntrusiveListLink< InternalTask >, tl_link)
IntrusiveList< InternalTask, REALM_PMTA_USE(InternalTask, tl_link), Mutex > TaskList
Definition tasks.h:192
virtual void execute_on_processor(Processor p)=0
virtual ~InternalTask()
Definition tasks.h:184
IntrusiveListLink< InternalTask > tl_link
Definition tasks.h:189
Processor proc
Definition tasks.h:422
virtual void thread_terminating(Thread *thread)
std::set< Thread * > all_workers
Definition tasks.h:425
std::map< Thread *, FIFOMutex::CondVar * > sleeping_threads
Definition tasks.h:428
std::set< Thread * > terminating_workers
Definition tasks.h:427
virtual void add_task_queue(TaskQueue *queue)
KernelThreadTaskScheduler(Processor _proc, CoreReservation &_core_rsrv)
virtual void shutdown(void)
virtual void thread_starting(Thread *thread)
CoreReservation & core_rsrv
Definition tasks.h:423
std::set< Thread * > active_workers
Definition tasks.h:426
virtual void execute_internal_task(InternalTask *task)
virtual Thread * worker_create(bool make_active)
virtual void wait_for_work(uint64_t old_work_counter)
FIFOMutex::CondVar shutdown_condvar
Definition tasks.h:429
virtual void worker_terminate(Thread *switch_to)
virtual void worker_sleep(Thread *switch_to)
virtual ~KernelThreadTaskScheduler(void)
virtual bool execute_task(Task *task)
virtual void remove_task_queue(TaskQueue *queue)
virtual void worker_wake(Thread *to_wake)
Definition operation.h:32
Definition pri_queue.h:34
Definition proc_impl.h:51
Definition processor.h:37
::realm_task_func_id_t TaskFuncID
Definition processor.h:58
Definition sampling.h:111
Definition profiling.h:363
virtual void destroy_context(InternalTask *task, void *context) const
Definition tasks.h:206
virtual void destroy_context(Task *task, void *context) const
Definition tasks.h:204
virtual void * create_context(InternalTask *task) const
Definition tasks.h:205
virtual void * create_context(Task *task) const
Definition tasks.h:203
virtual void item_available(priority_t item_priority)=0
void enqueue_task(Task *task)
Task::TaskList ready_task_list
Definition tasks.h:154
FIFOMutex mutex
Definition tasks.h:153
void set_gauge(ProfilingGauges::AbsoluteRangeGauge< int > *new_gauge)
void enqueue_tasks(Task::TaskList &tasks, size_t num_tasks)
static const priority_t PRI_POS_INF
Definition tasks.h:142
atomic< priority_t > top_priority
Definition tasks.h:151
atomic< size_t > task_count
Definition tasks.h:152
std::vector< priority_t > callback_priorities
Definition tasks.h:156
static const priority_t PRI_NEG_INF
Definition tasks.h:143
ProfilingGauges::AbsoluteRangeGauge< int > * task_count_gauge
Definition tasks.h:157
bool empty() const
Definition tasks.h:173
void add_subscription(NotificationCallback *callback, priority_t higher_than=PRI_NEG_INF)
int priority_t
Definition tasks.h:139
static const priority_t PRI_MIN_FINITE
Definition tasks.h:141
void remove_subscription(NotificationCallback *callback)
static const priority_t PRI_MAX_FINITE
Definition tasks.h:140
std::vector< NotificationCallback * > callbacks
Definition tasks.h:155
static Task * get_best_task(const std::vector< TaskQueue * > &queues, int &task_priority)
TaskList pending_list
Definition tasks.h:108
void defer(EventImpl *_wait_impl, EventImpl::gen_t _wait_gen)
bool add_task(Task *to_add, bool &poisoned)
Task * task
Definition tasks.h:105
virtual void event_triggered(bool poisoned, TimeLimit work_until)
void setup(ProcessorImpl *_proc, Task *_task, Event _wait_on)
virtual void print(std::ostream &os) const
ProcessorImpl * proc
Definition tasks.h:104
virtual Event get_finish_event(void) const
size_t list_length
Definition tasks.h:110
bool is_triggered
Definition tasks.h:109
Mutex pending_list_mutex
Definition tasks.h:107
bool is_poisoned
Definition tasks.h:109
Event wait_on
Definition tasks.h:106
bool free_argdata
Definition tasks.h:75
REALM_PMTA_DEFN(Task, IntrusivePriorityListLink< Task >, tl_link)
virtual void set_priority(int new_priority)
virtual Status::Result get_state(void)
Event before_event
Definition tasks.h:78
virtual bool attempt_cancellation(int error_code, const void *reason_data, size_t reason_size)
virtual bool mark_ready(void)
static const size_t SHORT_ARGLEN_MAX
Definition tasks.h:73
Processor proc
Definition tasks.h:67
virtual bool mark_started(void)
char * argdata
Definition tasks.h:71
REALM_PMTA_DEFN(Task, int, priority)
Processor::TaskFuncID func_id
Definition tasks.h:68
DeferredSpawn deferred_spawn
Definition tasks.h:112
atomic< bool > marked_ready
Definition tasks.h:125
virtual void print(std::ostream &os) const
virtual void mark_completed(void)
Thread * executing_thread
Definition tasks.h:119
char short_argdata[SHORT_ARGLEN_MAX]
Definition tasks.h:74
Task(Processor _proc, Processor::TaskFuncID _func_id, const void *_args, size_t _arglen, const ProfilingRequestSet &reqs, Event _before_event, GenEventImpl *_finish_event, EventImpl::gen_t _finish_gen, int _priority)
IntrusivePriorityListLink< Task > tl_link
Definition tasks.h:82
IntrusivePriorityList< Task, int, REALM_PMTA_USE(Task, tl_link), REALM_PMTA_USE(Task, priority), DummyLock > TaskList
Definition tasks.h:87
int priority
Definition tasks.h:79
atomic< uintptr_t > pending_head
Definition tasks.h:128
size_t arglen
Definition tasks.h:72
void execute_on_processor(Processor p)
WorkCounter * work_counter
Definition tasks.h:358
virtual bool item_available(Thread *, typename PQ::priority_t)
Definition tasks.h:351
virtual void item_available(typename PQ::priority_t)
Definition tasks.h:345
WorkCounterUpdater(ThreadedTaskScheduler *sched)
Definition tasks.h:340
atomic< bool > * interrupt_flag
Definition tasks.h:323
bool check_for_work(uint64_t old_counter)
Definition tasks.h:384
DelegatingMutex db_mutex
Definition tasks.h:326
atomic< uint64_t > counter
Definition tasks.h:322
void wait_for_work(uint64_t old_counter)
static const unsigned SLEEPER_BITS
Definition tasks.h:321
uint64_t read_counter(void) const
Definition tasks.h:376
DoorbellList db_list
Definition tasks.h:327
void set_interrupt_flag(atomic< bool > *_interrupt_flag)
void increment_counter(void)
BackgroundWorkManager::Worker bgworker
Definition tasks.h:364
bool cfg_reuse_workers
Definition tasks.h:370
std::vector< Thread * > idle_workers
Definition tasks.h:269
WorkCounter work_counter
Definition tasks.h:330
virtual void start(void)=0
void add_task_context(const TaskContextManager *_manager)
std::vector< TaskQueue * > task_queues
Definition tasks.h:268
virtual void worker_terminate(Thread *switch_to)=0
FIFOMutex lock
Definition tasks.h:267
virtual Thread * worker_create(bool make_active)=0
virtual void thread_blocking(Thread *thread)
virtual void set_thread_priority(Thread *thread, int new_priority)
std::map< Thread *, int > worker_priorities
Definition tasks.h:281
virtual ~ThreadedTaskScheduler(void)
int unassigned_worker_count
Definition tasks.h:284
std::set< Thread * > spinning_workers
Definition tasks.h:272
virtual void add_task_queue(TaskQueue *queue)
Task * get_best_ready_task(int &task_priority)
PriorityQueue< Thread *, DummyLock > ResumableQueue
Definition tasks.h:279
virtual void worker_wake(Thread *to_wake)=0
atomic< bool > shutdown_flag
Definition tasks.h:282
WorkCounterUpdater< TaskQueue > wcu_task_queues
Definition tasks.h:361
void scheduler_loop(void)
InternalTask::TaskList internal_tasks
Definition tasks.h:277
int active_worker_count
Definition tasks.h:283
atomic< bool > bgworker_interrupt
Definition tasks.h:365
void scheduler_loop_wlock(void)
virtual void configure_bgworker(BackgroundWorkManager *manager, long long max_timeslice, int numa_domain)
std::set< Thread * > blocked_workers
Definition tasks.h:270
int cfg_max_active_workers
Definition tasks.h:373
virtual void remove_task_queue(TaskQueue *queue)
virtual bool execute_task(Task *task)=0
virtual void wait_for_work(uint64_t old_work_counter)
WorkCounterUpdater< ResumableQueue > wcu_resume_queue
Definition tasks.h:362
virtual void worker_sleep(Thread *switch_to)=0
int cfg_min_active_workers
Definition tasks.h:372
virtual void thread_ready(Thread *thread)
std::vector< const TaskContextManager * > context_managers
Definition tasks.h:274
virtual void execute_internal_task(InternalTask *task)=0
int cfg_max_idle_workers
Definition tasks.h:371
long long max_bgwork_timeslice
Definition tasks.h:366
void update_worker_count(int active_delta, int unassigned_delta, bool check=true)
virtual void shutdown(void)=0
ResumableQueue resumable_workers
Definition tasks.h:280
void add_internal_task(InternalTask *itask)
ThreadedTaskScheduler(void)
T load_acquire(void) const
#define REALM_INTERNAL_API_EXTERNAL_LINKAGE
Definition compiler_support.h:218
#define REALM_PMTA_USE(structtype, name)
Definition lists.h:42
Definition activemsg.h:38
Result
Definition profiling.h:73