41 __TBB_ASSERT( v,
"thread did not activate a task_scheduler_init object?" );
42 #if __TBB_TASK_GROUP_CONTEXT 53 __TBB_ASSERT( v,
"thread does not have initialized task_scheduler_init object?" );
54 #if __TBB_TASK_GROUP_CONTEXT 60 #if __TBB_TASK_GROUP_CONTEXT 66 __TBB_ASSERT( s,
"Scheduler auto-initialization failed?" );
67 __TBB_ASSERT( &my_context,
"allocate_root(context) argument is a dereferenced NULL pointer" );
68 task& t = s->allocate_task( size, NULL, &my_context );
75 if ( s->master_outermost_level() )
78 my_context.bind_to( s );
83 my_context.copy_fp_settings( *s->default_context() );
91 __TBB_ASSERT( v,
"thread does not have initialized task_scheduler_init object?" );
101 task* t = (task*)
this;
105 t->
prefix().parent = NULL;
111 ((task*)
this)->prefix().parent = mytask.
parent();
119 task* t = (task*)
this;
133 parent.increment_ref_count();
146 parent.internal_decrement_ref_count();
154 const size_t X_FACTOR = 4;
164 if( new_size!=my_size ) {
173 memset( my_array, 0,
sizeof(
affinity_id)*new_size );
199 __TBB_ASSERT( k>=1,
"task's reference count underflowed" );
201 ITT_NOTIFY( sync_acquired, &prefix().ref_count );
220 __TBB_ASSERT( (intptr_t)victim.
prefix().ref_count <= 1,
"Task being destroyed must not have children" );
226 "attempt to destroy child of running or corrupted parent?" );
229 parent->internal_decrement_ref_count();
252 #if __TBB_TASK_GROUP_CONTEXT 254 prefix().context = &ctx;
260 if ( s->master_outermost_level() )
task &__TBB_EXPORTED_METHOD allocate(size_t size) const
__TBB_atomic kind_type my_kind
Flavor of this context: bound or isolated.
void *__TBB_EXPORTED_FUNC NFS_Allocate(size_t n_element, size_t element_size, void *hint)
Allocate memory on cache/sector line boundary.
#define __TBB_CONTEXT_ARG(arg1, context)
void clear()
Clear the list.
unsigned max_threads_in_arena()
Returns the concurrency limit of the current arena.
unsigned short affinity_id
An id as used for specifying affinity.
void local_spawn(task *first, task *&next)
Work stealing task scheduler.
Set if ref_count might be changed by another thread. Used for debugging.
Memory prefix to a task object.
#define __TBB_FetchAndDecrementWrelease(P)
void __TBB_EXPORTED_METHOD change_group(task_group_context &ctx)
Moves this task from its current group into another one.
Disable caching for a small task.
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Task is known to have been allocated by this scheduler.
static generic_scheduler * local_scheduler()
Obtain the thread-local instance of the TBB scheduler.
void __TBB_EXPORTED_METHOD free(task &) const
task & allocate_task(size_t number_of_bytes, __TBB_CONTEXT_ARG(task *parent, task_group_context *context))
Allocate task object, either from the heap or a free list.
task * my_innermost_running_task
Innermost task whose task::execute() is running. A dummy task on the outermost level.
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 ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t new_size
bool __TBB_EXPORTED_METHOD is_owned_by_current_thread() const
Obsolete, and only retained for the sake of backward compatibility. Always returns true...
__TBB_atomic reference_count ref_count
Reference count used for synchronization.
void free_task(task &t)
Put task on free list.
static void __TBB_EXPORTED_FUNC free(task &)
internal::affinity_id affinity_id
An id as used for specifying affinity.
virtual void __TBB_EXPORTED_METHOD note_affinity(affinity_id id)
Invoked by scheduler to notify task that it ran on unexpected thread.
task &__TBB_EXPORTED_METHOD allocate(size_t size) const
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 ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t count
task &__TBB_EXPORTED_METHOD allocate(size_t size) const
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
void const char const char int ITT_FORMAT __itt_group_sync p
void __TBB_store_relaxed(volatile T &location, V value)
void __TBB_EXPORTED_METHOD resize(unsigned factor)
Resize my_array.
task is in ready pool, or is going to be put there, or was just taken off.
__itt_caller itt_caller
Used to set and maintain stack stitching point for Intel Performance Tools.
static task &__TBB_EXPORTED_FUNC allocate(size_t size)
void __TBB_EXPORTED_METHOD internal_set_ref_count(int count)
Set reference count.
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 * task
state_type state() const
Current execution state.
unsigned char extra_state
Miscellaneous state that is not directly visible to users, stored as a byte for compactness.
unsigned char state
A task::state_type, stored as a byte for compactness.
static const kind_type binding_required
task * parent() const
task on whose behalf this task is working, or NULL if this is a root.
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 ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id parent
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 sync_releasing
internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count()
Decrement reference count and return its new value.
Used to form groups of tasks.
uintptr_t my_version_and_traits
Version for run-time checks and behavioral traits of the context.
#define ITT_NOTIFY(name, obj)
size_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor()
void const char const char int ITT_FORMAT __itt_group_sync s
static void __TBB_EXPORTED_FUNC destroy(task &victim)
Destroy a task.
T __TBB_load_relaxed(const volatile T &location)
void __TBB_EXPORTED_FUNC NFS_Free(void *)
Free memory allocated by NFS_Allocate.
void copy_fp_settings(const task_group_context &src)
Copies FPU control setting from another context.
virtual void local_wait_for_all(task &parent, task *child)=0
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 size
Base class for user-defined tasks.
void __TBB_EXPORTED_METHOD free(task &) const
void spawn_and_wait_for_all(task &child)
Similar to spawn followed by wait_for_all, but more efficient.
intptr_t reference_count
A reference count.
task_group_context * context
Shared context that is used to communicate asynchronous state changes.
void __TBB_EXPORTED_METHOD free(task &) const
void assert_task_valid(const task *)
task object is on free list, or is going to be put there, or was just taken off.
static task &__TBB_EXPORTED_FUNC self()
The innermost task being executed or destroyed by the current thread at the moment.
Identifiers declared inside namespace internal should never be used directly by client code...
void bind_to(internal::generic_scheduler *local_sched)
Registers this context with the local scheduler and binds it to its parent context.
static generic_scheduler * local_scheduler_weak()
task &__TBB_EXPORTED_METHOD allocate(size_t size) const
void assert_task_pool_valid() const
task object is freshly allocated or recycled.
void __TBB_EXPORTED_METHOD free(task &) const
#define ITT_STACK_CREATE(obj)
virtual ~task()
Destructor.