Intel(R) Threading Building Blocks Doxygen Documentation
version 4.2.3
|
#include <market.h>
Public Member Functions | |
void | try_destroy_arena (arena *, uintptr_t aba_epoch) |
Removes the arena from the market's list. More... | |
void | detach_arena (arena &) |
Removes the arena from the market's list. More... | |
bool | release (bool is_public, bool blocking_terminate) |
Decrements market's refcount and destroys it in the end. More... | |
void | adjust_demand (arena &, int delta) |
Request that arena's need in workers should be adjusted. More... | |
bool | must_join_workers () const |
Used when RML asks for join mode during workers termination. More... | |
size_t | worker_stack_size () const |
Returns the requested stack size of worker threads. More... | |
Static Public Member Functions | |
static arena * | create_arena (int num_slots, int num_reserved_slots, size_t stack_size) |
Creates an arena object. More... | |
static void | set_active_num_workers (unsigned w) |
Set number of active workers. More... | |
static unsigned | app_parallelism_limit () |
Reports active parallelism level according to user's settings. More... | |
static unsigned | max_num_workers () |
Private Types | |
typedef intrusive_list< arena > | arena_list_type |
typedef intrusive_list< generic_scheduler > | scheduler_list_type |
typedef scheduler_mutex_type | global_market_mutex_type |
typedef spin_rw_mutex | arenas_list_mutex_type |
Lightweight mutex guarding accounting operations with arenas list. More... | |
Private Member Functions | |
market (unsigned workers_soft_limit, unsigned workers_hard_limit, size_t stack_size) | |
Constructor. More... | |
void | destroy () |
Destroys and deallocates market object created by market::create() More... | |
int | update_workers_request () |
Recalculates the number of workers requested from RML and updates the allotment. More... | |
void | update_allotment (unsigned effective_soft_limit) |
Recalculates the number of workers assigned to each arena in the list. More... | |
arena * | arena_in_need (arena *prev_arena) |
Returns next arena that needs more workers, or NULL. More... | |
void | assert_market_valid () const |
void | insert_arena_into_list (arena &a) |
void | remove_arena_from_list (arena &a) |
arena * | arena_in_need (arena_list_type &arenas, arena *hint) |
int | update_allotment (arena_list_type &arenas, int total_demand, int max_workers) |
bool | is_arena_in_list (arena_list_type &arenas, arena *a) |
version_type | version () const __TBB_override |
unsigned | max_job_count () const __TBB_override |
size_t | min_stack_size () const __TBB_override |
policy_type | policy () const __TBB_override |
job * | create_one_job () __TBB_override |
void | cleanup (job &j) __TBB_override |
void | acknowledge_close_connection () __TBB_override |
void | process (job &j) __TBB_override |
![]() | |
no_copy (const no_copy &)=delete | |
no_copy ()=default | |
Static Private Member Functions | |
static market & | global_market (bool is_public, unsigned max_num_workers=0, size_t stack_size=0) |
Factory method creating new market object. More... | |
Private Attributes | |
arenas_list_mutex_type | my_arenas_list_mutex |
rml::tbb_server * | my_server |
Pointer to the RML server object that services this TBB instance. More... | |
unsigned | my_num_workers_hard_limit |
Maximal number of workers allowed for use by the underlying resource manager. More... | |
unsigned | my_num_workers_soft_limit |
Current application-imposed limit on the number of workers (see set_active_num_workers()) More... | |
int | my_num_workers_requested |
Number of workers currently requested from RML. More... | |
atomic< unsigned > | my_first_unused_worker_idx |
First unused index of worker. More... | |
int | my_total_demand |
Number of workers that were requested by all arenas. More... | |
arena_list_type | my_arenas |
List of registered arenas. More... | |
arena * | my_next_arena |
The first arena to be checked when idle worker seeks for an arena to enter. More... | |
uintptr_t | my_arenas_aba_epoch |
ABA prevention marker to assign to newly created arenas. More... | |
unsigned | my_ref_count |
Reference count controlling market object lifetime. More... | |
unsigned | my_public_ref_count |
Count of master threads attached. More... | |
size_t | my_stack_size |
Stack size of worker threads. More... | |
bool | my_join_workers |
Shutdown mode. More... | |
unsigned | my_workers_soft_limit_to_report |
Either workers soft limit to be reported via runtime_warning() or skip_soft_limit_warning. More... | |
Static Private Attributes | |
static market * | theMarket |
Currently active global market. More... | |
static global_market_mutex_type | theMarketMutex |
Mutex guarding creation/destruction of theMarket, insertions/deletions in my_arenas, and cancellation propagation. More... | |
static const unsigned | skip_soft_limit_warning = ~0U |
The value indicating that the soft limit warning is unnecessary. More... | |
Friends | |
class | generic_scheduler |
class | arena |
class | tbb::interface7::internal::task_arena_base |
template<typename SchedulerTraits > | |
class | custom_scheduler |
class | tbb::task_group_context |
void | ITT_DoUnsafeOneTimeInitialization () |
|
private |
|
private |
|
private |
|
private |
|
private |
Constructor.
Definition at line 64 of file market.cpp.
References __TBB_ASSERT, tbb::internal::governor::create_rml_server(), my_num_workers_soft_limit, and my_server.
Referenced by global_market().
|
private |
Definition at line 695 of file market.cpp.
References destroy().
Request that arena's need in workers should be adjusted.
Concurrent invocations are possible only on behalf of different arenas.
Definition at line 557 of file market.cpp.
References __TBB_ASSERT, assert_market_valid(), GATHER_STATISTIC, tbb::internal::governor::local_scheduler_if_initialized(), tbb::spin_rw_mutex_v3::lock(), tbb::internal::min(), my_arenas_list_mutex, tbb::internal::arena_base::my_num_workers_allotted, my_num_workers_requested, tbb::internal::arena_base::my_num_workers_requested, my_num_workers_soft_limit, my_server, my_total_demand, p, theMarket, tbb::spin_rw_mutex_v3::unlock(), and update_allotment().
Referenced by tbb::internal::arena::advertise_new_work(), tbb::internal::arena::is_out_of_work(), tbb::internal::generic_scheduler::nested_arena_entry(), and tbb::internal::generic_scheduler::nested_arena_exit().
|
static |
Reports active parallelism level according to user's settings.
Definition at line 512 of file tbb_main.cpp.
References tbb::internal::allowed_parallelism_control::active_value_if_present(), and tbb::internal::allowed_parallelism_ctl.
Referenced by tbb::internal::calc_workers_soft_limit(), and global_market().
Returns next arena that needs more workers, or NULL.
Definition at line 221 of file market.h.
References tbb::internal::__TBB_load_with_acquire(), tbb::internal::as_atomic(), is_arena_in_list(), lock, my_arenas, my_arenas_list_mutex, my_next_arena, and my_total_demand.
Referenced by process().
|
private |
This method must be invoked under my_arenas_list_mutex.
Definition at line 374 of file market.cpp.
References __TBB_ASSERT, tbb::internal::intrusive_list_base< List, T >::begin(), tbb::internal::intrusive_list_base< List, T >::empty(), tbb::internal::intrusive_list_base< List, T >::end(), tbb::internal::arena_base::my_num_workers_allotted, tbb::internal::arena_base::my_references, tbb::internal::arena::num_workers_active(), and tbb::internal::arena::ref_worker.
|
inlineprivate |
Definition at line 241 of file market.h.
Referenced by adjust_demand(), and try_destroy_arena().
|
private |
Definition at line 681 of file market.cpp.
References __TBB_ASSERT, tbb::internal::governor::assume_scheduler(), tbb::internal::generic_scheduler::cleanup_worker(), tbb::internal::generic_scheduler::is_worker(), tbb::internal::governor::local_scheduler_if_initialized(), s, and theMarket.
|
static |
Creates an arena object.
If necessary, also creates global market instance, and boosts its ref count. Each call to create_arena() must be matched by the call to arena::free_arena().
Definition at line 308 of file market.cpp.
References __TBB_ASSERT, tbb::internal::arena::allocate_arena(), global_market(), insert_arena_into_list(), lock, and my_arenas_list_mutex.
Referenced by tbb::internal::governor::init_scheduler().
|
private |
Definition at line 699 of file market.cpp.
References __TBB_ASSERT, _T, tbb::internal::generic_scheduler::create_worker(), ITT_THREAD_SET_NAME, my_first_unused_worker_idx, my_num_workers_hard_limit, and s.
|
private |
Destroys and deallocates market object created by market::create()
Definition at line 165 of file market.cpp.
References tbb::internal::NFS_Free(), tbb::internal::__TBB_InitOnce::remove_ref(), and tbb::internal::runtime_warning().
Referenced by acknowledge_close_connection().
Removes the arena from the market's list.
This method must be invoked under my_arenas_list_mutex.
Definition at line 322 of file market.cpp.
References __TBB_ASSERT, tbb::internal::arena_base::my_aba_epoch, my_arenas_aba_epoch, tbb::internal::arena_slot_line1::my_scheduler, tbb::internal::arena::my_slots, remove_arena_from_list(), and theMarket.
Referenced by try_destroy_arena().
|
staticprivate |
Factory method creating new market object.
Definition at line 96 of file market.cpp.
References __TBB_ASSERT, __TBB_offsetof, tbb::interface9::global_control::active_value(), tbb::internal::__TBB_InitOnce::add_ref(), app_parallelism_limit(), tbb::internal::as_atomic(), tbb::internal::calc_workers_soft_limit(), tbb::internal::governor::default_num_threads(), lock, market(), tbb::internal::max(), my_num_workers_hard_limit, my_public_ref_count, my_ref_count, my_server, my_stack_size, my_workers_soft_limit_to_report, tbb::internal::NFS_Allocate(), tbb::internal::runtime_warning(), set_active_num_workers(), size, skip_soft_limit_warning, theMarket, theMarketMutex, tbb::interface9::global_control::thread_stack_size, and tbb::internal::governor::UsePrivateRML.
Referenced by create_arena(), and tbb::internal::generic_scheduler::create_master().
Definition at line 29 of file market.cpp.
References tbb::internal::intrusive_list_base< List, T >::begin(), my_arenas, my_next_arena, tbb::internal::intrusive_list_base< List, T >::push_front(), and tbb::internal::intrusive_list_base< List, T >::size().
Referenced by create_arena().
|
private |
This method must be invoked under my_arenas_list_mutex.
Definition at line 424 of file market.cpp.
References tbb::internal::intrusive_list_base< List, T >::begin(), and tbb::internal::intrusive_list_base< List, T >::end().
Referenced by arena_in_need().
|
inlineprivate |
Definition at line 263 of file market.h.
References my_num_workers_hard_limit.
|
inlinestatic |
Definition at line 377 of file market.h.
References lock, my_num_workers_hard_limit, theMarket, and theMarketMutex.
Referenced by tbb::internal::allowed_parallelism_control::active_value().
|
inlineprivate |
Definition at line 265 of file market.h.
References worker_stack_size().
|
inline |
Used when RML asks for join mode during workers termination.
Definition at line 311 of file market.h.
References my_join_workers.
|
inlineprivate |
|
private |
Definition at line 659 of file market.cpp.
References __TBB_ASSERT, __TBB_Yield, arena_in_need(), GATHER_STATISTIC, tbb::internal::governor::is_set(), tbb::internal::arena::process(), and s.
bool tbb::internal::market::release | ( | bool | is_public, |
bool | blocking_terminate | ||
) |
Decrements market's refcount and destroys it in the end.
Definition at line 175 of file market.cpp.
References __TBB_ASSERT, tbb::internal::__TBB_load_with_acquire(), __TBB_Yield, lock, my_join_workers, my_public_ref_count, my_ref_count, my_server, theMarket, and theMarketMutex.
Referenced by tbb::internal::generic_scheduler::cleanup_master(), tbb::internal::arena::free_arena(), and set_active_num_workers().
Definition at line 42 of file market.cpp.
References __TBB_ASSERT, tbb::internal::intrusive_list_base< List, T >::begin(), tbb::internal::intrusive_list_base< List, T >::end(), my_arenas, my_next_arena, tbb::internal::intrusive_list_base< List, T >::remove(), and tbb::internal::intrusive_list_base< List, T >::size().
Referenced by detach_arena().
|
static |
Set number of active workers.
Definition at line 235 of file market.cpp.
References __TBB_ASSERT, tbb::internal::as_atomic(), lock, my_arenas_list_mutex, my_num_workers_hard_limit, my_num_workers_soft_limit, my_ref_count, my_server, my_workers_soft_limit_to_report, p, release(), theMarket, theMarketMutex, and update_workers_request().
Referenced by tbb::internal::allowed_parallelism_control::apply_active(), and global_market().
Removes the arena from the market's list.
Definition at line 333 of file market.cpp.
References __TBB_ASSERT, assert_market_valid(), tbb::internal::intrusive_list_base< List, T >::begin(), detach_arena(), tbb::internal::intrusive_list_base< List, T >::end(), tbb::internal::arena::free_arena(), tbb::spin_rw_mutex_v3::lock(), my_arenas, my_arenas_list_mutex, tbb::internal::arena_base::my_max_num_workers, tbb::internal::arena_base::my_num_workers_allotted, tbb::internal::arena_base::my_num_workers_requested, tbb::internal::arena_base::my_pool_state, my_ref_count, tbb::internal::arena_base::my_references, tbb::internal::num_priority_levels, p, tbb::internal::arena::SNAPSHOT_EMPTY, theMarket, and tbb::spin_rw_mutex_v3::unlock().
Referenced by tbb::internal::arena::on_thread_leaving().
|
inlineprivate |
Recalculates the number of workers assigned to each arena in the list.
The actual number of workers servicing a particular arena may temporarily deviate from the calculated value.
Definition at line 214 of file market.h.
References my_arenas, and my_total_demand.
Referenced by adjust_demand(), and update_workers_request().
|
private |
Definition at line 391 of file market.cpp.
References __TBB_ASSERT, tbb::internal::intrusive_list_base< List, T >::begin(), tbb::internal::intrusive_list_base< List, T >::end(), tbb::internal::min(), tbb::internal::arena_base::my_max_num_workers, tbb::internal::arena_base::my_num_workers_allotted, tbb::internal::arena_base::my_num_workers_requested, and my_num_workers_soft_limit.
|
private |
Recalculates the number of workers requested from RML and updates the allotment.
Definition at line 217 of file market.cpp.
References __TBB_ASSERT, tbb::internal::min(), my_num_workers_requested, my_num_workers_soft_limit, my_total_demand, and update_allotment().
Referenced by set_active_num_workers().
|
inlineprivate |
|
inline |
Returns the requested stack size of worker threads.
Definition at line 314 of file market.h.
References my_stack_size.
Referenced by tbb::internal::generic_scheduler::init_stack_info(), and min_stack_size().
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
private |
List of registered arenas.
Definition at line 135 of file market.h.
Referenced by arena_in_need(), insert_arena_into_list(), remove_arena_from_list(), try_destroy_arena(), and update_allotment().
|
private |
ABA prevention marker to assign to newly created arenas.
Definition at line 143 of file market.h.
Referenced by tbb::internal::arena::arena(), and detach_arena().
|
private |
Definition at line 67 of file market.h.
Referenced by adjust_demand(), arena_in_need(), create_arena(), set_active_num_workers(), and try_destroy_arena().
|
private |
First unused index of worker.
Used to assign indices to the new workers coming from RML, and busy part of my_workers array.
Definition at line 86 of file market.h.
Referenced by create_one_job().
|
private |
Shutdown mode.
Definition at line 155 of file market.h.
Referenced by must_join_workers(), and release().
|
private |
The first arena to be checked when idle worker seeks for an arena to enter.
The check happens in round-robin fashion.
Definition at line 139 of file market.h.
Referenced by arena_in_need(), insert_arena_into_list(), and remove_arena_from_list().
|
private |
Maximal number of workers allowed for use by the underlying resource manager.
It can't be changed after market creation.
Definition at line 74 of file market.h.
Referenced by create_one_job(), global_market(), max_job_count(), max_num_workers(), and set_active_num_workers().
|
private |
Number of workers currently requested from RML.
Definition at line 81 of file market.h.
Referenced by adjust_demand(), and update_workers_request().
|
private |
Current application-imposed limit on the number of workers (see set_active_num_workers())
It can't be more than my_num_workers_hard_limit.
Definition at line 78 of file market.h.
Referenced by adjust_demand(), tbb::internal::arena::advertise_new_work(), market(), tbb::internal::arena::on_thread_leaving(), set_active_num_workers(), update_allotment(), and update_workers_request().
|
private |
Count of master threads attached.
Definition at line 149 of file market.h.
Referenced by global_market(), and release().
|
private |
Reference count controlling market object lifetime.
Definition at line 146 of file market.h.
Referenced by global_market(), release(), set_active_num_workers(), and try_destroy_arena().
|
private |
Pointer to the RML server object that services this TBB instance.
Definition at line 70 of file market.h.
Referenced by adjust_demand(), global_market(), market(), release(), and set_active_num_workers().
|
private |
Stack size of worker threads.
Definition at line 152 of file market.h.
Referenced by global_market(), and worker_stack_size().
|
private |
Number of workers that were requested by all arenas.
Definition at line 89 of file market.h.
Referenced by adjust_demand(), arena_in_need(), update_allotment(), and update_workers_request().
|
private |
Either workers soft limit to be reported via runtime_warning() or skip_soft_limit_warning.
Definition at line 161 of file market.h.
Referenced by global_market(), and set_active_num_workers().
|
staticprivate |
The value indicating that the soft limit warning is unnecessary.
Definition at line 158 of file market.h.
Referenced by global_market().
|
staticprivate |
Currently active global market.
Definition at line 58 of file market.h.
Referenced by adjust_demand(), cleanup(), detach_arena(), global_market(), max_num_workers(), release(), set_active_num_workers(), and try_destroy_arena().
|
staticprivate |
Mutex guarding creation/destruction of theMarket, insertions/deletions in my_arenas, and cancellation propagation.
Definition at line 63 of file market.h.
Referenced by global_market(), max_num_workers(), release(), and set_active_num_workers().