22 #define INTEL_ITTNOTIFY_API_PRIVATE 23 #include "ittnotify.h" 24 #include "legacy/ittnotify.h" 27 #define __kmp_inline // Turn off inlining in debug mode. 29 #define __kmp_inline static inline 33 extern kmp_int32 __kmp_itt_prepare_delay;
35 extern "C" void __kmp_itt_fini_ittlib(
void);
37 extern void __kmp_itt_fini_ittlib(
void);
42 #define USE_ITT_BUILD_ARG(x) ,x 44 void __kmp_itt_initialize();
45 void __kmp_itt_destroy();
56 __kmp_inline
void __kmp_itt_region_forking(
int gtid,
int team_size,
int barriers );
57 __kmp_inline
void __kmp_itt_region_joined(
int gtid );
62 __kmp_inline
void __kmp_itt_frame_submit(
int gtid, __itt_timestamp begin, __itt_timestamp end,
int imbalance,
ident_t *loc,
int team_size,
int region = 0 );
66 __kmp_inline
void __kmp_itt_metadata_imbalance(
int gtid, kmp_uint64 begin, kmp_uint64 end, kmp_uint64 imbalance, kmp_uint64 reduction );
68 __kmp_inline
void __kmp_itt_metadata_loop(
ident_t * loc, kmp_uint64
sched_type, kmp_uint64 iterations, kmp_uint64 chunk );
69 __kmp_inline
void __kmp_itt_metadata_single(
ident_t * loc );
72 __kmp_inline
void * __kmp_itt_barrier_object(
int gtid,
int bt,
int set_name = 0,
int delta = 0 );
73 __kmp_inline
void __kmp_itt_barrier_starting(
int gtid,
void *
object );
74 __kmp_inline
void __kmp_itt_barrier_middle(
int gtid,
void *
object );
75 __kmp_inline
void __kmp_itt_barrier_finished(
int gtid,
void *
object );
78 __kmp_inline
void * __kmp_itt_taskwait_object(
int gtid );
79 __kmp_inline
void __kmp_itt_taskwait_starting(
int gtid,
void *
object );
80 __kmp_inline
void __kmp_itt_taskwait_finished(
int gtid,
void *
object );
83 __kmp_inline
void __kmp_itt_task_starting(
void *
object );
84 __kmp_inline
void __kmp_itt_task_finished(
void *
object );
87 #if KMP_USE_DYNAMIC_LOCK 88 __kmp_inline
void __kmp_itt_lock_creating( kmp_user_lock_p lock,
const ident_t * );
90 __kmp_inline
void __kmp_itt_lock_creating( kmp_user_lock_p lock );
92 __kmp_inline
void __kmp_itt_lock_acquiring( kmp_user_lock_p lock );
93 __kmp_inline
void __kmp_itt_lock_acquired( kmp_user_lock_p lock );
94 __kmp_inline
void __kmp_itt_lock_releasing( kmp_user_lock_p lock );
95 __kmp_inline
void __kmp_itt_lock_cancelled( kmp_user_lock_p lock );
96 __kmp_inline
void __kmp_itt_lock_destroyed( kmp_user_lock_p lock );
99 #if KMP_USE_DYNAMIC_LOCK 100 __kmp_inline
void __kmp_itt_critical_creating( kmp_user_lock_p lock,
const ident_t * );
102 __kmp_inline
void __kmp_itt_critical_creating( kmp_user_lock_p lock );
104 __kmp_inline
void __kmp_itt_critical_acquiring( kmp_user_lock_p lock );
105 __kmp_inline
void __kmp_itt_critical_acquired( kmp_user_lock_p lock );
106 __kmp_inline
void __kmp_itt_critical_releasing( kmp_user_lock_p lock );
107 __kmp_inline
void __kmp_itt_critical_destroyed( kmp_user_lock_p lock );
110 __kmp_inline
void __kmp_itt_single_start(
int gtid );
111 __kmp_inline
void __kmp_itt_single_end(
int gtid );
114 __kmp_inline
void __kmp_itt_ordered_init(
int gtid );
115 __kmp_inline
void __kmp_itt_ordered_prep(
int gtid );
116 __kmp_inline
void __kmp_itt_ordered_start(
int gtid );
117 __kmp_inline
void __kmp_itt_ordered_end(
int gtid );
120 __kmp_inline
void __kmp_itt_thread_ignore();
121 __kmp_inline
void __kmp_itt_thread_name(
int gtid );
124 __kmp_inline
void __kmp_itt_system_object_created(
void *
object,
char const * name );
127 __kmp_inline __itt_caller __kmp_itt_stack_caller_create(
void);
128 __kmp_inline
void __kmp_itt_stack_caller_destroy(__itt_caller);
129 __kmp_inline
void __kmp_itt_stack_callee_enter(__itt_caller);
130 __kmp_inline
void __kmp_itt_stack_callee_leave(__itt_caller);
144 #ifndef INCLUDE_SSC_MARKS 145 # define INCLUDE_SSC_MARKS (KMP_OS_LINUX && KMP_ARCH_X86_64) 149 #if (INCLUDE_SSC_MARKS && KMP_OS_LINUX && KMP_ARCH_X86_64) 152 #if defined( __INTEL_COMPILER ) 153 # define INSERT_SSC_MARK(tag) __SSC_MARK(tag) 155 # define INSERT_SSC_MARK(tag) \ 156 __asm__ __volatile__ ("movl %0, %%ebx; .byte 0x64, 0x67, 0x90 " ::"i"(tag):"%ebx") 159 # define INSERT_SSC_MARK(tag) ((void)0) 168 #define SSC_MARK_SPIN_START() INSERT_SSC_MARK(0x4376) 169 #define SSC_MARK_SPIN_END() INSERT_SSC_MARK(0x4377) 177 #define SSC_MARK_FORKING() INSERT_SSC_MARK(0xd693) 178 #define SSC_MARK_JOINING() INSERT_SSC_MARK(0xd694) 179 #define SSC_MARK_INVOKING() INSERT_SSC_MARK(0xd695) 180 #define SSC_MARK_DISPATCH_INIT() INSERT_SSC_MARK(0xd696) 181 #define SSC_MARK_DISPATCH_NEXT() INSERT_SSC_MARK(0xd697) 201 #define KMP_FSYNC_PREPARE( obj ) __itt_fsync_prepare( (void *)( obj ) ) 202 #define KMP_FSYNC_CANCEL( obj ) __itt_fsync_cancel( (void *)( obj ) ) 203 #define KMP_FSYNC_ACQUIRED( obj ) __itt_fsync_acquired( (void *)( obj ) ) 204 #define KMP_FSYNC_RELEASING( obj ) __itt_fsync_releasing( (void *)( obj ) ) 214 #undef KMP_FSYNC_SPIN_INIT 215 #define KMP_FSYNC_SPIN_INIT( obj, spin ) \ 216 int sync_iters = 0; \ 217 if ( __itt_fsync_prepare_ptr ) { \ 218 if ( obj == NULL ) { \ 222 SSC_MARK_SPIN_START() 224 #undef KMP_FSYNC_SPIN_PREPARE 225 #define KMP_FSYNC_SPIN_PREPARE( obj ) do { \ 226 if ( __itt_fsync_prepare_ptr && sync_iters < __kmp_itt_prepare_delay ) { \ 228 if ( sync_iters >= __kmp_itt_prepare_delay ) { \ 229 KMP_FSYNC_PREPARE( (void*) obj ); \ 233 #undef KMP_FSYNC_SPIN_ACQUIRED 234 #define KMP_FSYNC_SPIN_ACQUIRED( obj ) do { \ 235 SSC_MARK_SPIN_END(); \ 236 if ( sync_iters >= __kmp_itt_prepare_delay ) { \ 237 KMP_FSYNC_ACQUIRED( (void*) obj ); \ 246 #define KMP_ITT_IGNORE( statement ) do { \ 247 __itt_state_t __itt_state_; \ 248 if ( __itt_state_get_ptr ) { \ 249 __itt_state_ = __itt_state_get(); \ 250 __itt_obj_mode_set( __itt_obj_prop_ignore, __itt_obj_state_set ); \ 253 if ( __itt_state_get_ptr ) { \ 254 __itt_state_set( __itt_state_ ); \ 258 const int KMP_MAX_FRAME_DOMAINS = 512;
260 extern kmp_int32 __kmp_barrier_domain_count;
261 extern kmp_int32 __kmp_region_domain_count;
262 extern __itt_domain* __kmp_itt_barrier_domains[KMP_MAX_FRAME_DOMAINS];
263 extern __itt_domain* __kmp_itt_region_domains[KMP_MAX_FRAME_DOMAINS];
264 extern __itt_domain* __kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
265 extern kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
266 extern __itt_domain * metadata_domain;
267 extern __itt_string_handle * string_handle_imbl;
268 extern __itt_string_handle * string_handle_loop;
269 extern __itt_string_handle * string_handle_sngl;
274 # define KMP_FSYNC_PREPARE( obj ) ((void)0) 275 # define KMP_FSYNC_CANCEL( obj ) ((void)0) 276 # define KMP_FSYNC_ACQUIRED( obj ) ((void)0) 277 # define KMP_FSYNC_RELEASING( obj ) ((void)0) 279 # define KMP_FSYNC_SPIN_INIT( obj, spin ) ((void)0) 280 # define KMP_FSYNC_SPIN_PREPARE( obj ) ((void)0) 281 # define KMP_FSYNC_SPIN_ACQUIRED( obj ) ((void)0) 283 # define KMP_ITT_IGNORE(stmt ) do { stmt } while (0) 285 #endif // USE_ITT_NOTIFY 289 #include "kmp_itt.inl" 299 # define KMP_FSYNC_PREPARE( obj ) ((void)0) 300 # define KMP_FSYNC_CANCEL( obj ) ((void)0) 301 # define KMP_FSYNC_ACQUIRED( obj ) ((void)0) 302 # define KMP_FSYNC_RELEASING( obj ) ((void)0) 304 # define KMP_FSYNC_SPIN_INIT( obj, spin ) ((void)0) 305 # define KMP_FSYNC_SPIN_PREPARE( obj ) ((void)0) 306 # define KMP_FSYNC_SPIN_ACQUIRED( obj ) ((void)0) 308 # define KMP_ITT_IGNORE(stmt ) do { stmt } while (0) 310 # define USE_ITT_BUILD_ARG(x)