xref: /freebsd/lib/libomp/omp-tools.h (revision 9768746b)
1 /*
2  * include/omp-tools.h.var
3  */
4 
5 //===----------------------------------------------------------------------===//
6 //
7 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
8 // See https://llvm.org/LICENSE.txt for license information.
9 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef __OMPT__
14 #define __OMPT__
15 
16 /*****************************************************************************
17  * system include files
18  *****************************************************************************/
19 
20 #include <stdint.h>
21 #include <stddef.h>
22 
23 #ifdef DEPRECATION_WARNINGS
24 # ifdef __cplusplus
25 # define DEPRECATED_51 [[deprecated("as of 5.1")]]
26 # else
27 # define DEPRECATED_51 __attribute__((deprecated("as of 5.1")))
28 #endif
29 #else
30 #define DEPRECATED_51
31 #endif
32 
33 /*****************************************************************************
34  * iteration macros
35  *****************************************************************************/
36 
37 #define FOREACH_OMPT_INQUIRY_FN(macro)      \
38     macro (ompt_enumerate_states)           \
39     macro (ompt_enumerate_mutex_impls)      \
40                                             \
41     macro (ompt_set_callback)               \
42     macro (ompt_get_callback)               \
43                                             \
44     macro (ompt_get_state)                  \
45                                             \
46     macro (ompt_get_parallel_info)          \
47     macro (ompt_get_task_info)              \
48     macro (ompt_get_task_memory)            \
49     macro (ompt_get_thread_data)            \
50     macro (ompt_get_unique_id)              \
51     macro (ompt_finalize_tool)              \
52                                             \
53     macro(ompt_get_num_procs)               \
54     macro(ompt_get_num_places)              \
55     macro(ompt_get_place_proc_ids)          \
56     macro(ompt_get_place_num)               \
57     macro(ompt_get_partition_place_nums)    \
58     macro(ompt_get_proc_id)                 \
59                                             \
60     macro(ompt_get_target_info)             \
61     macro(ompt_get_num_devices)
62 
63 #define FOREACH_OMPT_STATE(macro)                                                                \
64                                                                                                 \
65     /* first available state */                                                                 \
66     macro (ompt_state_undefined, 0x102)      /* undefined thread state */                        \
67                                                                                                 \
68     /* work states (0..15) */                                                                   \
69     macro (ompt_state_work_serial, 0x000)    /* working outside parallel */                      \
70     macro (ompt_state_work_parallel, 0x001)  /* working within parallel */                       \
71     macro (ompt_state_work_reduction, 0x002) /* performing a reduction */                        \
72                                                                                                 \
73     /* barrier wait states (16..31) */                                                          \
74     macro (ompt_state_wait_barrier, 0x010)   /* waiting at a barrier */                          \
75     macro (ompt_state_wait_barrier_implicit_parallel, 0x011)                                     \
76                                             /* implicit barrier at the end of parallel region */\
77     macro (ompt_state_wait_barrier_implicit_workshare, 0x012)                                    \
78                                             /* implicit barrier at the end of worksharing */    \
79     macro (ompt_state_wait_barrier_implicit, 0x013)  /* implicit barrier */                      \
80     macro (ompt_state_wait_barrier_explicit, 0x014)  /* explicit barrier */                      \
81                                                                                                 \
82     /* task wait states (32..63) */                                                             \
83     macro (ompt_state_wait_taskwait, 0x020)  /* waiting at a taskwait */                         \
84     macro (ompt_state_wait_taskgroup, 0x021) /* waiting at a taskgroup */                        \
85                                                                                                 \
86     /* mutex wait states (64..127) */                                                           \
87     macro (ompt_state_wait_mutex, 0x040)                                                         \
88     macro (ompt_state_wait_lock, 0x041)      /* waiting for lock */                              \
89     macro (ompt_state_wait_critical, 0x042)  /* waiting for critical */                          \
90     macro (ompt_state_wait_atomic, 0x043)    /* waiting for atomic */                            \
91     macro (ompt_state_wait_ordered, 0x044)   /* waiting for ordered */                           \
92                                                                                                 \
93     /* target wait states (128..255) */                                                         \
94     macro (ompt_state_wait_target, 0x080)        /* waiting for target region */                 \
95     macro (ompt_state_wait_target_map, 0x081)    /* waiting for target data mapping operation */ \
96     macro (ompt_state_wait_target_update, 0x082) /* waiting for target update operation */       \
97                                                                                                 \
98     /* misc (256..511) */                                                                       \
99     macro (ompt_state_idle, 0x100)           /* waiting for work */                              \
100     macro (ompt_state_overhead, 0x101)       /* overhead excluding wait states */                \
101                                                                                                 \
102     /* implementation-specific states (512..) */
103 
104 
105 #define FOREACH_KMP_MUTEX_IMPL(macro)                                                \
106     macro (kmp_mutex_impl_none, 0)         /* unknown implementation */              \
107     macro (kmp_mutex_impl_spin, 1)         /* based on spin */                       \
108     macro (kmp_mutex_impl_queuing, 2)      /* based on some fair policy */           \
109     macro (kmp_mutex_impl_speculative, 3)  /* based on HW-supported speculation */
110 
111 #define FOREACH_OMPT_EVENT(macro)                                                                                        \
112                                                                                                                          \
113     /*--- Mandatory Events ---*/                                                                                         \
114     macro (ompt_callback_thread_begin,      ompt_callback_thread_begin_t,       1) /* thread begin                    */ \
115     macro (ompt_callback_thread_end,        ompt_callback_thread_end_t,         2) /* thread end                      */ \
116                                                                                                                          \
117     macro (ompt_callback_parallel_begin,    ompt_callback_parallel_begin_t,     3) /* parallel begin                  */ \
118     macro (ompt_callback_parallel_end,      ompt_callback_parallel_end_t,       4) /* parallel end                    */ \
119                                                                                                                          \
120     macro (ompt_callback_task_create,       ompt_callback_task_create_t,        5) /* task begin                      */ \
121     macro (ompt_callback_task_schedule,     ompt_callback_task_schedule_t,      6) /* task schedule                   */ \
122     macro (ompt_callback_implicit_task,     ompt_callback_implicit_task_t,      7) /* implicit task                   */ \
123                                                                                                                          \
124     macro (ompt_callback_target,            ompt_callback_target_t,             8) /* target                          */ \
125     macro (ompt_callback_target_data_op,    ompt_callback_target_data_op_t,     9) /* target data op                  */ \
126     macro (ompt_callback_target_submit,     ompt_callback_target_submit_t,     10) /* target  submit                  */ \
127                                                                                                                          \
128     macro (ompt_callback_control_tool,      ompt_callback_control_tool_t,      11) /* control tool                    */ \
129                                                                                                                          \
130     macro (ompt_callback_device_initialize, ompt_callback_device_initialize_t, 12) /* device initialize               */ \
131     macro (ompt_callback_device_finalize,   ompt_callback_device_finalize_t,   13) /* device finalize                 */ \
132                                                                                                                          \
133     macro (ompt_callback_device_load,       ompt_callback_device_load_t,       14) /* device load                     */ \
134     macro (ompt_callback_device_unload,     ompt_callback_device_unload_t,     15) /* device unload                   */ \
135                                                                                                                          \
136     /* Optional Events */                                                                                                \
137     macro (ompt_callback_sync_region_wait,  ompt_callback_sync_region_t,       16) /* sync region wait begin or end   */ \
138                                                                                                                          \
139     macro (ompt_callback_mutex_released,    ompt_callback_mutex_t,             17) /* mutex released                  */ \
140                                                                                                                          \
141     macro (ompt_callback_dependences,       ompt_callback_dependences_t,       18) /* report task dependences         */ \
142     macro (ompt_callback_task_dependence,   ompt_callback_task_dependence_t,   19) /* report task dependence          */ \
143                                                                                                                          \
144     macro (ompt_callback_work,              ompt_callback_work_t,              20) /* task at work begin or end       */ \
145                                                                                                                          \
146     macro (ompt_callback_masked,            ompt_callback_masked_t,            21) /* task at masked begin or end     */ \
147                                                                                                                          \
148     macro (ompt_callback_target_map,        ompt_callback_target_map_t,        22) /* target map                      */ \
149                                                                                                                          \
150     macro (ompt_callback_sync_region,       ompt_callback_sync_region_t,       23) /* sync region begin or end        */ \
151                                                                                                                          \
152     macro (ompt_callback_lock_init,         ompt_callback_mutex_acquire_t,     24) /* lock init                       */ \
153     macro (ompt_callback_lock_destroy,      ompt_callback_mutex_t,             25) /* lock destroy                    */ \
154                                                                                                                          \
155     macro (ompt_callback_mutex_acquire,     ompt_callback_mutex_acquire_t,     26) /* mutex acquire                   */ \
156     macro (ompt_callback_mutex_acquired,    ompt_callback_mutex_t,             27) /* mutex acquired                  */ \
157                                                                                                                          \
158     macro (ompt_callback_nest_lock,         ompt_callback_nest_lock_t,         28) /* nest lock                       */ \
159                                                                                                                          \
160     macro (ompt_callback_flush,             ompt_callback_flush_t,             29) /* after executing flush           */ \
161                                                                                                                          \
162     macro (ompt_callback_cancel,            ompt_callback_cancel_t,            30) /* cancel innermost binding region */ \
163                                                                                                                          \
164     macro (ompt_callback_reduction,         ompt_callback_sync_region_t,       31) /* reduction                       */ \
165                                                                                                                          \
166     macro (ompt_callback_dispatch,          ompt_callback_dispatch_t,          32) /* dispatch of work                */ \
167     macro (ompt_callback_target_emi,        ompt_callback_target_emi_t,        33) /* target                          */ \
168     macro (ompt_callback_target_data_op_emi,ompt_callback_target_data_op_emi_t,34) /* target data op                  */ \
169     macro (ompt_callback_target_submit_emi, ompt_callback_target_submit_emi_t, 35) /* target submit                   */ \
170     macro (ompt_callback_target_map_emi,    ompt_callback_target_map_emi_t,    36) /* target map                      */ \
171     macro (ompt_callback_error,             ompt_callback_error_t,             37) /* error                           */
172 
173 /*****************************************************************************
174  * implementation specific types
175  *****************************************************************************/
176 
177 typedef enum kmp_mutex_impl_t {
178 #define kmp_mutex_impl_macro(impl, code) impl = code,
179     FOREACH_KMP_MUTEX_IMPL(kmp_mutex_impl_macro)
180 #undef kmp_mutex_impl_macro
181 } kmp_mutex_impl_t;
182 
183 /*****************************************************************************
184  * definitions generated from spec
185  *****************************************************************************/
186 
187 typedef enum ompt_callbacks_t {
188   ompt_callback_thread_begin             = 1,
189   ompt_callback_thread_end               = 2,
190   ompt_callback_parallel_begin           = 3,
191   ompt_callback_parallel_end             = 4,
192   ompt_callback_task_create              = 5,
193   ompt_callback_task_schedule            = 6,
194   ompt_callback_implicit_task            = 7,
195   ompt_callback_target                   = 8,
196   ompt_callback_target_data_op           = 9,
197   ompt_callback_target_submit            = 10,
198   ompt_callback_control_tool             = 11,
199   ompt_callback_device_initialize        = 12,
200   ompt_callback_device_finalize          = 13,
201   ompt_callback_device_load              = 14,
202   ompt_callback_device_unload            = 15,
203   ompt_callback_sync_region_wait         = 16,
204   ompt_callback_mutex_released           = 17,
205   ompt_callback_dependences              = 18,
206   ompt_callback_task_dependence          = 19,
207   ompt_callback_work                     = 20,
208   ompt_callback_master     DEPRECATED_51 = 21,
209   ompt_callback_masked                   = 21,
210   ompt_callback_target_map               = 22,
211   ompt_callback_sync_region              = 23,
212   ompt_callback_lock_init                = 24,
213   ompt_callback_lock_destroy             = 25,
214   ompt_callback_mutex_acquire            = 26,
215   ompt_callback_mutex_acquired           = 27,
216   ompt_callback_nest_lock                = 28,
217   ompt_callback_flush                    = 29,
218   ompt_callback_cancel                   = 30,
219   ompt_callback_reduction                = 31,
220   ompt_callback_dispatch                 = 32,
221   ompt_callback_target_emi               = 33,
222   ompt_callback_target_data_op_emi       = 34,
223   ompt_callback_target_submit_emi        = 35,
224   ompt_callback_target_map_emi           = 36,
225   ompt_callback_error                    = 37
226 } ompt_callbacks_t;
227 
228 typedef enum ompt_record_t {
229   ompt_record_ompt               = 1,
230   ompt_record_native             = 2,
231   ompt_record_invalid            = 3
232 } ompt_record_t;
233 
234 typedef enum ompt_record_native_t {
235   ompt_record_native_info  = 1,
236   ompt_record_native_event = 2
237 } ompt_record_native_t;
238 
239 typedef enum ompt_set_result_t {
240   ompt_set_error            = 0,
241   ompt_set_never            = 1,
242   ompt_set_impossible       = 2,
243   ompt_set_sometimes        = 3,
244   ompt_set_sometimes_paired = 4,
245   ompt_set_always           = 5
246 } ompt_set_result_t;
247 
248 typedef uint64_t ompt_id_t;
249 
250 typedef uint64_t ompt_device_time_t;
251 
252 typedef uint64_t ompt_buffer_cursor_t;
253 
254 typedef enum ompt_thread_t {
255   ompt_thread_initial                 = 1,
256   ompt_thread_worker                  = 2,
257   ompt_thread_other                   = 3,
258   ompt_thread_unknown                 = 4
259 } ompt_thread_t;
260 
261 typedef enum ompt_scope_endpoint_t {
262   ompt_scope_begin                    = 1,
263   ompt_scope_end                      = 2,
264   ompt_scope_beginend                 = 3
265 } ompt_scope_endpoint_t;
266 
267 typedef enum ompt_dispatch_t {
268   ompt_dispatch_iteration             = 1,
269   ompt_dispatch_section               = 2,
270   ompt_dispatch_ws_loop_chunk         = 3,
271   ompt_dispatch_taskloop_chunk        = 4,
272   ompt_dispatch_distribute_chunk      = 5
273 } ompt_dispatch_t;
274 
275 typedef enum ompt_sync_region_t {
276   ompt_sync_region_barrier                DEPRECATED_51 = 1,
277   ompt_sync_region_barrier_implicit       DEPRECATED_51 = 2,
278   ompt_sync_region_barrier_explicit       = 3,
279   ompt_sync_region_barrier_implementation = 4,
280   ompt_sync_region_taskwait               = 5,
281   ompt_sync_region_taskgroup              = 6,
282   ompt_sync_region_reduction              = 7,
283   ompt_sync_region_barrier_implicit_workshare = 8,
284   ompt_sync_region_barrier_implicit_parallel = 9,
285   ompt_sync_region_barrier_teams = 10
286 } ompt_sync_region_t;
287 
288 typedef enum ompt_target_data_op_t {
289   ompt_target_data_alloc                      = 1,
290   ompt_target_data_transfer_to_device         = 2,
291   ompt_target_data_transfer_from_device       = 3,
292   ompt_target_data_delete                     = 4,
293   ompt_target_data_associate                  = 5,
294   ompt_target_data_disassociate               = 6,
295   ompt_target_data_alloc_async                = 17,
296   ompt_target_data_transfer_to_device_async   = 18,
297   ompt_target_data_transfer_from_device_async = 19,
298   ompt_target_data_delete_async               = 20
299 } ompt_target_data_op_t;
300 
301 typedef enum ompt_work_t {
302   ompt_work_loop               = 1,
303   ompt_work_sections           = 2,
304   ompt_work_single_executor    = 3,
305   ompt_work_single_other       = 4,
306   ompt_work_workshare          = 5,
307   ompt_work_distribute         = 6,
308   ompt_work_taskloop           = 7,
309   ompt_work_scope              = 8,
310   ompt_work_loop_static        = 10,
311   ompt_work_loop_dynamic       = 11,
312   ompt_work_loop_guided        = 12,
313   ompt_work_loop_other         = 13
314 } ompt_work_t;
315 
316 typedef enum ompt_mutex_t {
317   ompt_mutex_lock                     = 1,
318   ompt_mutex_test_lock                = 2,
319   ompt_mutex_nest_lock                = 3,
320   ompt_mutex_test_nest_lock           = 4,
321   ompt_mutex_critical                 = 5,
322   ompt_mutex_atomic                   = 6,
323   ompt_mutex_ordered                  = 7
324 } ompt_mutex_t;
325 
326 typedef enum ompt_native_mon_flag_t {
327   ompt_native_data_motion_explicit    = 0x01,
328   ompt_native_data_motion_implicit    = 0x02,
329   ompt_native_kernel_invocation       = 0x04,
330   ompt_native_kernel_execution        = 0x08,
331   ompt_native_driver                  = 0x10,
332   ompt_native_runtime                 = 0x20,
333   ompt_native_overhead                = 0x40,
334   ompt_native_idleness                = 0x80
335 } ompt_native_mon_flag_t;
336 
337 typedef enum ompt_task_flag_t {
338   ompt_task_initial                   = 0x00000001,
339   ompt_task_implicit                  = 0x00000002,
340   ompt_task_explicit                  = 0x00000004,
341   ompt_task_target                    = 0x00000008,
342   ompt_task_taskwait                  = 0x00000010,
343   ompt_task_undeferred                = 0x08000000,
344   ompt_task_untied                    = 0x10000000,
345   ompt_task_final                     = 0x20000000,
346   ompt_task_mergeable                 = 0x40000000,
347   ompt_task_merged                    = 0x80000000
348 } ompt_task_flag_t;
349 
350 typedef enum ompt_task_status_t {
351   ompt_task_complete      = 1,
352   ompt_task_yield         = 2,
353   ompt_task_cancel        = 3,
354   ompt_task_detach        = 4,
355   ompt_task_early_fulfill = 5,
356   ompt_task_late_fulfill  = 6,
357   ompt_task_switch        = 7,
358   ompt_taskwait_complete  = 8
359 } ompt_task_status_t;
360 
361 typedef enum ompt_target_t {
362   ompt_target                         = 1,
363   ompt_target_enter_data              = 2,
364   ompt_target_exit_data               = 3,
365   ompt_target_update                  = 4,
366   ompt_target_nowait                  = 9,
367   ompt_target_enter_data_nowait       = 10,
368   ompt_target_exit_data_nowait        = 11,
369   ompt_target_update_nowait           = 12
370 } ompt_target_t;
371 
372 typedef enum ompt_parallel_flag_t {
373   ompt_parallel_invoker_program = 0x00000001,
374   ompt_parallel_invoker_runtime = 0x00000002,
375   ompt_parallel_league          = 0x40000000,
376   ompt_parallel_team            = 0x80000000
377 } ompt_parallel_flag_t;
378 
379 typedef enum ompt_target_map_flag_t {
380   ompt_target_map_flag_to             = 0x01,
381   ompt_target_map_flag_from           = 0x02,
382   ompt_target_map_flag_alloc          = 0x04,
383   ompt_target_map_flag_release        = 0x08,
384   ompt_target_map_flag_delete         = 0x10,
385   ompt_target_map_flag_implicit       = 0x20
386 } ompt_target_map_flag_t;
387 
388 typedef enum ompt_dependence_type_t {
389   ompt_dependence_type_in              = 1,
390   ompt_dependence_type_out             = 2,
391   ompt_dependence_type_inout           = 3,
392   ompt_dependence_type_mutexinoutset   = 4,
393   ompt_dependence_type_source          = 5,
394   ompt_dependence_type_sink            = 6,
395   ompt_dependence_type_inoutset        = 7
396 } ompt_dependence_type_t;
397 
398 typedef enum ompt_severity_t {
399   ompt_warning                         = 1,
400   ompt_fatal                           = 2
401 } ompt_severity_t;
402 
403 typedef enum ompt_cancel_flag_t {
404   ompt_cancel_parallel       = 0x01,
405   ompt_cancel_sections       = 0x02,
406   ompt_cancel_loop           = 0x04,
407   ompt_cancel_taskgroup      = 0x08,
408   ompt_cancel_activated      = 0x10,
409   ompt_cancel_detected       = 0x20,
410   ompt_cancel_discarded_task = 0x40
411 } ompt_cancel_flag_t;
412 
413 typedef uint64_t ompt_hwid_t;
414 
415 typedef uint64_t ompt_wait_id_t;
416 
417 typedef enum ompt_frame_flag_t {
418   ompt_frame_runtime        = 0x00,
419   ompt_frame_application    = 0x01,
420   ompt_frame_cfa            = 0x10,
421   ompt_frame_framepointer   = 0x20,
422   ompt_frame_stackaddress   = 0x30
423 } ompt_frame_flag_t;
424 
425 typedef enum ompt_state_t {
426   ompt_state_work_serial                      = 0x000,
427   ompt_state_work_parallel                    = 0x001,
428   ompt_state_work_reduction                   = 0x002,
429 
430   ompt_state_wait_barrier                     DEPRECATED_51 = 0x010,
431   ompt_state_wait_barrier_implicit_parallel   = 0x011,
432   ompt_state_wait_barrier_implicit_workshare  = 0x012,
433   ompt_state_wait_barrier_implicit            DEPRECATED_51 = 0x013,
434   ompt_state_wait_barrier_explicit            = 0x014,
435   ompt_state_wait_barrier_implementation      = 0x015,
436   ompt_state_wait_barrier_teams               = 0x016,
437 
438   ompt_state_wait_taskwait                    = 0x020,
439   ompt_state_wait_taskgroup                   = 0x021,
440 
441   ompt_state_wait_mutex                       = 0x040,
442   ompt_state_wait_lock                        = 0x041,
443   ompt_state_wait_critical                    = 0x042,
444   ompt_state_wait_atomic                      = 0x043,
445   ompt_state_wait_ordered                     = 0x044,
446 
447   ompt_state_wait_target                      = 0x080,
448   ompt_state_wait_target_map                  = 0x081,
449   ompt_state_wait_target_update               = 0x082,
450 
451   ompt_state_idle                             = 0x100,
452   ompt_state_overhead                         = 0x101,
453   ompt_state_undefined                        = 0x102
454 } ompt_state_t;
455 
456 typedef uint64_t (*ompt_get_unique_id_t) (void);
457 
458 typedef uint64_t ompd_size_t;
459 
460 typedef uint64_t ompd_wait_id_t;
461 
462 typedef uint64_t ompd_addr_t;
463 typedef int64_t  ompd_word_t;
464 typedef uint64_t ompd_seg_t;
465 
466 typedef uint64_t ompd_device_t;
467 
468 typedef uint64_t ompd_thread_id_t;
469 
470 typedef enum ompd_scope_t {
471   ompd_scope_global = 1,
472   ompd_scope_address_space = 2,
473   ompd_scope_thread = 3,
474   ompd_scope_parallel = 4,
475   ompd_scope_implicit_task = 5,
476   ompd_scope_task = 6
477 } ompd_scope_t;
478 
479 typedef uint64_t ompd_icv_id_t;
480 
481 typedef enum ompd_rc_t {
482   ompd_rc_ok = 0,
483   ompd_rc_unavailable = 1,
484   ompd_rc_stale_handle = 2,
485   ompd_rc_bad_input = 3,
486   ompd_rc_error = 4,
487   ompd_rc_unsupported = 5,
488   ompd_rc_needs_state_tracking = 6,
489   ompd_rc_incompatible = 7,
490   ompd_rc_device_read_error = 8,
491   ompd_rc_device_write_error = 9,
492   ompd_rc_nomem = 10,
493   ompd_rc_incomplete = 11,
494   ompd_rc_callback_error = 12
495 } ompd_rc_t;
496 
497 typedef void (*ompt_interface_fn_t) (void);
498 
499 typedef ompt_interface_fn_t (*ompt_function_lookup_t) (
500   const char *interface_function_name
501 );
502 
503 typedef union ompt_data_t {
504   uint64_t value;
505   void *ptr;
506 } ompt_data_t;
507 
508 typedef struct ompt_frame_t {
509   ompt_data_t exit_frame;
510   ompt_data_t enter_frame;
511   int exit_frame_flags;
512   int enter_frame_flags;
513 } ompt_frame_t;
514 
515 typedef void (*ompt_callback_t) (void);
516 
517 typedef void ompt_device_t;
518 
519 typedef void ompt_buffer_t;
520 
521 typedef void (*ompt_callback_buffer_request_t) (
522   int device_num,
523   ompt_buffer_t **buffer,
524   size_t *bytes
525 );
526 
527 typedef void (*ompt_callback_buffer_complete_t) (
528   int device_num,
529   ompt_buffer_t *buffer,
530   size_t bytes,
531   ompt_buffer_cursor_t begin,
532   int buffer_owned
533 );
534 
535 typedef void (*ompt_finalize_t) (
536   ompt_data_t *tool_data
537 );
538 
539 typedef int (*ompt_initialize_t) (
540   ompt_function_lookup_t lookup,
541   int initial_device_num,
542   ompt_data_t *tool_data
543 );
544 
545 typedef struct ompt_start_tool_result_t {
546   ompt_initialize_t initialize;
547   ompt_finalize_t finalize;
548   ompt_data_t tool_data;
549 } ompt_start_tool_result_t;
550 
551 typedef struct ompt_record_abstract_t {
552   ompt_record_native_t rclass;
553   const char *type;
554   ompt_device_time_t start_time;
555   ompt_device_time_t end_time;
556   ompt_hwid_t hwid;
557 } ompt_record_abstract_t;
558 
559 typedef struct ompt_dependence_t {
560   ompt_data_t variable;
561   ompt_dependence_type_t dependence_type;
562 } ompt_dependence_t;
563 
564 typedef struct ompt_dispatch_chunk_t {
565   uint64_t start;
566   uint64_t iterations;
567 } ompt_dispatch_chunk_t;
568 
569 typedef int (*ompt_enumerate_states_t) (
570   int current_state,
571   int *next_state,
572   const char **next_state_name
573 );
574 
575 typedef int (*ompt_enumerate_mutex_impls_t) (
576   int current_impl,
577   int *next_impl,
578   const char **next_impl_name
579 );
580 
581 typedef ompt_set_result_t (*ompt_set_callback_t) (
582   ompt_callbacks_t event,
583   ompt_callback_t callback
584 );
585 
586 typedef int (*ompt_get_callback_t) (
587   ompt_callbacks_t event,
588   ompt_callback_t *callback
589 );
590 
591 typedef ompt_data_t *(*ompt_get_thread_data_t) (void);
592 
593 typedef int (*ompt_get_num_procs_t) (void);
594 
595 typedef int (*ompt_get_num_places_t) (void);
596 
597 typedef int (*ompt_get_place_proc_ids_t) (
598   int place_num,
599   int ids_size,
600   int *ids
601 );
602 
603 typedef int (*ompt_get_place_num_t) (void);
604 
605 typedef int (*ompt_get_partition_place_nums_t) (
606   int place_nums_size,
607   int *place_nums
608 );
609 
610 typedef int (*ompt_get_proc_id_t) (void);
611 
612 typedef int (*ompt_get_state_t) (
613   ompt_wait_id_t *wait_id
614 );
615 
616 typedef int (*ompt_get_parallel_info_t) (
617   int ancestor_level,
618   ompt_data_t **parallel_data,
619   int *team_size
620 );
621 
622 typedef int (*ompt_get_task_info_t) (
623   int ancestor_level,
624   int *flags,
625   ompt_data_t **task_data,
626   ompt_frame_t **task_frame,
627   ompt_data_t **parallel_data,
628   int *thread_num
629 );
630 
631 typedef int (*ompt_get_task_memory_t)(
632   void **addr,
633   size_t *size,
634   int block
635 );
636 
637 typedef int (*ompt_get_target_info_t) (
638   uint64_t *device_num,
639   ompt_id_t *target_id,
640   ompt_id_t *host_op_id
641 );
642 
643 typedef int (*ompt_get_num_devices_t) (void);
644 
645 typedef void (*ompt_finalize_tool_t) (void);
646 
647 typedef int (*ompt_get_device_num_procs_t) (
648   ompt_device_t *device
649 );
650 
651 typedef ompt_device_time_t (*ompt_get_device_time_t) (
652   ompt_device_t *device
653 );
654 
655 typedef double (*ompt_translate_time_t) (
656   ompt_device_t *device,
657   ompt_device_time_t time
658 );
659 
660 typedef ompt_set_result_t (*ompt_set_trace_ompt_t) (
661   ompt_device_t *device,
662   unsigned int enable,
663   unsigned int etype
664 );
665 
666 typedef ompt_set_result_t (*ompt_set_trace_native_t) (
667   ompt_device_t *device,
668   int enable,
669   int flags
670 );
671 
672 typedef int (*ompt_start_trace_t) (
673   ompt_device_t *device,
674   ompt_callback_buffer_request_t request,
675   ompt_callback_buffer_complete_t complete
676 );
677 
678 typedef int (*ompt_pause_trace_t) (
679   ompt_device_t *device,
680   int begin_pause
681 );
682 
683 typedef int (*ompt_flush_trace_t) (
684   ompt_device_t *device
685 );
686 
687 typedef int (*ompt_stop_trace_t) (
688   ompt_device_t *device
689 );
690 
691 typedef int (*ompt_advance_buffer_cursor_t) (
692   ompt_device_t *device,
693   ompt_buffer_t *buffer,
694   size_t size,
695   ompt_buffer_cursor_t current,
696   ompt_buffer_cursor_t *next
697 );
698 
699 typedef ompt_record_t (*ompt_get_record_type_t) (
700   ompt_buffer_t *buffer,
701   ompt_buffer_cursor_t current
702 );
703 
704 typedef void *(*ompt_get_record_native_t) (
705   ompt_buffer_t *buffer,
706   ompt_buffer_cursor_t current,
707   ompt_id_t *host_op_id
708 );
709 
710 typedef ompt_record_abstract_t *
711 (*ompt_get_record_abstract_t) (
712   void *native_record
713 );
714 
715 typedef void (*ompt_callback_thread_begin_t) (
716   ompt_thread_t thread_type,
717   ompt_data_t *thread_data
718 );
719 
720 typedef struct ompt_record_thread_begin_t {
721   ompt_thread_t thread_type;
722 } ompt_record_thread_begin_t;
723 
724 typedef void (*ompt_callback_thread_end_t) (
725   ompt_data_t *thread_data
726 );
727 
728 typedef void (*ompt_callback_parallel_begin_t) (
729   ompt_data_t *encountering_task_data,
730   const ompt_frame_t *encountering_task_frame,
731   ompt_data_t *parallel_data,
732   unsigned int requested_parallelism,
733   int flags,
734   const void *codeptr_ra
735 );
736 
737 typedef struct ompt_record_parallel_begin_t {
738   ompt_id_t encountering_task_id;
739   ompt_id_t parallel_id;
740   unsigned int requested_parallelism;
741   int flags;
742   const void *codeptr_ra;
743 } ompt_record_parallel_begin_t;
744 
745 typedef void (*ompt_callback_parallel_end_t) (
746   ompt_data_t *parallel_data,
747   ompt_data_t *encountering_task_data,
748   int flags,
749   const void *codeptr_ra
750 );
751 
752 typedef struct ompt_record_parallel_end_t {
753   ompt_id_t parallel_id;
754   ompt_id_t encountering_task_id;
755   int flags;
756   const void *codeptr_ra;
757 } ompt_record_parallel_end_t;
758 
759 typedef void (*ompt_callback_work_t) (
760   ompt_work_t work_type,
761   ompt_scope_endpoint_t endpoint,
762   ompt_data_t *parallel_data,
763   ompt_data_t *task_data,
764   uint64_t count,
765   const void *codeptr_ra
766 );
767 
768 typedef struct ompt_record_work_t {
769   ompt_work_t work_type;
770   ompt_scope_endpoint_t endpoint;
771   ompt_id_t parallel_id;
772   ompt_id_t task_id;
773   uint64_t count;
774   const void *codeptr_ra;
775 } ompt_record_work_t;
776 
777 typedef void (*ompt_callback_dispatch_t) (
778   ompt_data_t *parallel_data,
779   ompt_data_t *task_data,
780   ompt_dispatch_t kind,
781   ompt_data_t instance
782 );
783 
784 typedef struct ompt_record_dispatch_t {
785   ompt_id_t parallel_id;
786   ompt_id_t task_id;
787   ompt_dispatch_t kind;
788   ompt_data_t instance;
789 } ompt_record_dispatch_t;
790 
791 typedef void (*ompt_callback_task_create_t) (
792   ompt_data_t *encountering_task_data,
793   const ompt_frame_t *encountering_task_frame,
794   ompt_data_t *new_task_data,
795   int flags,
796   int has_dependences,
797   const void *codeptr_ra
798 );
799 
800 typedef struct ompt_record_task_create_t {
801   ompt_id_t encountering_task_id;
802   ompt_id_t new_task_id;
803   int flags;
804   int has_dependences;
805   const void *codeptr_ra;
806 } ompt_record_task_create_t;
807 
808 typedef void (*ompt_callback_dependences_t) (
809   ompt_data_t *task_data,
810   const ompt_dependence_t *deps,
811   int ndeps
812 );
813 
814 typedef struct ompt_record_dependences_t {
815   ompt_id_t task_id;
816   ompt_dependence_t dep;
817   int ndeps;
818 } ompt_record_dependences_t;
819 
820 typedef void (*ompt_callback_task_dependence_t) (
821   ompt_data_t *src_task_data,
822   ompt_data_t *sink_task_data
823 );
824 
825 typedef struct ompt_record_task_dependence_t {
826   ompt_id_t src_task_id;
827   ompt_id_t sink_task_id;
828 } ompt_record_task_dependence_t;
829 
830 typedef void (*ompt_callback_task_schedule_t) (
831   ompt_data_t *prior_task_data,
832   ompt_task_status_t prior_task_status,
833   ompt_data_t *next_task_data
834 );
835 
836 typedef struct ompt_record_task_schedule_t {
837   ompt_id_t prior_task_id;
838   ompt_task_status_t prior_task_status;
839   ompt_id_t next_task_id;
840 } ompt_record_task_schedule_t;
841 
842 typedef void (*ompt_callback_implicit_task_t) (
843   ompt_scope_endpoint_t endpoint,
844   ompt_data_t *parallel_data,
845   ompt_data_t *task_data,
846   unsigned int actual_parallelism,
847   unsigned int index,
848   int flags
849 );
850 
851 typedef struct ompt_record_implicit_task_t {
852   ompt_scope_endpoint_t endpoint;
853   ompt_id_t parallel_id;
854   ompt_id_t task_id;
855   unsigned int actual_parallelism;
856   unsigned int index;
857   int flags;
858 } ompt_record_implicit_task_t;
859 
860 typedef void (*ompt_callback_masked_t) (
861   ompt_scope_endpoint_t endpoint,
862   ompt_data_t *parallel_data,
863   ompt_data_t *task_data,
864   const void *codeptr_ra
865 );
866 
867 typedef ompt_callback_masked_t ompt_callback_master_t DEPRECATED_51;
868 
869 typedef struct ompt_record_masked_t {
870   ompt_scope_endpoint_t endpoint;
871   ompt_id_t parallel_id;
872   ompt_id_t task_id;
873   const void *codeptr_ra;
874 } ompt_record_masked_t;
875 
876 typedef void (*ompt_callback_sync_region_t) (
877   ompt_sync_region_t kind,
878   ompt_scope_endpoint_t endpoint,
879   ompt_data_t *parallel_data,
880   ompt_data_t *task_data,
881   const void *codeptr_ra
882 );
883 
884 typedef struct ompt_record_sync_region_t {
885   ompt_sync_region_t kind;
886   ompt_scope_endpoint_t endpoint;
887   ompt_id_t parallel_id;
888   ompt_id_t task_id;
889   const void *codeptr_ra;
890 } ompt_record_sync_region_t;
891 
892 typedef void (*ompt_callback_mutex_acquire_t) (
893   ompt_mutex_t kind,
894   unsigned int hint,
895   unsigned int impl,
896   ompt_wait_id_t wait_id,
897   const void *codeptr_ra
898 );
899 
900 typedef struct ompt_record_mutex_acquire_t {
901   ompt_mutex_t kind;
902   unsigned int hint;
903   unsigned int impl;
904   ompt_wait_id_t wait_id;
905   const void *codeptr_ra;
906 } ompt_record_mutex_acquire_t;
907 
908 typedef void (*ompt_callback_mutex_t) (
909   ompt_mutex_t kind,
910   ompt_wait_id_t wait_id,
911   const void *codeptr_ra
912 );
913 
914 typedef struct ompt_record_mutex_t {
915   ompt_mutex_t kind;
916   ompt_wait_id_t wait_id;
917   const void *codeptr_ra;
918 } ompt_record_mutex_t;
919 
920 typedef void (*ompt_callback_nest_lock_t) (
921   ompt_scope_endpoint_t endpoint,
922   ompt_wait_id_t wait_id,
923   const void *codeptr_ra
924 );
925 
926 typedef struct ompt_record_nest_lock_t {
927   ompt_scope_endpoint_t endpoint;
928   ompt_wait_id_t wait_id;
929   const void *codeptr_ra;
930 } ompt_record_nest_lock_t;
931 
932 typedef void (*ompt_callback_flush_t) (
933   ompt_data_t *thread_data,
934   const void *codeptr_ra
935 );
936 
937 typedef struct ompt_record_flush_t {
938   const void *codeptr_ra;
939 } ompt_record_flush_t;
940 
941 typedef void (*ompt_callback_cancel_t) (
942   ompt_data_t *task_data,
943   int flags,
944   const void *codeptr_ra
945 );
946 
947 typedef struct ompt_record_cancel_t {
948   ompt_id_t task_id;
949   int flags;
950   const void *codeptr_ra;
951 } ompt_record_cancel_t;
952 
953 typedef void (*ompt_callback_device_initialize_t) (
954   int device_num,
955   const char *type,
956   ompt_device_t *device,
957   ompt_function_lookup_t lookup,
958   const char *documentation
959 );
960 
961 typedef void (*ompt_callback_device_finalize_t) (
962   int device_num
963 );
964 
965 typedef void (*ompt_callback_device_load_t) (
966   int device_num,
967   const char *filename,
968   int64_t offset_in_file,
969   void *vma_in_file,
970   size_t bytes,
971   void *host_addr,
972   void *device_addr,
973   uint64_t module_id
974 );
975 
976 typedef void (*ompt_callback_device_unload_t) (
977   int device_num,
978   uint64_t module_id
979 );
980 
981 typedef void (*ompt_callback_target_data_op_emi_t) (
982   ompt_scope_endpoint_t endpoint,
983   ompt_data_t *target_task_data,
984   ompt_data_t *target_data,
985   ompt_id_t *host_op_id,
986   ompt_target_data_op_t optype,
987   void *src_addr,
988   int src_device_num,
989   void *dest_addr,
990   int dest_device_num,
991   size_t bytes,
992   const void *codeptr_ra
993 );
994 
995 typedef void (*ompt_callback_target_data_op_t) (
996   ompt_id_t target_id,
997   ompt_id_t host_op_id,
998   ompt_target_data_op_t optype,
999   void *src_addr,
1000   int src_device_num,
1001   void *dest_addr,
1002   int dest_device_num,
1003   size_t bytes,
1004   const void *codeptr_ra
1005 );
1006 
1007 typedef struct ompt_record_target_data_op_t {
1008   ompt_id_t host_op_id;
1009   ompt_target_data_op_t optype;
1010   void *src_addr;
1011   int src_device_num;
1012   void *dest_addr;
1013   int dest_device_num;
1014   size_t bytes;
1015   ompt_device_time_t end_time;
1016   const void *codeptr_ra;
1017 } ompt_record_target_data_op_t;
1018 
1019 typedef void (*ompt_callback_target_emi_t) (
1020   ompt_target_t kind,
1021   ompt_scope_endpoint_t endpoint,
1022   int device_num,
1023   ompt_data_t *task_data,
1024   ompt_data_t *target_task_data,
1025   ompt_data_t *target_data,
1026   const void *codeptr_ra
1027 );
1028 
1029 typedef void (*ompt_callback_target_t) (
1030   ompt_target_t kind,
1031   ompt_scope_endpoint_t endpoint,
1032   int device_num,
1033   ompt_data_t *task_data,
1034   ompt_id_t target_id,
1035   const void *codeptr_ra
1036 );
1037 
1038 typedef struct ompt_record_target_t {
1039   ompt_target_t kind;
1040   ompt_scope_endpoint_t endpoint;
1041   int device_num;
1042   ompt_id_t task_id;
1043   ompt_id_t target_id;
1044   const void *codeptr_ra;
1045 } ompt_record_target_t;
1046 
1047 typedef void (*ompt_callback_target_map_emi_t) (
1048   ompt_data_t *target_data,
1049   unsigned int nitems,
1050   void **host_addr,
1051   void **device_addr,
1052   size_t *bytes,
1053   unsigned int *mapping_flags,
1054   const void *codeptr_ra
1055 );
1056 
1057 typedef void (*ompt_callback_target_map_t) (
1058   ompt_id_t target_id,
1059   unsigned int nitems,
1060   void **host_addr,
1061   void **device_addr,
1062   size_t *bytes,
1063   unsigned int *mapping_flags,
1064   const void *codeptr_ra
1065 );
1066 
1067 typedef struct ompt_record_target_map_t {
1068   ompt_id_t target_id;
1069   unsigned int nitems;
1070   void **host_addr;
1071   void **device_addr;
1072   size_t *bytes;
1073   unsigned int *mapping_flags;
1074   const void *codeptr_ra;
1075 } ompt_record_target_map_t;
1076 
1077 typedef void (*ompt_callback_target_submit_emi_t) (
1078   ompt_scope_endpoint_t endpoint,
1079   ompt_data_t *target_data,
1080   ompt_id_t *host_op_id,
1081   unsigned int requested_num_teams
1082 );
1083 
1084 typedef void (*ompt_callback_target_submit_t) (
1085   ompt_id_t target_id,
1086   ompt_id_t host_op_id,
1087   unsigned int requested_num_teams
1088 );
1089 
1090 typedef struct ompt_record_target_kernel_t {
1091   ompt_id_t host_op_id;
1092   unsigned int requested_num_teams;
1093   unsigned int granted_num_teams;
1094   ompt_device_time_t end_time;
1095 } ompt_record_target_kernel_t;
1096 
1097 typedef int (*ompt_callback_control_tool_t) (
1098   uint64_t command,
1099   uint64_t modifier,
1100   void *arg,
1101   const void *codeptr_ra
1102 );
1103 
1104 typedef struct ompt_record_control_tool_t {
1105   uint64_t command;
1106   uint64_t modifier;
1107   const void *codeptr_ra;
1108 } ompt_record_control_tool_t;
1109 
1110 typedef void (*ompt_callback_error_t) (
1111   ompt_severity_t severity,
1112   const char *message, size_t length,
1113   const void *codeptr_ra
1114 );
1115 
1116 typedef struct ompt_record_error_t {
1117   ompt_severity_t severity;
1118   const char *message;
1119   size_t length;
1120   const void *codeptr_ra;
1121 } ompt_record_error_t;
1122 
1123 typedef struct ompd_address_t {
1124   ompd_seg_t segment;
1125   ompd_addr_t address;
1126 } ompd_address_t;
1127 
1128 typedef struct ompd_frame_info_t {
1129   ompd_address_t frame_address;
1130   ompd_word_t frame_flag;
1131 } ompd_frame_info_t;
1132 
1133 typedef struct _ompd_aspace_handle ompd_address_space_handle_t;
1134 typedef struct _ompd_thread_handle ompd_thread_handle_t;
1135 typedef struct _ompd_parallel_handle ompd_parallel_handle_t;
1136 typedef struct _ompd_task_handle ompd_task_handle_t;
1137 
1138 typedef struct _ompd_aspace_cont ompd_address_space_context_t;
1139 typedef struct _ompd_thread_cont ompd_thread_context_t;
1140 
1141 typedef struct ompd_device_type_sizes_t {
1142   uint8_t sizeof_char;
1143   uint8_t sizeof_short;
1144   uint8_t sizeof_int;
1145   uint8_t sizeof_long;
1146   uint8_t sizeof_long_long;
1147   uint8_t sizeof_pointer;
1148 } ompd_device_type_sizes_t;
1149 
1150 void ompd_dll_locations_valid(void);
1151 
1152 typedef ompd_rc_t (*ompd_callback_memory_alloc_fn_t)(ompd_size_t nbytes,
1153                                                      void **ptr);
1154 
1155 typedef ompd_rc_t (*ompd_callback_memory_free_fn_t)(void *ptr);
1156 
1157 typedef ompd_rc_t (*ompd_callback_get_thread_context_for_thread_id_fn_t)(
1158     ompd_address_space_context_t *address_space_context, ompd_thread_id_t kind,
1159     ompd_size_t sizeof_thread_id, const void *thread_id,
1160     ompd_thread_context_t **thread_context);
1161 
1162 typedef ompd_rc_t (*ompd_callback_sizeof_fn_t)(
1163     ompd_address_space_context_t *address_space_context,
1164     ompd_device_type_sizes_t *sizes);
1165 
1166 typedef ompd_rc_t (*ompd_callback_symbol_addr_fn_t)(
1167     ompd_address_space_context_t *address_space_context,
1168     ompd_thread_context_t *thread_context, const char *symbol_name,
1169     ompd_address_t *symbol_addr, const char *file_name);
1170 
1171 typedef ompd_rc_t (*ompd_callback_memory_read_fn_t)(
1172     ompd_address_space_context_t *address_space_context,
1173     ompd_thread_context_t *thread_context, const ompd_address_t *addr,
1174     ompd_size_t nbytes, void *buffer);
1175 
1176 typedef ompd_rc_t (*ompd_callback_memory_write_fn_t)(
1177     ompd_address_space_context_t *address_space_context,
1178     ompd_thread_context_t *thread_context, const ompd_address_t *addr,
1179     ompd_size_t nbytes, const void *buffer);
1180 
1181 typedef ompd_rc_t (*ompd_callback_device_host_fn_t)(
1182     ompd_address_space_context_t *address_space_context, const void *input,
1183     ompd_size_t unit_size, ompd_size_t count, void *output);
1184 
1185 typedef ompd_rc_t (*ompd_callback_print_string_fn_t)(const char *string,
1186                                                      int category);
1187 
1188 typedef struct ompd_callbacks_t {
1189   ompd_callback_memory_alloc_fn_t alloc_memory;
1190   ompd_callback_memory_free_fn_t free_memory;
1191   ompd_callback_print_string_fn_t print_string;
1192   ompd_callback_sizeof_fn_t sizeof_type;
1193   ompd_callback_symbol_addr_fn_t symbol_addr_lookup;
1194   ompd_callback_memory_read_fn_t read_memory;
1195   ompd_callback_memory_write_fn_t write_memory;
1196   ompd_callback_memory_read_fn_t read_string;
1197   ompd_callback_device_host_fn_t device_to_host;
1198   ompd_callback_device_host_fn_t host_to_device;
1199   ompd_callback_get_thread_context_for_thread_id_fn_t
1200       get_thread_context_for_thread_id;
1201 } ompd_callbacks_t;
1202 
1203 void ompd_bp_parallel_begin(void);
1204 
1205 void ompd_bp_parallel_end(void);
1206 
1207 void ompd_bp_task_begin(void);
1208 
1209 void ompd_bp_task_end(void);
1210 
1211 void ompd_bp_thread_begin(void);
1212 
1213 void ompd_bp_thread_end(void);
1214 
1215 void ompd_bp_device_begin(void);
1216 
1217 void ompd_bp_device_end(void);
1218 
1219 ompd_rc_t ompd_initialize(ompd_word_t api_version,
1220                           const ompd_callbacks_t *callbacks);
1221 
1222 ompd_rc_t ompd_get_api_version(ompd_word_t *version);
1223 
1224 ompd_rc_t ompd_get_version_string(const char **string);
1225 
1226 ompd_rc_t ompd_finalize(void);
1227 
1228 ompd_rc_t ompd_process_initialize(ompd_address_space_context_t *context,
1229                                   ompd_address_space_handle_t **handle);
1230 
1231 ompd_rc_t ompd_device_initialize(ompd_address_space_handle_t *process_handle,
1232                                  ompd_address_space_context_t *device_context,
1233                                  ompd_device_t kind, ompd_size_t sizeof_id,
1234                                  void *id,
1235                                  ompd_address_space_handle_t **device_handle);
1236 
1237 ompd_rc_t ompd_rel_address_space_handle(ompd_address_space_handle_t *handle);
1238 
1239 ompd_rc_t ompd_get_omp_version(ompd_address_space_handle_t *address_space,
1240                                ompd_word_t *omp_version);
1241 
1242 ompd_rc_t
1243 ompd_get_omp_version_string(ompd_address_space_handle_t *address_space,
1244                             const char **string);
1245 
1246 ompd_rc_t ompd_get_thread_in_parallel(ompd_parallel_handle_t *parallel_handle,
1247                                       int thread_num,
1248                                       ompd_thread_handle_t **thread_handle);
1249 
1250 ompd_rc_t ompd_get_thread_handle(ompd_address_space_handle_t *handle,
1251                                  ompd_thread_id_t kind,
1252                                  ompd_size_t sizeof_thread_id,
1253                                  const void *thread_id,
1254                                  ompd_thread_handle_t **thread_handle);
1255 
1256 ompd_rc_t ompd_rel_thread_handle(ompd_thread_handle_t *thread_handle);
1257 
1258 ompd_rc_t ompd_thread_handle_compare(ompd_thread_handle_t *thread_handle_1,
1259                                      ompd_thread_handle_t *thread_handle_2,
1260                                      int *cmp_value);
1261 
1262 ompd_rc_t ompd_get_thread_id(ompd_thread_handle_t *thread_handle,
1263                              ompd_thread_id_t kind,
1264                              ompd_size_t sizeof_thread_id, void *thread_id);
1265 
1266 ompd_rc_t
1267 ompd_get_curr_parallel_handle(ompd_thread_handle_t *thread_handle,
1268                               ompd_parallel_handle_t **parallel_handle);
1269 
1270 ompd_rc_t ompd_get_enclosing_parallel_handle(
1271     ompd_parallel_handle_t *parallel_handle,
1272     ompd_parallel_handle_t **enclosing_parallel_handle);
1273 
1274 ompd_rc_t
1275 ompd_get_task_parallel_handle(ompd_task_handle_t *task_handle,
1276                               ompd_parallel_handle_t **task_parallel_handle);
1277 
1278 ompd_rc_t ompd_rel_parallel_handle(ompd_parallel_handle_t *parallel_handle);
1279 
1280 ompd_rc_t
1281 ompd_parallel_handle_compare(ompd_parallel_handle_t *parallel_handle_1,
1282                              ompd_parallel_handle_t *parallel_handle_2,
1283                              int *cmp_value);
1284 
1285 ompd_rc_t ompd_get_curr_task_handle(ompd_thread_handle_t *thread_handle,
1286                                     ompd_task_handle_t **task_handle);
1287 
1288 ompd_rc_t
1289 ompd_get_generating_task_handle(ompd_task_handle_t *task_handle,
1290                                 ompd_task_handle_t **generating_task_handle);
1291 
1292 ompd_rc_t
1293 ompd_get_scheduling_task_handle(ompd_task_handle_t *task_handle,
1294                                 ompd_task_handle_t **scheduling_task_handle);
1295 
1296 ompd_rc_t ompd_get_task_in_parallel(ompd_parallel_handle_t *parallel_handle,
1297                                     int thread_num,
1298                                     ompd_task_handle_t **task_handle);
1299 
1300 ompd_rc_t ompd_rel_task_handle(ompd_task_handle_t *task_handle);
1301 
1302 ompd_rc_t ompd_task_handle_compare(ompd_task_handle_t *task_handle_1,
1303                                    ompd_task_handle_t *task_handle_2,
1304                                    int *cmp_value);
1305 
1306 ompd_rc_t ompd_get_task_function(ompd_task_handle_t *task_handle,
1307                                  ompd_address_t *entry_point);
1308 
1309 ompd_rc_t ompd_get_task_frame(ompd_task_handle_t *task_handle,
1310                               ompd_frame_info_t *exit_frame,
1311                               ompd_frame_info_t *enter_frame);
1312 
1313 ompd_rc_t
1314 ompd_enumerate_states(ompd_address_space_handle_t *address_space_handle,
1315                       ompd_word_t current_state, ompd_word_t *next_state,
1316                       const char **next_state_name, ompd_word_t *more_enums);
1317 
1318 ompd_rc_t ompd_get_state(ompd_thread_handle_t *thread_handle,
1319                          ompd_word_t *state, ompd_wait_id_t *wait_id);
1320 
1321 ompd_rc_t
1322 ompd_get_display_control_vars(ompd_address_space_handle_t *address_space_handle,
1323                               const char *const **control_vars);
1324 
1325 ompd_rc_t ompd_rel_display_control_vars(const char *const **control_vars);
1326 
1327 ompd_rc_t ompd_enumerate_icvs(ompd_address_space_handle_t *handle,
1328                               ompd_icv_id_t current, ompd_icv_id_t *next_id,
1329                               const char **next_icv_name,
1330                               ompd_scope_t *next_scope, int *more);
1331 
1332 ompd_rc_t ompd_get_icv_from_scope(void *handle, ompd_scope_t scope,
1333                                   ompd_icv_id_t icv_id, ompd_word_t *icv_value);
1334 
1335 ompd_rc_t ompd_get_icv_string_from_scope(void *handle, ompd_scope_t scope,
1336                                          ompd_icv_id_t icv_id,
1337                                          const char **icv_string);
1338 
1339 ompd_rc_t ompd_get_tool_data(void *handle, ompd_scope_t scope,
1340                              ompd_word_t *value, ompd_address_t *ptr);
1341 
1342 typedef struct ompt_record_ompt_t {
1343   ompt_callbacks_t type;
1344   ompt_device_time_t time;
1345   ompt_id_t thread_id;
1346   ompt_id_t target_id;
1347   union {
1348     ompt_record_thread_begin_t thread_begin;
1349     ompt_record_parallel_begin_t parallel_begin;
1350     ompt_record_parallel_end_t parallel_end;
1351     ompt_record_work_t work;
1352     ompt_record_dispatch_t dispatch;
1353     ompt_record_task_create_t task_create;
1354     ompt_record_dependences_t dependences;
1355     ompt_record_task_dependence_t task_dependence;
1356     ompt_record_task_schedule_t task_schedule;
1357     ompt_record_implicit_task_t implicit_task;
1358     ompt_record_masked_t masked;
1359     ompt_record_sync_region_t sync_region;
1360     ompt_record_mutex_acquire_t mutex_acquire;
1361     ompt_record_mutex_t mutex;
1362     ompt_record_nest_lock_t nest_lock;
1363     ompt_record_flush_t flush;
1364     ompt_record_cancel_t cancel;
1365     ompt_record_target_t target;
1366     ompt_record_target_data_op_t target_data_op;
1367     ompt_record_target_map_t target_map;
1368     ompt_record_target_kernel_t target_kernel;
1369     ompt_record_control_tool_t control_tool;
1370   } record;
1371 } ompt_record_ompt_t;
1372 
1373 typedef ompt_record_ompt_t *(*ompt_get_record_ompt_t) (
1374   ompt_buffer_t *buffer,
1375   ompt_buffer_cursor_t current
1376 );
1377 
1378 #define ompt_id_none 0
1379 #define ompt_data_none {0}
1380 #define ompt_time_none 0
1381 #define ompt_hwid_none 0
1382 #define ompt_addr_none ~0
1383 #define ompt_mutex_impl_none 0
1384 #define ompt_wait_id_none 0
1385 
1386 #define ompd_segment_none 0
1387 
1388 #endif /* __OMPT__ */
1389