43 #define INTEL_ITTNOTIFY_API_PRIVATE
44 #include "ittnotify.h"
45 #include "legacy/ittnotify.h"
48 #define __kmp_inline // Turn off inlining in debug mode.
50 #define __kmp_inline static inline
54 extern kmp_int32 __kmp_itt_prepare_delay;
56 extern "C" void __kmp_itt_fini_ittlib(
void);
58 extern void __kmp_itt_fini_ittlib(
void);
63 #define USE_ITT_BUILD_ARG(x) ,x
65 void __kmp_itt_initialize();
66 void __kmp_itt_destroy();
77 __kmp_inline
void __kmp_itt_region_forking(
int gtid,
int serialized = 0 );
78 __kmp_inline
void __kmp_itt_region_joined(
int gtid,
int serialized = 0 );
82 __kmp_inline
void * __kmp_itt_barrier_object(
int gtid,
int bt,
int set_name = 0,
int delta = 0 );
83 __kmp_inline
void __kmp_itt_barrier_starting(
int gtid,
void *
object );
84 __kmp_inline
void __kmp_itt_barrier_middle(
int gtid,
void *
object );
85 __kmp_inline
void __kmp_itt_barrier_finished(
int gtid,
void *
object );
88 __kmp_inline
void * __kmp_itt_taskwait_object(
int gtid );
89 __kmp_inline
void __kmp_itt_taskwait_starting(
int gtid,
void *
object );
90 __kmp_inline
void __kmp_itt_taskwait_finished(
int gtid,
void *
object );
93 __kmp_inline
void __kmp_itt_task_starting(
void *
object );
94 __kmp_inline
void __kmp_itt_task_finished(
void *
object );
97 __kmp_inline
void __kmp_itt_lock_creating( kmp_user_lock_p lock );
98 __kmp_inline
void __kmp_itt_lock_acquiring( kmp_user_lock_p lock );
99 __kmp_inline
void __kmp_itt_lock_acquired( kmp_user_lock_p lock );
100 __kmp_inline
void __kmp_itt_lock_releasing( kmp_user_lock_p lock );
101 __kmp_inline
void __kmp_itt_lock_cancelled( kmp_user_lock_p lock );
102 __kmp_inline
void __kmp_itt_lock_destroyed( kmp_user_lock_p lock );
105 __kmp_inline
void __kmp_itt_critical_creating( kmp_user_lock_p lock );
106 __kmp_inline
void __kmp_itt_critical_acquiring( kmp_user_lock_p lock );
107 __kmp_inline
void __kmp_itt_critical_acquired( kmp_user_lock_p lock );
108 __kmp_inline
void __kmp_itt_critical_releasing( kmp_user_lock_p lock );
109 __kmp_inline
void __kmp_itt_critical_destroyed( kmp_user_lock_p lock );
112 __kmp_inline
void __kmp_itt_single_start(
int gtid );
113 __kmp_inline
void __kmp_itt_single_end(
int gtid );
116 __kmp_inline
void __kmp_itt_ordered_init(
int gtid );
117 __kmp_inline
void __kmp_itt_ordered_prep(
int gtid );
118 __kmp_inline
void __kmp_itt_ordered_start(
int gtid );
119 __kmp_inline
void __kmp_itt_ordered_end(
int gtid );
122 __kmp_inline
void __kmp_itt_thread_ignore();
123 __kmp_inline
void __kmp_itt_thread_name(
int gtid );
126 __kmp_inline
void __kmp_itt_system_object_created(
void *
object,
char const * name );
129 __kmp_inline __itt_caller __kmp_itt_stack_caller_create(
void);
130 __kmp_inline
void __kmp_itt_stack_caller_destroy(__itt_caller);
131 __kmp_inline
void __kmp_itt_stack_callee_enter(__itt_caller);
132 __kmp_inline
void __kmp_itt_stack_callee_leave(__itt_caller);
146 #ifndef INCLUDE_SSC_MARKS
147 # define INCLUDE_SSC_MARKS (KMP_OS_LINUX && KMP_ARCH_X86_64)
151 #if (INCLUDE_SSC_MARKS && KMP_OS_LINUX && KMP_ARCH_X86_64)
154 # define INSERT_SSC_MARK(tag) \
155 __asm__ __volatile__ ("movl %0, %%ebx; .byte 0x64, 0x67, 0x90 " ::"i"(tag):"%ebx")
157 # define INSERT_SSC_MARK(tag) ((void)0)
166 #define SSC_MARK_SPIN_START() INSERT_SSC_MARK(0x4376)
167 #define SSC_MARK_SPIN_END() INSERT_SSC_MARK(0x4377)
187 #define KMP_FSYNC_PREPARE( obj ) __itt_fsync_prepare( (void *)( obj ) )
188 #define KMP_FSYNC_CANCEL( obj ) __itt_fsync_cancel( (void *)( obj ) )
189 #define KMP_FSYNC_ACQUIRED( obj ) __itt_fsync_acquired( (void *)( obj ) )
190 #define KMP_FSYNC_RELEASING( obj ) __itt_fsync_releasing( (void *)( obj ) )
200 #undef KMP_FSYNC_SPIN_INIT
201 #define KMP_FSYNC_SPIN_INIT( obj, spin ) \
202 int sync_iters = 0; \
203 if ( __itt_fsync_prepare_ptr ) { \
204 if ( obj == NULL ) { \
208 SSC_MARK_SPIN_START()
210 #undef KMP_FSYNC_SPIN_PREPARE
211 #define KMP_FSYNC_SPIN_PREPARE( obj ) do { \
212 if ( __itt_fsync_prepare_ptr && sync_iters < __kmp_itt_prepare_delay ) { \
214 if ( sync_iters >= __kmp_itt_prepare_delay ) { \
215 KMP_FSYNC_PREPARE( (void*) obj ); \
219 #undef KMP_FSYNC_SPIN_ACQUIRED
220 #define KMP_FSYNC_SPIN_ACQUIRED( obj ) do { \
221 SSC_MARK_SPIN_END(); \
222 if ( sync_iters >= __kmp_itt_prepare_delay ) { \
223 KMP_FSYNC_ACQUIRED( (void*) obj ); \
232 #define KMP_ITT_IGNORE( statement ) do { \
233 __itt_state_t __itt_state_; \
234 if ( __itt_state_get_ptr ) { \
235 __itt_state_ = __itt_state_get(); \
236 __itt_obj_mode_set( __itt_obj_prop_ignore, __itt_obj_state_set ); \
239 if ( __itt_state_get_ptr ) { \
240 __itt_state_set( __itt_state_ ); \
244 const int KMP_MAX_FRAME_DOMAINS = 512;
246 extern kmp_int32 __kmp_frame_domain_count;
247 extern __itt_domain* __kmp_itt_domains[KMP_MAX_FRAME_DOMAINS];
251 # define KMP_FSYNC_PREPARE( obj ) ((void)0)
252 # define KMP_FSYNC_CANCEL( obj ) ((void)0)
253 # define KMP_FSYNC_ACQUIRED( obj ) ((void)0)
254 # define KMP_FSYNC_RELEASING( obj ) ((void)0)
256 # define KMP_FSYNC_SPIN_INIT( obj, spin ) ((void)0)
257 # define KMP_FSYNC_SPIN_PREPARE( obj ) ((void)0)
258 # define KMP_FSYNC_SPIN_ACQUIRED( obj ) ((void)0)
260 # define KMP_ITT_IGNORE(stmt ) do { stmt } while (0)
262 #endif // USE_ITT_NOTIFY
266 #include "kmp_itt.inl"
276 # define KMP_FSYNC_PREPARE( obj ) ((void)0)
277 # define KMP_FSYNC_CANCEL( obj ) ((void)0)
278 # define KMP_FSYNC_ACQUIRED( obj ) ((void)0)
279 # define KMP_FSYNC_RELEASING( obj ) ((void)0)
281 # define KMP_FSYNC_SPIN_INIT( obj, spin ) ((void)0)
282 # define KMP_FSYNC_SPIN_PREPARE( obj ) ((void)0)
283 # define KMP_FSYNC_SPIN_ACQUIRED( obj ) ((void)0)
285 # define KMP_ITT_IGNORE(stmt ) do { stmt } while (0)
287 # define USE_ITT_BUILD_ARG(x)