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

Copyright © 2005-2020 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.