Intel(R) Threading Building Blocks Doxygen Documentation
version 4.2.3
|
#include <arena.h>
Public Types | |
enum | new_work_type { work_spawned, wakeup, work_enqueued } |
Types of work advertised by advertise_new_work() More... | |
typedef padded< arena_base > | base_type |
typedef uintptr_t | pool_state_t |
Public Member Functions | |
arena (market &, unsigned max_num_workers, unsigned num_reserved_slots) | |
Constructor. More... | |
mail_outbox & | mailbox (affinity_id id) |
Get reference to mailbox corresponding to given affinity_id. More... | |
void | free_arena () |
Completes arena shutdown, destructs and deallocates it. More... | |
unsigned | num_workers_active () const |
The number of workers active in the arena. More... | |
bool | is_recall_requested () const |
Check if the recall is requested by the market. More... | |
template<arena::new_work_type work_type> | |
void | advertise_new_work () |
If necessary, raise a flag that there is new job in arena. More... | |
bool | is_out_of_work () |
Check if there is job anywhere in arena. More... | |
void | enqueue_task (task &, intptr_t, FastRandom &) |
enqueue a task into starvation-resistance queue More... | |
void | process (generic_scheduler &) |
Registers the worker with the arena and enters TBB scheduler dispatch loop. More... | |
template<unsigned ref_param> | |
void | on_thread_leaving () |
Notification that worker or master leaves its arena. More... | |
bool | has_enqueued_tasks () |
Check for the presence of enqueued tasks at all priority levels. More... | |
template<bool as_worker> | |
size_t | occupy_free_slot (generic_scheduler &s) |
Tries to occupy a slot in the arena. On success, returns the slot index; if no slot is available, returns out_of_arena. More... | |
size_t | occupy_free_slot_in_range (generic_scheduler &s, size_t lower, size_t upper) |
Tries to occupy a slot in the specified range. More... | |
Static Public Member Functions | |
static arena & | allocate_arena (market &, unsigned num_slots, unsigned num_reserved_slots) |
Allocate an instance of arena. More... | |
static int unsigned | num_arena_slots (unsigned num_slots) |
static int | allocation_size (unsigned num_slots) |
static bool | is_busy_or_empty (pool_state_t s) |
No tasks to steal or snapshot is being taken. More... | |
Public Attributes | |
arena_slot | my_slots [1] |
![]() | |
char | pad [S - R] |
![]() | |
unsigned | my_num_workers_allotted |
The number of workers that have been marked out by the resource manager to service the arena. More... | |
atomic< unsigned > | my_references |
Reference counter for the arena. More... | |
atomic< unsigned > | my_limit |
The maximal number of currently busy slots. More... | |
task_stream< num_priority_levels > | my_task_stream |
Task pool for the tasks scheduled via task::enqueue() method. More... | |
unsigned | my_max_num_workers |
The number of workers requested by the master thread owning the arena. More... | |
int | my_num_workers_requested |
The number of workers that are currently requested from the resource manager. More... | |
tbb::atomic< uintptr_t > | my_pool_state |
Current task pool state and estimate of available tasks amount. More... | |
market * | my_market |
The market that owns this arena. More... | |
uintptr_t | my_aba_epoch |
ABA prevention marker. More... | |
cpu_ctl_env | my_cpu_ctl_env |
FPU control settings of arena's master thread captured at the moment of arena instantiation. More... | |
unsigned | my_num_slots |
The number of slots in the arena. More... | |
unsigned | my_num_reserved_slots |
The number of reserved slots (can be occupied only by masters). More... | |
concurrent_monitor | my_exit_monitors |
Waiting object for master threads that cannot join the arena. More... | |
![]() | |
char | pad [S - R] |
![]() | |
intrusive_list_node * | my_prev_node |
intrusive_list_node * | my_next_node |
Static Public Attributes | |
static const pool_state_t | SNAPSHOT_EMPTY = 0 |
No tasks to steal since last snapshot was taken. More... | |
static const pool_state_t | SNAPSHOT_FULL = pool_state_t(-1) |
At least one task has been offered for stealing since the last snapshot started. More... | |
static const unsigned | ref_external_bits = 12 |
The number of least significant bits for external references. More... | |
static const unsigned | ref_external = 1 |
Reference increment values for externals and workers. More... | |
static const unsigned | ref_worker = 1<<ref_external_bits |
static const size_t | out_of_arena = ~size_t(0) |
Private Member Functions | |
void | restore_priority_if_need () |
If enqueued tasks found, restore arena priority and task presence status. More... | |
typedef uintptr_t tbb::internal::arena::pool_state_t |
Types of work advertised by advertise_new_work()
Enumerator | |
---|---|
work_spawned | |
wakeup | |
work_enqueued |
tbb::internal::arena::arena | ( | market & | m, |
unsigned | max_num_workers, | ||
unsigned | num_reserved_slots | ||
) |
Constructor.
Definition at line 182 of file arena.cpp.
References __TBB_ASSERT, ITT_SYNC_CREATE, tbb::internal::market::my_arenas_aba_epoch, tbb::internal::generic_scheduler::my_market, tbb::internal::NFS_Allocate(), and tbb::internal::NFS_GetLineSize().
void tbb::internal::arena::advertise_new_work | ( | ) |
If necessary, raise a flag that there is new job in arena.
Definition at line 475 of file arena.h.
References __TBB_ASSERT, tbb::internal::as_atomic(), tbb::atomic_fence(), and tbb::internal::governor::local_scheduler().
Referenced by tbb::internal::generic_scheduler::enqueue(), tbb::internal::generic_scheduler::get_task(), tbb::internal::generic_scheduler::local_spawn(), tbb::internal::generic_scheduler::steal_task_from(), and tbb::internal::generic_scheduler::wait_until_empty().
|
static |
Allocate an instance of arena.
Definition at line 241 of file arena.cpp.
References __TBB_ASSERT, tbb::internal::NFS_Allocate(), tbb::internal::NFS_GetLineSize(), and tbb::internal::NFS_MaxLineSize.
Referenced by tbb::internal::market::create_arena().
|
inlinestatic |
void tbb::internal::arena::enqueue_task | ( | task & | t, |
intptr_t | prio, | ||
FastRandom & | random | ||
) |
enqueue a task into starvation-resistance queue
Definition at line 553 of file arena.cpp.
References __TBB_ASSERT, __TBB_ASSERT_EX, tbb::internal::task_prefix::affinity, tbb::task::allocated, tbb::internal::es_ref_count_active, tbb::internal::es_task_enqueued, tbb::internal::task_prefix::extra_state, tbb::internal::is_critical(), tbb::internal::task_prefix::isolation, ITT_NOTIFY, tbb::internal::governor::local_scheduler_if_initialized(), tbb::internal::make_critical(), tbb::internal::scheduler_state::my_arena_slot, tbb::internal::scheduler_state::my_innermost_running_task, tbb::internal::generic_scheduler::my_market, p, parent, tbb::task::parent(), tbb::task::prefix(), tbb::internal::priority_critical, tbb::task::ready, tbb::internal::task_prefix::state, tbb::task::state(), and sync_releasing.
Referenced by tbb::internal::generic_scheduler::enqueue(), tbb::interface7::internal::task_arena_base::internal_enqueue(), and tbb::interface7::internal::task_arena_base::internal_execute().
void tbb::internal::arena::free_arena | ( | ) |
Completes arena shutdown, destructs and deallocates it.
Definition at line 252 of file arena.cpp.
References __TBB_ASSERT, tbb::internal::as_atomic(), GATHER_STATISTIC, head, tbb::internal::scheduler_state::my_arena, tbb::internal::generic_scheduler::my_market, tbb::internal::NFS_Free(), poison_value, tbb::internal::market::release(), s, tail, and tbb::internal::generic_scheduler::worker_outermost_level().
Referenced by tbb::internal::market::try_destroy_arena().
bool tbb::internal::arena::has_enqueued_tasks | ( | ) |
Check for the presence of enqueued tasks at all priority levels.
Definition at line 382 of file arena.cpp.
References tbb::internal::num_priority_levels, and p.
Referenced by tbb::internal::market::is_arena_in_list().
|
inlinestatic |
No tasks to steal or snapshot is being taken.
Definition at line 322 of file arena.h.
bool tbb::internal::arena::is_out_of_work | ( | ) |
Check if there is job anywhere in arena.
Return true if no job or if arena is being cleaned up.
Definition at line 410 of file arena.cpp.
References __TBB_ASSERT, tbb::internal::__TBB_load_relaxed(), tbb::internal::__TBB_load_with_acquire(), tbb::internal::market::adjust_demand(), tbb::internal::atomic_update(), EmptyTaskPool, head, int, tbb::internal::generic_scheduler::my_market, and tail.
Referenced by tbb::interface7::internal::wait_task::execute().
|
inline |
Check if the recall is requested by the market.
Definition at line 330 of file arena.h.
|
inline |
Get reference to mailbox corresponding to given affinity_id.
Definition at line 296 of file arena.h.
References __TBB_ASSERT, and int.
Referenced by tbb::internal::generic_scheduler::prepare_for_spawning().
|
inlinestatic |
Definition at line 287 of file arena.h.
References tbb::internal::max().
Referenced by tbb::interface7::internal::task_arena_base::internal_attach().
|
inline |
The number of workers active in the arena.
Definition at line 325 of file arena.h.
Referenced by tbb::internal::market::arena_in_need(), and tbb::interface7::internal::task_arena_base::internal_wait().
size_t tbb::internal::arena::occupy_free_slot | ( | generic_scheduler & | s | ) |
Tries to occupy a slot in the arena. On success, returns the slot index; if no slot is available, returns out_of_arena.
Definition at line 86 of file arena.cpp.
References tbb::internal::atomic_update(), and ITT_NOTIFY.
Referenced by tbb::interface7::internal::task_arena_base::internal_execute().
size_t tbb::internal::arena::occupy_free_slot_in_range | ( | generic_scheduler & | s, |
size_t | lower, | ||
size_t | upper | ||
) |
Tries to occupy a slot in the specified range.
Definition at line 71 of file arena.cpp.
References __TBB_ASSERT, tbb::internal::FastRandom::get(), tbb::internal::scheduler_state::my_arena_index, tbb::internal::generic_scheduler::my_random, and tbb::internal::occupy_slot().
|
inline |
Notification that worker or master leaves its arena.
Definition at line 385 of file arena.h.
References __TBB_ASSERT, GATHER_STATISTIC, tbb::internal::modulo_power_of_two(), tbb::internal::market::my_num_workers_soft_limit, tbb::internal::num_priority_levels, and tbb::internal::market::try_destroy_arena().
Referenced by tbb::internal::generic_scheduler::cleanup_master(), tbb::internal::generic_scheduler::free_task(), tbb::interface7::internal::task_arena_base::internal_initialize(), tbb::interface7::internal::task_arena_base::internal_terminate(), and tbb::internal::generic_scheduler::wait_until_empty().
void tbb::internal::arena::process | ( | generic_scheduler & | s | ) |
Registers the worker with the arena and enters TBB scheduler dispatch loop.
Definition at line 102 of file arena.cpp.
References __TBB_ASSERT, __TBB_ISOLATION_ARG, tbb::internal::__TBB_store_with_release(), tbb::internal::generic_scheduler::attach_arena(), tbb::internal::mail_inbox::detach(), EmptyTaskPool, tbb::internal::mail_inbox::is_idle_state(), tbb::internal::generic_scheduler::is_quiescent_local_task_pool_reset(), tbb::internal::governor::is_set(), tbb::internal::generic_scheduler::local_wait_for_all(), tbb::internal::scheduler_state::my_arena_slot, tbb::internal::generic_scheduler::my_dummy_task, tbb::internal::scheduler_state::my_inbox, tbb::internal::scheduler_state::my_innermost_running_task, tbb::internal::no_isolation, tbb::task::prefix(), tbb::internal::generic_scheduler::receive_or_steal_task(), tbb::internal::task_prefix::ref_count, s, tbb::internal::arena_slot_line1::task_pool, and tbb::internal::generic_scheduler::worker_outermost_level().
Referenced by tbb::internal::market::process().
|
private |
If enqueued tasks found, restore arena priority and task presence status.
Definition at line 390 of file arena.cpp.
References tbb::internal::generic_scheduler::my_market, tbb::internal::num_priority_levels, and p.
arena_slot tbb::internal::arena::my_slots[1] |
Must be the last data field
Definition at line 381 of file arena.h.
Referenced by tbb::internal::generic_scheduler::acquire_task_pool(), tbb::internal::generic_scheduler::attach_arena(), tbb::internal::generic_scheduler::cleanup_master(), tbb::internal::market::detach_arena(), tbb::interface7::internal::task_arena_base::internal_wait(), tbb::internal::generic_scheduler::leave_task_pool(), tbb::internal::generic_scheduler::nested_arena_exit(), tbb::internal::generic_scheduler::publish_task_pool(), and tbb::internal::generic_scheduler::steal_task().
|
static |
Definition at line 373 of file arena.h.
Referenced by tbb::interface7::internal::task_arena_base::internal_execute().
|
static |
Reference increment values for externals and workers.
Definition at line 318 of file arena.h.
Referenced by tbb::internal::generic_scheduler::cleanup_master(), tbb::internal::generic_scheduler::free_task(), tbb::interface7::internal::task_arena_base::internal_attach(), tbb::interface7::internal::task_arena_base::internal_initialize(), tbb::interface7::internal::task_arena_base::internal_terminate(), and tbb::internal::generic_scheduler::wait_until_empty().
|
static |
|
static |
Definition at line 319 of file arena.h.
Referenced by tbb::internal::market::arena_in_need().
|
static |
No tasks to steal since last snapshot was taken.
Definition at line 309 of file arena.h.
Referenced by tbb::interface7::internal::task_arena_base::internal_wait(), tbb::internal::market::try_destroy_arena(), and tbb::internal::generic_scheduler::wait_until_empty().
|
static |