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

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.