Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
tbb_main.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2005-2019 Intel Corporation
3 
4  Licensed under the Apache License, Version 2.0 (the "License");
5  you may not use this file except in compliance with the License.
6  You may obtain a copy of the License at
7 
8  http://www.apache.org/licenses/LICENSE-2.0
9 
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15 
16 
17 
18 
19 */
20 
21 #include "tbb/tbb_config.h"
22 #include "tbb/global_control.h"
23 #include "tbb_main.h"
24 #include "governor.h"
25 #include "market.h"
26 #include "tbb_misc.h"
27 #include "itt_notify.h"
28 
29 namespace tbb {
30 namespace internal {
31 
32 //------------------------------------------------------------------------
33 // Begin shared data layout.
34 // The following global data items are mostly read-only after initialization.
35 //------------------------------------------------------------------------
36 
38 static const char _pad[NFS_MaxLineSize - sizeof(int)] = {};
39 
40 //------------------------------------------------------------------------
41 // governor data
44 rml::tbb_factory governor::theRMLServerFactory;
48 
49 //------------------------------------------------------------------------
50 // market data
53 
54 //------------------------------------------------------------------------
55 // One time initialization data
56 
59 
61 
64 
65 #if DO_ITT_NOTIFY
66  static bool ITT_Present;
67  static atomic<bool> ITT_InitializationDone;
68 #endif
69 
70 #if !(_WIN32||_WIN64) || __TBB_SOURCE_DIRECTLY_INCLUDED
72 #endif
73 
74 //------------------------------------------------------------------------
75 // generic_scheduler data
76 
78 generic_scheduler* (*AllocateSchedulerPtr)( market& );
79 
80 #if __TBB_OLD_PRIMES_RNG
81 
84 static const unsigned Primes[] = {
85  0x9e3779b1, 0xffe6cc59, 0x2109f6dd, 0x43977ab5,
86  0xba5703f5, 0xb495a877, 0xe1626741, 0x79695e6b,
87  0xbc98c09f, 0xd5bee2b3, 0x287488f9, 0x3af18231,
88  0x9677cd4d, 0xbe3a6929, 0xadc6a877, 0xdcf0674b,
89  0xbe4d6fe9, 0x5f15e201, 0x99afc3fd, 0xf3f16801,
90  0xe222cfff, 0x24ba5fdb, 0x0620452d, 0x79f149e3,
91  0xc8b93f49, 0x972702cd, 0xb07dd827, 0x6c97d5ed,
92  0x085a3d61, 0x46eb5ea7, 0x3d9910ed, 0x2e687b5b,
93  0x29609227, 0x6eb081f1, 0x0954c4e1, 0x9d114db9,
94  0x542acfa9, 0xb3e6bd7b, 0x0742d917, 0xe9f3ffa7,
95  0x54581edb, 0xf2480f45, 0x0bb9288f, 0xef1affc7,
96  0x85fa0ca7, 0x3ccc14db, 0xe6baf34b, 0x343377f7,
97  0x5ca19031, 0xe6d9293b, 0xf0a9f391, 0x5d2e980b,
98  0xfc411073, 0xc3749363, 0xb892d829, 0x3549366b,
99  0x629750ad, 0xb98294e5, 0x892d9483, 0xc235baf3,
100  0x3d2402a3, 0x6bdef3c9, 0xbec333cd, 0x40c9520f
101 };
102 
103 //------------------------------------------------------------------------
104 // End of shared data layout
105 //------------------------------------------------------------------------
106 
107 //------------------------------------------------------------------------
108 // Shared data accessors
109 //------------------------------------------------------------------------
110 
111 unsigned GetPrime ( unsigned seed ) {
112  return Primes[seed%(sizeof(Primes)/sizeof(Primes[0]))];
113 }
114 #endif //__TBB_OLD_PRIMES_RNG
115 
116 //------------------------------------------------------------------------
117 // __TBB_InitOnce
118 //------------------------------------------------------------------------
119 
121  if( ++count==1 )
123 }
124 
126  int k = --count;
127  __TBB_ASSERT(k>=0,"removed __TBB_InitOnce ref that was not added?");
128  if( k==0 ) {
130  ITT_FINI_ITTLIB();
131  }
132 }
133 
134 //------------------------------------------------------------------------
135 // One-time Initializations
136 //------------------------------------------------------------------------
137 
140 
142 void Scheduler_OneTimeInitialization ( bool itt_present );
143 
144 #if DO_ITT_NOTIFY
145 
146 static __itt_domain *tbb_domains[ITT_NUM_DOMAINS] = {};
147 
148 struct resource_string {
149  const char *str;
150  __itt_string_handle *itt_str_handle;
151 };
152 
153 //
154 // populate resource strings
155 //
156 #define TBB_STRING_RESOURCE( index_name, str ) { str, NULL },
157 static resource_string strings_for_itt[] = {
158  #include "tbb/internal/_tbb_strings.h"
159  { "num_resource_strings", NULL }
160 };
161 #undef TBB_STRING_RESOURCE
162 
163 static __itt_string_handle *ITT_get_string_handle(int idx) {
164  __TBB_ASSERT( idx >= 0 && idx < NUM_STRINGS, "string handle out of valid range");
165  return (idx >= 0 && idx < NUM_STRINGS) ? strings_for_itt[idx].itt_str_handle : NULL;
166 }
167 
168 static void ITT_init_domains() {
169  tbb_domains[ITT_DOMAIN_MAIN] = __itt_domain_create( _T("tbb") );
170  tbb_domains[ITT_DOMAIN_MAIN]->flags = 1;
171  tbb_domains[ITT_DOMAIN_FLOW] = __itt_domain_create( _T("tbb.flow") );
172  tbb_domains[ITT_DOMAIN_FLOW]->flags = 1;
173  tbb_domains[ITT_DOMAIN_ALGO] = __itt_domain_create( _T("tbb.algorithm") );
174  tbb_domains[ITT_DOMAIN_ALGO]->flags = 1;
175 }
176 
177 static void ITT_init_strings() {
178  for ( int i = 0; i < NUM_STRINGS; ++i ) {
179 #if _WIN32||_WIN64
180  strings_for_itt[i].itt_str_handle = __itt_string_handle_createA( strings_for_itt[i].str );
181 #else
182  strings_for_itt[i].itt_str_handle = __itt_string_handle_create( strings_for_itt[i].str );
183 #endif
184  }
185 }
186 
187 static void ITT_init() {
188  ITT_init_domains();
189  ITT_init_strings();
190 }
191 
194 void ITT_DoUnsafeOneTimeInitialization () {
195  // Double check ITT_InitializationDone is necessary because the first check
196  // in ITT_DoOneTimeInitialization is not guarded with the __TBB_InitOnce lock.
197  if ( !ITT_InitializationDone ) {
198  ITT_Present = (__TBB_load_ittnotify()!=0);
199  if (ITT_Present) ITT_init();
200  ITT_InitializationDone = true;
201  ITT_SYNC_CREATE(&market::theMarketMutex, SyncType_GlobalLock, SyncObj_SchedulerInitialization);
202  }
203 }
204 
207 extern "C"
208 void ITT_DoOneTimeInitialization() {
209  if ( !ITT_InitializationDone ) {
211  ITT_DoUnsafeOneTimeInitialization();
213  }
214 }
215 #endif /* DO_ITT_NOTIFY */
216 
221  // No fence required for load of InitializationDone, because we are inside a critical section.
224  if( GetBoolEnvironmentVariable("TBB_VERSION") )
225  PrintVersion();
226  bool itt_present = false;
227 #if DO_ITT_NOTIFY
228  ITT_DoUnsafeOneTimeInitialization();
229  itt_present = ITT_Present;
230 #endif /* DO_ITT_NOTIFY */
233  Scheduler_OneTimeInitialization( itt_present );
234  // Force processor groups support detection
236  // Dump version data
238  PrintExtraVersionInfo( "Tools support", itt_present ? "enabled" : "disabled" );
240  }
242 }
243 
244 #if (_WIN32||_WIN64) && !__TBB_SOURCE_DIRECTLY_INCLUDED
245 extern "C" bool WINAPI DllMain( HANDLE /*hinstDLL*/, DWORD reason, LPVOID lpvReserved ) {
247  switch( reason ) {
248  case DLL_PROCESS_ATTACH:
250  break;
251  case DLL_PROCESS_DETACH:
252  // Since THREAD_DETACH is not called for the main thread, call auto-termination
253  // here as well - but not during process shutdown (due to risk of a deadlock).
254  if( lpvReserved==NULL ) // library unload
257  // It is assumed that InitializationDone is not set after DLL_PROCESS_DETACH,
258  // and thus no race on InitializationDone is possible.
260  // Remove reference that we added in DoOneTimeInitializations.
262  }
263  break;
264  case DLL_THREAD_DETACH:
266  break;
267  }
268  return true;
269 }
270 #endif /* (_WIN32||_WIN64) && !__TBB_SOURCE_DIRECTLY_INCLUDED */
271 
272 void itt_store_pointer_with_release_v3( void* dst, void* src ) {
274  __TBB_store_with_release(*static_cast<void**>(dst),src);
275 }
276 
277 void* itt_load_pointer_with_acquire_v3( const void* src ) {
278  void* result = __TBB_load_with_acquire(*static_cast<void*const*>(src));
279  ITT_NOTIFY(sync_acquired, const_cast<void*>(src));
280  return result;
281 }
282 
283 #if DO_ITT_NOTIFY
284 void call_itt_notify_v5(int t, void *ptr) {
285  switch (t) {
286  case 0: ITT_NOTIFY(sync_prepare, ptr); break;
287  case 1: ITT_NOTIFY(sync_cancel, ptr); break;
288  case 2: ITT_NOTIFY(sync_acquired, ptr); break;
289  case 3: ITT_NOTIFY(sync_releasing, ptr); break;
290  }
291 }
292 #else
293 void call_itt_notify_v5(int /*t*/, void* /*ptr*/) {}
294 #endif
295 
296 #if DO_ITT_NOTIFY
297 const __itt_id itt_null_id = {0, 0, 0};
298 
299 static inline __itt_domain* get_itt_domain( itt_domain_enum idx ) {
300  if (tbb_domains[idx] == NULL) {
301  ITT_DoOneTimeInitialization();
302  }
303  return tbb_domains[idx];
304 }
305 
306 static inline void itt_id_make(__itt_id *id, void* addr, unsigned long long extra) {
307  *id = __itt_id_make(addr, extra);
308 }
309 
310 static inline void itt_id_create(const __itt_domain *domain, __itt_id id) {
311  ITTNOTIFY_VOID_D1(id_create, domain, id);
312 }
313 
314 void itt_make_task_group_v7( itt_domain_enum domain, void *group, unsigned long long group_extra,
315  void *parent, unsigned long long parent_extra, string_index name_index ) {
316  if ( __itt_domain *d = get_itt_domain( domain ) ) {
317  __itt_id group_id = itt_null_id;
318  __itt_id parent_id = itt_null_id;
319  itt_id_make( &group_id, group, group_extra );
320  itt_id_create( d, group_id );
321  if ( parent ) {
322  itt_id_make( &parent_id, parent, parent_extra );
323  }
324  __itt_string_handle *n = ITT_get_string_handle(name_index);
325  ITTNOTIFY_VOID_D3(task_group, d, group_id, parent_id, n);
326  }
327 }
328 
329 void itt_metadata_str_add_v7( itt_domain_enum domain, void *addr, unsigned long long addr_extra,
330  string_index key, const char *value ) {
331  if ( __itt_domain *d = get_itt_domain( domain ) ) {
332  __itt_id id = itt_null_id;
333  itt_id_make( &id, addr, addr_extra );
334  __itt_string_handle *k = ITT_get_string_handle(key);
335  size_t value_length = strlen( value );
336 #if _WIN32||_WIN64
337  ITTNOTIFY_VOID_D4(metadata_str_addA, d, id, k, value, value_length);
338 #else
339  ITTNOTIFY_VOID_D4(metadata_str_add, d, id, k, value, value_length);
340 #endif
341  }
342 }
343 
344 void itt_relation_add_v7( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra,
345  itt_relation relation, void *addr1, unsigned long long addr1_extra ) {
346  if ( __itt_domain *d = get_itt_domain( domain ) ) {
347  __itt_id id0 = itt_null_id;
348  __itt_id id1 = itt_null_id;
349  itt_id_make( &id0, addr0, addr0_extra );
350  itt_id_make( &id1, addr1, addr1_extra );
351  ITTNOTIFY_VOID_D3(relation_add, d, id0, (__itt_relation)relation, id1);
352  }
353 }
354 
355 void itt_task_begin_v7( itt_domain_enum domain, void *task, unsigned long long task_extra,
356  void *parent, unsigned long long parent_extra, string_index name_index ) {
357  if ( __itt_domain *d = get_itt_domain( domain ) ) {
358  __itt_id task_id = itt_null_id;
359  __itt_id parent_id = itt_null_id;
360  if ( task ) {
361  itt_id_make( &task_id, task, task_extra );
362  }
363  if ( parent ) {
364  itt_id_make( &parent_id, parent, parent_extra );
365  }
366  __itt_string_handle *n = ITT_get_string_handle(name_index);
367  ITTNOTIFY_VOID_D3(task_begin, d, task_id, parent_id, n );
368  }
369 }
370 
372  if ( __itt_domain *d = get_itt_domain( domain ) ) {
373  ITTNOTIFY_VOID_D0(task_end, d);
374  }
375 }
376 
377 void itt_region_begin_v9( itt_domain_enum domain, void *region, unsigned long long region_extra,
378  void *parent, unsigned long long parent_extra, string_index /* name_index */ ) {
379  if ( __itt_domain *d = get_itt_domain( domain ) ) {
380  __itt_id region_id = itt_null_id;
381  __itt_id parent_id = itt_null_id;
382  itt_id_make( &region_id, region, region_extra );
383  if ( parent ) {
384  itt_id_make( &parent_id, parent, parent_extra );
385  }
386  ITTNOTIFY_VOID_D3(region_begin, d, region_id, parent_id, NULL );
387  }
388 }
389 
390 void itt_region_end_v9( itt_domain_enum domain, void *region, unsigned long long region_extra ) {
391  if ( __itt_domain *d = get_itt_domain( domain ) ) {
392  __itt_id region_id = itt_null_id;
393  itt_id_make( &region_id, region, region_extra );
394  ITTNOTIFY_VOID_D1( region_end, d, region_id );
395  }
396 }
397 
398 #else // DO_ITT_NOTIFY
399 
400 void itt_make_task_group_v7( itt_domain_enum /*domain*/, void* /*group*/, unsigned long long /*group_extra*/,
401  void* /*parent*/, unsigned long long /*parent_extra*/, string_index /*name_index*/ ) { }
402 
403 void itt_metadata_str_add_v7( itt_domain_enum /*domain*/, void* /*addr*/, unsigned long long /*addr_extra*/,
404  string_index /*key*/, const char* /*value*/ ) { }
405 
406 void itt_relation_add_v7( itt_domain_enum /*domain*/, void* /*addr0*/, unsigned long long /*addr0_extra*/,
407  itt_relation /*relation*/, void* /*addr1*/, unsigned long long /*addr1_extra*/ ) { }
408 
409 void itt_task_begin_v7( itt_domain_enum /*domain*/, void* /*task*/, unsigned long long /*task_extra*/,
410  void* /*parent*/, unsigned long long /*parent_extra*/, string_index /*name_index*/ ) { }
411 
412 void itt_task_end_v7( itt_domain_enum /*domain*/ ) { }
413 
414 void itt_region_begin_v9( itt_domain_enum /*domain*/, void* /*region*/, unsigned long long /*region_extra*/,
415  void* /*parent*/, unsigned long long /*parent_extra*/, string_index /*name_index*/ ) { }
416 
417 void itt_region_end_v9( itt_domain_enum /*domain*/, void* /*region*/, unsigned long long /*region_extra*/ ) { }
418 
419 #endif // DO_ITT_NOTIFY
420 
421 void* itt_load_pointer_v3( const void* src ) {
422  //TODO: replace this with __TBB_load_relaxed
423  void* result = *static_cast<void*const*>(src);
424  return result;
425 }
426 
427 void itt_set_sync_name_v3( void* obj, const tchar* name) {
428  ITT_SYNC_RENAME(obj, name);
430 }
431 
432 
435 protected:
439 
440  virtual size_t default_value() const = 0;
441  virtual void apply_active() const {}
442  virtual bool is_first_arg_preferred(size_t a, size_t b) const {
443  return a>b; // prefer max by default
444  }
445  virtual size_t active_value() const {
447  }
448 };
449 
450 class allowed_parallelism_control : public padded<control_storage> {
451  virtual size_t default_value() const __TBB_override {
452  return max(1U, governor::default_num_threads());
453  }
454  virtual bool is_first_arg_preferred(size_t a, size_t b) const __TBB_override {
455  return a<b; // prefer min allowed parallelism
456  }
457  virtual void apply_active() const __TBB_override {
458  __TBB_ASSERT( my_active_value>=1, NULL );
459  // -1 to take master into account
461  }
462  virtual size_t active_value() const __TBB_override {
463 /* Reading of my_active_value is not synchronized with possible updating
464  of my_head by other thread. It's ok, as value of my_active_value became
465  not invalid, just obsolete. */
466  if (!my_head)
467  return default_value();
468  // non-zero, if market is active
469  const size_t workers = market::max_num_workers();
470  // We can't exceed market's maximal number of workers.
471  // +1 to take master into account
472  return workers? min(workers+1, my_active_value): my_active_value;
473  }
474 public:
475  size_t active_value_if_present() const {
476  return my_head? my_active_value : 0;
477  }
478 };
479 
480 class stack_size_control : public padded<control_storage> {
481  virtual size_t default_value() const __TBB_override {
483  }
484  virtual void apply_active() const __TBB_override {
485 #if __TBB_WIN8UI_SUPPORT && (_WIN32_WINNT < 0x0A00)
486  __TBB_ASSERT( false, "For Windows 8 Store* apps we must not set stack size" );
487 #endif
488  }
489 };
490 
493 
495 
498 }
499 
500 } // namespace internal
501 
502 namespace interface9 {
503 
504 using namespace internal;
505 using namespace tbb::internal;
506 
509  control_storage *const c = controls[my_param];
510 
512  if (!c->my_head || c->is_first_arg_preferred(my_value, c->my_active_value)) {
513  c->my_active_value = my_value;
514  // to guarantee that apply_active() is called with current active value,
515  // calls it here and in internal_destroy() under my_list_mutex
516  c->apply_active();
517  }
518  my_next = c->my_head;
519  // publish my_head, at this point my_active_value must be valid
520  c->my_head = this;
521 }
522 
524  global_control *prev = 0;
525 
527  control_storage *const c = controls[my_param];
528  __TBB_ASSERT( c->my_head, NULL );
529 
530  // Concurrent reading and changing global parameter is possible.
531  // In this case, my_active_value may not match current state of parameters.
532  // This is OK because:
533  // 1) my_active_value is either current or previous
534  // 2) my_active_value is current on internal_destroy leave
536  size_t new_active = (size_t)-1, old_active = c->my_active_value;
537 
538  if ( c->my_head != this )
539  new_active = c->my_head->my_value;
540  else if ( c->my_head->my_next )
541  new_active = c->my_head->my_next->my_value;
542  // if there is only one element, new_active will be set later
543  for ( global_control *curr = c->my_head; curr; prev = curr, curr = curr->my_next )
544  if ( curr == this ) {
545  if ( prev )
546  prev->my_next = my_next;
547  else
548  c->my_head = my_next;
549  } else
550  if (c->is_first_arg_preferred(curr->my_value, new_active))
551  new_active = curr->my_value;
552 
553  if ( !c->my_head ) {
554  __TBB_ASSERT( new_active==(size_t)-1, NULL );
555  new_active = c->default_value();
556  }
557  if ( new_active != old_active ) {
558  c->my_active_value = new_active;
559  c->apply_active();
560  }
561 }
562 
563 size_t global_control::active_value( int param ) {
565  return controls[param]->active_value();
566 }
567 
568 } // tbb::interface9
569 } // namespace tbb
void __TBB_EXPORTED_FUNC itt_task_end_v7(itt_domain_enum domain)
Definition: tbb_main.cpp:412
static bool is_rethrow_broken
Definition: governor.h:69
virtual void apply_active() const __TBB_override
Definition: tbb_main.cpp:457
#define __TBB_override
Definition: tbb_stddef.h:244
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 * domain
void __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3(void *dst, void *src)
Definition: tbb_main.cpp:272
__TBB_atomic __TBB_Flag __TBB_atomic_flag
Definition: gcc_generic.h:110
static void terminate_auto_initialized_scheduler()
Undo automatic initialization if necessary; call when a thread exits.
Definition: governor.h:141
void __TBB_EXPORTED_METHOD internal_create()
Definition: tbb_main.cpp:507
static bool InitializationDone
Specifies if the one-time initializations has been done.
Definition: tbb_main.h:54
static void print_version_info()
Definition: governor.cpp:231
Class that supports TBB initialization.
Definition: tbb_main.h:41
void __TBB_EXPORTED_METHOD internal_destroy()
Definition: tbb_main.cpp:523
T __TBB_load_with_acquire(const volatile T &location)
Definition: tbb_machine.h:713
virtual void apply_active() const __TBB_override
Definition: tbb_main.cpp:484
static market * theMarket
Currently active global market.
Definition: market.h:62
void __TBB_EXPORTED_FUNC itt_task_begin_v7(itt_domain_enum domain, void *task, unsigned long long task_extra, void *parent, unsigned long long parent_extra, string_index name_index)
Definition: tbb_main.cpp:409
static atomic< int > count
Counter of references to global shared resources such as TLS.
Definition: tbb_main.h:45
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
__itt_string_handle *ITTAPI __itt_string_handle_createA(const char *name)
Create a string handle. Create and return handle value that can be associated with a string....
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 __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p task_end
static __TBB_atomic_flag InitializationLock
Global initialization lock.
Definition: tbb_main.h:61
#define ITT_SYNC_CREATE(obj, type, name)
Definition: itt_notify.h:123
__itt_relation
The kind of relation between two instances is specified by the enumerated type __itt_relation....
Definition: ittnotify.h:2594
#define __itt_domain_create
Definition: ittnotify.h:1714
void __TBB_EXPORTED_FUNC call_itt_notify_v5(int t, void *ptr)
Definition: tbb_main.cpp:293
void suppress_unused_warning(const T1 &)
Utility template function to prevent "unused" warnings by various compilers.
Definition: tbb_stddef.h:381
static control_storage * controls[]
Definition: tbb_main.cpp:494
static unsigned default_num_threads()
Definition: governor.h:85
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
static void release_resources()
Destroy the thread-local storage key and deinitialize RML.
Definition: governor.cpp:83
static void add_ref()
Add reference to resources. If first reference added, acquire the resources.
Definition: tbb_main.cpp:120
int __TBB_load_ittnotify()
virtual size_t default_value() const __TBB_override
Definition: tbb_main.cpp:481
virtual bool is_first_arg_preferred(size_t a, size_t b) const __TBB_override
Definition: tbb_main.cpp:454
T min(const T &val1, const T &val2)
Utility template function returning lesser of the two values.
Definition: tbb_misc.h:107
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 __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation relation
void * addr
void PrintExtraVersionInfo(const char *category, const char *format,...)
Prints arbitrary extra TBB version information on stderr.
Definition: tbb_misc.cpp:202
Work stealing task scheduler.
Definition: scheduler.h:124
static rml::tbb_factory theRMLServerFactory
Definition: governor.h:63
virtual void apply_active() const
Definition: tbb_main.cpp:441
atomic< global_control * > my_head
Definition: tbb_main.cpp:437
A lock that occupies a single byte.
Definition: spin_mutex.h:40
static bool UsePrivateRML
Definition: governor.h:65
void *__TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3(const void *src)
Definition: tbb_main.cpp:277
const size_t ThreadStackSize
Definition: tbb_misc.h:53
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 region_begin
static size_t active_value(parameter p)
static global_market_mutex_type theMarketMutex
Mutex guarding creation/destruction of theMarket, insertions/deletions in my_arenas,...
Definition: market.h:67
void __TBB_EXPORTED_FUNC itt_region_begin_v9(itt_domain_enum domain, void *region, unsigned long long region_extra, void *parent, unsigned long long parent_extra, string_index name_index)
Definition: tbb_main.cpp:414
#define __itt_string_handle_create
Definition: ittnotify.h:1903
static const char _pad[NFS_MaxLineSize - sizeof(int)]
Padding in order to prevent false sharing.
Definition: tbb_main.cpp:38
static bool is_speculation_enabled
Definition: governor.h:68
T max(const T &val1, const T &val2)
Utility template function returning greater of the two values.
Definition: tbb_misc.h:116
static void acquire_resources()
Create key for thread-local storage and initialize RML.
Definition: governor.cpp:71
void PrintVersion()
Prints TBB version information on stderr.
Definition: tbb_misc.cpp:197
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
static bool initialization_done()
Definition: tbb_main.h:68
virtual size_t active_value() const
Definition: tbb_main.cpp:445
scheduler_mutex_type global_market_mutex_type
Definition: market.h:64
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
void __TBB_EXPORTED_FUNC itt_relation_add_v7(itt_domain_enum domain, void *addr0, unsigned long long addr0_extra, itt_relation relation, void *addr1, unsigned long long addr1_extra)
Definition: tbb_main.cpp:406
static void initialize_rml_factory()
Definition: governor.cpp:244
void initialize_cache_aligned_allocator()
Defined in cache_aligned_allocator.cpp.
static void remove_ref()
Remove reference to resources. If last reference removed, release the resources.
Definition: tbb_main.cpp:125
#define ITT_SYNC_RENAME(obj, name)
Definition: itt_notify.h:124
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 sync_cancel
The graph class.
virtual size_t default_value() const =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 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 __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu relation_add
static basic_tls< uintptr_t > theTLS
TLS for scheduler instances associated with individual threads.
Definition: governor.h:58
virtual size_t active_value() const __TBB_override
Definition: tbb_main.cpp:462
#define _T(string_literal)
Standard Windows style macro to markup the string literals.
Definition: itt_notify.h:66
static unsigned DefaultNumberOfThreads
Caches the maximal level of parallelism supported by the hardware.
Definition: governor.h:61
Represents acquisition of a mutex.
Definition: spin_mutex.h:54
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 __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value
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
void DoOneTimeInitializations()
Performs thread-safe lazy one-time general TBB initialization.
Definition: tbb_main.cpp:218
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 __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle * key
#define __TBB_ASSERT_RELEASE(predicate, message)
Definition: tbb_stddef.h:138
static unsigned app_parallelism_limit()
Reports active parallelism level according to user's settings.
Definition: tbb_main.cpp:496
static unsigned max_num_workers()
Definition: market.h:361
#define ITT_NOTIFY(name, obj)
Definition: itt_notify.h:120
void __TBB_EXPORTED_FUNC itt_region_end_v9(itt_domain_enum domain, void *region, unsigned long long region_extra)
Definition: tbb_main.cpp:417
const size_t NFS_MaxLineSize
Compile-time constant that is upper bound on cache line/sector size.
Definition: tbb_stddef.h:220
static allowed_parallelism_control allowed_parallelism_ctl
Definition: tbb_main.cpp:491
unsigned GetPrime(unsigned seed)
virtual size_t default_value() const __TBB_override
Definition: tbb_main.cpp:451
virtual bool is_first_arg_preferred(size_t a, size_t b) const
Definition: tbb_main.cpp:442
void Scheduler_OneTimeInitialization(bool itt_present)
Defined in scheduler.cpp.
Definition: scheduler.cpp:56
ITT_INLINE __itt_id ITTAPI __itt_id_make(void *addr, unsigned long long extra) ITT_INLINE_ATTRIBUTE
A convenience function is provided to create an ID without domain control.
Definition: ittnotify.h:1793
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 __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark d int
static __TBB_InitOnce __TBB_InitOnceHiddenInstance
Definition: tbb_main.cpp:71
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 __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu task_begin
char tchar
Unicode support.
Definition: itt_notify.h:64
void *__TBB_EXPORTED_FUNC itt_load_pointer_v3(const void *src)
Definition: tbb_main.cpp:421
static void set_active_num_workers(unsigned w)
Set number of active workers.
Definition: market.cpp:221
static stack_size_control stack_size_ctl
Definition: tbb_main.cpp:492
static bool GetBoolEnvironmentVariable(const char *name)
void itt_set_sync_name_v3(void *obj, const tchar *name)
Definition: tbb_main.cpp:427
Identifiers declared inside namespace internal should never be used directly by client code.
Definition: atomic.h:55
void const char const char int ITT_FORMAT __itt_group_sync x void const char * name
void __TBB_EXPORTED_FUNC itt_metadata_str_add_v7(itt_domain_enum domain, void *addr, unsigned long long addr_extra, string_index key, const char *value)
Definition: tbb_main.cpp:403
void __TBB_store_with_release(volatile T &location, V value)
Definition: tbb_machine.h:717
#define ITT_FINI_ITTLIB()
Definition: itt_notify.h:122
Pads type T to fill out to a multiple of cache line size.
Definition: tbb_stddef.h:265
void __TBB_EXPORTED_FUNC itt_make_task_group_v7(itt_domain_enum domain, void *group, unsigned long long group_extra, void *parent, unsigned long long parent_extra, string_index name_index)
Definition: tbb_main.cpp:400

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.