13 #ifndef __OMPT_INTERNAL_H__
14 #define __OMPT_INTERNAL_H__
16 #include "ompt-event-specific.h"
17 #include "omp-tools.h"
19 #define OMPT_VERSION 1
21 #define _OMP_EXTERN extern "C"
23 #define OMPT_INVOKER(x) \
24 ((x == fork_context_gnu) ? ompt_parallel_invoker_program \
25 : ompt_parallel_invoker_runtime)
27 #define ompt_callback(e) e##_callback
29 #define ompt_emi_callback(e) e##_emi_callback
31 #define ompt_emi_callback_type(e) e##_emi_t
33 #define ompt_emi_wrapper(e) e##_emi_wrapper
35 #define ompt_emi_event(e) e##_emi
38 typedef struct ompt_callbacks_internal_s {
39 #define ompt_event_macro(event, callback, eventid) \
40 callback ompt_callback(event);
42 FOREACH_OMPT_HOST_EVENT(ompt_event_macro)
44 #undef ompt_event_macro
45 } ompt_callbacks_internal_t;
48 typedef struct ompt_target_callbacks_internal_s {
49 #define ompt_event_macro(event, callback, eventid) \
50 callback ompt_callback(event);
52 FOREACH_OMPT_51_TARGET_EVENT(ompt_event_macro)
54 #undef ompt_event_macro
55 } ompt_target_callbacks_internal_t;
58 typedef struct ompt_callbacks_internal_noemi_s {
59 #define ompt_event_macro(event, callback, eventid) \
60 callback ompt_callback(event);
62 FOREACH_OMPT_NOEMI_EVENT(ompt_event_macro)
64 #undef ompt_event_macro
65 } ompt_callbacks_internal_noemi_t;
68 typedef struct ompt_callbacks_active_s {
69 unsigned int enabled : 1;
70 #define ompt_event_macro(event, callback, eventid) unsigned int event : 1;
72 FOREACH_OMPT_HOST_EVENT(ompt_event_macro)
74 #undef ompt_event_macro
75 } ompt_callbacks_active_t;
78 typedef struct ompt_target_callbacks_active_s {
79 unsigned int enabled : 1;
80 #define ompt_event_macro(event, callback, eventid) unsigned int event : 1;
82 FOREACH_OMPT_51_TARGET_EVENT(ompt_event_macro)
84 #undef ompt_event_macro
85 } ompt_target_callbacks_active_t;
87 #define TASK_TYPE_DETAILS_FORMAT(info) \
88 ((info->td_flags.task_serial || info->td_flags.tasking_ser) \
89 ? ompt_task_undeferred \
91 ((!(info->td_flags.tiedness)) ? ompt_task_untied : 0x0) | \
92 (info->td_flags.final ? ompt_task_final : 0x0) | \
93 (info->td_flags.merged_if0 ? ompt_task_mergeable : 0x0)
97 ompt_data_t task_data;
98 struct kmp_taskdata *scheduling_parent;
103 ompt_data_t parallel_data;
104 void *master_return_address;
107 typedef struct ompt_lw_taskteam_s {
108 ompt_team_info_t ompt_team_info;
109 ompt_task_info_t ompt_task_info;
111 struct ompt_lw_taskteam_s *parent;
112 } ompt_lw_taskteam_t;
115 ompt_data_t thread_data;
116 ompt_data_t task_data;
118 void *return_address;
120 ompt_wait_id_t wait_id;
121 int ompt_task_yielded;
124 } ompt_thread_info_t;
126 extern ompt_callbacks_internal_t ompt_callbacks;
127 extern ompt_target_callbacks_internal_t ompt_target_callbacks;
128 extern ompt_callbacks_internal_noemi_t ompt_callbacks_noemi;
130 #if OMPT_SUPPORT && OMPT_OPTIONAL
132 #define KMP_OMPT_DEPS_ALLOC __kmp_fast_allocate
133 #define KMP_OMPT_DEPS_FREE __kmp_fast_free
135 #define KMP_OMPT_DEPS_ALLOC __kmp_thread_malloc
136 #define KMP_OMPT_DEPS_FREE __kmp_thread_free
144 void ompt_pre_init(
void);
145 void ompt_post_init(
void);
146 void ompt_fini(
void);
148 #define OMPT_GET_RETURN_ADDRESS(level) __builtin_return_address(level)
149 #define OMPT_GET_FRAME_ADDRESS(level) __builtin_frame_address(level)
151 int __kmp_control_tool(uint64_t command, uint64_t modifier,
void *arg);
153 extern ompt_callbacks_active_t ompt_enabled;
154 extern ompt_target_callbacks_active_t ompt_target_enabled;
157 #define UNLIKELY(x) (x)
158 #define OMPT_NOINLINE __declspec(noinline)
160 #define UNLIKELY(x) __builtin_expect(!!(x), 0)
161 #define OMPT_NOINLINE __attribute__((noinline))