19#ifndef REALM_OPENMP_THREADPOOL_H
20#define REALM_OPENMP_THREADPOOL_H
37 bool start_static(int64_t start, int64_t end, int64_t incr, int64_t chunk,
38 int thread_id, int64_t &span_start, int64_t &span_end);
47 void start_dynamic(int64_t start, int64_t end, int64_t incr, int64_t chunk);
50 bool next_dynamic(int64_t &span_start, int64_t &span_end, int64_t &stride);
132 void (*fnptr)(
void *data),
void *data,
WorkItem *work_item);
147#include "realm/openmp/openmp_threadpool.inl"
Definition openmp_threadpool.h:28
atomic< uint64_t > loop_limit
Definition openmp_threadpool.h:61
atomic< int64_t > loop_chunk
Definition openmp_threadpool.h:62
void start_dynamic(int64_t start, int64_t end, int64_t incr, int64_t chunk)
bool next_dynamic(int64_t &span_start, int64_t &span_end, int64_t &stride)
bool next_static(int64_t &span_start, int64_t &span_end)
atomic< int64_t > loop_base
Definition openmp_threadpool.h:62
atomic< uint64_t > loop_pos
Definition openmp_threadpool.h:61
atomic< int > loop_barrier
Definition openmp_threadpool.h:63
int num_workers
Definition openmp_threadpool.h:58
void initialize(int _num_workers)
bool start_static(int64_t start, int64_t end, int64_t incr, int64_t chunk, int thread_id, int64_t &span_start, int64_t &span_end)
atomic< int64_t > loop_incr
Definition openmp_threadpool.h:62
Definition processor.h:37
Definition openmp_threadpool.h:66
static ThreadPool * get_associated_pool(bool warn_if_missing)
static WorkerInfo * get_worker_info(bool warn_if_missing)
bool workers_running
Definition openmp_threadpool.h:139
Processor proc
Definition openmp_threadpool.h:137
ThreadPool(Processor _proc, int _num_workers, const std::string &_name_prefix, int _numa_node, size_t _stack_size, CoreReservationSet &crs)
int num_workers
Definition openmp_threadpool.h:138
void start_worker(int worker_id, int thread_id, int num_threads, void(*fnptr)(void *data), void *data, WorkItem *work_item)
std::vector< Thread * > worker_threads
Definition openmp_threadpool.h:141
void stop_worker_threads(void)
int get_num_workers() const
Definition openmp_threadpool.h:134
std::vector< CoreReservation * > core_rsrvs
Definition openmp_threadpool.h:140
void start_worker_threads(void)
void associate_as_master(void)
std::vector< WorkerInfo > worker_infos
Definition openmp_threadpool.h:142
void claim_workers(int count, std::set< int > &worker_ids)
Definition activemsg.h:38
Definition openmp_threadpool.h:81
int prev_thread_id
Definition openmp_threadpool.h:84
WorkItem * parent_work_item
Definition openmp_threadpool.h:86
atomic< uint64_t > critical_flags
Definition openmp_threadpool.h:90
atomic< int > barrier_count
Definition openmp_threadpool.h:89
WorkItem(int _num_threads)
LoopSchedule schedule
Definition openmp_threadpool.h:91
atomic< int > single_winner
Definition openmp_threadpool.h:88
int prev_num_threads
Definition openmp_threadpool.h:85
atomic< int > remaining_workers
Definition openmp_threadpool.h:87
Definition openmp_threadpool.h:94
void push_work_item(WorkItem *new_work)
int app_num_threads
Definition openmp_threadpool.h:109
Status
Definition openmp_threadpool.h:96
@ WORKER_IDLE
Definition openmp_threadpool.h:100
@ WORKER_STARTING
Definition openmp_threadpool.h:99
@ WORKER_SHUTDOWN
Definition openmp_threadpool.h:103
@ WORKER_ACTIVE
Definition openmp_threadpool.h:102
@ WORKER_MASTER
Definition openmp_threadpool.h:97
@ WORKER_NOT_RUNNING
Definition openmp_threadpool.h:98
@ WORKER_CLAIMED
Definition openmp_threadpool.h:101
WorkItem * work_item
Definition openmp_threadpool.h:112
void(* fnptr)(void *data)
Definition openmp_threadpool.h:110
ThreadPool * pool
Definition openmp_threadpool.h:106
void * data
Definition openmp_threadpool.h:111
int thread_id
Definition openmp_threadpool.h:107
WorkItem * pop_work_item(void)
atomic< int > status
Definition openmp_threadpool.h:105
int num_threads
Definition openmp_threadpool.h:108