Intel(R) Threading Building Blocks Doxygen Documentation
version 4.2.3
|
Go to the documentation of this file.
25 #include "../rml/include/rml_tbb.h"
29 #if defined(_MSC_VER) && defined(_Wp64)
31 #pragma warning (push)
32 #pragma warning (disable: 4244)
37 class task_group_context;
91 #if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
92 int my_mandatory_num_requested;
96 #if __TBB_TASK_PRIORITY
102 intptr_t my_global_top_priority;
106 intptr_t my_global_bottom_priority;
111 uintptr_t my_global_reload_epoch;
114 struct priority_level_info {
123 int workers_requested;
126 int workers_available;
162 #if __TBB_COUNT_TASK_NODES
165 atomic<intptr_t> my_task_node_count;
169 market (
unsigned workers_soft_limit,
unsigned workers_hard_limit,
size_t stack_size );
177 #if __TBB_TASK_PRIORITY
182 int update_workers_request();
190 void update_arena_top_priority (
arena& a, intptr_t newPriority );
193 inline void update_global_top_priority ( intptr_t newPriority );
196 inline void reset_global_priority ();
198 inline void advance_global_reload_epoch () {
203 __TBB_ASSERT( (my_priority_levels[my_global_top_priority].workers_requested > 0
204 && !my_priority_levels[my_global_top_priority].arenas.empty())
205 || (my_global_top_priority == my_global_bottom_priority &&
206 my_global_top_priority == normalized_normal_priority), NULL );
267 static
arena*
create_arena (
int num_slots,
int num_reserved_slots,
size_t stack_size );
276 bool release (
bool is_public,
bool blocking_terminate );
278 #if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
279 void enable_mandatory_concurrency_impl (
arena *a );
283 void enable_mandatory_concurrency (
arena *a );
286 void disable_mandatory_concurrency_impl(
arena* a);
289 void mandatory_concurrency_disable (
arena *a );
309 void register_master( ::rml::server::execution_resource_t& rsc_handle ) {
313 my_server->register_master( rsc_handle );
317 void unregister_master( ::rml::server::execution_resource_t& rsc_handle )
const {
318 my_server->unregister_master( rsc_handle );
322 #if __TBB_TASK_GROUP_CONTEXT
328 template <
typename T>
329 bool propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state );
332 #if __TBB_TASK_PRIORITY
335 bool lower_arena_priority (
arena& a, intptr_t new_priority, uintptr_t old_reload_epoch );
344 bool update_arena_priority (
arena& a, intptr_t new_priority );
347 #if __TBB_COUNT_TASK_NODES
350 void update_task_node_count( intptr_t delta ) { my_task_node_count += delta; }
353 #if __TBB_TASK_GROUP_CONTEXT
372 #if defined(_MSC_VER) && defined(_Wp64)
374 #pragma warning (pop)
375 #endif // warning 4244 is back
unsigned my_ref_count
Reference count controlling market object lifetime.
unsigned my_num_workers_hard_limit
Maximal number of workers allowed for use by the underlying resource manager.
Used to form groups of tasks.
bool release(bool is_public, bool blocking_terminate)
Decrements market's refcount and destroys it in the end.
arena_list_type my_arenas
List of registered arenas.
market(unsigned workers_soft_limit, unsigned workers_hard_limit, size_t stack_size)
Constructor.
void insert_arena_into_list(arena &a)
uintptr_t my_arenas_aba_epoch
ABA prevention marker to assign to newly created arenas.
Fast, unfair, spinning reader-writer lock with backoff and writer-preference.
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
void __TBB_store_with_release(volatile T &location, V value)
unsigned max_job_count() const __TBB_override
bool must_join_workers() const
Used when RML asks for join mode during workers termination.
bool my_join_workers
Shutdown mode.
static const intptr_t num_priority_levels
arena * my_next_arena
The first arena to be checked when idle worker seeks for an arena to enter.
void assert_market_valid() const
static market & global_market(bool is_public, unsigned max_num_workers=0, size_t stack_size=0)
Factory method creating new market object.
static void set_active_num_workers(unsigned w)
Set number of active workers.
intrusive_list< generic_scheduler > scheduler_list_type
void cleanup(job &j) __TBB_override
void update_allotment()
Recalculates the number of workers assigned to each arena in the list.
unsigned my_num_workers_soft_limit
Current application-imposed limit on the number of workers (see set_active_num_workers())
bool is_arena_in_list(arena_list_type &arenas, arena *a)
version_type version() const __TBB_override
policy_type policy() const __TBB_override
static market * theMarket
Currently active global market.
void process(job &j) __TBB_override
static unsigned max_num_workers()
void detach_arena(arena &)
Removes the arena from the market's list.
spin_rw_mutex arenas_list_mutex_type
Lightweight mutex guarding accounting operations with arenas list.
void acknowledge_close_connection() __TBB_override
T __TBB_load_with_acquire(const volatile T &location)
unsigned my_workers_soft_limit_to_report
Either workers soft limit to be reported via runtime_warning() or skip_soft_limit_warning.
__TBB_SCHEDULER_MUTEX_TYPE scheduler_mutex_type
Mutex type for global locks in the scheduler.
friend void ITT_DoUnsafeOneTimeInitialization()
void remove_arena_from_list(arena &a)
The scoped locking pattern.
friend class generic_scheduler
rml::tbb_server * my_server
Pointer to the RML server object that services this TBB instance.
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void * lock
unsigned my_public_ref_count
Count of master threads attached.
Work stealing task scheduler.
void destroy()
Destroys and deallocates market object created by market::create()
scheduler_mutex_type global_market_mutex_type
intrusive_list< arena > arena_list_type
static const unsigned skip_soft_limit_warning
The value indicating that the soft limit warning is unnecessary.
int my_total_demand
Number of workers that were requested by all arenas.
size_t my_stack_size
Stack size of worker threads.
static unsigned app_parallelism_limit()
Reports active parallelism level according to user's settings.
arena * arena_in_need(arena *)
Returns next arena that needs more workers, or NULL.
size_t worker_stack_size() const
Returns the requested stack size of worker threads.
static arena * create_arena(int num_slots, int num_reserved_slots, size_t stack_size)
Creates an arena object.
arenas_list_mutex_type my_arenas_list_mutex
int my_num_workers_requested
Number of workers currently requested from RML.
size_t min_stack_size() const __TBB_override
job * create_one_job() __TBB_override
atomic< unsigned > my_first_unused_worker_idx
First unused index of worker.
A scheduler with a customized evaluation loop.
Base class for types that should not be copied or assigned.
void adjust_demand(arena &, int delta)
Request that arena's need in workers should be adjusted.
static global_market_mutex_type theMarketMutex
Mutex guarding creation/destruction of theMarket, insertions/deletions in my_arenas,...
void try_destroy_arena(arena *, uintptr_t aba_epoch)
Removes the arena from the market's list.
Copyright © 2005-2019 Intel Corporation. All Rights Reserved.
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
subsidiaries in the United States and other countries.
* Other names and brands may be claimed as the property of others.