16#include "kmp_config.h"
39#define KMP_DEVELOPER_STATS 0
42#define KMP_STATS_HIST 0
51 onlyInMaster = 1 << 1,
95#define KMP_FOREACH_COUNTER(macro, arg) \
96 macro(OMP_PARALLEL,stats_flags_e::onlyInMaster|stats_flags_e::noTotal,arg) \
97 macro(OMP_NESTED_PARALLEL, 0, arg) \
98 macro(OMP_LOOP_STATIC, 0, arg) \
99 macro(OMP_LOOP_STATIC_STEAL, 0, arg) \
100 macro(OMP_LOOP_DYNAMIC, 0, arg) \
101 macro(OMP_DISTRIBUTE, 0, arg) \
102 macro(OMP_BARRIER, 0, arg) \
103 macro(OMP_CRITICAL, 0, arg) \
104 macro(OMP_SINGLE, 0, arg) \
105 macro(OMP_SECTIONS, 0, arg) \
106 macro(OMP_MASTER, 0, arg) \
107 macro(OMP_MASKED, 0, arg) \
108 macro(OMP_TEAMS, 0, arg) \
109 macro(OMP_set_lock, 0, arg) \
110 macro(OMP_test_lock, 0, arg) \
111 macro(REDUCE_wait, 0, arg) \
112 macro(REDUCE_nowait, 0, arg) \
113 macro(OMP_TASKYIELD, 0, arg) \
114 macro(OMP_TASKLOOP, 0, arg) \
115 macro(TASK_executed, 0, arg) \
116 macro(TASK_cancelled, 0, arg) \
117 macro(TASK_stolen, 0, arg)
139#define KMP_FOREACH_TIMER(macro, arg) \
140 macro (OMP_worker_thread_life, stats_flags_e::logEvent, arg) \
141 macro (OMP_parallel, stats_flags_e::logEvent, arg) \
142 macro (OMP_parallel_overhead, stats_flags_e::logEvent, arg) \
143 macro (OMP_teams, stats_flags_e::logEvent, arg) \
144 macro (OMP_teams_overhead, stats_flags_e::logEvent, arg) \
145 macro (OMP_loop_static, 0, arg) \
146 macro (OMP_loop_static_scheduling, 0, arg) \
147 macro (OMP_loop_dynamic, 0, arg) \
148 macro (OMP_loop_dynamic_scheduling, 0, arg) \
149 macro (OMP_distribute, 0, arg) \
150 macro (OMP_distribute_scheduling, 0, arg) \
151 macro (OMP_critical, 0, arg) \
152 macro (OMP_critical_wait, 0, arg) \
153 macro (OMP_single, 0, arg) \
154 macro (OMP_sections, 0, arg) \
155 macro (OMP_sections_overhead, 0, arg) \
156 macro (OMP_master, 0, arg) \
157 macro (OMP_masked, 0, arg) \
158 macro (OMP_task_immediate, 0, arg) \
159 macro (OMP_task_taskwait, 0, arg) \
160 macro (OMP_task_taskyield, 0, arg) \
161 macro (OMP_task_taskgroup, 0, arg) \
162 macro (OMP_task_join_bar, 0, arg) \
163 macro (OMP_task_plain_bar, 0, arg) \
164 macro (OMP_taskloop_scheduling, 0, arg) \
165 macro (OMP_plain_barrier, stats_flags_e::logEvent, arg) \
166 macro (OMP_idle, stats_flags_e::logEvent, arg) \
167 macro (OMP_fork_barrier, stats_flags_e::logEvent, arg) \
168 macro (OMP_join_barrier, stats_flags_e::logEvent, arg) \
169 macro (OMP_serial, stats_flags_e::logEvent, arg) \
170 macro (OMP_set_numthreads, stats_flags_e::noUnits | stats_flags_e::noTotal, \
172 macro (OMP_PARALLEL_args, stats_flags_e::noUnits | stats_flags_e::noTotal, \
174 macro (OMP_loop_static_iterations, \
175 stats_flags_e::noUnits | stats_flags_e::noTotal, arg) \
176 macro (OMP_loop_static_total_iterations, \
177 stats_flags_e::noUnits | stats_flags_e::noTotal, arg) \
178 macro (OMP_loop_dynamic_iterations, \
179 stats_flags_e::noUnits | stats_flags_e::noTotal, arg) \
180 macro (OMP_loop_dynamic_total_iterations, \
181 stats_flags_e::noUnits | stats_flags_e::noTotal, arg) \
182 macro (OMP_distribute_iterations, \
183 stats_flags_e::noUnits | stats_flags_e::noTotal, arg) \
184 KMP_FOREACH_DEVELOPER_TIMER(macro, arg)
236#if (KMP_DEVELOPER_STATS)
255#define KMP_FOREACH_DEVELOPER_TIMER(macro, arg) \
256 macro(KMP_fork_call, 0, arg) \
257 macro(KMP_join_call, 0, arg) \
258 macro(KMP_end_split_barrier, 0, arg) \
259 macro(KMP_hier_gather, 0, arg) \
260 macro(KMP_hier_release, 0, arg) \
261 macro(KMP_hyper_gather, 0, arg) \
262 macro(KMP_hyper_release, 0, arg) \
263 macro(KMP_dist_gather, 0, arg) \
264 macro(KMP_dist_release, 0, arg) \
265 macro(KMP_linear_gather, 0, arg) \
266 macro(KMP_linear_release, 0, arg) \
267 macro(KMP_tree_gather, 0, arg) \
268 macro(KMP_tree_release, 0, arg) \
269 macro(USER_resume, 0, arg) \
270 macro(USER_suspend, 0, arg) \
271 macro(USER_mwait, 0, arg) \
272 macro(KMP_allocate_team, 0, arg) \
273 macro(KMP_setup_icv_copy, 0, arg) \
274 macro(USER_icv_copy, 0, arg) \
275 macro (FOR_static_steal_stolen, \
276 stats_flags_e::noUnits | stats_flags_e::noTotal, arg) \
277 macro (FOR_static_steal_chunks, \
278 stats_flags_e::noUnits | stats_flags_e::noTotal, arg)
280#define KMP_FOREACH_DEVELOPER_TIMER(macro, arg)
303#define KMP_FOREACH_EXPLICIT_TIMER(macro, arg) KMP_FOREACH_TIMER(macro, arg)
305#define ENUMERATE(name, ignore, prefix) prefix##name,
306enum timer_e { KMP_FOREACH_TIMER(ENUMERATE, TIMER_) TIMER_LAST };
308enum explicit_timer_e {
309 KMP_FOREACH_EXPLICIT_TIMER(ENUMERATE, EXPLICIT_TIMER_) EXPLICIT_TIMER_LAST
312enum counter_e { KMP_FOREACH_COUNTER(ENUMERATE, COUNTER_) COUNTER_LAST };
341 static double binMax[numBins];
347 uint64_t t = zeroCount;
348 for (
int i = 0;
i < numBins;
i++)
353 void check()
const {}
357 logHistogram() { reset(); }
359 logHistogram(logHistogram
const &o) {
360 for (
int i = 0;
i < numBins;
i++)
369 for (
int i = 0;
i < numBins;
i++) {
378 uint32_t
count(
int b)
const {
return bins[
b + logOffset].count; }
379 double total(
int b)
const {
return bins[
b + logOffset].total; }
380 static uint32_t findBin(
double sample);
382 logHistogram &
operator+=(logHistogram
const &o) {
383 zeroCount += o.zeroCount;
384 for (
int i = 0;
i < numBins;
i++) {
385 bins[
i].count += o.bins[
i].count;
386 bins[
i].total += o.bins[
i].total;
396 void addSample(
double sample);
400 std::string format(
char)
const;
408 uint64_t sampleCount;
414 statistic(
bool doHist =
bool(KMP_STATS_HIST)) {
416 collectingHist = doHist;
418 statistic(statistic
const &o)
419 : minVal(o.minVal), maxVal(o.maxVal), meanVal(o.meanVal), m2(o.m2),
420 sampleCount(o.sampleCount), offset(o.offset),
421 collectingHist(o.collectingHist), hist(o.hist) {}
422 statistic(
double minv,
double maxv,
double meanv, uint64_t sc,
double sd)
423 : minVal(minv), maxVal(maxv), meanVal(meanv), m2(sd * sd * sc),
424 sampleCount(sc), offset(0.0), collectingHist(false) {}
425 bool haveHist()
const {
return collectingHist; }
426 double getMin()
const {
return minVal; }
427 double getMean()
const {
return meanVal; }
428 double getMax()
const {
return maxVal; }
429 uint64_t getCount()
const {
return sampleCount; }
430 double getSD()
const {
return sqrt(m2 / sampleCount); }
431 double getTotal()
const {
return sampleCount * meanVal; }
432 logHistogram
const *getHist()
const {
return &hist; }
433 void setOffset(
double d) { offset =
d; }
436 minVal = (std::numeric_limits<double>::max)();
444 void addSample(
double sample);
445 void scale(
double factor);
446 void scaleDown(
double f) { scale(1. /
f); }
447 void forceCount(uint64_t
count) { sampleCount =
count; }
448 statistic &
operator+=(statistic
const &other);
450 std::string format(
char unit,
bool total =
false)
const;
451 std::string formatHist(
char unit)
const {
return hist.format(unit); }
459class timeStat :
public statistic {
460 static statInfo timerInfo[];
463 timeStat() : statistic() {}
464 static const char *
name(timer_e e) {
return timerInfo[e].name; }
465 static bool noTotal(timer_e e) {
466 return timerInfo[e].flags & stats_flags_e::noTotal;
468 static bool masterOnly(timer_e e) {
469 return timerInfo[e].flags & stats_flags_e::onlyInMaster;
471 static bool workerOnly(timer_e e) {
472 return timerInfo[e].flags & stats_flags_e::notInMaster;
474 static bool noUnits(timer_e e) {
475 return timerInfo[e].flags & stats_flags_e::noUnits;
477 static bool logEvent(timer_e e) {
478 return timerInfo[e].flags & stats_flags_e::logEvent;
480 static void clearEventFlags() {
481 for (
int i = 0;
i < TIMER_LAST;
i++) {
482 timerInfo[
i].flags &= (~(stats_flags_e::logEvent));
492 timer_e timerEnumValue;
498 explicitTimer(timeStat *
s, timer_e te)
499 : stat(
s), timerEnumValue(te), startTime(), pauseStartTime(0),
506 totalPauseTime += (tick - pauseStartTime);
514 timer_e get_type()
const {
return timerEnumValue; }
523class partitionedTimers {
525 std::vector<explicitTimer> timer_stack;
529 void init(explicitTimer timer);
530 void exchange(explicitTimer timer);
531 void push(explicitTimer timer);
538class blockPartitionedTimer {
539 partitionedTimers *part_timers;
542 blockPartitionedTimer(partitionedTimers *pt, explicitTimer timer)
544 part_timers->push(timer);
546 ~blockPartitionedTimer() { part_timers->pop(); }
552class blockThreadState {
553 stats_state_e *state_pointer;
554 stats_state_e old_state;
557 blockThreadState(stats_state_e *thread_state_pointer, stats_state_e new_state)
558 : state_pointer(thread_state_pointer), old_state(*thread_state_pointer) {
559 *state_pointer = new_state;
561 ~blockThreadState() { *state_pointer = old_state; }
569 static const statInfo counterInfo[];
573 void increment() {
value++; }
574 uint64_t getValue()
const {
return value; }
575 void reset() {
value = 0; }
576 static const char *
name(counter_e e) {
return counterInfo[e].name; }
577 static bool masterOnly(counter_e e) {
578 return counterInfo[e].flags & stats_flags_e::onlyInMaster;
615class kmp_stats_event {
623 : start(0),
stop(0), nest_level(0), timer_name(TIMER_LAST) {}
624 kmp_stats_event(uint64_t strt, uint64_t stp,
int nst, timer_e nme)
625 : start(strt),
stop(stp), nest_level(nst), timer_name(nme) {}
626 inline uint64_t getStart()
const {
return start; }
627 inline uint64_t getStop()
const {
return stop; }
628 inline int getNestLevel()
const {
return nest_level; }
629 inline timer_e getTimerName()
const {
return timer_name; }
658class kmp_stats_event_vector {
659 kmp_stats_event *events;
662 static const int INIT_SIZE = 1024;
665 kmp_stats_event_vector() {
667 (kmp_stats_event *)
__kmp_allocate(
sizeof(kmp_stats_event) * INIT_SIZE);
669 allocated_size = INIT_SIZE;
671 ~kmp_stats_event_vector() {}
672 inline void reset() { internal_size = 0; }
673 inline int size()
const {
return internal_size; }
674 void push_back(uint64_t start_time, uint64_t stop_time,
int nest_level,
677 if (internal_size == allocated_size) {
679 sizeof(kmp_stats_event) * allocated_size * 2);
680 for (
i = 0;
i < internal_size;
i++)
686 events[internal_size] =
687 kmp_stats_event(start_time, stop_time, nest_level,
name);
693 const kmp_stats_event &operator[](
int index)
const {
return events[index]; }
694 kmp_stats_event &operator[](
int index) {
return events[index]; }
695 const kmp_stats_event &at(
int index)
const {
return events[index]; }
696 kmp_stats_event &at(
int index) {
return events[index]; }
726class kmp_stats_list {
728 timeStat _timers[TIMER_LAST + 1];
729 counter _counters[COUNTER_LAST + 1];
730 explicitTimer thread_life_timer;
731 partitionedTimers _partitionedTimers;
733 kmp_stats_event_vector _event_vector;
734 kmp_stats_list *next;
735 kmp_stats_list *prev;
737 int thread_is_idle_flag;
741 : thread_life_timer(&_timers[TIMER_OMP_worker_thread_life],
742 TIMER_OMP_worker_thread_life),
743 _nestLevel(0), _event_vector(), next(this), prev(this), state(IDLE),
744 thread_is_idle_flag(0) {}
746 inline timeStat *getTimer(timer_e idx) {
return &_timers[idx]; }
747 inline counter *getCounter(counter_e idx) {
return &_counters[idx]; }
748 inline partitionedTimers *getPartitionedTimers() {
749 return &_partitionedTimers;
751 inline timeStat *getTimers() {
return _timers; }
752 inline counter *getCounters() {
return _counters; }
753 inline kmp_stats_event_vector &getEventVector() {
return _event_vector; }
756 inline void resetEventVector() { _event_vector.reset(); }
757 inline void incrementNestValue() { _nestLevel++; }
758 inline int getNestValue() {
return _nestLevel; }
759 inline void decrementNestValue() { _nestLevel--; }
760 inline int getGtid()
const {
return gtid; }
761 inline void setGtid(
int newgtid) { gtid = newgtid; }
762 inline void setState(stats_state_e newstate) { state = newstate; }
763 inline stats_state_e getState()
const {
return state; }
764 inline stats_state_e *getStatePointer() {
return &state; }
765 inline bool isIdle() {
return thread_is_idle_flag == 1; }
766 inline void setIdleFlag() { thread_is_idle_flag = 1; }
767 inline void resetIdleFlag() { thread_is_idle_flag = 0; }
768 kmp_stats_list *push_back(
int gtid);
769 inline void push_event(uint64_t start_time, uint64_t stop_time,
770 int nest_level, timer_e
name) {
771 _event_vector.push_back(start_time, stop_time, nest_level,
name);
775 kmp_stats_list::iterator
begin();
776 kmp_stats_list::iterator
end();
780 friend kmp_stats_list::iterator kmp_stats_list::begin();
781 friend kmp_stats_list::iterator kmp_stats_list::end();
786 iterator operator++();
787 iterator operator++(
int dummy);
788 iterator operator--();
789 iterator operator--(
int dummy);
790 bool operator!=(
const iterator &rhs);
791 bool operator==(
const iterator &rhs);
792 kmp_stats_list *operator*()
const;
825class kmp_stats_output_module {
835 std::string outputFileName;
836 static const char *eventsFileName;
837 static const char *plotFileName;
838 static int printPerThreadFlag;
839 static int printPerThreadEventsFlag;
840 static const rgb_color globalColorArray[];
841 static rgb_color timerColorInfo[];
844 static void setupEventColors();
845 static void printPloticusFile();
846 static void printHeaderInfo(FILE *statsOut);
847 static void printTimerStats(FILE *statsOut, statistic
const *theStats,
848 statistic
const *totalStats);
849 static void printCounterStats(FILE *statsOut, statistic
const *theStats);
850 static void printCounters(FILE *statsOut,
counter const *theCounters);
851 static void printEvents(FILE *eventsOut, kmp_stats_event_vector *theEvents,
853 static rgb_color getEventColor(timer_e e) {
return timerColorInfo[e]; }
854 static void windupExplicitTimers();
855 bool eventPrintingEnabled()
const {
return printPerThreadEventsFlag; }
858 kmp_stats_output_module() { init(); }
859 void outputStats(
const char *heading);
873extern kmp_stats_list *__kmp_stats_list;
879extern kmp_stats_output_module __kmp_stats_output;
898#define KMP_COUNT_VALUE(name, value) \
899 __kmp_stats_thread_ptr->getTimer(TIMER_##name)->addSample((double)value)
911#define KMP_COUNT_BLOCK(name) \
912 __kmp_stats_thread_ptr->getCounter(COUNTER_##name)->increment()
931#define KMP_OUTPUT_STATS(heading_string) __kmp_output_stats(heading_string)
940#define KMP_INIT_PARTITIONED_TIMERS(name) \
941 __kmp_stats_thread_ptr->getPartitionedTimers()->init(explicitTimer( \
942 __kmp_stats_thread_ptr->getTimer(TIMER_##name), TIMER_##name))
944#define KMP_TIME_PARTITIONED_BLOCK(name) \
945 blockPartitionedTimer __PBLOCKTIME__( \
946 __kmp_stats_thread_ptr->getPartitionedTimers(), \
947 explicitTimer(__kmp_stats_thread_ptr->getTimer(TIMER_##name), \
950#define KMP_PUSH_PARTITIONED_TIMER(name) \
951 __kmp_stats_thread_ptr->getPartitionedTimers()->push(explicitTimer( \
952 __kmp_stats_thread_ptr->getTimer(TIMER_##name), TIMER_##name))
954#define KMP_POP_PARTITIONED_TIMER() \
955 __kmp_stats_thread_ptr->getPartitionedTimers()->pop()
957#define KMP_EXCHANGE_PARTITIONED_TIMER(name) \
958 __kmp_stats_thread_ptr->getPartitionedTimers()->exchange(explicitTimer( \
959 __kmp_stats_thread_ptr->getTimer(TIMER_##name), TIMER_##name))
961#define KMP_SET_THREAD_STATE(state_name) \
962 __kmp_stats_thread_ptr->setState(state_name)
964#define KMP_GET_THREAD_STATE() __kmp_stats_thread_ptr->getState()
966#define KMP_SET_THREAD_STATE_BLOCK(state_name) \
967 blockThreadState __BTHREADSTATE__(__kmp_stats_thread_ptr->getStatePointer(), \
977#define KMP_RESET_STATS() __kmp_reset_stats()
979#if (KMP_DEVELOPER_STATS)
980#define KMP_COUNT_DEVELOPER_VALUE(n, v) KMP_COUNT_VALUE(n, v)
981#define KMP_COUNT_DEVELOPER_BLOCK(n) KMP_COUNT_BLOCK(n)
982#define KMP_TIME_DEVELOPER_PARTITIONED_BLOCK(n) KMP_TIME_PARTITIONED_BLOCK(n)
983#define KMP_PUSH_DEVELOPER_PARTITIONED_TIMER(n) KMP_PUSH_PARTITIONED_TIMER(n)
984#define KMP_POP_DEVELOPER_PARTITIONED_TIMER(n) KMP_POP_PARTITIONED_TIMER(n)
985#define KMP_EXCHANGE_DEVELOPER_PARTITIONED_TIMER(n) \
986 KMP_EXCHANGE_PARTITIONED_TIMER(n)
989#define KMP_COUNT_DEVELOPER_VALUE(n, v) ((void)0)
990#define KMP_COUNT_DEVELOPER_BLOCK(n) ((void)0)
991#define KMP_TIME_DEVELOPER_PARTITIONED_BLOCK(n) ((void)0)
992#define KMP_PUSH_DEVELOPER_PARTITIONED_TIMER(n) ((void)0)
993#define KMP_POP_DEVELOPER_PARTITIONED_TIMER(n) ((void)0)
994#define KMP_EXCHANGE_DEVELOPER_PARTITIONED_TIMER(n) ((void)0)
1000#define KMP_COUNT_VALUE(n, v) ((void)0)
1001#define KMP_COUNT_BLOCK(n) ((void)0)
1003#define KMP_OUTPUT_STATS(heading_string) ((void)0)
1004#define KMP_RESET_STATS() ((void)0)
1006#define KMP_COUNT_DEVELOPER_VALUE(n, v) ((void)0)
1007#define KMP_COUNT_DEVELOPER_BLOCK(n) ((void)0)
1008#define KMP_TIME_DEVELOPER_PARTITIONED_BLOCK(n) ((void)0)
1009#define KMP_PUSH_DEVELOPER_PARTITIONED_TIMER(n) ((void)0)
1010#define KMP_POP_DEVELOPER_PARTITIONED_TIMER(n) ((void)0)
1011#define KMP_EXCHANGE_DEVELOPER_PARTITIONED_TIMER(n) ((void)0)
1012#define KMP_INIT_PARTITIONED_TIMERS(name) ((void)0)
1013#define KMP_TIME_PARTITIONED_BLOCK(name) ((void)0)
1014#define KMP_PUSH_PARTITIONED_TIMER(name) ((void)0)
1015#define KMP_POP_PARTITIONED_TIMER() ((void)0)
1016#define KMP_SET_THREAD_STATE(state_name) ((void)0)
1017#define KMP_GET_THREAD_STATE() ((void)0)
1018#define KMP_SET_THREAD_STATE_BLOCK(state_name) ((void)0)
static tsc_tick_count now()
__itt_string_handle * name
void const char const char int ITT_FORMAT __itt_group_sync s
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 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 __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp 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 const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t count
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 size
#define __kmp_allocate(size)
#define KMP_DEBUG_ASSERT(cond)
void __kmp_stats_init(void)
void __kmp_stats_fini(void)
void __kmp_output_stats(const char *heading)
void __kmp_accumulate_stats_at_exit(void)
Access to real time clock and timers.
tsc_tick_count::tsc_interval_t & operator+=(tsc_tick_count::tsc_interval_t &i1, const tsc_tick_count::tsc_interval_t &i0)