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