20 #define INTEL_ITTNOTIFY_API_PRIVATE 21 #include "ittnotify.h" 22 #include "legacy/ittnotify.h" 25 #define __kmp_inline // Turn off inlining in debug mode. 27 #define __kmp_inline static inline 31 extern kmp_int32 __kmp_itt_prepare_delay;
33 extern "C" void __kmp_itt_fini_ittlib(
void);
35 extern void __kmp_itt_fini_ittlib(
void);
41 #define USE_ITT_BUILD_ARG(x) , x 43 void __kmp_itt_initialize();
44 void __kmp_itt_destroy();
45 void __kmp_itt_reset();
56 __kmp_itt_region_forking(
int gtid,
int team_size,
59 __kmp_itt_region_joined(
int gtid);
64 __kmp_inline
void __kmp_itt_frame_submit(
int gtid, __itt_timestamp begin,
65 __itt_timestamp end,
int imbalance,
72 __kmp_inline
void __kmp_itt_metadata_imbalance(
int gtid, kmp_uint64 begin,
75 kmp_uint64 reduction);
79 kmp_uint64 iterations,
81 __kmp_inline
void __kmp_itt_metadata_single(
ident_t *loc);
84 __kmp_inline
void *__kmp_itt_barrier_object(
int gtid,
int bt,
int set_name = 0,
86 __kmp_inline
void __kmp_itt_barrier_starting(
int gtid,
void *
object);
87 __kmp_inline
void __kmp_itt_barrier_middle(
int gtid,
void *
object);
88 __kmp_inline
void __kmp_itt_barrier_finished(
int gtid,
void *
object);
91 __kmp_inline
void *__kmp_itt_taskwait_object(
int gtid);
92 __kmp_inline
void __kmp_itt_taskwait_starting(
int gtid,
void *
object);
93 __kmp_inline
void __kmp_itt_taskwait_finished(
int gtid,
void *
object);
96 __kmp_inline
void __kmp_itt_task_starting(
void *
object);
97 __kmp_inline
void __kmp_itt_task_finished(
void *
object);
100 #if KMP_USE_DYNAMIC_LOCK 101 __kmp_inline
void __kmp_itt_lock_creating(kmp_user_lock_p lock,
104 __kmp_inline
void __kmp_itt_lock_creating(kmp_user_lock_p lock);
106 __kmp_inline
void __kmp_itt_lock_acquiring(kmp_user_lock_p lock);
107 __kmp_inline
void __kmp_itt_lock_acquired(kmp_user_lock_p lock);
108 __kmp_inline
void __kmp_itt_lock_releasing(kmp_user_lock_p lock);
109 __kmp_inline
void __kmp_itt_lock_cancelled(kmp_user_lock_p lock);
110 __kmp_inline
void __kmp_itt_lock_destroyed(kmp_user_lock_p lock);
113 #if KMP_USE_DYNAMIC_LOCK 114 __kmp_inline
void __kmp_itt_critical_creating(kmp_user_lock_p lock,
117 __kmp_inline
void __kmp_itt_critical_creating(kmp_user_lock_p lock);
119 __kmp_inline
void __kmp_itt_critical_acquiring(kmp_user_lock_p lock);
120 __kmp_inline
void __kmp_itt_critical_acquired(kmp_user_lock_p lock);
121 __kmp_inline
void __kmp_itt_critical_releasing(kmp_user_lock_p lock);
122 __kmp_inline
void __kmp_itt_critical_destroyed(kmp_user_lock_p lock);
125 __kmp_inline
void __kmp_itt_single_start(
int gtid);
126 __kmp_inline
void __kmp_itt_single_end(
int gtid);
129 __kmp_inline
void __kmp_itt_ordered_init(
int gtid);
130 __kmp_inline
void __kmp_itt_ordered_prep(
int gtid);
131 __kmp_inline
void __kmp_itt_ordered_start(
int gtid);
132 __kmp_inline
void __kmp_itt_ordered_end(
int gtid);
135 __kmp_inline
void __kmp_itt_thread_ignore();
136 __kmp_inline
void __kmp_itt_thread_name(
int gtid);
139 __kmp_inline
void __kmp_itt_system_object_created(
void *
object,
143 __kmp_inline __itt_caller __kmp_itt_stack_caller_create(
void);
144 __kmp_inline
void __kmp_itt_stack_caller_destroy(__itt_caller);
145 __kmp_inline
void __kmp_itt_stack_callee_enter(__itt_caller);
146 __kmp_inline
void __kmp_itt_stack_callee_leave(__itt_caller);
158 #ifndef INCLUDE_SSC_MARKS 159 #define INCLUDE_SSC_MARKS (KMP_OS_LINUX && KMP_ARCH_X86_64) 163 #if (INCLUDE_SSC_MARKS && KMP_OS_LINUX && KMP_ARCH_X86_64) 166 #if defined(__INTEL_COMPILER) 167 #define INSERT_SSC_MARK(tag) __SSC_MARK(tag) 169 #define INSERT_SSC_MARK(tag) \ 170 __asm__ __volatile__("movl %0, %%ebx; .byte 0x64, 0x67, 0x90 " ::"i"(tag) \ 174 #define INSERT_SSC_MARK(tag) ((void)0) 181 #define SSC_MARK_SPIN_START() INSERT_SSC_MARK(0x4376) 182 #define SSC_MARK_SPIN_END() INSERT_SSC_MARK(0x4377) 190 #define SSC_MARK_FORKING() INSERT_SSC_MARK(0xd693) 191 #define SSC_MARK_JOINING() INSERT_SSC_MARK(0xd694) 192 #define SSC_MARK_INVOKING() INSERT_SSC_MARK(0xd695) 193 #define SSC_MARK_DISPATCH_INIT() INSERT_SSC_MARK(0xd696) 194 #define SSC_MARK_DISPATCH_NEXT() INSERT_SSC_MARK(0xd697) 214 #define KMP_FSYNC_PREPARE(obj) __itt_fsync_prepare((void *)(obj)) 215 #define KMP_FSYNC_CANCEL(obj) __itt_fsync_cancel((void *)(obj)) 216 #define KMP_FSYNC_ACQUIRED(obj) __itt_fsync_acquired((void *)(obj)) 217 #define KMP_FSYNC_RELEASING(obj) __itt_fsync_releasing((void *)(obj)) 225 #undef KMP_FSYNC_SPIN_INIT 226 #define KMP_FSYNC_SPIN_INIT(obj, spin) \ 227 int sync_iters = 0; \ 228 if (__itt_fsync_prepare_ptr) { \ 233 SSC_MARK_SPIN_START() 235 #undef KMP_FSYNC_SPIN_PREPARE 236 #define KMP_FSYNC_SPIN_PREPARE(obj) \ 238 if (__itt_fsync_prepare_ptr && sync_iters < __kmp_itt_prepare_delay) { \ 240 if (sync_iters >= __kmp_itt_prepare_delay) { \ 241 KMP_FSYNC_PREPARE((void *)obj); \ 245 #undef KMP_FSYNC_SPIN_ACQUIRED 246 #define KMP_FSYNC_SPIN_ACQUIRED(obj) \ 248 SSC_MARK_SPIN_END(); \ 249 if (sync_iters >= __kmp_itt_prepare_delay) { \ 250 KMP_FSYNC_ACQUIRED((void *)obj); \ 259 #define KMP_ITT_IGNORE(statement) \ 261 __itt_state_t __itt_state_; \ 262 if (__itt_state_get_ptr) { \ 263 __itt_state_ = __itt_state_get(); \ 264 __itt_obj_mode_set(__itt_obj_prop_ignore, __itt_obj_state_set); \ 267 if (__itt_state_get_ptr) { \ 268 __itt_state_set(__itt_state_); \ 272 const int KMP_MAX_FRAME_DOMAINS =
275 extern kmp_int32 __kmp_barrier_domain_count;
276 extern kmp_int32 __kmp_region_domain_count;
277 extern __itt_domain *__kmp_itt_barrier_domains[KMP_MAX_FRAME_DOMAINS];
278 extern __itt_domain *__kmp_itt_region_domains[KMP_MAX_FRAME_DOMAINS];
279 extern __itt_domain *__kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
280 extern kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
281 extern __itt_domain *metadata_domain;
282 extern __itt_string_handle *string_handle_imbl;
283 extern __itt_string_handle *string_handle_loop;
284 extern __itt_string_handle *string_handle_sngl;
289 #define KMP_FSYNC_PREPARE(obj) ((void)0) 290 #define KMP_FSYNC_CANCEL(obj) ((void)0) 291 #define KMP_FSYNC_ACQUIRED(obj) ((void)0) 292 #define KMP_FSYNC_RELEASING(obj) ((void)0) 294 #define KMP_FSYNC_SPIN_INIT(obj, spin) ((void)0) 295 #define KMP_FSYNC_SPIN_PREPARE(obj) ((void)0) 296 #define KMP_FSYNC_SPIN_ACQUIRED(obj) ((void)0) 298 #define KMP_ITT_IGNORE(stmt) \ 303 #endif // USE_ITT_NOTIFY 307 #include "kmp_itt.inl" 317 #define KMP_FSYNC_PREPARE(obj) ((void)0) 318 #define KMP_FSYNC_CANCEL(obj) ((void)0) 319 #define KMP_FSYNC_ACQUIRED(obj) ((void)0) 320 #define KMP_FSYNC_RELEASING(obj) ((void)0) 322 #define KMP_FSYNC_SPIN_INIT(obj, spin) ((void)0) 323 #define KMP_FSYNC_SPIN_PREPARE(obj) ((void)0) 324 #define KMP_FSYNC_SPIN_ACQUIRED(obj) ((void)0) 326 #define KMP_ITT_IGNORE(stmt) \ 331 #define USE_ITT_BUILD_ARG(x)