19#define INTEL_ITTNOTIFY_API_PRIVATE
21#include "legacy/ittnotify.h"
26#define __kmp_inline static inline
30extern kmp_int32 __kmp_itt_prepare_delay;
32extern "C" void __kmp_itt_fini_ittlib(
void);
34extern void __kmp_itt_fini_ittlib(
void);
40#define USE_ITT_BUILD_ARG(x) , x
42void __kmp_itt_initialize();
43void __kmp_itt_destroy();
44void __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);
95__kmp_inline
void __kmp_itt_task_starting(
void *
object);
96__kmp_inline
void __kmp_itt_task_finished(
void *
object);
99#if KMP_USE_DYNAMIC_LOCK
100__kmp_inline
void __kmp_itt_lock_creating(kmp_user_lock_p lock,
103__kmp_inline
void __kmp_itt_lock_creating(kmp_user_lock_p lock);
105__kmp_inline
void __kmp_itt_lock_acquiring(kmp_user_lock_p lock);
106__kmp_inline
void __kmp_itt_lock_acquired(kmp_user_lock_p lock);
107__kmp_inline
void __kmp_itt_lock_releasing(kmp_user_lock_p lock);
108__kmp_inline
void __kmp_itt_lock_cancelled(kmp_user_lock_p lock);
109__kmp_inline
void __kmp_itt_lock_destroyed(kmp_user_lock_p lock);
112#if KMP_USE_DYNAMIC_LOCK
113__kmp_inline
void __kmp_itt_critical_creating(kmp_user_lock_p lock,
116__kmp_inline
void __kmp_itt_critical_creating(kmp_user_lock_p lock);
118__kmp_inline
void __kmp_itt_critical_acquiring(kmp_user_lock_p lock);
119__kmp_inline
void __kmp_itt_critical_acquired(kmp_user_lock_p lock);
120__kmp_inline
void __kmp_itt_critical_releasing(kmp_user_lock_p lock);
121__kmp_inline
void __kmp_itt_critical_destroyed(kmp_user_lock_p lock);
124__kmp_inline
void __kmp_itt_single_start(
int gtid);
125__kmp_inline
void __kmp_itt_single_end(
int gtid);
128__kmp_inline
void __kmp_itt_ordered_init(
int gtid);
129__kmp_inline
void __kmp_itt_ordered_prep(
int gtid);
130__kmp_inline
void __kmp_itt_ordered_start(
int gtid);
131__kmp_inline
void __kmp_itt_ordered_end(
int gtid);
134__kmp_inline
void __kmp_itt_thread_ignore();
135__kmp_inline
void __kmp_itt_thread_name(
int gtid);
138__kmp_inline
void __kmp_itt_system_object_created(
void *
object,
142__kmp_inline __itt_caller __kmp_itt_stack_caller_create(
void);
143__kmp_inline
void __kmp_itt_stack_caller_destroy(__itt_caller);
144__kmp_inline
void __kmp_itt_stack_callee_enter(__itt_caller);
145__kmp_inline
void __kmp_itt_stack_callee_leave(__itt_caller);
157#ifndef INCLUDE_SSC_MARKS
158#define INCLUDE_SSC_MARKS (KMP_OS_LINUX && KMP_ARCH_X86_64)
162#if (INCLUDE_SSC_MARKS && KMP_OS_LINUX && KMP_ARCH_X86_64)
165#if defined(__INTEL_COMPILER)
166#define INSERT_SSC_MARK(tag) __SSC_MARK(tag)
168#define INSERT_SSC_MARK(tag) \
169 __asm__ __volatile__("movl %0, %%ebx; .byte 0x64, 0x67, 0x90 " ::"i"(tag) \
173#define INSERT_SSC_MARK(tag) ((void)0)
180#define SSC_MARK_SPIN_START() INSERT_SSC_MARK(0x4376)
181#define SSC_MARK_SPIN_END() INSERT_SSC_MARK(0x4377)
189#define SSC_MARK_FORKING() INSERT_SSC_MARK(0xd693)
190#define SSC_MARK_JOINING() INSERT_SSC_MARK(0xd694)
191#define SSC_MARK_INVOKING() INSERT_SSC_MARK(0xd695)
192#define SSC_MARK_DISPATCH_INIT() INSERT_SSC_MARK(0xd696)
193#define SSC_MARK_DISPATCH_NEXT() INSERT_SSC_MARK(0xd697)
213#define KMP_FSYNC_PREPARE(obj) __itt_fsync_prepare((void *)(obj))
214#define KMP_FSYNC_CANCEL(obj) __itt_fsync_cancel((void *)(obj))
215#define KMP_FSYNC_ACQUIRED(obj) __itt_fsync_acquired((void *)(obj))
216#define KMP_FSYNC_RELEASING(obj) __itt_fsync_releasing((void *)(obj))
224#undef KMP_FSYNC_SPIN_INIT
225#define KMP_FSYNC_SPIN_INIT(obj, spin) \
226 int sync_iters = 0; \
227 if (__itt_fsync_prepare_ptr) { \
232 SSC_MARK_SPIN_START()
234#undef KMP_FSYNC_SPIN_PREPARE
235#define KMP_FSYNC_SPIN_PREPARE(obj) \
237 if (__itt_fsync_prepare_ptr && sync_iters < __kmp_itt_prepare_delay) { \
239 if (sync_iters >= __kmp_itt_prepare_delay) { \
240 KMP_FSYNC_PREPARE((void *)obj); \
244#undef KMP_FSYNC_SPIN_ACQUIRED
245#define KMP_FSYNC_SPIN_ACQUIRED(obj) \
247 SSC_MARK_SPIN_END(); \
248 if (sync_iters >= __kmp_itt_prepare_delay) { \
249 KMP_FSYNC_ACQUIRED((void *)obj); \
258#define KMP_ITT_IGNORE(statement) \
260 __itt_state_t __itt_state_; \
261 if (__itt_state_get_ptr) { \
262 __itt_state_ = __itt_state_get(); \
263 __itt_obj_mode_set(__itt_obj_prop_ignore, __itt_obj_state_set); \
266 if (__itt_state_get_ptr) { \
267 __itt_state_set(__itt_state_); \
271const int KMP_MAX_FRAME_DOMAINS =
274extern kmp_int32 __kmp_barrier_domain_count;
275extern kmp_int32 __kmp_region_domain_count;
276extern __itt_domain *__kmp_itt_barrier_domains[KMP_MAX_FRAME_DOMAINS];
277extern __itt_domain *__kmp_itt_region_domains[KMP_MAX_FRAME_DOMAINS];
278extern __itt_domain *__kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
279extern kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
280extern __itt_domain *metadata_domain;
281extern __itt_string_handle *string_handle_imbl;
282extern __itt_string_handle *string_handle_loop;
283extern __itt_string_handle *string_handle_sngl;
288#define KMP_FSYNC_PREPARE(obj) ((void)0)
289#define KMP_FSYNC_CANCEL(obj) ((void)0)
290#define KMP_FSYNC_ACQUIRED(obj) ((void)0)
291#define KMP_FSYNC_RELEASING(obj) ((void)0)
293#define KMP_FSYNC_SPIN_INIT(obj, spin) ((void)0)
294#define KMP_FSYNC_SPIN_PREPARE(obj) ((void)0)
295#define KMP_FSYNC_SPIN_ACQUIRED(obj) ((void)0)
297#define KMP_ITT_IGNORE(stmt) \
306#include "kmp_itt.inl"
316#define KMP_FSYNC_PREPARE(obj) ((void)0)
317#define KMP_FSYNC_CANCEL(obj) ((void)0)
318#define KMP_FSYNC_ACQUIRED(obj) ((void)0)
319#define KMP_FSYNC_RELEASING(obj) ((void)0)
321#define KMP_FSYNC_SPIN_INIT(obj, spin) ((void)0)
322#define KMP_FSYNC_SPIN_PREPARE(obj) ((void)0)
323#define KMP_FSYNC_SPIN_ACQUIRED(obj) ((void)0)
325#define KMP_ITT_IGNORE(stmt) \
330#define USE_ITT_BUILD_ARG(x)