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