123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 |
- #if USE_ITT_BUILD
- #ifndef KMP_ITT_H
- #define KMP_ITT_H
- #include "kmp_lock.h"
- #define INTEL_ITTNOTIFY_API_PRIVATE
- #error #include "ittnotify.h"
- #error #include "legacy/ittnotify.h"
- #if KMP_DEBUG
- #define __kmp_inline
- #else
- #define __kmp_inline static inline
- #endif
- #if USE_ITT_NOTIFY
- extern kmp_int32 __kmp_itt_prepare_delay;
- #ifdef __cplusplus
- extern "C" void __kmp_itt_fini_ittlib(void);
- #else
- extern void __kmp_itt_fini_ittlib(void);
- #endif
- #endif
- #define USE_ITT_BUILD_ARG(x) , x
- void __kmp_itt_initialize();
- void __kmp_itt_destroy();
- void __kmp_itt_reset();
- __kmp_inline void
- __kmp_itt_region_forking(int gtid, int team_size,
- int barriers);
- __kmp_inline void
- __kmp_itt_region_joined(int gtid);
- __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);
- __kmp_inline void __kmp_itt_metadata_imbalance(int gtid, kmp_uint64 begin,
- kmp_uint64 end,
- kmp_uint64 imbalance,
- kmp_uint64 reduction);
- __kmp_inline void __kmp_itt_metadata_loop(ident_t *loc, kmp_uint64 sched_type,
- kmp_uint64 iterations,
- kmp_uint64 chunk);
- __kmp_inline void __kmp_itt_metadata_single(ident_t *loc);
- __kmp_inline void *__kmp_itt_barrier_object(int gtid, int bt, int set_name = 0,
- int delta = 0);
- __kmp_inline void __kmp_itt_barrier_starting(int gtid, void *object);
- __kmp_inline void __kmp_itt_barrier_middle(int gtid, void *object);
- __kmp_inline void __kmp_itt_barrier_finished(int gtid, void *object);
- __kmp_inline void *__kmp_itt_taskwait_object(int gtid);
- __kmp_inline void __kmp_itt_taskwait_starting(int gtid, void *object);
- __kmp_inline void __kmp_itt_taskwait_finished(int gtid, void *object);
- #define KMP_ITT_TASKWAIT_STARTING(obj) \
- if (UNLIKELY(__itt_sync_create_ptr)) { \
- obj = __kmp_itt_taskwait_object(gtid); \
- if (obj != NULL) { \
- __kmp_itt_taskwait_starting(gtid, obj); \
- } \
- }
- #define KMP_ITT_TASKWAIT_FINISHED(obj) \
- if (UNLIKELY(obj != NULL)) \
- __kmp_itt_taskwait_finished(gtid, obj);
- __kmp_inline void __kmp_itt_task_starting(void *object);
- __kmp_inline void __kmp_itt_task_finished(void *object);
- #if KMP_USE_DYNAMIC_LOCK
- __kmp_inline void __kmp_itt_lock_creating(kmp_user_lock_p lock,
- const ident_t *);
- #else
- __kmp_inline void __kmp_itt_lock_creating(kmp_user_lock_p lock);
- #endif
- __kmp_inline void __kmp_itt_lock_acquiring(kmp_user_lock_p lock);
- __kmp_inline void __kmp_itt_lock_acquired(kmp_user_lock_p lock);
- __kmp_inline void __kmp_itt_lock_releasing(kmp_user_lock_p lock);
- __kmp_inline void __kmp_itt_lock_cancelled(kmp_user_lock_p lock);
- __kmp_inline void __kmp_itt_lock_destroyed(kmp_user_lock_p lock);
- #if KMP_USE_DYNAMIC_LOCK
- __kmp_inline void __kmp_itt_critical_creating(kmp_user_lock_p lock,
- const ident_t *);
- #else
- __kmp_inline void __kmp_itt_critical_creating(kmp_user_lock_p lock);
- #endif
- __kmp_inline void __kmp_itt_critical_acquiring(kmp_user_lock_p lock);
- __kmp_inline void __kmp_itt_critical_acquired(kmp_user_lock_p lock);
- __kmp_inline void __kmp_itt_critical_releasing(kmp_user_lock_p lock);
- __kmp_inline void __kmp_itt_critical_destroyed(kmp_user_lock_p lock);
- __kmp_inline void __kmp_itt_single_start(int gtid);
- __kmp_inline void __kmp_itt_single_end(int gtid);
- __kmp_inline void __kmp_itt_ordered_init(int gtid);
- __kmp_inline void __kmp_itt_ordered_prep(int gtid);
- __kmp_inline void __kmp_itt_ordered_start(int gtid);
- __kmp_inline void __kmp_itt_ordered_end(int gtid);
- __kmp_inline void __kmp_itt_thread_ignore();
- __kmp_inline void __kmp_itt_thread_name(int gtid);
- __kmp_inline void __kmp_itt_system_object_created(void *object,
- char const *name);
- __kmp_inline __itt_caller __kmp_itt_stack_caller_create(void);
- __kmp_inline void __kmp_itt_stack_caller_destroy(__itt_caller);
- __kmp_inline void __kmp_itt_stack_callee_enter(__itt_caller);
- __kmp_inline void __kmp_itt_stack_callee_leave(__itt_caller);
- #if USE_ITT_NOTIFY
- #ifndef INCLUDE_SSC_MARKS
- #define INCLUDE_SSC_MARKS (KMP_OS_LINUX && KMP_ARCH_X86_64)
- #endif
- #if (INCLUDE_SSC_MARKS && KMP_OS_LINUX && KMP_ARCH_X86_64)
- #if defined(__INTEL_COMPILER)
- #define INSERT_SSC_MARK(tag) __SSC_MARK(tag)
- #else
- #define INSERT_SSC_MARK(tag) \
- __asm__ __volatile__("movl %0, %%ebx; .byte 0x64, 0x67, 0x90 " ::"i"(tag) \
- : "%ebx")
- #endif
- #else
- #define INSERT_SSC_MARK(tag) ((void)0)
- #endif
- #define SSC_MARK_SPIN_START() INSERT_SSC_MARK(0x4376)
- #define SSC_MARK_SPIN_END() INSERT_SSC_MARK(0x4377)
- #define SSC_MARK_FORKING() INSERT_SSC_MARK(0xd693)
- #define SSC_MARK_JOINING() INSERT_SSC_MARK(0xd694)
- #define SSC_MARK_INVOKING() INSERT_SSC_MARK(0xd695)
- #define SSC_MARK_DISPATCH_INIT() INSERT_SSC_MARK(0xd696)
- #define SSC_MARK_DISPATCH_NEXT() INSERT_SSC_MARK(0xd697)
- #define KMP_FSYNC_PREPARE(obj) __itt_fsync_prepare((void *)(obj))
- #define KMP_FSYNC_CANCEL(obj) __itt_fsync_cancel((void *)(obj))
- #define KMP_FSYNC_ACQUIRED(obj) __itt_fsync_acquired((void *)(obj))
- #define KMP_FSYNC_RELEASING(obj) __itt_fsync_releasing((void *)(obj))
- #undef KMP_FSYNC_SPIN_INIT
- #define KMP_FSYNC_SPIN_INIT(obj, spin) \
- int sync_iters = 0; \
- if (__itt_fsync_prepare_ptr) { \
- if (obj == NULL) { \
- obj = spin; \
- } \
- } \
- SSC_MARK_SPIN_START()
- #undef KMP_FSYNC_SPIN_PREPARE
- #define KMP_FSYNC_SPIN_PREPARE(obj) \
- do { \
- if (__itt_fsync_prepare_ptr && sync_iters < __kmp_itt_prepare_delay) { \
- ++sync_iters; \
- if (sync_iters >= __kmp_itt_prepare_delay) { \
- KMP_FSYNC_PREPARE((void *)obj); \
- } \
- } \
- } while (0)
- #undef KMP_FSYNC_SPIN_ACQUIRED
- #define KMP_FSYNC_SPIN_ACQUIRED(obj) \
- do { \
- SSC_MARK_SPIN_END(); \
- if (sync_iters >= __kmp_itt_prepare_delay) { \
- KMP_FSYNC_ACQUIRED((void *)obj); \
- } \
- } while (0)
- #define KMP_ITT_IGNORE(statement) \
- do { \
- __itt_state_t __itt_state_; \
- if (__itt_state_get_ptr) { \
- __itt_state_ = __itt_state_get(); \
- __itt_obj_mode_set(__itt_obj_prop_ignore, __itt_obj_state_set); \
- } \
- { statement } \
- if (__itt_state_get_ptr) { \
- __itt_state_set(__itt_state_); \
- } \
- } while (0)
- const int KMP_MAX_FRAME_DOMAINS = 997;
- typedef struct kmp_itthash_entry {
- ident_t *loc;
- int team_size;
- __itt_domain *d;
- struct kmp_itthash_entry *next_in_bucket;
- } kmp_itthash_entry_t;
- typedef struct kmp_itthash {
- kmp_itthash_entry_t *buckets[KMP_MAX_FRAME_DOMAINS];
- int count;
- } kmp_itthash_t;
- extern kmp_itthash_t __kmp_itt_region_domains;
- extern kmp_itthash_t __kmp_itt_barrier_domains;
- extern __itt_domain *metadata_domain;
- extern __itt_string_handle *string_handle_imbl;
- extern __itt_string_handle *string_handle_loop;
- extern __itt_string_handle *string_handle_sngl;
- #else
- #define KMP_FSYNC_PREPARE(obj) ((void)0)
- #define KMP_FSYNC_CANCEL(obj) ((void)0)
- #define KMP_FSYNC_ACQUIRED(obj) ((void)0)
- #define KMP_FSYNC_RELEASING(obj) ((void)0)
- #define KMP_FSYNC_SPIN_INIT(obj, spin) ((void)0)
- #define KMP_FSYNC_SPIN_PREPARE(obj) ((void)0)
- #define KMP_FSYNC_SPIN_ACQUIRED(obj) ((void)0)
- #define KMP_ITT_IGNORE(stmt) \
- do { \
- stmt \
- } while (0)
- #endif
- #if !KMP_DEBUG
- #error #include "kmp_itt.inl"
- #endif
- #endif
- #else
- #define KMP_FSYNC_PREPARE(obj) ((void)0)
- #define KMP_FSYNC_CANCEL(obj) ((void)0)
- #define KMP_FSYNC_ACQUIRED(obj) ((void)0)
- #define KMP_FSYNC_RELEASING(obj) ((void)0)
- #define KMP_FSYNC_SPIN_INIT(obj, spin) ((void)0)
- #define KMP_FSYNC_SPIN_PREPARE(obj) ((void)0)
- #define KMP_FSYNC_SPIN_ACQUIRED(obj) ((void)0)
- #define KMP_ITT_IGNORE(stmt) \
- do { \
- stmt \
- } while (0)
- #define USE_ITT_BUILD_ARG(x)
- #endif
|