| 
    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] | 
  Public Attributes inherited from tbb::internal::padded_base< arena_base, NFS_MaxLineSize, sizeof(arena_base) % NFS_MaxLineSize > | |
| char | pad [S - R] | 
  Public Attributes inherited from tbb::internal::arena_base | |
| 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... | |
  Public Attributes inherited from tbb::internal::padded_base< intrusive_list_node, NFS_MaxLineSize, sizeof(intrusive_list_node) % NFS_MaxLineSize > | |
| char | pad [S - R] | 
  Public Attributes inherited from tbb::internal::intrusive_list_node | |
| 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 226 of file arena.cpp.
References __TBB_ASSERT, tbb::internal::mail_outbox::construct(), tbb::internal::cpu_ctl_env::get_env(), tbb::internal::arena_slot_line2::hint_for_pop, tbb::internal::task_stream< Levels >::initialize(), ITT_SYNC_CREATE, mailbox(), tbb::internal::arena_base::my_aba_epoch, tbb::internal::market::my_arenas_aba_epoch, tbb::internal::arena_base::my_cpu_ctl_env, tbb::internal::arena_base::my_limit, tbb::internal::arena_base::my_market, tbb::internal::arena_base::my_max_num_workers, tbb::internal::arena_base::my_num_reserved_slots, tbb::internal::arena_base::my_num_slots, tbb::internal::arena_base::my_references, my_slots, tbb::internal::arena_base::my_task_stream, tbb::internal::NFS_Allocate(), tbb::internal::NFS_GetLineSize(), num_arena_slots(), and ref_external.
Referenced by allocate_arena().
| void tbb::internal::arena::advertise_new_work | ( | ) | 
If necessary, raise a flag that there is new job in arena.
Definition at line 484 of file arena.h.
References __TBB_ASSERT, tbb::internal::market::adjust_demand(), tbb::internal::as_atomic(), tbb::atomic_fence(), is_busy_or_empty(), tbb::internal::governor::local_scheduler(), tbb::internal::arena_base::my_market, tbb::internal::arena_base::my_max_num_workers, tbb::internal::arena_base::my_num_reserved_slots, tbb::internal::market::my_num_workers_soft_limit, tbb::internal::arena_base::my_pool_state, SNAPSHOT_EMPTY, SNAPSHOT_FULL, wakeup, work_enqueued, and work_spawned.
Referenced by tbb::internal::generic_scheduler::get_task(), tbb::internal::generic_scheduler::local_spawn(), and tbb::internal::generic_scheduler::steal_task_from().
      
  | 
  static | 
Allocate an instance of arena.
Definition at line 285 of file arena.cpp.
References __TBB_ASSERT, allocation_size(), arena(), tbb::internal::NFS_Allocate(), tbb::internal::NFS_GetLineSize(), tbb::internal::NFS_MaxLineSize, and num_arena_slots().
Referenced by tbb::internal::market::create_arena().
      
  | 
  inlinestatic | 
Definition at line 300 of file arena.h.
Referenced by allocate_arena(), and free_arena().
| void tbb::internal::arena::enqueue_task | ( | task & | t, | 
| intptr_t | prio, | ||
| FastRandom & | random | ||
| ) | 
enqueue a task into starvation-resistance queue
Definition at line 597 of file arena.cpp.
References __TBB_ASSERT, 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(), parent, tbb::task::parent(), tbb::task::prefix(), tbb::internal::priority_critical, tbb::task::ready, s, tbb::internal::task_prefix::state, tbb::task::state(), and sync_releasing.
Referenced by tbb::internal::custom_scheduler< SchedulerTraits >::tally_completion_of_predecessor().
| void tbb::internal::arena::free_arena | ( | ) | 
Completes arena shutdown, destructs and deallocates it.
Definition at line 296 of file arena.cpp.
References __TBB_ASSERT, allocation_size(), tbb::internal::task_stream< Levels >::drain(), tbb::internal::mail_outbox::drain(), tbb::internal::arena_slot::free_task_pool(), GATHER_STATISTIC, head, mailbox(), tbb::internal::arena_base::my_market, tbb::internal::arena_base::my_max_num_workers, tbb::internal::arena_base::my_num_slots, tbb::internal::arena_base::my_num_workers_allotted, tbb::internal::arena_base::my_num_workers_requested, tbb::internal::arena_base::my_pool_state, tbb::internal::arena_base::my_references, my_slots, tbb::internal::arena_base::my_task_stream, tbb::internal::NFS_Free(), poison_value, tbb::internal::market::release(), SNAPSHOT_EMPTY, and tail.
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 426 of file arena.cpp.
References tbb::internal::task_stream< Levels >::empty(), tbb::internal::arena_base::my_task_stream, tbb::internal::num_priority_levels, and p.
Referenced by restore_priority_if_need().
      
  | 
  inlinestatic | 
No tasks to steal or snapshot is being taken.
Definition at line 331 of file arena.h.
References s, and SNAPSHOT_FULL.
Referenced by advertise_new_work().
| 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 454 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(), tbb::internal::task_stream< Levels >::empty(), EmptyTaskPool, head, int, tbb::internal::arena_base::my_limit, tbb::internal::arena_base::my_market, tbb::internal::arena_base::my_max_num_workers, tbb::internal::arena_base::my_pool_state, my_slots, tbb::internal::arena_base::my_task_stream, restore_priority_if_need(), SNAPSHOT_EMPTY, SNAPSHOT_FULL, and tail.
Referenced by on_thread_leaving().
      
  | 
  inline | 
