omp-tools.h revision 345235
1345235Sdim// $FreeBSD: head/lib/libomp/omp-tools.h 345235 2019-03-16 15:01:36Z dim $
2345235Sdim/*
3345235Sdim * include/50/omp-tools.h.var
4345235Sdim */
5345235Sdim
6345235Sdim//===----------------------------------------------------------------------===//
7345235Sdim//
8345235Sdim//                     The LLVM Compiler Infrastructure
9345235Sdim//
10345235Sdim// This file is dual licensed under the MIT and the University of Illinois Open
11345235Sdim// Source Licenses. See LICENSE.txt for details.
12345235Sdim//
13345235Sdim//===----------------------------------------------------------------------===//
14345235Sdim
15345235Sdim#ifndef __OMPT__
16345235Sdim#define __OMPT__
17345235Sdim
18345235Sdim/*****************************************************************************
19345235Sdim * system include files
20345235Sdim *****************************************************************************/
21345235Sdim
22345235Sdim#include <stdint.h>
23345235Sdim#include <stddef.h>
24345235Sdim
25345235Sdim/*****************************************************************************
26345235Sdim * iteration macros
27345235Sdim *****************************************************************************/
28345235Sdim
29345235Sdim#define FOREACH_OMPT_INQUIRY_FN(macro)      \
30345235Sdim    macro (ompt_enumerate_states)           \
31345235Sdim    macro (ompt_enumerate_mutex_impls)      \
32345235Sdim                                            \
33345235Sdim    macro (ompt_set_callback)               \
34345235Sdim    macro (ompt_get_callback)               \
35345235Sdim                                            \
36345235Sdim    macro (ompt_get_state)                  \
37345235Sdim                                            \
38345235Sdim    macro (ompt_get_parallel_info)          \
39345235Sdim    macro (ompt_get_task_info)              \
40345235Sdim    macro (ompt_get_task_memory)            \
41345235Sdim    macro (ompt_get_thread_data)            \
42345235Sdim    macro (ompt_get_unique_id)              \
43345235Sdim    macro (ompt_finalize_tool)              \
44345235Sdim                                            \
45345235Sdim    macro(ompt_get_num_procs)               \
46345235Sdim    macro(ompt_get_num_places)              \
47345235Sdim    macro(ompt_get_place_proc_ids)          \
48345235Sdim    macro(ompt_get_place_num)               \
49345235Sdim    macro(ompt_get_partition_place_nums)    \
50345235Sdim    macro(ompt_get_proc_id)                 \
51345235Sdim                                            \
52345235Sdim    macro(ompt_get_target_info)             \
53345235Sdim    macro(ompt_get_num_devices)
54345235Sdim
55345235Sdim#define FOREACH_OMPT_STATE(macro)                                                                \
56345235Sdim                                                                                                \
57345235Sdim    /* first available state */                                                                 \
58345235Sdim    macro (ompt_state_undefined, 0x102)      /* undefined thread state */                        \
59345235Sdim                                                                                                \
60345235Sdim    /* work states (0..15) */                                                                   \
61345235Sdim    macro (ompt_state_work_serial, 0x000)    /* working outside parallel */                      \
62345235Sdim    macro (ompt_state_work_parallel, 0x001)  /* working within parallel */                       \
63345235Sdim    macro (ompt_state_work_reduction, 0x002) /* performing a reduction */                        \
64345235Sdim                                                                                                \
65345235Sdim    /* barrier wait states (16..31) */                                                          \
66345235Sdim    macro (ompt_state_wait_barrier, 0x010)   /* waiting at a barrier */                          \
67345235Sdim    macro (ompt_state_wait_barrier_implicit_parallel, 0x011)                                     \
68345235Sdim                                            /* implicit barrier at the end of parallel region */\
69345235Sdim    macro (ompt_state_wait_barrier_implicit_workshare, 0x012)                                    \
70345235Sdim                                            /* implicit barrier at the end of worksharing */    \
71345235Sdim    macro (ompt_state_wait_barrier_implicit, 0x013)  /* implicit barrier */                      \
72345235Sdim    macro (ompt_state_wait_barrier_explicit, 0x014)  /* explicit barrier */                      \
73345235Sdim                                                                                                \
74345235Sdim    /* task wait states (32..63) */                                                             \
75345235Sdim    macro (ompt_state_wait_taskwait, 0x020)  /* waiting at a taskwait */                         \
76345235Sdim    macro (ompt_state_wait_taskgroup, 0x021) /* waiting at a taskgroup */                        \
77345235Sdim                                                                                                \
78345235Sdim    /* mutex wait states (64..127) */                                                           \
79345235Sdim    macro (ompt_state_wait_mutex, 0x040)                                                         \
80345235Sdim    macro (ompt_state_wait_lock, 0x041)      /* waiting for lock */                              \
81345235Sdim    macro (ompt_state_wait_critical, 0x042)  /* waiting for critical */                          \
82345235Sdim    macro (ompt_state_wait_atomic, 0x043)    /* waiting for atomic */                            \
83345235Sdim    macro (ompt_state_wait_ordered, 0x044)   /* waiting for ordered */                           \
84345235Sdim                                                                                                \
85345235Sdim    /* target wait states (128..255) */                                                         \
86345235Sdim    macro (ompt_state_wait_target, 0x080)        /* waiting for target region */                 \
87345235Sdim    macro (ompt_state_wait_target_map, 0x081)    /* waiting for target data mapping operation */ \
88345235Sdim    macro (ompt_state_wait_target_update, 0x082) /* waiting for target update operation */       \
89345235Sdim                                                                                                \
90345235Sdim    /* misc (256..511) */                                                                       \
91345235Sdim    macro (ompt_state_idle, 0x100)           /* waiting for work */                              \
92345235Sdim    macro (ompt_state_overhead, 0x101)       /* overhead excluding wait states */                \
93345235Sdim                                                                                                \
94345235Sdim    /* implementation-specific states (512..) */
95345235Sdim
96345235Sdim
97345235Sdim#define FOREACH_KMP_MUTEX_IMPL(macro)                                                \
98345235Sdim    macro (kmp_mutex_impl_none, 0)         /* unknown implementation */              \
99345235Sdim    macro (kmp_mutex_impl_spin, 1)         /* based on spin */                       \
100345235Sdim    macro (kmp_mutex_impl_queuing, 2)      /* based on some fair policy */           \
101345235Sdim    macro (kmp_mutex_impl_speculative, 3)  /* based on HW-supported speculation */
102345235Sdim
103345235Sdim#define FOREACH_OMPT_EVENT(macro)                                                                                        \
104345235Sdim                                                                                                                         \
105345235Sdim    /*--- Mandatory Events ---*/                                                                                         \
106345235Sdim    macro (ompt_callback_thread_begin,      ompt_callback_thread_begin_t,       1) /* thread begin                    */ \
107345235Sdim    macro (ompt_callback_thread_end,        ompt_callback_thread_end_t,         2) /* thread end                      */ \
108345235Sdim                                                                                                                         \
109345235Sdim    macro (ompt_callback_parallel_begin,    ompt_callback_parallel_begin_t,     3) /* parallel begin                  */ \
110345235Sdim    macro (ompt_callback_parallel_end,      ompt_callback_parallel_end_t,       4) /* parallel end                    */ \
111345235Sdim                                                                                                                         \
112345235Sdim    macro (ompt_callback_task_create,       ompt_callback_task_create_t,        5) /* task begin                      */ \
113345235Sdim    macro (ompt_callback_task_schedule,     ompt_callback_task_schedule_t,      6) /* task schedule                   */ \
114345235Sdim    macro (ompt_callback_implicit_task,     ompt_callback_implicit_task_t,      7) /* implicit task                   */ \
115345235Sdim                                                                                                                         \
116345235Sdim    macro (ompt_callback_target,            ompt_callback_target_t,             8) /* target                          */ \
117345235Sdim    macro (ompt_callback_target_data_op,    ompt_callback_target_data_op_t,     9) /* target data op                  */ \
118345235Sdim    macro (ompt_callback_target_submit,     ompt_callback_target_submit_t,     10) /* target  submit                  */ \
119345235Sdim                                                                                                                         \
120345235Sdim    macro (ompt_callback_control_tool,      ompt_callback_control_tool_t,      11) /* control tool                    */ \
121345235Sdim                                                                                                                         \
122345235Sdim    macro (ompt_callback_device_initialize, ompt_callback_device_initialize_t, 12) /* device initialize               */ \
123345235Sdim    macro (ompt_callback_device_finalize,   ompt_callback_device_finalize_t,   13) /* device finalize                 */ \
124345235Sdim                                                                                                                         \
125345235Sdim    macro (ompt_callback_device_load,       ompt_callback_device_load_t,       14) /* device load                     */ \
126345235Sdim    macro (ompt_callback_device_unload,     ompt_callback_device_unload_t,     15) /* device unload                   */ \
127345235Sdim                                                                                                                         \
128345235Sdim    /* Optional Events */                                                                                                \
129345235Sdim    macro (ompt_callback_sync_region_wait,  ompt_callback_sync_region_t,       16) /* sync region wait begin or end   */ \
130345235Sdim                                                                                                                         \
131345235Sdim    macro (ompt_callback_mutex_released,    ompt_callback_mutex_t,             17) /* mutex released                  */ \
132345235Sdim                                                                                                                         \
133345235Sdim    macro (ompt_callback_dependences,       ompt_callback_dependences_t,       18) /* report task dependences         */ \
134345235Sdim    macro (ompt_callback_task_dependence,   ompt_callback_task_dependence_t,   19) /* report task dependence          */ \
135345235Sdim                                                                                                                         \
136345235Sdim    macro (ompt_callback_work,              ompt_callback_work_t,              20) /* task at work begin or end       */ \
137345235Sdim                                                                                                                         \
138345235Sdim    macro (ompt_callback_master,            ompt_callback_master_t,            21) /* task at master begin or end     */ \
139345235Sdim                                                                                                                         \
140345235Sdim    macro (ompt_callback_target_map,        ompt_callback_target_map_t,        22) /* target map                      */ \
141345235Sdim                                                                                                                         \
142345235Sdim    macro (ompt_callback_sync_region,       ompt_callback_sync_region_t,       23) /* sync region begin or end        */ \
143345235Sdim                                                                                                                         \
144345235Sdim    macro (ompt_callback_lock_init,         ompt_callback_mutex_acquire_t,     24) /* lock init                       */ \
145345235Sdim    macro (ompt_callback_lock_destroy,      ompt_callback_mutex_t,             25) /* lock destroy                    */ \
146345235Sdim                                                                                                                         \
147345235Sdim    macro (ompt_callback_mutex_acquire,     ompt_callback_mutex_acquire_t,     26) /* mutex acquire                   */ \
148345235Sdim    macro (ompt_callback_mutex_acquired,    ompt_callback_mutex_t,             27) /* mutex acquired                  */ \
149345235Sdim                                                                                                                         \
150345235Sdim    macro (ompt_callback_nest_lock,         ompt_callback_nest_lock_t,         28) /* nest lock                       */ \
151345235Sdim                                                                                                                         \
152345235Sdim    macro (ompt_callback_flush,             ompt_callback_flush_t,             29) /* after executing flush           */ \
153345235Sdim                                                                                                                         \
154345235Sdim    macro (ompt_callback_cancel,            ompt_callback_cancel_t,            30) /* cancel innermost binding region */ \
155345235Sdim                                                                                                                         \
156345235Sdim    macro (ompt_callback_reduction,         ompt_callback_sync_region_t,       31) /* reduction                       */ \
157345235Sdim                                                                                                                         \
158345235Sdim    macro (ompt_callback_dispatch,          ompt_callback_dispatch_t,          32) /* dispatch of work                */
159345235Sdim
160345235Sdim/*****************************************************************************
161345235Sdim * implementation specific types
162345235Sdim *****************************************************************************/
163345235Sdim
164345235Sdimtypedef enum kmp_mutex_impl_t {
165345235Sdim#define kmp_mutex_impl_macro(impl, code) impl = code,
166345235Sdim    FOREACH_KMP_MUTEX_IMPL(kmp_mutex_impl_macro)
167345235Sdim#undef kmp_mutex_impl_macro
168345235Sdim} kmp_mutex_impl_t;
169345235Sdim
170345235Sdim/*****************************************************************************
171345235Sdim * definitions generated from spec
172345235Sdim *****************************************************************************/
173345235Sdim
174345235Sdimtypedef enum ompt_callbacks_t {
175345235Sdim  ompt_callback_thread_begin             = 1,
176345235Sdim  ompt_callback_thread_end               = 2,
177345235Sdim  ompt_callback_parallel_begin           = 3,
178345235Sdim  ompt_callback_parallel_end             = 4,
179345235Sdim  ompt_callback_task_create              = 5,
180345235Sdim  ompt_callback_task_schedule            = 6,
181345235Sdim  ompt_callback_implicit_task            = 7,
182345235Sdim  ompt_callback_target                   = 8,
183345235Sdim  ompt_callback_target_data_op           = 9,
184345235Sdim  ompt_callback_target_submit            = 10,
185345235Sdim  ompt_callback_control_tool             = 11,
186345235Sdim  ompt_callback_device_initialize        = 12,
187345235Sdim  ompt_callback_device_finalize          = 13,
188345235Sdim  ompt_callback_device_load              = 14,
189345235Sdim  ompt_callback_device_unload            = 15,
190345235Sdim  ompt_callback_sync_region_wait         = 16,
191345235Sdim  ompt_callback_mutex_released           = 17,
192345235Sdim  ompt_callback_dependences              = 18,
193345235Sdim  ompt_callback_task_dependence          = 19,
194345235Sdim  ompt_callback_work                     = 20,
195345235Sdim  ompt_callback_master                   = 21,
196345235Sdim  ompt_callback_target_map               = 22,
197345235Sdim  ompt_callback_sync_region              = 23,
198345235Sdim  ompt_callback_lock_init                = 24,
199345235Sdim  ompt_callback_lock_destroy             = 25,
200345235Sdim  ompt_callback_mutex_acquire            = 26,
201345235Sdim  ompt_callback_mutex_acquired           = 27,
202345235Sdim  ompt_callback_nest_lock                = 28,
203345235Sdim  ompt_callback_flush                    = 29,
204345235Sdim  ompt_callback_cancel                   = 30,
205345235Sdim  ompt_callback_reduction                = 31,
206345235Sdim  ompt_callback_dispatch                 = 32
207345235Sdim} ompt_callbacks_t;
208345235Sdim
209345235Sdimtypedef enum ompt_record_t {
210345235Sdim  ompt_record_ompt               = 1,
211345235Sdim  ompt_record_native             = 2,
212345235Sdim  ompt_record_invalid            = 3
213345235Sdim} ompt_record_t;
214345235Sdim
215345235Sdimtypedef enum ompt_record_native_t {
216345235Sdim  ompt_record_native_info  = 1,
217345235Sdim  ompt_record_native_event = 2
218345235Sdim} ompt_record_native_t;
219345235Sdim
220345235Sdimtypedef enum ompt_set_result_t {
221345235Sdim  ompt_set_error            = 0,
222345235Sdim  ompt_set_never            = 1,
223345235Sdim  ompt_set_impossible       = 2,
224345235Sdim  ompt_set_sometimes        = 3,
225345235Sdim  ompt_set_sometimes_paired = 4,
226345235Sdim  ompt_set_always           = 5
227345235Sdim} ompt_set_result_t;
228345235Sdim
229345235Sdimtypedef uint64_t ompt_id_t;
230345235Sdim
231345235Sdimtypedef uint64_t ompt_device_time_t;
232345235Sdim
233345235Sdimtypedef uint64_t ompt_buffer_cursor_t;
234345235Sdim
235345235Sdimtypedef enum ompt_thread_t {
236345235Sdim  ompt_thread_initial                 = 1,
237345235Sdim  ompt_thread_worker                  = 2,
238345235Sdim  ompt_thread_other                   = 3,
239345235Sdim  ompt_thread_unknown                 = 4
240345235Sdim} ompt_thread_t;
241345235Sdim
242345235Sdimtypedef enum ompt_scope_endpoint_t {
243345235Sdim  ompt_scope_begin                    = 1,
244345235Sdim  ompt_scope_end                      = 2
245345235Sdim} ompt_scope_endpoint_t;
246345235Sdim
247345235Sdimtypedef enum ompt_dispatch_t {
248345235Sdim  ompt_dispatch_iteration             = 1,
249345235Sdim  ompt_dispatch_section               = 2
250345235Sdim} ompt_dispatch_t;
251345235Sdim
252345235Sdimtypedef enum ompt_sync_region_t {
253345235Sdim  ompt_sync_region_barrier                = 1,
254345235Sdim  ompt_sync_region_barrier_implicit       = 2,
255345235Sdim  ompt_sync_region_barrier_explicit       = 3,
256345235Sdim  ompt_sync_region_barrier_implementation = 4,
257345235Sdim  ompt_sync_region_taskwait               = 5,
258345235Sdim  ompt_sync_region_taskgroup              = 6,
259345235Sdim  ompt_sync_region_reduction              = 7
260345235Sdim} ompt_sync_region_t;
261345235Sdim
262345235Sdimtypedef enum ompt_target_data_op_t {
263345235Sdim  ompt_target_data_alloc                = 1,
264345235Sdim  ompt_target_data_transfer_to_device   = 2,
265345235Sdim  ompt_target_data_transfer_from_device = 3,
266345235Sdim  ompt_target_data_delete               = 4,
267345235Sdim  ompt_target_data_associate            = 5,
268345235Sdim  ompt_target_data_disassociate         = 6
269345235Sdim} ompt_target_data_op_t;
270345235Sdim
271345235Sdimtypedef enum ompt_work_t {
272345235Sdim  ompt_work_loop               = 1,
273345235Sdim  ompt_work_sections           = 2,
274345235Sdim  ompt_work_single_executor    = 3,
275345235Sdim  ompt_work_single_other       = 4,
276345235Sdim  ompt_work_workshare          = 5,
277345235Sdim  ompt_work_distribute         = 6,
278345235Sdim  ompt_work_taskloop           = 7
279345235Sdim} ompt_work_t;
280345235Sdim
281345235Sdimtypedef enum ompt_mutex_t {
282345235Sdim  ompt_mutex_lock                     = 1,
283345235Sdim  ompt_mutex_test_lock                = 2,
284345235Sdim  ompt_mutex_nest_lock                = 3,
285345235Sdim  ompt_mutex_test_nest_lock           = 4,
286345235Sdim  ompt_mutex_critical                 = 5,
287345235Sdim  ompt_mutex_atomic                   = 6,
288345235Sdim  ompt_mutex_ordered                  = 7
289345235Sdim} ompt_mutex_t;
290345235Sdim
291345235Sdimtypedef enum ompt_native_mon_flag_t {
292345235Sdim  ompt_native_data_motion_explicit    = 0x01,
293345235Sdim  ompt_native_data_motion_implicit    = 0x02,
294345235Sdim  ompt_native_kernel_invocation       = 0x04,
295345235Sdim  ompt_native_kernel_execution        = 0x08,
296345235Sdim  ompt_native_driver                  = 0x10,
297345235Sdim  ompt_native_runtime                 = 0x20,
298345235Sdim  ompt_native_overhead                = 0x40,
299345235Sdim  ompt_native_idleness                = 0x80
300345235Sdim} ompt_native_mon_flag_t;
301345235Sdim
302345235Sdimtypedef enum ompt_task_flag_t {
303345235Sdim  ompt_task_initial                   = 0x00000001,
304345235Sdim  ompt_task_implicit                  = 0x00000002,
305345235Sdim  ompt_task_explicit                  = 0x00000004,
306345235Sdim  ompt_task_target                    = 0x00000008,
307345235Sdim  ompt_task_undeferred                = 0x08000000,
308345235Sdim  ompt_task_untied                    = 0x10000000,
309345235Sdim  ompt_task_final                     = 0x20000000,
310345235Sdim  ompt_task_mergeable                 = 0x40000000,
311345235Sdim  ompt_task_merged                    = 0x80000000
312345235Sdim} ompt_task_flag_t;
313345235Sdim
314345235Sdimtypedef enum ompt_task_status_t {
315345235Sdim  ompt_task_complete      = 1,
316345235Sdim  ompt_task_yield         = 2,
317345235Sdim  ompt_task_cancel        = 3,
318345235Sdim  ompt_task_detach        = 4,
319345235Sdim  ompt_task_early_fulfill = 5,
320345235Sdim  ompt_task_late_fulfill  = 6,
321345235Sdim  ompt_task_switch        = 7
322345235Sdim} ompt_task_status_t;
323345235Sdim
324345235Sdimtypedef enum ompt_target_t {
325345235Sdim  ompt_target                         = 1,
326345235Sdim  ompt_target_enter_data              = 2,
327345235Sdim  ompt_target_exit_data               = 3,
328345235Sdim  ompt_target_update                  = 4
329345235Sdim} ompt_target_t;
330345235Sdim
331345235Sdimtypedef enum ompt_parallel_flag_t {
332345235Sdim  ompt_parallel_invoker_program = 0x00000001,
333345235Sdim  ompt_parallel_invoker_runtime = 0x00000002,
334345235Sdim  ompt_parallel_league          = 0x40000000,
335345235Sdim  ompt_parallel_team            = 0x80000000
336345235Sdim} ompt_parallel_flag_t;
337345235Sdim
338345235Sdimtypedef enum ompt_target_map_flag_t {
339345235Sdim  ompt_target_map_flag_to             = 0x01,
340345235Sdim  ompt_target_map_flag_from           = 0x02,
341345235Sdim  ompt_target_map_flag_alloc          = 0x04,
342345235Sdim  ompt_target_map_flag_release        = 0x08,
343345235Sdim  ompt_target_map_flag_delete         = 0x10,
344345235Sdim  ompt_target_map_flag_implicit       = 0x20
345345235Sdim} ompt_target_map_flag_t;
346345235Sdim
347345235Sdimtypedef enum ompt_dependence_type_t {
348345235Sdim  ompt_dependence_type_in              = 1,
349345235Sdim  ompt_dependence_type_out             = 2,
350345235Sdim  ompt_dependence_type_inout           = 3,
351345235Sdim  ompt_dependence_type_mutexinoutset   = 4,
352345235Sdim  ompt_dependence_type_source          = 5,
353345235Sdim  ompt_dependence_type_sink            = 6
354345235Sdim} ompt_dependence_type_t;
355345235Sdim
356345235Sdimtypedef enum ompt_cancel_flag_t {
357345235Sdim  ompt_cancel_parallel       = 0x01,
358345235Sdim  ompt_cancel_sections       = 0x02,
359345235Sdim  ompt_cancel_loop           = 0x04,
360345235Sdim  ompt_cancel_taskgroup      = 0x08,
361345235Sdim  ompt_cancel_activated      = 0x10,
362345235Sdim  ompt_cancel_detected       = 0x20,
363345235Sdim  ompt_cancel_discarded_task = 0x40
364345235Sdim} ompt_cancel_flag_t;
365345235Sdim
366345235Sdimtypedef uint64_t ompt_hwid_t;
367345235Sdim
368345235Sdimtypedef uint64_t ompt_wait_id_t;
369345235Sdim
370345235Sdimtypedef enum ompt_frame_flag_t {
371345235Sdim  ompt_frame_runtime        = 0x00,
372345235Sdim  ompt_frame_application    = 0x01,
373345235Sdim  ompt_frame_cfa            = 0x10,
374345235Sdim  ompt_frame_framepointer   = 0x20,
375345235Sdim  ompt_frame_stackaddress   = 0x30
376345235Sdim} ompt_frame_flag_t;
377345235Sdim
378345235Sdimtypedef enum ompt_state_t {
379345235Sdim  ompt_state_work_serial                      = 0x000,
380345235Sdim  ompt_state_work_parallel                    = 0x001,
381345235Sdim  ompt_state_work_reduction                   = 0x002,
382345235Sdim
383345235Sdim  ompt_state_wait_barrier                     = 0x010,
384345235Sdim  ompt_state_wait_barrier_implicit_parallel   = 0x011,
385345235Sdim  ompt_state_wait_barrier_implicit_workshare  = 0x012,
386345235Sdim  ompt_state_wait_barrier_implicit            = 0x013,
387345235Sdim  ompt_state_wait_barrier_explicit            = 0x014,
388345235Sdim
389345235Sdim  ompt_state_wait_taskwait                    = 0x020,
390345235Sdim  ompt_state_wait_taskgroup                   = 0x021,
391345235Sdim
392345235Sdim  ompt_state_wait_mutex                       = 0x040,
393345235Sdim  ompt_state_wait_lock                        = 0x041,
394345235Sdim  ompt_state_wait_critical                    = 0x042,
395345235Sdim  ompt_state_wait_atomic                      = 0x043,
396345235Sdim  ompt_state_wait_ordered                     = 0x044,
397345235Sdim
398345235Sdim  ompt_state_wait_target                      = 0x080,
399345235Sdim  ompt_state_wait_target_map                  = 0x081,
400345235Sdim  ompt_state_wait_target_update               = 0x082,
401345235Sdim
402345235Sdim  ompt_state_idle                             = 0x100,
403345235Sdim  ompt_state_overhead                         = 0x101,
404345235Sdim  ompt_state_undefined                        = 0x102
405345235Sdim} ompt_state_t;
406345235Sdim
407345235Sdimtypedef uint64_t (*ompt_get_unique_id_t) (void);
408345235Sdim
409345235Sdimtypedef uint64_t ompd_size_t;
410345235Sdim
411345235Sdimtypedef uint64_t ompd_wait_id_t;
412345235Sdim
413345235Sdimtypedef uint64_t ompd_addr_t;
414345235Sdimtypedef int64_t  ompd_word_t;
415345235Sdimtypedef uint64_t ompd_seg_t;
416345235Sdim
417345235Sdimtypedef uint64_t ompd_device_t;
418345235Sdim
419345235Sdimtypedef uint64_t ompd_thread_id_t;
420345235Sdim
421345235Sdimtypedef enum ompd_scope_t {
422345235Sdim  ompd_scope_global = 1,
423345235Sdim  ompd_scope_address_space = 2,
424345235Sdim  ompd_scope_thread = 3,
425345235Sdim  ompd_scope_parallel = 4,
426345235Sdim  ompd_scope_implicit_task = 5,
427345235Sdim  ompd_scope_task = 6
428345235Sdim} ompd_scope_t;
429345235Sdim
430345235Sdimtypedef uint64_t ompd_icv_id_t;
431345235Sdim
432345235Sdimtypedef enum ompd_rc_t {
433345235Sdim  ompd_rc_ok = 0,
434345235Sdim  ompd_rc_unavailable = 1,
435345235Sdim  ompd_rc_stale_handle = 2,
436345235Sdim  ompd_rc_bad_input = 3,
437345235Sdim  ompd_rc_error = 4,
438345235Sdim  ompd_rc_unsupported = 5,
439345235Sdim  ompd_rc_needs_state_tracking = 6,
440345235Sdim  ompd_rc_incompatible = 7,
441345235Sdim  ompd_rc_device_read_error = 8,
442345235Sdim  ompd_rc_device_write_error = 9,
443345235Sdim  ompd_rc_nomem = 10,
444345235Sdim} ompd_rc_t;
445345235Sdim
446345235Sdimtypedef void (*ompt_interface_fn_t) (void);
447345235Sdim
448345235Sdimtypedef ompt_interface_fn_t (*ompt_function_lookup_t) (
449345235Sdim  const char *interface_function_name
450345235Sdim);
451345235Sdim
452345235Sdimtypedef union ompt_data_t {
453345235Sdim  uint64_t value;
454345235Sdim  void *ptr;
455345235Sdim} ompt_data_t;
456345235Sdim
457345235Sdimtypedef struct ompt_frame_t {
458345235Sdim  ompt_data_t exit_frame;
459345235Sdim  ompt_data_t enter_frame;
460345235Sdim  int exit_frame_flags;
461345235Sdim  int enter_frame_flags;
462345235Sdim} ompt_frame_t;
463345235Sdim
464345235Sdimtypedef void (*ompt_callback_t) (void);
465345235Sdim
466345235Sdimtypedef void ompt_device_t;
467345235Sdim
468345235Sdimtypedef void ompt_buffer_t;
469345235Sdim
470345235Sdimtypedef void (*ompt_callback_buffer_request_t) (
471345235Sdim  int device_num,
472345235Sdim  ompt_buffer_t **buffer,
473345235Sdim  size_t *bytes
474345235Sdim);
475345235Sdim
476345235Sdimtypedef void (*ompt_callback_buffer_complete_t) (
477345235Sdim  int device_num,
478345235Sdim  ompt_buffer_t *buffer,
479345235Sdim  size_t bytes,
480345235Sdim  ompt_buffer_cursor_t begin,
481345235Sdim  int buffer_owned
482345235Sdim);
483345235Sdim
484345235Sdimtypedef void (*ompt_finalize_t) (
485345235Sdim  ompt_data_t *tool_data
486345235Sdim);
487345235Sdim
488345235Sdimtypedef int (*ompt_initialize_t) (
489345235Sdim  ompt_function_lookup_t lookup,
490345235Sdim  int initial_device_num,
491345235Sdim  ompt_data_t *tool_data
492345235Sdim);
493345235Sdim
494345235Sdimtypedef struct ompt_start_tool_result_t {
495345235Sdim  ompt_initialize_t initialize;
496345235Sdim  ompt_finalize_t finalize;
497345235Sdim  ompt_data_t tool_data;
498345235Sdim} ompt_start_tool_result_t;
499345235Sdim
500345235Sdimtypedef struct ompt_record_abstract_t {
501345235Sdim  ompt_record_native_t rclass;
502345235Sdim  const char *type;
503345235Sdim  ompt_device_time_t start_time;
504345235Sdim  ompt_device_time_t end_time;
505345235Sdim  ompt_hwid_t hwid;
506345235Sdim} ompt_record_abstract_t;
507345235Sdim
508345235Sdimtypedef struct ompt_dependence_t {
509345235Sdim  ompt_data_t variable;
510345235Sdim  ompt_dependence_type_t dependence_type;
511345235Sdim} ompt_dependence_t;
512345235Sdim
513345235Sdimtypedef int (*ompt_enumerate_states_t) (
514345235Sdim  int current_state,
515345235Sdim  int *next_state,
516345235Sdim  const char **next_state_name
517345235Sdim);
518345235Sdim
519345235Sdimtypedef int (*ompt_enumerate_mutex_impls_t) (
520345235Sdim  int current_impl,
521345235Sdim  int *next_impl,
522345235Sdim  const char **next_impl_name
523345235Sdim);
524345235Sdim
525345235Sdimtypedef ompt_set_result_t (*ompt_set_callback_t) (
526345235Sdim  ompt_callbacks_t event,
527345235Sdim  ompt_callback_t callback
528345235Sdim);
529345235Sdim
530345235Sdimtypedef int (*ompt_get_callback_t) (
531345235Sdim  ompt_callbacks_t event,
532345235Sdim  ompt_callback_t *callback
533345235Sdim);
534345235Sdim
535345235Sdimtypedef ompt_data_t *(*ompt_get_thread_data_t) (void);
536345235Sdim
537345235Sdimtypedef int (*ompt_get_num_procs_t) (void);
538345235Sdim
539345235Sdimtypedef int (*ompt_get_num_places_t) (void);
540345235Sdim
541345235Sdimtypedef int (*ompt_get_place_proc_ids_t) (
542345235Sdim  int place_num,
543345235Sdim  int ids_size,
544345235Sdim  int *ids
545345235Sdim);
546345235Sdim
547345235Sdimtypedef int (*ompt_get_place_num_t) (void);
548345235Sdim
549345235Sdimtypedef int (*ompt_get_partition_place_nums_t) (
550345235Sdim  int place_nums_size,
551345235Sdim  int *place_nums
552345235Sdim);
553345235Sdim
554345235Sdimtypedef int (*ompt_get_proc_id_t) (void);
555345235Sdim
556345235Sdimtypedef int (*ompt_get_state_t) (
557345235Sdim  ompt_wait_id_t *wait_id
558345235Sdim);
559345235Sdim
560345235Sdimtypedef int (*ompt_get_parallel_info_t) (
561345235Sdim  int ancestor_level,
562345235Sdim  ompt_data_t **parallel_data,
563345235Sdim  int *team_size
564345235Sdim);
565345235Sdim
566345235Sdimtypedef int (*ompt_get_task_info_t) (
567345235Sdim  int ancestor_level,
568345235Sdim  int *flags,
569345235Sdim  ompt_data_t **task_data,
570345235Sdim  ompt_frame_t **task_frame,
571345235Sdim  ompt_data_t **parallel_data,
572345235Sdim  int *thread_num
573345235Sdim);
574345235Sdim
575345235Sdimtypedef int (*ompt_get_task_memory_t)(
576345235Sdim  void **addr,
577345235Sdim  size_t *size,
578345235Sdim  int block
579345235Sdim);
580345235Sdim
581345235Sdimtypedef int (*ompt_get_target_info_t) (
582345235Sdim  uint64_t *device_num,
583345235Sdim  ompt_id_t *target_id,
584345235Sdim  ompt_id_t *host_op_id
585345235Sdim);
586345235Sdim
587345235Sdimtypedef int (*ompt_get_num_devices_t) (void);
588345235Sdim
589345235Sdimtypedef void (*ompt_finalize_tool_t) (void);
590345235Sdim
591345235Sdimtypedef int (*ompt_get_device_num_procs_t) (
592345235Sdim  ompt_device_t *device
593345235Sdim);
594345235Sdim
595345235Sdimtypedef ompt_device_time_t (*ompt_get_device_time_t) (
596345235Sdim  ompt_device_t *device
597345235Sdim);
598345235Sdim
599345235Sdimtypedef double (*ompt_translate_time_t) (
600345235Sdim  ompt_device_t *device,
601345235Sdim  ompt_device_time_t time
602345235Sdim);
603345235Sdim
604345235Sdimtypedef ompt_set_result_t (*ompt_set_trace_ompt_t) (
605345235Sdim  ompt_device_t *device,
606345235Sdim  unsigned int enable,
607345235Sdim  unsigned int etype
608345235Sdim);
609345235Sdim
610345235Sdimtypedef ompt_set_result_t (*ompt_set_trace_native_t) (
611345235Sdim  ompt_device_t *device,
612345235Sdim  int enable,
613345235Sdim  int flags
614345235Sdim);
615345235Sdim
616345235Sdimtypedef int (*ompt_start_trace_t) (
617345235Sdim  ompt_device_t *device,
618345235Sdim  ompt_callback_buffer_request_t request,
619345235Sdim  ompt_callback_buffer_complete_t complete
620345235Sdim);
621345235Sdim
622345235Sdimtypedef int (*ompt_pause_trace_t) (
623345235Sdim  ompt_device_t *device,
624345235Sdim  int begin_pause
625345235Sdim);
626345235Sdim
627345235Sdimtypedef int (*ompt_flush_trace_t) (
628345235Sdim  ompt_device_t *device
629345235Sdim);
630345235Sdim
631345235Sdimtypedef int (*ompt_stop_trace_t) (
632345235Sdim  ompt_device_t *device
633345235Sdim);
634345235Sdim
635345235Sdimtypedef int (*ompt_advance_buffer_cursor_t) (
636345235Sdim  ompt_device_t *device,
637345235Sdim  ompt_buffer_t *buffer,
638345235Sdim  size_t size,
639345235Sdim  ompt_buffer_cursor_t current,
640345235Sdim  ompt_buffer_cursor_t *next
641345235Sdim);
642345235Sdim
643345235Sdimtypedef ompt_record_t (*ompt_get_record_type_t) (
644345235Sdim  ompt_buffer_t *buffer,
645345235Sdim  ompt_buffer_cursor_t current
646345235Sdim);
647345235Sdim
648345235Sdimtypedef void *(*ompt_get_record_native_t) (
649345235Sdim  ompt_buffer_t *buffer,
650345235Sdim  ompt_buffer_cursor_t current,
651345235Sdim  ompt_id_t *host_op_id
652345235Sdim);
653345235Sdim
654345235Sdimtypedef ompt_record_abstract_t *
655345235Sdim(*ompt_get_record_abstract_t) (
656345235Sdim  void *native_record
657345235Sdim);
658345235Sdim
659345235Sdimtypedef void (*ompt_callback_thread_begin_t) (
660345235Sdim  ompt_thread_t thread_type,
661345235Sdim  ompt_data_t *thread_data
662345235Sdim);
663345235Sdim
664345235Sdimtypedef struct ompt_record_thread_begin_t {
665345235Sdim  ompt_thread_t thread_type;
666345235Sdim} ompt_record_thread_begin_t;
667345235Sdim
668345235Sdimtypedef void (*ompt_callback_thread_end_t) (
669345235Sdim  ompt_data_t *thread_data
670345235Sdim);
671345235Sdim
672345235Sdimtypedef void (*ompt_callback_parallel_begin_t) (
673345235Sdim  ompt_data_t *encountering_task_data,
674345235Sdim  const ompt_frame_t *encountering_task_frame,
675345235Sdim  ompt_data_t *parallel_data,
676345235Sdim  unsigned int requested_parallelism,
677345235Sdim  int flags,
678345235Sdim  const void *codeptr_ra
679345235Sdim);
680345235Sdim
681345235Sdimtypedef struct ompt_record_parallel_begin_t {
682345235Sdim  ompt_id_t encountering_task_id;
683345235Sdim  ompt_id_t parallel_id;
684345235Sdim  unsigned int requested_parallelism;
685345235Sdim  int flags;
686345235Sdim  const void *codeptr_ra;
687345235Sdim} ompt_record_parallel_begin_t;
688345235Sdim
689345235Sdimtypedef void (*ompt_callback_parallel_end_t) (
690345235Sdim  ompt_data_t *parallel_data,
691345235Sdim  ompt_data_t *encountering_task_data,
692345235Sdim  int flags,
693345235Sdim  const void *codeptr_ra
694345235Sdim);
695345235Sdim
696345235Sdimtypedef struct ompt_record_parallel_end_t {
697345235Sdim  ompt_id_t parallel_id;
698345235Sdim  ompt_id_t encountering_task_id;
699345235Sdim  int flags;
700345235Sdim  const void *codeptr_ra;
701345235Sdim} ompt_record_parallel_end_t;
702345235Sdim
703345235Sdimtypedef void (*ompt_callback_work_t) (
704345235Sdim  ompt_work_t wstype,
705345235Sdim  ompt_scope_endpoint_t endpoint,
706345235Sdim  ompt_data_t *parallel_data,
707345235Sdim  ompt_data_t *task_data,
708345235Sdim  uint64_t count,
709345235Sdim  const void *codeptr_ra
710345235Sdim);
711345235Sdim
712345235Sdimtypedef struct ompt_record_work_t {
713345235Sdim  ompt_work_t wstype;
714345235Sdim  ompt_scope_endpoint_t endpoint;
715345235Sdim  ompt_id_t parallel_id;
716345235Sdim  ompt_id_t task_id;
717345235Sdim  uint64_t count;
718345235Sdim  const void *codeptr_ra;
719345235Sdim} ompt_record_work_t;
720345235Sdim
721345235Sdimtypedef void (*ompt_callback_dispatch_t) (
722345235Sdim  ompt_data_t *parallel_data,
723345235Sdim  ompt_data_t *task_data,
724345235Sdim  ompt_dispatch_t kind,
725345235Sdim  ompt_data_t instance
726345235Sdim);
727345235Sdim
728345235Sdimtypedef struct ompt_record_dispatch_t {
729345235Sdim  ompt_id_t parallel_id;
730345235Sdim  ompt_id_t task_id;
731345235Sdim  ompt_dispatch_t kind;
732345235Sdim  ompt_data_t instance;
733345235Sdim} ompt_record_dispatch_t;
734345235Sdim
735345235Sdimtypedef void (*ompt_callback_task_create_t) (
736345235Sdim  ompt_data_t *encountering_task_data,
737345235Sdim  const ompt_frame_t *encountering_task_frame,
738345235Sdim  ompt_data_t *new_task_data,
739345235Sdim  int flags,
740345235Sdim  int has_dependences,
741345235Sdim  const void *codeptr_ra
742345235Sdim);
743345235Sdim
744345235Sdimtypedef struct ompt_record_task_create_t {
745345235Sdim  ompt_id_t encountering_task_id;
746345235Sdim  ompt_id_t new_task_id;
747345235Sdim  int flags;
748345235Sdim  int has_dependences;
749345235Sdim  const void *codeptr_ra;
750345235Sdim} ompt_record_task_create_t;
751345235Sdim
752345235Sdimtypedef void (*ompt_callback_dependences_t) (
753345235Sdim  ompt_data_t *task_data,
754345235Sdim  const ompt_dependence_t *deps,
755345235Sdim  int ndeps
756345235Sdim);
757345235Sdim
758345235Sdimtypedef struct ompt_record_dependences_t {
759345235Sdim  ompt_id_t task_id;
760345235Sdim  ompt_dependence_t dep;
761345235Sdim  int ndeps;
762345235Sdim} ompt_record_dependences_t;
763345235Sdim
764345235Sdimtypedef void (*ompt_callback_task_dependence_t) (
765345235Sdim  ompt_data_t *src_task_data,
766345235Sdim  ompt_data_t *sink_task_data
767345235Sdim);
768345235Sdim
769345235Sdimtypedef struct ompt_record_task_dependence_t {
770345235Sdim  ompt_id_t src_task_id;
771345235Sdim  ompt_id_t sink_task_id;
772345235Sdim} ompt_record_task_dependence_t;
773345235Sdim
774345235Sdimtypedef void (*ompt_callback_task_schedule_t) (
775345235Sdim  ompt_data_t *prior_task_data,
776345235Sdim  ompt_task_status_t prior_task_status,
777345235Sdim  ompt_data_t *next_task_data
778345235Sdim);
779345235Sdim
780345235Sdimtypedef struct ompt_record_task_schedule_t {
781345235Sdim  ompt_id_t prior_task_id;
782345235Sdim  ompt_task_status_t prior_task_status;
783345235Sdim  ompt_id_t next_task_id;
784345235Sdim} ompt_record_task_schedule_t;
785345235Sdim
786345235Sdimtypedef void (*ompt_callback_implicit_task_t) (
787345235Sdim  ompt_scope_endpoint_t endpoint,
788345235Sdim  ompt_data_t *parallel_data,
789345235Sdim  ompt_data_t *task_data,
790345235Sdim  unsigned int actual_parallelism,
791345235Sdim  unsigned int index,
792345235Sdim  int flags
793345235Sdim);
794345235Sdim
795345235Sdimtypedef struct ompt_record_implicit_task_t {
796345235Sdim  ompt_scope_endpoint_t endpoint;
797345235Sdim  ompt_id_t parallel_id;
798345235Sdim  ompt_id_t task_id;
799345235Sdim  unsigned int actual_parallelism;
800345235Sdim  unsigned int index;
801345235Sdim  int flags;
802345235Sdim} ompt_record_implicit_task_t;
803345235Sdim
804345235Sdimtypedef void (*ompt_callback_master_t) (
805345235Sdim  ompt_scope_endpoint_t endpoint,
806345235Sdim  ompt_data_t *parallel_data,
807345235Sdim  ompt_data_t *task_data,
808345235Sdim  const void *codeptr_ra
809345235Sdim);
810345235Sdim
811345235Sdimtypedef struct ompt_record_master_t {
812345235Sdim  ompt_scope_endpoint_t endpoint;
813345235Sdim  ompt_id_t parallel_id;
814345235Sdim  ompt_id_t task_id;
815345235Sdim  const void *codeptr_ra;
816345235Sdim} ompt_record_master_t;
817345235Sdim
818345235Sdimtypedef void (*ompt_callback_sync_region_t) (
819345235Sdim  ompt_sync_region_t kind,
820345235Sdim  ompt_scope_endpoint_t endpoint,
821345235Sdim  ompt_data_t *parallel_data,
822345235Sdim  ompt_data_t *task_data,
823345235Sdim  const void *codeptr_ra
824345235Sdim);
825345235Sdim
826345235Sdimtypedef struct ompt_record_sync_region_t {
827345235Sdim  ompt_sync_region_t kind;
828345235Sdim  ompt_scope_endpoint_t endpoint;
829345235Sdim  ompt_id_t parallel_id;
830345235Sdim  ompt_id_t task_id;
831345235Sdim  const void *codeptr_ra;
832345235Sdim} ompt_record_sync_region_t;
833345235Sdim
834345235Sdimtypedef void (*ompt_callback_mutex_acquire_t) (
835345235Sdim  ompt_mutex_t kind,
836345235Sdim  unsigned int hint,
837345235Sdim  unsigned int impl,
838345235Sdim  ompt_wait_id_t wait_id,
839345235Sdim  const void *codeptr_ra
840345235Sdim);
841345235Sdim
842345235Sdimtypedef struct ompt_record_mutex_acquire_t {
843345235Sdim  ompt_mutex_t kind;
844345235Sdim  unsigned int hint;
845345235Sdim  unsigned int impl;
846345235Sdim  ompt_wait_id_t wait_id;
847345235Sdim  const void *codeptr_ra;
848345235Sdim} ompt_record_mutex_acquire_t;
849345235Sdim
850345235Sdimtypedef void (*ompt_callback_mutex_t) (
851345235Sdim  ompt_mutex_t kind,
852345235Sdim  ompt_wait_id_t wait_id,
853345235Sdim  const void *codeptr_ra
854345235Sdim);
855345235Sdim
856345235Sdimtypedef struct ompt_record_mutex_t {
857345235Sdim  ompt_mutex_t kind;
858345235Sdim  ompt_wait_id_t wait_id;
859345235Sdim  const void *codeptr_ra;
860345235Sdim} ompt_record_mutex_t;
861345235Sdim
862345235Sdimtypedef void (*ompt_callback_nest_lock_t) (
863345235Sdim  ompt_scope_endpoint_t endpoint,
864345235Sdim  ompt_wait_id_t wait_id,
865345235Sdim  const void *codeptr_ra
866345235Sdim);
867345235Sdim
868345235Sdimtypedef struct ompt_record_nest_lock_t {
869345235Sdim  ompt_scope_endpoint_t endpoint;
870345235Sdim  ompt_wait_id_t wait_id;
871345235Sdim  const void *codeptr_ra;
872345235Sdim} ompt_record_nest_lock_t;
873345235Sdim
874345235Sdimtypedef void (*ompt_callback_flush_t) (
875345235Sdim  ompt_data_t *thread_data,
876345235Sdim  const void *codeptr_ra
877345235Sdim);
878345235Sdim
879345235Sdimtypedef struct ompt_record_flush_t {
880345235Sdim  const void *codeptr_ra;
881345235Sdim} ompt_record_flush_t;
882345235Sdim
883345235Sdimtypedef void (*ompt_callback_cancel_t) (
884345235Sdim  ompt_data_t *task_data,
885345235Sdim  int flags,
886345235Sdim  const void *codeptr_ra
887345235Sdim);
888345235Sdim
889345235Sdimtypedef struct ompt_record_cancel_t {
890345235Sdim  ompt_id_t task_id;
891345235Sdim  int flags;
892345235Sdim  const void *codeptr_ra;
893345235Sdim} ompt_record_cancel_t;
894345235Sdim
895345235Sdimtypedef void (*ompt_callback_device_initialize_t) (
896345235Sdim  int device_num,
897345235Sdim  const char *type,
898345235Sdim  ompt_device_t *device,
899345235Sdim  ompt_function_lookup_t lookup,
900345235Sdim  const char *documentation
901345235Sdim);
902345235Sdim
903345235Sdimtypedef void (*ompt_callback_device_finalize_t) (
904345235Sdim  int device_num
905345235Sdim);
906345235Sdim
907345235Sdimtypedef void (*ompt_callback_device_load_t) (
908345235Sdim  int device_num,
909345235Sdim  const char *filename,
910345235Sdim  int64_t offset_in_file,
911345235Sdim  void *vma_in_file,
912345235Sdim  size_t bytes,
913345235Sdim  void *host_addr,
914345235Sdim  void *device_addr,
915345235Sdim  uint64_t module_id
916345235Sdim);
917345235Sdim
918345235Sdimtypedef void (*ompt_callback_device_unload_t) (
919345235Sdim  int device_num,
920345235Sdim  uint64_t module_id
921345235Sdim);
922345235Sdim
923345235Sdimtypedef void (*ompt_callback_target_data_op_t) (
924345235Sdim  ompt_id_t target_id,
925345235Sdim  ompt_id_t host_op_id,
926345235Sdim  ompt_target_data_op_t optype,
927345235Sdim  void *src_addr,
928345235Sdim  int src_device_num,
929345235Sdim  void *dest_addr,
930345235Sdim  int dest_device_num,
931345235Sdim  size_t bytes,
932345235Sdim  const void *codeptr_ra
933345235Sdim);
934345235Sdim
935345235Sdimtypedef struct ompt_record_target_data_op_t {
936345235Sdim  ompt_id_t host_op_id;
937345235Sdim  ompt_target_data_op_t optype;
938345235Sdim  void *src_addr;
939345235Sdim  int src_device_num;
940345235Sdim  void *dest_addr;
941345235Sdim  int dest_device_num;
942345235Sdim  size_t bytes;
943345235Sdim  ompt_device_time_t end_time;
944345235Sdim  const void *codeptr_ra;
945345235Sdim} ompt_record_target_data_op_t;
946345235Sdim
947345235Sdimtypedef void (*ompt_callback_target_t) (
948345235Sdim  ompt_target_t kind,
949345235Sdim  ompt_scope_endpoint_t endpoint,
950345235Sdim  int device_num,
951345235Sdim  ompt_data_t *task_data,
952345235Sdim  ompt_id_t target_id,
953345235Sdim  const void *codeptr_ra
954345235Sdim);
955345235Sdim
956345235Sdimtypedef struct ompt_record_target_t {
957345235Sdim  ompt_target_t kind;
958345235Sdim  ompt_scope_endpoint_t endpoint;
959345235Sdim  int device_num;
960345235Sdim  ompt_id_t task_id;
961345235Sdim  ompt_id_t target_id;
962345235Sdim  const void *codeptr_ra;
963345235Sdim} ompt_record_target_t;
964345235Sdim
965345235Sdimtypedef void (*ompt_callback_target_map_t) (
966345235Sdim  ompt_id_t target_id,
967345235Sdim  unsigned int nitems,
968345235Sdim  void **host_addr,
969345235Sdim  void **device_addr,
970345235Sdim  size_t *bytes,
971345235Sdim  unsigned int *mapping_flags,
972345235Sdim  const void *codeptr_ra
973345235Sdim);
974345235Sdim
975345235Sdimtypedef struct ompt_record_target_map_t {
976345235Sdim  ompt_id_t target_id;
977345235Sdim  unsigned int nitems;
978345235Sdim  void **host_addr;
979345235Sdim  void **device_addr;
980345235Sdim  size_t *bytes;
981345235Sdim  unsigned int *mapping_flags;
982345235Sdim  const void *codeptr_ra;
983345235Sdim} ompt_record_target_map_t;
984345235Sdim
985345235Sdimtypedef void (*ompt_callback_target_submit_t) (
986345235Sdim  ompt_id_t target_id,
987345235Sdim  ompt_id_t host_op_id,
988345235Sdim  unsigned int requested_num_teams
989345235Sdim);
990345235Sdim
991345235Sdimtypedef struct ompt_record_target_kernel_t {
992345235Sdim  ompt_id_t host_op_id;
993345235Sdim  unsigned int requested_num_teams;
994345235Sdim  unsigned int granted_num_teams;
995345235Sdim  ompt_device_time_t end_time;
996345235Sdim} ompt_record_target_kernel_t;
997345235Sdim
998345235Sdimtypedef int (*ompt_callback_control_tool_t) (
999345235Sdim  uint64_t command,
1000345235Sdim  uint64_t modifier,
1001345235Sdim  void *arg,
1002345235Sdim  const void *codeptr_ra
1003345235Sdim);
1004345235Sdim
1005345235Sdimtypedef struct ompt_record_control_tool_t {
1006345235Sdim  uint64_t command;
1007345235Sdim  uint64_t modifier;
1008345235Sdim  const void *codeptr_ra;
1009345235Sdim} ompt_record_control_tool_t;
1010345235Sdim
1011345235Sdimtypedef struct ompd_address_t {
1012345235Sdim  ompd_seg_t segment;
1013345235Sdim  ompd_addr_t address;
1014345235Sdim} ompd_address_t;
1015345235Sdim
1016345235Sdimtypedef struct ompd_frame_info_t {
1017345235Sdim  ompd_address_t frame_address;
1018345235Sdim  ompd_word_t frame_flag;
1019345235Sdim} ompd_frame_info_t;
1020345235Sdim
1021345235Sdimtypedef struct _ompd_aspace_handle ompd_address_space_handle_t;
1022345235Sdimtypedef struct _ompd_thread_handle ompd_thread_handle_t;
1023345235Sdimtypedef struct _ompd_parallel_handle ompd_parallel_handle_t;
1024345235Sdimtypedef struct _ompd_task_handle ompd_task_handle_t;
1025345235Sdim
1026345235Sdimtypedef struct _ompd_aspace_cont ompd_address_space_context_t;
1027345235Sdimtypedef struct _ompd_thread_cont ompd_thread_context_t;
1028345235Sdim
1029345235Sdimtypedef struct ompd_device_type_sizes_t {
1030345235Sdim  uint8_t sizeof_char;
1031345235Sdim  uint8_t sizeof_short;
1032345235Sdim  uint8_t sizeof_int;
1033345235Sdim  uint8_t sizeof_long;
1034345235Sdim  uint8_t sizeof_long_long;
1035345235Sdim  uint8_t sizeof_pointer;
1036345235Sdim} ompd_device_type_sizes_t;
1037345235Sdim
1038345235Sdimtypedef struct ompt_record_ompt_t {
1039345235Sdim  ompt_callbacks_t type;
1040345235Sdim  ompt_device_time_t time;
1041345235Sdim  ompt_id_t thread_id;
1042345235Sdim  ompt_id_t target_id;
1043345235Sdim  union {
1044345235Sdim    ompt_record_thread_begin_t thread_begin;
1045345235Sdim    ompt_record_parallel_begin_t parallel_begin;
1046345235Sdim    ompt_record_parallel_end_t parallel_end;
1047345235Sdim    ompt_record_work_t work;
1048345235Sdim    ompt_record_dispatch_t dispatch;
1049345235Sdim    ompt_record_task_create_t task_create;
1050345235Sdim    ompt_record_dependences_t dependences;
1051345235Sdim    ompt_record_task_dependence_t task_dependence;
1052345235Sdim    ompt_record_task_schedule_t task_schedule;
1053345235Sdim    ompt_record_implicit_task_t implicit_task;
1054345235Sdim    ompt_record_master_t master;
1055345235Sdim    ompt_record_sync_region_t sync_region;
1056345235Sdim    ompt_record_mutex_acquire_t mutex_acquire;
1057345235Sdim    ompt_record_mutex_t mutex;
1058345235Sdim    ompt_record_nest_lock_t nest_lock;
1059345235Sdim    ompt_record_flush_t flush;
1060345235Sdim    ompt_record_cancel_t cancel;
1061345235Sdim    ompt_record_target_t target;
1062345235Sdim    ompt_record_target_data_op_t target_data_op;
1063345235Sdim    ompt_record_target_map_t target_map;
1064345235Sdim    ompt_record_target_kernel_t target_kernel;
1065345235Sdim    ompt_record_control_tool_t control_tool;
1066345235Sdim  } record;
1067345235Sdim} ompt_record_ompt_t;
1068345235Sdim
1069345235Sdimtypedef ompt_record_ompt_t *(*ompt_get_record_ompt_t) (
1070345235Sdim  ompt_buffer_t *buffer,
1071345235Sdim  ompt_buffer_cursor_t current
1072345235Sdim);
1073345235Sdim
1074345235Sdim#define ompt_id_none 0
1075345235Sdim#define ompt_data_none {0}
1076345235Sdim#define ompt_time_none 0
1077345235Sdim#define ompt_hwid_none 0
1078345235Sdim#define ompt_addr_none ~0
1079345235Sdim#define ompt_mutex_impl_none 0
1080345235Sdim#define ompt_wait_id_none 0
1081345235Sdim
1082345235Sdim#define ompd_segment_none 0
1083345235Sdim
1084345235Sdim#endif /* __OMPT__ */
1085