19 #define INTEL_ITTNOTIFY_API_PRIVATE
20 #include "ittnotify.h"
21 #include "legacy/ittnotify.h"
26 #define __kmp_inline static inline
30 extern kmp_int32 __kmp_itt_prepare_delay;
32 extern "C" void __kmp_itt_fini_ittlib(
void);
34 extern void __kmp_itt_fini_ittlib(
void);
40 #define USE_ITT_BUILD_ARG(x) , x
42 void __kmp_itt_initialize();
43 void __kmp_itt_destroy();
44 void __kmp_itt_reset();
55 __kmp_itt_region_forking(
int gtid,
int team_size,
58 __kmp_itt_region_joined(
int gtid);
63 __kmp_inline
void __kmp_itt_frame_submit(
int gtid, __itt_timestamp begin,
64 __itt_timestamp end,
int imbalance,
71 __kmp_inline
void __kmp_itt_metadata_imbalance(
int gtid, kmp_uint64 begin,
74 kmp_uint64 reduction);
78 kmp_uint64 iterations,
80 __kmp_inline
void __kmp_itt_metadata_single(
ident_t *loc);
83 __kmp_inline
void *__kmp_itt_barrier_object(
int gtid,
int bt,
int set_name = 0,
85 __kmp_inline
void __kmp_itt_barrier_starting(
int gtid,
void *
object);
86 __kmp_inline
void __kmp_itt_barrier_middle(
int gtid,
void *
object);
87 __kmp_inline
void __kmp_itt_barrier_finished(
int gtid,
void *
object);
90 __kmp_inline
void *__kmp_itt_taskwait_object(
int gtid);
91 __kmp_inline
void __kmp_itt_taskwait_starting(
int gtid,
void *
object);
92 __kmp_inline
void __kmp_itt_taskwait_finished(
int gtid,
void *
object);
93 #define KMP_ITT_TASKWAIT_STARTING(obj) \
94 if (UNLIKELY(__itt_sync_create_ptr)) { \
95 obj = __kmp_itt_taskwait_object(gtid); \
97 __kmp_itt_taskwait_starting(gtid, obj); \
100 #define KMP_ITT_TASKWAIT_FINISHED(obj) \
101 if (UNLIKELY(obj != NULL)) \
102 __kmp_itt_taskwait_finished(gtid, obj);
105 __kmp_inline
void __kmp_itt_task_starting(
void *
object);
106 __kmp_inline
void __kmp_itt_task_finished(
void *
object);
109 #if KMP_USE_DYNAMIC_LOCK
110 __kmp_inline
void __kmp_itt_lock_creating(kmp_user_lock_p lock,
113 __kmp_inline
void __kmp_itt_lock_creating(kmp_user_lock_p lock);
115 __kmp_inline
void __kmp_itt_lock_acquiring(kmp_user_lock_p lock);
116 __kmp_inline
void __kmp_itt_lock_acquired(kmp_user_lock_p lock);
117 __kmp_inline
void __kmp_itt_lock_releasing(kmp_user_lock_p lock);
118 __kmp_inline
void __kmp_itt_lock_cancelled(kmp_user_lock_p lock);
119 __kmp_inline
void __kmp_itt_lock_destroyed(kmp_user_lock_p lock);
122 #if KMP_USE_DYNAMIC_LOCK
123 __kmp_inline
void __kmp_itt_critical_creating(kmp_user_lock_p lock,
126 __kmp_inline
void __kmp_itt_critical_creating(kmp_user_lock_p lock);
128 __kmp_inline
void __kmp_itt_critical_acquiring(kmp_user_lock_p lock);
129 __kmp_inline
void __kmp_itt_critical_acquired(kmp_user_lock_p lock);
130 __kmp_inline
void __kmp_itt_critical_releasing(kmp_user_lock_p lock);
131 __kmp_inline
void __kmp_itt_critical_destroyed(kmp_user_lock_p lock);
134 __kmp_inline
void __kmp_itt_single_start(
int gtid);
135 __kmp_inline
void __kmp_itt_single_end(
int gtid);
138 __kmp_inline
void __kmp_itt_ordered_init(
int gtid);
139 __kmp_inline
void __kmp_itt_ordered_prep(
int gtid);
140 __kmp_inline
void __kmp_itt_ordered_start(
int gtid);
141 __kmp_inline
void __kmp_itt_ordered_end(
int gtid);
144 __kmp_inline
void __kmp_itt_thread_ignore();
145 __kmp_inline
void __kmp_itt_thread_name(
int gtid);
148 __kmp_inline
void __kmp_itt_system_object_created(
void *
object,
152 __kmp_inline __itt_caller __kmp_itt_stack_caller_create(
void);
153 __kmp_inline
void __kmp_itt_stack_caller_destroy(__itt_caller);
154 __kmp_inline
void __kmp_itt_stack_callee_enter(__itt_caller);
155 __kmp_inline
void __kmp_itt_stack_callee_leave(__itt_caller);
167 #ifndef INCLUDE_SSC_MARKS
168 #define INCLUDE_SSC_MARKS (KMP_OS_LINUX && KMP_ARCH_X86_64)
172 #if (INCLUDE_SSC_MARKS && KMP_OS_LINUX && KMP_ARCH_X86_64)
175 #if defined(__INTEL_COMPILER)
176 #define INSERT_SSC_MARK(tag) __SSC_MARK(tag)
178 #define INSERT_SSC_MARK(tag) \
179 __asm__ __volatile__("movl %0, %%ebx; .byte 0x64, 0x67, 0x90 " ::"i"(tag) \
183 #define INSERT_SSC_MARK(tag) ((void)0)
190 #define SSC_MARK_SPIN_START() INSERT_SSC_MARK(0x4376)
191 #define SSC_MARK_SPIN_END() INSERT_SSC_MARK(0x4377)
199 #define SSC_MARK_FORKING() INSERT_SSC_MARK(0xd693)
200 #define SSC_MARK_JOINING() INSERT_SSC_MARK(0xd694)
201 #define SSC_MARK_INVOKING() INSERT_SSC_MARK(0xd695)
202 #define SSC_MARK_DISPATCH_INIT() INSERT_SSC_MARK(0xd696)
203 #define SSC_MARK_DISPATCH_NEXT() INSERT_SSC_MARK(0xd697)
223 #define KMP_FSYNC_PREPARE(obj) __itt_fsync_prepare((void *)(obj))
224 #define KMP_FSYNC_CANCEL(obj) __itt_fsync_cancel((void *)(obj))
225 #define KMP_FSYNC_ACQUIRED(obj) __itt_fsync_acquired((void *)(obj))
226 #define KMP_FSYNC_RELEASING(obj) __itt_fsync_releasing((void *)(obj))
234 #undef KMP_FSYNC_SPIN_INIT
235 #define KMP_FSYNC_SPIN_INIT(obj, spin) \
236 int sync_iters = 0; \
237 if (__itt_fsync_prepare_ptr) { \
242 SSC_MARK_SPIN_START()
244 #undef KMP_FSYNC_SPIN_PREPARE
245 #define KMP_FSYNC_SPIN_PREPARE(obj) \
247 if (__itt_fsync_prepare_ptr && sync_iters < __kmp_itt_prepare_delay) { \
249 if (sync_iters >= __kmp_itt_prepare_delay) { \
250 KMP_FSYNC_PREPARE((void *)obj); \
254 #undef KMP_FSYNC_SPIN_ACQUIRED
255 #define KMP_FSYNC_SPIN_ACQUIRED(obj) \
257 SSC_MARK_SPIN_END(); \
258 if (sync_iters >= __kmp_itt_prepare_delay) { \
259 KMP_FSYNC_ACQUIRED((void *)obj); \
268 #define KMP_ITT_IGNORE(statement) \
270 __itt_state_t __itt_state_; \
271 if (__itt_state_get_ptr) { \
272 __itt_state_ = __itt_state_get(); \
273 __itt_obj_mode_set(__itt_obj_prop_ignore, __itt_obj_state_set); \
276 if (__itt_state_get_ptr) { \
277 __itt_state_set(__itt_state_); \
281 const int KMP_MAX_FRAME_DOMAINS =
284 extern kmp_int32 __kmp_barrier_domain_count;
285 extern kmp_int32 __kmp_region_domain_count;
286 extern __itt_domain *__kmp_itt_barrier_domains[KMP_MAX_FRAME_DOMAINS];
287 extern __itt_domain *__kmp_itt_region_domains[KMP_MAX_FRAME_DOMAINS];
288 extern __itt_domain *__kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
289 extern kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
290 extern __itt_domain *metadata_domain;
291 extern __itt_string_handle *string_handle_imbl;
292 extern __itt_string_handle *string_handle_loop;
293 extern __itt_string_handle *string_handle_sngl;
298 #define KMP_FSYNC_PREPARE(obj) ((void)0)
299 #define KMP_FSYNC_CANCEL(obj) ((void)0)
300 #define KMP_FSYNC_ACQUIRED(obj) ((void)0)
301 #define KMP_FSYNC_RELEASING(obj) ((void)0)
303 #define KMP_FSYNC_SPIN_INIT(obj, spin) ((void)0)
304 #define KMP_FSYNC_SPIN_PREPARE(obj) ((void)0)
305 #define KMP_FSYNC_SPIN_ACQUIRED(obj) ((void)0)
307 #define KMP_ITT_IGNORE(stmt) \
316 #include "kmp_itt.inl"
326 #define KMP_FSYNC_PREPARE(obj) ((void)0)
327 #define KMP_FSYNC_CANCEL(obj) ((void)0)
328 #define KMP_FSYNC_ACQUIRED(obj) ((void)0)
329 #define KMP_FSYNC_RELEASING(obj) ((void)0)
331 #define KMP_FSYNC_SPIN_INIT(obj, spin) ((void)0)
332 #define KMP_FSYNC_SPIN_PREPARE(obj) ((void)0)
333 #define KMP_FSYNC_SPIN_ACQUIRED(obj) ((void)0)
335 #define KMP_ITT_IGNORE(stmt) \
340 #define USE_ITT_BUILD_ARG(x)