Check if the recall is requested by the market.
Definition at line 339 of file arena.h.
References tbb::internal::arena_base::my_num_workers_allotted, and num_workers_active().
Referenced by process().
      
  | 
  inline | 
Get reference to mailbox corresponding to given affinity_id.
Definition at line 305 of file arena.h.
References __TBB_ASSERT, int, and tbb::internal::arena_base::my_num_slots.
Referenced by arena(), tbb::internal::generic_scheduler::attach_mailbox(), free_arena(), and tbb::internal::generic_scheduler::prepare_for_spawning().
      
  | 
  inlinestatic | 
Definition at line 296 of file arena.h.
References tbb::internal::max().
Referenced by allocate_arena(), and arena().
      
  | 
  inline | 
The number of workers active in the arena.
Definition at line 334 of file arena.h.
References tbb::internal::arena_base::my_references, and ref_external_bits.
Referenced by tbb::internal::market::arena_in_need(), and is_recall_requested().
| 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 130 of file arena.cpp.
References tbb::internal::atomic_update(), ITT_NOTIFY, tbb::internal::arena_base::my_limit, tbb::internal::arena_base::my_num_reserved_slots, tbb::internal::arena_base::my_num_slots, my_slots, occupy_free_slot_in_range(), out_of_arena, and s.
Referenced by process().
| 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 115 of file arena.cpp.
References __TBB_ASSERT, my_slots, tbb::internal::occupy_slot(), out_of_arena, and s.
Referenced by occupy_free_slot().
      
  | 
  inline | 
Notification that worker or master leaves its arena.
Definition at line 394 of file arena.h.
References __TBB_ASSERT, GATHER_STATISTIC, is_out_of_work(), tbb::internal::modulo_power_of_two(), tbb::internal::arena_base::my_aba_epoch, tbb::internal::arena_base::my_market, tbb::internal::arena_base::my_num_reserved_slots, tbb::internal::arena_base::my_num_slots, tbb::internal::market::my_num_workers_soft_limit, tbb::internal::arena_base::my_references, tbb::internal::num_priority_levels, ref_external, ref_worker, and tbb::internal::market::try_destroy_arena().
Referenced by tbb::internal::generic_scheduler::cleanup_master().
| void tbb::internal::arena::process | ( | generic_scheduler & | s | ) | 
Registers the worker with the arena and enters TBB scheduler dispatch loop.
Definition at line 146 of file arena.cpp.
References __TBB_ASSERT, __TBB_ISOLATION_ARG, tbb::internal::__TBB_store_with_release(), EmptyTaskPool, is_recall_requested(), tbb::internal::governor::is_set(), tbb::internal::arena_base::my_cpu_ctl_env, tbb::internal::arena_base::my_num_reserved_slots, tbb::internal::arena_base::my_num_slots, my_slots, tbb::internal::no_isolation, occupy_free_slot(), out_of_arena, s, and tbb::internal::cpu_ctl_env::set_env().
Referenced by tbb::internal::market::process().
      
  | 
  private | 
If enqueued tasks found, restore arena priority and task presence status.
Definition at line 434 of file arena.cpp.
References tbb::internal::task_stream< Levels >::empty(), has_enqueued_tasks(), tbb::internal::arena_base::my_market, tbb::internal::arena_base::my_task_stream, tbb::internal::num_priority_levels, and p.
Referenced by is_out_of_work().
| arena_slot tbb::internal::arena::my_slots[1] | 
Must be the last data field
Definition at line 390 of file arena.h.
Referenced by tbb::internal::generic_scheduler::acquire_task_pool(), arena(), tbb::internal::generic_scheduler::attach_arena(), tbb::internal::generic_scheduler::cleanup_master(), tbb::internal::market::detach_arena(), free_arena(), is_out_of_work(), tbb::internal::generic_scheduler::leave_task_pool(), tbb::internal::generic_scheduler::nested_arena_exit(), occupy_free_slot(), occupy_free_slot_in_range(), process(), tbb::internal::generic_scheduler::publish_task_pool(), and tbb::internal::generic_scheduler::steal_task().
      
  | 
  static | 
Definition at line 382 of file arena.h.
Referenced by occupy_free_slot(), occupy_free_slot_in_range(), and process().
      
  | 
  static | 
Reference increment values for externals and workers.
Definition at line 327 of file arena.h.
Referenced by arena(), tbb::internal::generic_scheduler::cleanup_master(), and on_thread_leaving().
      
  | 
  static | 
The number of least significant bits for external references.
Definition at line 324 of file arena.h.
Referenced by num_workers_active().
      
  | 
  static | 
Definition at line 328 of file arena.h.
Referenced by tbb::internal::market::arena_in_need(), and on_thread_leaving().
      
  | 
  static | 
No tasks to steal since last snapshot was taken.
Definition at line 318 of file arena.h.
Referenced by advertise_new_work(), free_arena(), is_out_of_work(), tbb::internal::market::try_destroy_arena(), and tbb::internal::generic_scheduler::wait_until_empty().
      
  | 
  static | 
At least one task has been offered for stealing since the last snapshot started.
Definition at line 321 of file arena.h.
Referenced by advertise_new_work(), is_busy_or_empty(), and is_out_of_work().