• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
177typedef 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
187typedef 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
228typedef enum ompt_record_t {
229  ompt_record_ompt               = 1,
230  ompt_record_native             = 2,
231  ompt_record_invalid            = 3
232} ompt_record_t;
233
234typedef enum ompt_record_native_t {
235  ompt_record_native_info  = 1,
236  ompt_record_native_event = 2
237} ompt_record_native_t;
238
239typedef 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
248typedef uint64_t ompt_id_t;
249
250typedef uint64_t ompt_device_time_t;
251
252typedef uint64_t ompt_buffer_cursor_t;
253
254typedef 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
261typedef 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
267typedef enum ompt_dispatch_t {
268  ompt_dispatch_iteration             = 1,
269  ompt_dispatch_section               = 2
270} ompt_dispatch_t;
271
272typedef enum ompt_sync_region_t {
273  ompt_sync_region_barrier                DEPRECATED_51 = 1,
274  ompt_sync_region_barrier_implicit       DEPRECATED_51 = 2,
275  ompt_sync_region_barrier_explicit       = 3,
276  ompt_sync_region_barrier_implementation = 4,
277  ompt_sync_region_taskwait               = 5,
278  ompt_sync_region_taskgroup              = 6,
279  ompt_sync_region_reduction              = 7,
280  ompt_sync_region_barrier_implicit_workshare = 8,
281  ompt_sync_region_barrier_implicit_parallel = 9,
282  ompt_sync_region_barrier_teams = 10
283} ompt_sync_region_t;
284
285typedef enum ompt_target_data_op_t {
286  ompt_target_data_alloc                      = 1,
287  ompt_target_data_transfer_to_device         = 2,
288  ompt_target_data_transfer_from_device       = 3,
289  ompt_target_data_delete                     = 4,
290  ompt_target_data_associate                  = 5,
291  ompt_target_data_disassociate               = 6,
292  ompt_target_data_alloc_async                = 17,
293  ompt_target_data_transfer_to_device_async   = 18,
294  ompt_target_data_transfer_from_device_async = 19,
295  ompt_target_data_delete_async               = 20
296} ompt_target_data_op_t;
297
298typedef enum ompt_work_t {
299  ompt_work_loop               = 1,
300  ompt_work_sections           = 2,
301  ompt_work_single_executor    = 3,
302  ompt_work_single_other       = 4,
303  ompt_work_workshare          = 5,
304  ompt_work_distribute         = 6,
305  ompt_work_taskloop           = 7,
306  ompt_work_scope              = 8
307} ompt_work_t;
308
309typedef enum ompt_mutex_t {
310  ompt_mutex_lock                     = 1,
311  ompt_mutex_test_lock                = 2,
312  ompt_mutex_nest_lock                = 3,
313  ompt_mutex_test_nest_lock           = 4,
314  ompt_mutex_critical                 = 5,
315  ompt_mutex_atomic                   = 6,
316  ompt_mutex_ordered                  = 7
317} ompt_mutex_t;
318
319typedef enum ompt_native_mon_flag_t {
320  ompt_native_data_motion_explicit    = 0x01,
321  ompt_native_data_motion_implicit    = 0x02,
322  ompt_native_kernel_invocation       = 0x04,
323  ompt_native_kernel_execution        = 0x08,
324  ompt_native_driver                  = 0x10,
325  ompt_native_runtime                 = 0x20,
326  ompt_native_overhead                = 0x40,
327  ompt_native_idleness                = 0x80
328} ompt_native_mon_flag_t;
329
330typedef enum ompt_task_flag_t {
331  ompt_task_initial                   = 0x00000001,
332  ompt_task_implicit                  = 0x00000002,
333  ompt_task_explicit                  = 0x00000004,
334  ompt_task_target                    = 0x00000008,
335  ompt_task_taskwait                  = 0x00000010,
336  ompt_task_undeferred                = 0x08000000,
337  ompt_task_untied                    = 0x10000000,
338  ompt_task_final                     = 0x20000000,
339  ompt_task_mergeable                 = 0x40000000,
340  ompt_task_merged                    = 0x80000000
341} ompt_task_flag_t;
342
343typedef enum ompt_task_status_t {
344  ompt_task_complete      = 1,
345  ompt_task_yield         = 2,
346  ompt_task_cancel        = 3,
347  ompt_task_detach        = 4,
348  ompt_task_early_fulfill = 5,
349  ompt_task_late_fulfill  = 6,
350  ompt_task_switch        = 7,
351  ompt_taskwait_complete  = 8
352} ompt_task_status_t;
353
354typedef enum ompt_target_t {
355  ompt_target                         = 1,
356  ompt_target_enter_data              = 2,
357  ompt_target_exit_data               = 3,
358  ompt_target_update                  = 4,
359  ompt_target_nowait                  = 9,
360  ompt_target_enter_data_nowait       = 10,
361  ompt_target_exit_data_nowait        = 11,
362  ompt_target_update_nowait           = 12
363} ompt_target_t;
364
365typedef enum ompt_parallel_flag_t {
366  ompt_parallel_invoker_program = 0x00000001,
367  ompt_parallel_invoker_runtime = 0x00000002,
368  ompt_parallel_league          = 0x40000000,
369  ompt_parallel_team            = 0x80000000
370} ompt_parallel_flag_t;
371
372typedef enum ompt_target_map_flag_t {
373  ompt_target_map_flag_to             = 0x01,
374  ompt_target_map_flag_from           = 0x02,
375  ompt_target_map_flag_alloc          = 0x04,
376  ompt_target_map_flag_release        = 0x08,
377  ompt_target_map_flag_delete         = 0x10,
378  ompt_target_map_flag_implicit       = 0x20
379} ompt_target_map_flag_t;
380
381typedef enum ompt_dependence_type_t {
382  ompt_dependence_type_in              = 1,
383  ompt_dependence_type_out             = 2,
384  ompt_dependence_type_inout           = 3,
385  ompt_dependence_type_mutexinoutset   = 4,
386  ompt_dependence_type_source          = 5,
387  ompt_dependence_type_sink            = 6,
388  ompt_dependence_type_inoutset        = 7
389} ompt_dependence_type_t;
390
391typedef enum ompt_severity_t {
392  ompt_warning                         = 1,
393  ompt_fatal                           = 2
394} ompt_severity_t;
395
396typedef enum ompt_cancel_flag_t {
397  ompt_cancel_parallel       = 0x01,
398  ompt_cancel_sections       = 0x02,
399  ompt_cancel_loop           = 0x04,
400  ompt_cancel_taskgroup      = 0x08,
401  ompt_cancel_activated      = 0x10,
402  ompt_cancel_detected       = 0x20,
403  ompt_cancel_discarded_task = 0x40
404} ompt_cancel_flag_t;
405
406typedef uint64_t ompt_hwid_t;
407
408typedef uint64_t ompt_wait_id_t;
409
410typedef enum ompt_frame_flag_t {
411  ompt_frame_runtime        = 0x00,
412  ompt_frame_application    = 0x01,
413  ompt_frame_cfa            = 0x10,
414  ompt_frame_framepointer   = 0x20,
415  ompt_frame_stackaddress   = 0x30
416} ompt_frame_flag_t;
417
418typedef enum ompt_state_t {
419  ompt_state_work_serial                      = 0x000,
420  ompt_state_work_parallel                    = 0x001,
421  ompt_state_work_reduction                   = 0x002,
422
423  ompt_state_wait_barrier                     DEPRECATED_51 = 0x010,
424  ompt_state_wait_barrier_implicit_parallel   = 0x011,
425  ompt_state_wait_barrier_implicit_workshare  = 0x012,
426  ompt_state_wait_barrier_implicit            DEPRECATED_51 = 0x013,
427  ompt_state_wait_barrier_explicit            = 0x014,
428  ompt_state_wait_barrier_implementation      = 0x015,
429  ompt_state_wait_barrier_teams               = 0x016,
430
431  ompt_state_wait_taskwait                    = 0x020,
432  ompt_state_wait_taskgroup                   = 0x021,
433
434  ompt_state_wait_mutex                       = 0x040,
435  ompt_state_wait_lock                        = 0x041,
436  ompt_state_wait_critical                    = 0x042,
437  ompt_state_wait_atomic                      = 0x043,
438  ompt_state_wait_ordered                     = 0x044,
439
440  ompt_state_wait_target                      = 0x080,
441  ompt_state_wait_target_map                  = 0x081,
442  ompt_state_wait_target_update               = 0x082,
443
444  ompt_state_idle                             = 0x100,
445  ompt_state_overhead                         = 0x101,
446  ompt_state_undefined                        = 0x102
447} ompt_state_t;
448
449typedef uint64_t (*ompt_get_unique_id_t) (void);
450
451typedef uint64_t ompd_size_t;
452
453typedef uint64_t ompd_wait_id_t;
454
455typedef uint64_t ompd_addr_t;
456typedef int64_t  ompd_word_t;
457typedef uint64_t ompd_seg_t;
458
459typedef uint64_t ompd_device_t;
460
461typedef uint64_t ompd_thread_id_t;
462
463typedef enum ompd_scope_t {
464  ompd_scope_global = 1,
465  ompd_scope_address_space = 2,
466  ompd_scope_thread = 3,
467  ompd_scope_parallel = 4,
468  ompd_scope_implicit_task = 5,
469  ompd_scope_task = 6
470} ompd_scope_t;
471
472typedef uint64_t ompd_icv_id_t;
473
474typedef enum ompd_rc_t {
475  ompd_rc_ok = 0,
476  ompd_rc_unavailable = 1,
477  ompd_rc_stale_handle = 2,
478  ompd_rc_bad_input = 3,
479  ompd_rc_error = 4,
480  ompd_rc_unsupported = 5,
481  ompd_rc_needs_state_tracking = 6,
482  ompd_rc_incompatible = 7,
483  ompd_rc_device_read_error = 8,
484  ompd_rc_device_write_error = 9,
485  ompd_rc_nomem = 10,
486} ompd_rc_t;
487
488typedef void (*ompt_interface_fn_t) (void);
489
490typedef ompt_interface_fn_t (*ompt_function_lookup_t) (
491  const char *interface_function_name
492);
493
494typedef union ompt_data_t {
495  uint64_t value;
496  void *ptr;
497} ompt_data_t;
498
499typedef struct ompt_frame_t {
500  ompt_data_t exit_frame;
501  ompt_data_t enter_frame;
502  int exit_frame_flags;
503  int enter_frame_flags;
504} ompt_frame_t;
505
506typedef void (*ompt_callback_t) (void);
507
508typedef void ompt_device_t;
509
510typedef void ompt_buffer_t;
511
512typedef void (*ompt_callback_buffer_request_t) (
513  int device_num,
514  ompt_buffer_t **buffer,
515  size_t *bytes
516);
517
518typedef void (*ompt_callback_buffer_complete_t) (
519  int device_num,
520  ompt_buffer_t *buffer,
521  size_t bytes,
522  ompt_buffer_cursor_t begin,
523  int buffer_owned
524);
525
526typedef void (*ompt_finalize_t) (
527  ompt_data_t *tool_data
528);
529
530typedef int (*ompt_initialize_t) (
531  ompt_function_lookup_t lookup,
532  int initial_device_num,
533  ompt_data_t *tool_data
534);
535
536typedef struct ompt_start_tool_result_t {
537  ompt_initialize_t initialize;
538  ompt_finalize_t finalize;
539  ompt_data_t tool_data;
540} ompt_start_tool_result_t;
541
542typedef struct ompt_record_abstract_t {
543  ompt_record_native_t rclass;
544  const char *type;
545  ompt_device_time_t start_time;
546  ompt_device_time_t end_time;
547  ompt_hwid_t hwid;
548} ompt_record_abstract_t;
549
550typedef struct ompt_dependence_t {
551  ompt_data_t variable;
552  ompt_dependence_type_t dependence_type;
553} ompt_dependence_t;
554
555typedef int (*ompt_enumerate_states_t) (
556  int current_state,
557  int *next_state,
558  const char **next_state_name
559);
560
561typedef int (*ompt_enumerate_mutex_impls_t) (
562  int current_impl,
563  int *next_impl,
564  const char **next_impl_name
565);
566
567typedef ompt_set_result_t (*ompt_set_callback_t) (
568  ompt_callbacks_t event,
569  ompt_callback_t callback
570);
571
572typedef int (*ompt_get_callback_t) (
573  ompt_callbacks_t event,
574  ompt_callback_t *callback
575);
576
577typedef ompt_data_t *(*ompt_get_thread_data_t) (void);
578
579typedef int (*ompt_get_num_procs_t) (void);
580
581typedef int (*ompt_get_num_places_t) (void);
582
583typedef int (*ompt_get_place_proc_ids_t) (
584  int place_num,
585  int ids_size,
586  int *ids
587);
588
589typedef int (*ompt_get_place_num_t) (void);
590
591typedef int (*ompt_get_partition_place_nums_t) (
592  int place_nums_size,
593  int *place_nums
594);
595
596typedef int (*ompt_get_proc_id_t) (void);
597
598typedef int (*ompt_get_state_t) (
599  ompt_wait_id_t *wait_id
600);
601
602typedef int (*ompt_get_parallel_info_t) (
603  int ancestor_level,
604  ompt_data_t **parallel_data,
605  int *team_size
606);
607
608typedef int (*ompt_get_task_info_t) (
609  int ancestor_level,
610  int *flags,
611  ompt_data_t **task_data,
612  ompt_frame_t **task_frame,
613  ompt_data_t **parallel_data,
614  int *thread_num
615);
616
617typedef int (*ompt_get_task_memory_t)(
618  void **addr,
619  size_t *size,
620  int block
621);
622
623typedef int (*ompt_get_target_info_t) (
624  uint64_t *device_num,
625  ompt_id_t *target_id,
626  ompt_id_t *host_op_id
627);
628
629typedef int (*ompt_get_num_devices_t) (void);
630
631typedef void (*ompt_finalize_tool_t) (void);
632
633typedef int (*ompt_get_device_num_procs_t) (
634  ompt_device_t *device
635);
636
637typedef ompt_device_time_t (*ompt_get_device_time_t) (
638  ompt_device_t *device
639);
640
641typedef double (*ompt_translate_time_t) (
642  ompt_device_t *device,
643  ompt_device_time_t time
644);
645
646typedef ompt_set_result_t (*ompt_set_trace_ompt_t) (
647  ompt_device_t *device,
648  unsigned int enable,
649  unsigned int etype
650);
651
652typedef ompt_set_result_t (*ompt_set_trace_native_t) (
653  ompt_device_t *device,
654  int enable,
655  int flags
656);
657
658typedef int (*ompt_start_trace_t) (
659  ompt_device_t *device,
660  ompt_callback_buffer_request_t request,
661  ompt_callback_buffer_complete_t complete
662);
663
664typedef int (*ompt_pause_trace_t) (
665  ompt_device_t *device,
666  int begin_pause
667);
668
669typedef int (*ompt_flush_trace_t) (
670  ompt_device_t *device
671);
672
673typedef int (*ompt_stop_trace_t) (
674  ompt_device_t *device
675);
676
677typedef int (*ompt_advance_buffer_cursor_t) (
678  ompt_device_t *device,
679  ompt_buffer_t *buffer,
680  size_t size,
681  ompt_buffer_cursor_t current,
682  ompt_buffer_cursor_t *next
683);
684
685typedef ompt_record_t (*ompt_get_record_type_t) (
686  ompt_buffer_t *buffer,
687  ompt_buffer_cursor_t current
688);
689
690typedef void *(*ompt_get_record_native_t) (
691  ompt_buffer_t *buffer,
692  ompt_buffer_cursor_t current,
693  ompt_id_t *host_op_id
694);
695
696typedef ompt_record_abstract_t *
697(*ompt_get_record_abstract_t) (
698  void *native_record
699);
700
701typedef void (*ompt_callback_thread_begin_t) (
702  ompt_thread_t thread_type,
703  ompt_data_t *thread_data
704);
705
706typedef struct ompt_record_thread_begin_t {
707  ompt_thread_t thread_type;
708} ompt_record_thread_begin_t;
709
710typedef void (*ompt_callback_thread_end_t) (
711  ompt_data_t *thread_data
712);
713
714typedef void (*ompt_callback_parallel_begin_t) (
715  ompt_data_t *encountering_task_data,
716  const ompt_frame_t *encountering_task_frame,
717  ompt_data_t *parallel_data,
718  unsigned int requested_parallelism,
719  int flags,
720  const void *codeptr_ra
721);
722
723typedef struct ompt_record_parallel_begin_t {
724  ompt_id_t encountering_task_id;
725  ompt_id_t parallel_id;
726  unsigned int requested_parallelism;
727  int flags;
728  const void *codeptr_ra;
729} ompt_record_parallel_begin_t;
730
731typedef void (*ompt_callback_parallel_end_t) (
732  ompt_data_t *parallel_data,
733  ompt_data_t *encountering_task_data,
734  int flags,
735  const void *codeptr_ra
736);
737
738typedef struct ompt_record_parallel_end_t {
739  ompt_id_t parallel_id;
740  ompt_id_t encountering_task_id;
741  int flags;
742  const void *codeptr_ra;
743} ompt_record_parallel_end_t;
744
745typedef void (*ompt_callback_work_t) (
746  ompt_work_t wstype,
747  ompt_scope_endpoint_t endpoint,
748  ompt_data_t *parallel_data,
749  ompt_data_t *task_data,
750  uint64_t count,
751  const void *codeptr_ra
752);
753
754typedef struct ompt_record_work_t {
755  ompt_work_t wstype;
756  ompt_scope_endpoint_t endpoint;
757  ompt_id_t parallel_id;
758  ompt_id_t task_id;
759  uint64_t count;
760  const void *codeptr_ra;
761} ompt_record_work_t;
762
763typedef void (*ompt_callback_dispatch_t) (
764  ompt_data_t *parallel_data,
765  ompt_data_t *task_data,
766  ompt_dispatch_t kind,
767  ompt_data_t instance
768);
769
770typedef struct ompt_record_dispatch_t {
771  ompt_id_t parallel_id;
772  ompt_id_t task_id;
773  ompt_dispatch_t kind;
774  ompt_data_t instance;
775} ompt_record_dispatch_t;
776
777typedef void (*ompt_callback_task_create_t) (
778  ompt_data_t *encountering_task_data,
779  const ompt_frame_t *encountering_task_frame,
780  ompt_data_t *new_task_data,
781  int flags,
782  int has_dependences,
783  const void *codeptr_ra
784);
785
786typedef struct ompt_record_task_create_t {
787  ompt_id_t encountering_task_id;
788  ompt_id_t new_task_id;
789  int flags;
790  int has_dependences;
791  const void *codeptr_ra;
792} ompt_record_task_create_t;
793
794typedef void (*ompt_callback_dependences_t) (
795  ompt_data_t *task_data,
796  const ompt_dependence_t *deps,
797  int ndeps
798);
799
800typedef struct ompt_record_dependences_t {
801  ompt_id_t task_id;
802  ompt_dependence_t dep;
803  int ndeps;
804} ompt_record_dependences_t;
805
806typedef void (*ompt_callback_task_dependence_t) (
807  ompt_data_t *src_task_data,
808  ompt_data_t *sink_task_data
809);
810
811typedef struct ompt_record_task_dependence_t {
812  ompt_id_t src_task_id;
813  ompt_id_t sink_task_id;
814} ompt_record_task_dependence_t;
815
816typedef void (*ompt_callback_task_schedule_t) (
817  ompt_data_t *prior_task_data,
818  ompt_task_status_t prior_task_status,
819  ompt_data_t *next_task_data
820);
821
822typedef struct ompt_record_task_schedule_t {
823  ompt_id_t prior_task_id;
824  ompt_task_status_t prior_task_status;
825  ompt_id_t next_task_id;
826} ompt_record_task_schedule_t;
827
828typedef void (*ompt_callback_implicit_task_t) (
829  ompt_scope_endpoint_t endpoint,
830  ompt_data_t *parallel_data,
831  ompt_data_t *task_data,
832  unsigned int actual_parallelism,
833  unsigned int index,
834  int flags
835);
836
837typedef struct ompt_record_implicit_task_t {
838  ompt_scope_endpoint_t endpoint;
839  ompt_id_t parallel_id;
840  ompt_id_t task_id;
841  unsigned int actual_parallelism;
842  unsigned int index;
843  int flags;
844} ompt_record_implicit_task_t;
845
846typedef void (*ompt_callback_masked_t) (
847  ompt_scope_endpoint_t endpoint,
848  ompt_data_t *parallel_data,
849  ompt_data_t *task_data,
850  const void *codeptr_ra
851);
852
853typedef ompt_callback_masked_t ompt_callback_master_t DEPRECATED_51;
854
855typedef struct ompt_record_masked_t {
856  ompt_scope_endpoint_t endpoint;
857  ompt_id_t parallel_id;
858  ompt_id_t task_id;
859  const void *codeptr_ra;
860} ompt_record_masked_t;
861
862typedef void (*ompt_callback_sync_region_t) (
863  ompt_sync_region_t kind,
864  ompt_scope_endpoint_t endpoint,
865  ompt_data_t *parallel_data,
866  ompt_data_t *task_data,
867  const void *codeptr_ra
868);
869
870typedef struct ompt_record_sync_region_t {
871  ompt_sync_region_t kind;
872  ompt_scope_endpoint_t endpoint;
873  ompt_id_t parallel_id;
874  ompt_id_t task_id;
875  const void *codeptr_ra;
876} ompt_record_sync_region_t;
877
878typedef void (*ompt_callback_mutex_acquire_t) (
879  ompt_mutex_t kind,
880  unsigned int hint,
881  unsigned int impl,
882  ompt_wait_id_t wait_id,
883  const void *codeptr_ra
884);
885
886typedef struct ompt_record_mutex_acquire_t {
887  ompt_mutex_t kind;
888  unsigned int hint;
889  unsigned int impl;
890  ompt_wait_id_t wait_id;
891  const void *codeptr_ra;
892} ompt_record_mutex_acquire_t;
893
894typedef void (*ompt_callback_mutex_t) (
895  ompt_mutex_t kind,
896  ompt_wait_id_t wait_id,
897  const void *codeptr_ra
898);
899
900typedef struct ompt_record_mutex_t {
901  ompt_mutex_t kind;
902  ompt_wait_id_t wait_id;
903  const void *codeptr_ra;
904} ompt_record_mutex_t;
905
906typedef void (*ompt_callback_nest_lock_t) (
907  ompt_scope_endpoint_t endpoint,
908  ompt_wait_id_t wait_id,
909  const void *codeptr_ra
910);
911
912typedef struct ompt_record_nest_lock_t {
913  ompt_scope_endpoint_t endpoint;
914  ompt_wait_id_t wait_id;
915  const void *codeptr_ra;
916} ompt_record_nest_lock_t;
917
918typedef void (*ompt_callback_flush_t) (
919  ompt_data_t *thread_data,
920  const void *codeptr_ra
921);
922
923typedef struct ompt_record_flush_t {
924  const void *codeptr_ra;
925} ompt_record_flush_t;
926
927typedef void (*ompt_callback_cancel_t) (
928  ompt_data_t *task_data,
929  int flags,
930  const void *codeptr_ra
931);
932
933typedef struct ompt_record_cancel_t {
934  ompt_id_t task_id;
935  int flags;
936  const void *codeptr_ra;
937} ompt_record_cancel_t;
938
939typedef void (*ompt_callback_device_initialize_t) (
940  int device_num,
941  const char *type,
942  ompt_device_t *device,
943  ompt_function_lookup_t lookup,
944  const char *documentation
945);
946
947typedef void (*ompt_callback_device_finalize_t) (
948  int device_num
949);
950
951typedef void (*ompt_callback_device_load_t) (
952  int device_num,
953  const char *filename,
954  int64_t offset_in_file,
955  void *vma_in_file,
956  size_t bytes,
957  void *host_addr,
958  void *device_addr,
959  uint64_t module_id
960);
961
962typedef void (*ompt_callback_device_unload_t) (
963  int device_num,
964  uint64_t module_id
965);
966
967typedef void (*ompt_callback_target_data_op_emi_t) (
968  ompt_scope_endpoint_t endpoint,
969  ompt_data_t *target_task_data,
970  ompt_data_t *target_data,
971  ompt_id_t *host_op_id,
972  ompt_target_data_op_t optype,
973  void *src_addr,
974  int src_device_num,
975  void *dest_addr,
976  int dest_device_num,
977  size_t bytes,
978  const void *codeptr_ra
979);
980
981typedef void (*ompt_callback_target_data_op_t) (
982  ompt_id_t target_id,
983  ompt_id_t host_op_id,
984  ompt_target_data_op_t optype,
985  void *src_addr,
986  int src_device_num,
987  void *dest_addr,
988  int dest_device_num,
989  size_t bytes,
990  const void *codeptr_ra
991);
992
993typedef struct ompt_record_target_data_op_t {
994  ompt_id_t host_op_id;
995  ompt_target_data_op_t optype;
996  void *src_addr;
997  int src_device_num;
998  void *dest_addr;
999  int dest_device_num;
1000  size_t bytes;
1001  ompt_device_time_t end_time;
1002  const void *codeptr_ra;
1003} ompt_record_target_data_op_t;
1004
1005typedef void (*ompt_callback_target_emi_t) (
1006  ompt_target_t kind,
1007  ompt_scope_endpoint_t endpoint,
1008  int device_num,
1009  ompt_data_t *task_data,
1010  ompt_data_t *target_task_data,
1011  ompt_data_t *target_data,
1012  const void *codeptr_ra
1013);
1014
1015typedef void (*ompt_callback_target_t) (
1016  ompt_target_t kind,
1017  ompt_scope_endpoint_t endpoint,
1018  int device_num,
1019  ompt_data_t *task_data,
1020  ompt_id_t target_id,
1021  const void *codeptr_ra
1022);
1023
1024typedef struct ompt_record_target_t {
1025  ompt_target_t kind;
1026  ompt_scope_endpoint_t endpoint;
1027  int device_num;
1028  ompt_id_t task_id;
1029  ompt_id_t target_id;
1030  const void *codeptr_ra;
1031} ompt_record_target_t;
1032
1033typedef void (*ompt_callback_target_map_emi_t) (
1034  ompt_data_t *target_data,
1035  unsigned int nitems,
1036  void **host_addr,
1037  void **device_addr,
1038  size_t *bytes,
1039  unsigned int *mapping_flags,
1040  const void *codeptr_ra
1041);
1042
1043typedef void (*ompt_callback_target_map_t) (
1044  ompt_id_t target_id,
1045  unsigned int nitems,
1046  void **host_addr,
1047  void **device_addr,
1048  size_t *bytes,
1049  unsigned int *mapping_flags,
1050  const void *codeptr_ra
1051);
1052
1053typedef struct ompt_record_target_map_t {
1054  ompt_id_t target_id;
1055  unsigned int nitems;
1056  void **host_addr;
1057  void **device_addr;
1058  size_t *bytes;
1059  unsigned int *mapping_flags;
1060  const void *codeptr_ra;
1061} ompt_record_target_map_t;
1062
1063typedef void (*ompt_callback_target_submit_emi_t) (
1064  ompt_scope_endpoint_t endpoint,
1065  ompt_data_t *target_data,
1066  ompt_id_t *host_op_id,
1067  unsigned int requested_num_teams
1068);
1069
1070typedef void (*ompt_callback_target_submit_t) (
1071  ompt_id_t target_id,
1072  ompt_id_t host_op_id,
1073  unsigned int requested_num_teams
1074);
1075
1076typedef struct ompt_record_target_kernel_t {
1077  ompt_id_t host_op_id;
1078  unsigned int requested_num_teams;
1079  unsigned int granted_num_teams;
1080  ompt_device_time_t end_time;
1081} ompt_record_target_kernel_t;
1082
1083typedef int (*ompt_callback_control_tool_t) (
1084  uint64_t command,
1085  uint64_t modifier,
1086  void *arg,
1087  const void *codeptr_ra
1088);
1089
1090typedef struct ompt_record_control_tool_t {
1091  uint64_t command;
1092  uint64_t modifier;
1093  const void *codeptr_ra;
1094} ompt_record_control_tool_t;
1095
1096typedef void (*ompt_callback_error_t) (
1097  ompt_severity_t severity,
1098  const char *message, size_t length,
1099  const void *codeptr_ra
1100);
1101
1102typedef struct ompd_address_t {
1103  ompd_seg_t segment;
1104  ompd_addr_t address;
1105} ompd_address_t;
1106
1107typedef struct ompd_frame_info_t {
1108  ompd_address_t frame_address;
1109  ompd_word_t frame_flag;
1110} ompd_frame_info_t;
1111
1112typedef struct _ompd_aspace_handle ompd_address_space_handle_t;
1113typedef struct _ompd_thread_handle ompd_thread_handle_t;
1114typedef struct _ompd_parallel_handle ompd_parallel_handle_t;
1115typedef struct _ompd_task_handle ompd_task_handle_t;
1116
1117typedef struct _ompd_aspace_cont ompd_address_space_context_t;
1118typedef struct _ompd_thread_cont ompd_thread_context_t;
1119
1120typedef struct ompd_device_type_sizes_t {
1121  uint8_t sizeof_char;
1122  uint8_t sizeof_short;
1123  uint8_t sizeof_int;
1124  uint8_t sizeof_long;
1125  uint8_t sizeof_long_long;
1126  uint8_t sizeof_pointer;
1127} ompd_device_type_sizes_t;
1128
1129typedef struct ompt_record_ompt_t {
1130  ompt_callbacks_t type;
1131  ompt_device_time_t time;
1132  ompt_id_t thread_id;
1133  ompt_id_t target_id;
1134  union {
1135    ompt_record_thread_begin_t thread_begin;
1136    ompt_record_parallel_begin_t parallel_begin;
1137    ompt_record_parallel_end_t parallel_end;
1138    ompt_record_work_t work;
1139    ompt_record_dispatch_t dispatch;
1140    ompt_record_task_create_t task_create;
1141    ompt_record_dependences_t dependences;
1142    ompt_record_task_dependence_t task_dependence;
1143    ompt_record_task_schedule_t task_schedule;
1144    ompt_record_implicit_task_t implicit_task;
1145    ompt_record_masked_t masked;
1146    ompt_record_sync_region_t sync_region;
1147    ompt_record_mutex_acquire_t mutex_acquire;
1148    ompt_record_mutex_t mutex;
1149    ompt_record_nest_lock_t nest_lock;
1150    ompt_record_flush_t flush;
1151    ompt_record_cancel_t cancel;
1152    ompt_record_target_t target;
1153    ompt_record_target_data_op_t target_data_op;
1154    ompt_record_target_map_t target_map;
1155    ompt_record_target_kernel_t target_kernel;
1156    ompt_record_control_tool_t control_tool;
1157  } record;
1158} ompt_record_ompt_t;
1159
1160typedef ompt_record_ompt_t *(*ompt_get_record_ompt_t) (
1161  ompt_buffer_t *buffer,
1162  ompt_buffer_cursor_t current
1163);
1164
1165#define ompt_id_none 0
1166#define ompt_data_none {0}
1167#define ompt_time_none 0
1168#define ompt_hwid_none 0
1169#define ompt_addr_none ~0
1170#define ompt_mutex_impl_none 0
1171#define ompt_wait_id_none 0
1172
1173#define ompd_segment_none 0
1174
1175#endif /* __OMPT__ */
1176