/* * include/omp-tools.h.var */ //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef __OMPT__ #define __OMPT__ /***************************************************************************** * system include files *****************************************************************************/ #include #include #ifdef DEPRECATION_WARNINGS # ifdef __cplusplus # define DEPRECATED_51 [[deprecated("as of 5.1")]] # else # define DEPRECATED_51 __attribute__((deprecated("as of 5.1"))) # endif #else # define DEPRECATED_51 #endif /***************************************************************************** * iteration macros *****************************************************************************/ #define FOREACH_OMPT_INQUIRY_FN(macro) \ macro(ompt_enumerate_states) macro(ompt_enumerate_mutex_impls) \ \ macro(ompt_set_callback) macro(ompt_get_callback) \ \ macro(ompt_get_state) \ \ macro(ompt_get_parallel_info) macro(ompt_get_task_info) \ macro(ompt_get_task_memory) macro(ompt_get_thread_data) \ macro(ompt_get_unique_id) macro(ompt_finalize_tool) \ \ macro(ompt_get_num_procs) macro(ompt_get_num_places) \ macro(ompt_get_place_proc_ids) macro(ompt_get_place_num) \ macro(ompt_get_partition_place_nums) macro(ompt_get_proc_id) \ \ macro(ompt_get_target_info) macro(ompt_get_num_devices) #define FOREACH_OMPT_STATE(macro) \ \ /* first available state */ \ macro(ompt_state_undefined, 0x102) /* undefined thread state */ \ \ /* work states (0..15) */ \ macro(ompt_state_work_serial, 0x000) /* working outside parallel */ \ macro(ompt_state_work_parallel, 0x001) /* working within parallel */ \ macro(ompt_state_work_reduction, 0x002) /* performing a reduction */ \ \ /* barrier wait states (16..31) */ \ macro(ompt_state_wait_barrier, 0x010) /* waiting at a barrier */ \ macro(ompt_state_wait_barrier_implicit_parallel, \ 0x011) /* implicit barrier at the end of parallel region */ \ macro(ompt_state_wait_barrier_implicit_workshare, \ 0x012) /* implicit barrier at the end of worksharing */ \ macro(ompt_state_wait_barrier_implicit, 0x013) /* implicit barrier */ \ macro(ompt_state_wait_barrier_explicit, 0x014) /* explicit barrier */ \ \ /* task wait states (32..63) */ \ macro(ompt_state_wait_taskwait, 0x020) /* waiting at a taskwait */ \ macro(ompt_state_wait_taskgroup, 0x021) /* waiting at a taskgroup */ \ \ /* mutex wait states (64..127) */ \ macro(ompt_state_wait_mutex, 0x040) \ macro(ompt_state_wait_lock, 0x041) /* waiting for lock */ \ macro(ompt_state_wait_critical, 0x042) /* waiting for critical */ \ macro(ompt_state_wait_atomic, 0x043) /* waiting for atomic */ \ macro(ompt_state_wait_ordered, 0x044) /* waiting for ordered */ \ \ /* target wait states (128..255) */ \ macro(ompt_state_wait_target, 0x080) /* waiting for target region */ \ macro(ompt_state_wait_target_map, 0x081) /* waiting for target data mapping operation */ \ macro(ompt_state_wait_target_update, 0x082) /* waiting for target update operation */ \ \ /* misc (256..511) */ \ macro(ompt_state_idle, 0x100) /* waiting for work */ \ macro(ompt_state_overhead, 0x101) /* overhead excluding wait states */ \ \ /* implementation-specific states (512..) */ #define FOREACH_KMP_MUTEX_IMPL(macro) \ macro(kmp_mutex_impl_none, 0) /* unknown implementation */ \ macro(kmp_mutex_impl_spin, 1) /* based on spin */ \ macro(kmp_mutex_impl_queuing, 2) /* based on some fair policy */ \ macro(kmp_mutex_impl_speculative, 3) /* based on HW-supported speculation */ #define FOREACH_OMPT_HOST_EVENT(macro) \ \ /*--- Mandatory Events ---*/ \ macro(ompt_callback_thread_begin, ompt_callback_thread_begin_t, 1) /* thread begin */ \ macro(ompt_callback_thread_end, ompt_callback_thread_end_t, 2) /* thread end */ \ \ macro(ompt_callback_parallel_begin, \ ompt_callback_parallel_begin_t, \ 3) /* parallel begin */ \ macro(ompt_callback_parallel_end, ompt_callback_parallel_end_t, 4) /* parallel end */ \ \ macro(ompt_callback_task_create, ompt_callback_task_create_t, 5) /* task begin */ \ macro(ompt_callback_task_schedule, ompt_callback_task_schedule_t, 6) /* task schedule */ \ macro(ompt_callback_implicit_task, ompt_callback_implicit_task_t, 7) /* implicit task */ \ \ macro(ompt_callback_control_tool, ompt_callback_control_tool_t, 11) /* control tool */ \ \ /* Optional Events */ \ macro(ompt_callback_sync_region_wait, \ ompt_callback_sync_region_t, \ 16) /* sync region wait begin or end */ \ \ macro(ompt_callback_mutex_released, ompt_callback_mutex_t, 17) /* mutex released */ \ \ macro(ompt_callback_dependences, \ ompt_callback_dependences_t, \ 18) /* report task dependences */ \ macro(ompt_callback_task_dependence, \ ompt_callback_task_dependence_t, \ 19) /* report task dependence */ \ \ macro(ompt_callback_work, ompt_callback_work_t, 20) /* task at work begin or end */ \ \ macro(ompt_callback_masked, ompt_callback_masked_t, 21) /* task at masked begin or end */ \ \ macro(ompt_callback_sync_region, \ ompt_callback_sync_region_t, \ 23) /* sync region begin or end */ \ \ macro(ompt_callback_lock_init, ompt_callback_mutex_acquire_t, 24) /* lock init */ \ macro(ompt_callback_lock_destroy, ompt_callback_mutex_t, 25) /* lock destroy */ \ \ macro(ompt_callback_mutex_acquire, ompt_callback_mutex_acquire_t, 26) /* mutex acquire */ \ macro(ompt_callback_mutex_acquired, ompt_callback_mutex_t, 27) /* mutex acquired */ \ \ macro(ompt_callback_nest_lock, ompt_callback_nest_lock_t, 28) /* nest lock */ \ \ macro(ompt_callback_flush, ompt_callback_flush_t, 29) /* after executing flush */ \ \ macro(ompt_callback_cancel, \ ompt_callback_cancel_t, \ 30) /* cancel innermost binding region */ \ \ macro(ompt_callback_reduction, ompt_callback_sync_region_t, 31) /* reduction */ \ \ macro(ompt_callback_dispatch, ompt_callback_dispatch_t, 32) /* dispatch of work */ \ macro(ompt_callback_error, ompt_callback_error_t, 37) /* error */ #define FOREACH_OMPT_DEVICE_EVENT(macro) \ /*--- Mandatory Events ---*/ \ macro(ompt_callback_device_initialize, \ ompt_callback_device_initialize_t, \ 12) /* device initialize */ \ macro(ompt_callback_device_finalize, \ ompt_callback_device_finalize_t, \ 13) /* device finalize */ \ \ macro(ompt_callback_device_load, ompt_callback_device_load_t, 14) /* device load */ \ macro(ompt_callback_device_unload, ompt_callback_device_unload_t, 15) /* device unload */ #define FOREACH_OMPT_NOEMI_EVENT(macro) \ /*--- Mandatory Events ---*/ \ macro(ompt_callback_target, ompt_callback_target_t, 8) /* target */ \ macro(ompt_callback_target_data_op, \ ompt_callback_target_data_op_t, \ 9) /* target data op */ \ macro(ompt_callback_target_submit, \ ompt_callback_target_submit_t, \ 10) /* target submit */ /* Optional Events */ \ macro(ompt_callback_target_map, ompt_callback_target_map_t, 22) /* target map */ #define FOREACH_OMPT_EMI_EVENT(macro) \ /*--- Mandatory Events ---*/ \ macro(ompt_callback_target_emi, ompt_callback_target_emi_t, 33) /* target */ \ macro(ompt_callback_target_data_op_emi, \ ompt_callback_target_data_op_emi_t, \ 34) /* target data op */ \ macro(ompt_callback_target_submit_emi, \ ompt_callback_target_submit_emi_t, \ 35) /* target submit */ /* Optional Events */ \ macro(ompt_callback_target_map_emi, ompt_callback_target_map_emi_t, 36) /* target map */ #define FOREACH_OMPT_50_TARGET_EVENT(macro) \ FOREACH_OMPT_DEVICE_EVENT(macro) \ FOREACH_OMPT_NOEMI_EVENT(macro) #define FOREACH_OMPT_51_TARGET_EVENT(macro) \ FOREACH_OMPT_DEVICE_EVENT(macro) \ FOREACH_OMPT_EMI_EVENT(macro) #define FOREACH_OMPT_EVENT(macro) \ FOREACH_OMPT_HOST_EVENT(macro) \ FOREACH_OMPT_DEVICE_EVENT(macro) \ FOREACH_OMPT_NOEMI_EVENT(macro) \ FOREACH_OMPT_EMI_EVENT(macro) #define FOREACH_OMPT_51_EVENT(macro) \ FOREACH_OMPT_HOST_EVENT(macro) \ FOREACH_OMPT_DEVICE_EVENT(macro) \ FOREACH_OMPT_EMI_EVENT(macro) /***************************************************************************** * implementation specific types *****************************************************************************/ typedef enum kmp_mutex_impl_t { #define kmp_mutex_impl_macro(impl, code) impl = code, FOREACH_KMP_MUTEX_IMPL(kmp_mutex_impl_macro) #undef kmp_mutex_impl_macro } kmp_mutex_impl_t; /***************************************************************************** * definitions generated from spec *****************************************************************************/ typedef enum ompt_callbacks_t { ompt_callback_thread_begin = 1, ompt_callback_thread_end = 2, ompt_callback_parallel_begin = 3, ompt_callback_parallel_end = 4, ompt_callback_task_create = 5, ompt_callback_task_schedule = 6, ompt_callback_implicit_task = 7, ompt_callback_target = 8, ompt_callback_target_data_op = 9, ompt_callback_target_submit = 10, ompt_callback_control_tool = 11, ompt_callback_device_initialize = 12, ompt_callback_device_finalize = 13, ompt_callback_device_load = 14, ompt_callback_device_unload = 15, ompt_callback_sync_region_wait = 16, ompt_callback_mutex_released = 17, ompt_callback_dependences = 18, ompt_callback_task_dependence = 19, ompt_callback_work = 20, ompt_callback_master DEPRECATED_51 = 21, ompt_callback_masked = 21, ompt_callback_target_map = 22, ompt_callback_sync_region = 23, ompt_callback_lock_init = 24, ompt_callback_lock_destroy = 25, ompt_callback_mutex_acquire = 26, ompt_callback_mutex_acquired = 27, ompt_callback_nest_lock = 28, ompt_callback_flush = 29, ompt_callback_cancel = 30, ompt_callback_reduction = 31, ompt_callback_dispatch = 32, ompt_callback_target_emi = 33, ompt_callback_target_data_op_emi = 34, ompt_callback_target_submit_emi = 35, ompt_callback_target_map_emi = 36, ompt_callback_error = 37 } ompt_callbacks_t; typedef enum ompt_record_t { ompt_record_ompt = 1, ompt_record_native = 2, ompt_record_invalid = 3 } ompt_record_t; typedef enum ompt_record_native_t { ompt_record_native_info = 1, ompt_record_native_event = 2 } ompt_record_native_t; typedef enum ompt_set_result_t { ompt_set_error = 0, ompt_set_never = 1, ompt_set_impossible = 2, ompt_set_sometimes = 3, ompt_set_sometimes_paired = 4, ompt_set_always = 5 } ompt_set_result_t; typedef uint64_t ompt_id_t; typedef uint64_t ompt_device_time_t; typedef uint64_t ompt_buffer_cursor_t; typedef enum ompt_thread_t { ompt_thread_initial = 1, ompt_thread_worker = 2, ompt_thread_other = 3, ompt_thread_unknown = 4 } ompt_thread_t; typedef enum ompt_scope_endpoint_t { ompt_scope_begin = 1, ompt_scope_end = 2, ompt_scope_beginend = 3 } ompt_scope_endpoint_t; typedef enum ompt_dispatch_t { ompt_dispatch_iteration = 1, ompt_dispatch_section = 2, ompt_dispatch_ws_loop_chunk = 3, ompt_dispatch_taskloop_chunk = 4, ompt_dispatch_distribute_chunk = 5 } ompt_dispatch_t; typedef enum ompt_sync_region_t { ompt_sync_region_barrier DEPRECATED_51 = 1, ompt_sync_region_barrier_implicit DEPRECATED_51 = 2, ompt_sync_region_barrier_explicit = 3, ompt_sync_region_barrier_implementation = 4, ompt_sync_region_taskwait = 5, ompt_sync_region_taskgroup = 6, ompt_sync_region_reduction = 7, ompt_sync_region_barrier_implicit_workshare = 8, ompt_sync_region_barrier_implicit_parallel = 9, ompt_sync_region_barrier_teams = 10 } ompt_sync_region_t; typedef enum ompt_target_data_op_t { ompt_target_data_alloc = 1, ompt_target_data_transfer_to_device = 2, ompt_target_data_transfer_from_device = 3, ompt_target_data_delete = 4, ompt_target_data_associate = 5, ompt_target_data_disassociate = 6, ompt_target_data_alloc_async = 17, ompt_target_data_transfer_to_device_async = 18, ompt_target_data_transfer_from_device_async = 19, ompt_target_data_delete_async = 20 } ompt_target_data_op_t; typedef enum ompt_work_t { ompt_work_loop = 1, ompt_work_sections = 2, ompt_work_single_executor = 3, ompt_work_single_other = 4, ompt_work_workshare = 5, ompt_work_distribute = 6, ompt_work_taskloop = 7, ompt_work_scope = 8, ompt_work_loop_static = 10, ompt_work_loop_dynamic = 11, ompt_work_loop_guided = 12, ompt_work_loop_other = 13 } ompt_work_t; typedef enum ompt_mutex_t { ompt_mutex_lock = 1, ompt_mutex_test_lock = 2, ompt_mutex_nest_lock = 3, ompt_mutex_test_nest_lock = 4, ompt_mutex_critical = 5, ompt_mutex_atomic = 6, ompt_mutex_ordered = 7 } ompt_mutex_t; typedef enum ompt_native_mon_flag_t { ompt_native_data_motion_explicit = 0x01, ompt_native_data_motion_implicit = 0x02, ompt_native_kernel_invocation = 0x04, ompt_native_kernel_execution = 0x08, ompt_native_driver = 0x10, ompt_native_runtime = 0x20, ompt_native_overhead = 0x40, ompt_native_idleness = 0x80 } ompt_native_mon_flag_t; typedef enum ompt_task_flag_t { ompt_task_initial = 0x00000001, ompt_task_implicit = 0x00000002, ompt_task_explicit = 0x00000004, ompt_task_target = 0x00000008, ompt_task_taskwait = 0x00000010, ompt_task_undeferred = 0x08000000, ompt_task_untied = 0x10000000, ompt_task_final = 0x20000000, ompt_task_mergeable = 0x40000000, ompt_task_merged = 0x80000000 } ompt_task_flag_t; typedef enum ompt_task_status_t { ompt_task_complete = 1, ompt_task_yield = 2, ompt_task_cancel = 3, ompt_task_detach = 4, ompt_task_early_fulfill = 5, ompt_task_late_fulfill = 6, ompt_task_switch = 7, ompt_taskwait_complete = 8 } ompt_task_status_t; typedef enum ompt_target_t { ompt_target = 1, ompt_target_enter_data = 2, ompt_target_exit_data = 3, ompt_target_update = 4, ompt_target_nowait = 9, ompt_target_enter_data_nowait = 10, ompt_target_exit_data_nowait = 11, ompt_target_update_nowait = 12 } ompt_target_t; typedef enum ompt_parallel_flag_t { ompt_parallel_invoker_program = 0x00000001, ompt_parallel_invoker_runtime = 0x00000002, ompt_parallel_league = 0x40000000, ompt_parallel_team = 0x80000000 } ompt_parallel_flag_t; typedef enum ompt_target_map_flag_t { ompt_target_map_flag_to = 0x01, ompt_target_map_flag_from = 0x02, ompt_target_map_flag_alloc = 0x04, ompt_target_map_flag_release = 0x08, ompt_target_map_flag_delete = 0x10, ompt_target_map_flag_implicit = 0x20 } ompt_target_map_flag_t; typedef enum ompt_dependence_type_t { ompt_dependence_type_in = 1, ompt_dependence_type_out = 2, ompt_dependence_type_inout = 3, ompt_dependence_type_mutexinoutset = 4, ompt_dependence_type_source = 5, ompt_dependence_type_sink = 6, ompt_dependence_type_inoutset = 7, ompt_dependence_type_out_all_memory = 34, ompt_dependence_type_inout_all_memory = 35 } ompt_dependence_type_t; typedef enum ompt_severity_t { ompt_warning = 1, ompt_fatal = 2 } ompt_severity_t; typedef enum ompt_cancel_flag_t { ompt_cancel_parallel = 0x01, ompt_cancel_sections = 0x02, ompt_cancel_loop = 0x04, ompt_cancel_taskgroup = 0x08, ompt_cancel_activated = 0x10, ompt_cancel_detected = 0x20, ompt_cancel_discarded_task = 0x40 } ompt_cancel_flag_t; typedef uint64_t ompt_hwid_t; typedef uint64_t ompt_wait_id_t; typedef enum ompt_frame_flag_t { ompt_frame_runtime = 0x00, ompt_frame_application = 0x01, ompt_frame_cfa = 0x10, ompt_frame_framepointer = 0x20, ompt_frame_stackaddress = 0x30 } ompt_frame_flag_t; typedef enum ompt_state_t { ompt_state_work_serial = 0x000, ompt_state_work_parallel = 0x001, ompt_state_work_reduction = 0x002, ompt_state_wait_barrier DEPRECATED_51 = 0x010, ompt_state_wait_barrier_implicit_parallel = 0x011, ompt_state_wait_barrier_implicit_workshare = 0x012, ompt_state_wait_barrier_implicit DEPRECATED_51 = 0x013, ompt_state_wait_barrier_explicit = 0x014, ompt_state_wait_barrier_implementation = 0x015, ompt_state_wait_barrier_teams = 0x016, ompt_state_wait_taskwait = 0x020, ompt_state_wait_taskgroup = 0x021, ompt_state_wait_mutex = 0x040, ompt_state_wait_lock = 0x041, ompt_state_wait_critical = 0x042, ompt_state_wait_atomic = 0x043, ompt_state_wait_ordered = 0x044, ompt_state_wait_target = 0x080, ompt_state_wait_target_map = 0x081, ompt_state_wait_target_update = 0x082, ompt_state_idle = 0x100, ompt_state_overhead = 0x101, ompt_state_undefined = 0x102 } ompt_state_t; typedef uint64_t (*ompt_get_unique_id_t)(void); typedef uint64_t ompd_size_t; typedef uint64_t ompd_wait_id_t; typedef uint64_t ompd_addr_t; typedef int64_t ompd_word_t; typedef uint64_t ompd_seg_t; typedef uint64_t ompd_device_t; typedef uint64_t ompd_thread_id_t; typedef enum ompd_scope_t { ompd_scope_global = 1, ompd_scope_address_space = 2, ompd_scope_thread = 3, ompd_scope_parallel = 4, ompd_scope_implicit_task = 5, ompd_scope_task = 6 } ompd_scope_t; typedef uint64_t ompd_icv_id_t; typedef enum ompd_rc_t { ompd_rc_ok = 0, ompd_rc_unavailable = 1, ompd_rc_stale_handle = 2, ompd_rc_bad_input = 3, ompd_rc_error = 4, ompd_rc_unsupported = 5, ompd_rc_needs_state_tracking = 6, ompd_rc_incompatible = 7, ompd_rc_device_read_error = 8, ompd_rc_device_write_error = 9, ompd_rc_nomem = 10, ompd_rc_incomplete = 11, ompd_rc_callback_error = 12 } ompd_rc_t; typedef void (*ompt_interface_fn_t)(void); typedef ompt_interface_fn_t (*ompt_function_lookup_t)(const char* interface_function_name); typedef union ompt_data_t { uint64_t value; void* ptr; } ompt_data_t; typedef struct ompt_frame_t { ompt_data_t exit_frame; ompt_data_t enter_frame; int exit_frame_flags; int enter_frame_flags; } ompt_frame_t; typedef void (*ompt_callback_t)(void); typedef void ompt_device_t; typedef void ompt_buffer_t; typedef void (*ompt_callback_buffer_request_t)(int device_num, ompt_buffer_t** buffer, size_t* bytes); typedef void (*ompt_callback_buffer_complete_t)(int device_num, ompt_buffer_t* buffer, size_t bytes, ompt_buffer_cursor_t begin, int buffer_owned); typedef void (*ompt_finalize_t)(ompt_data_t* tool_data); typedef int (*ompt_initialize_t)(ompt_function_lookup_t lookup, int initial_device_num, ompt_data_t* tool_data); typedef struct ompt_start_tool_result_t { ompt_initialize_t initialize; ompt_finalize_t finalize; ompt_data_t tool_data; } ompt_start_tool_result_t; typedef struct ompt_record_abstract_t { ompt_record_native_t rclass; const char* type; ompt_device_time_t start_time; ompt_device_time_t end_time; ompt_hwid_t hwid; } ompt_record_abstract_t; typedef struct ompt_dependence_t { ompt_data_t variable; ompt_dependence_type_t dependence_type; } ompt_dependence_t; typedef struct ompt_dispatch_chunk_t { uint64_t start; uint64_t iterations; } ompt_dispatch_chunk_t; typedef int (*ompt_enumerate_states_t)(int current_state, int* next_state, const char** next_state_name); typedef int (*ompt_enumerate_mutex_impls_t)(int current_impl, int* next_impl, const char** next_impl_name); typedef ompt_set_result_t (*ompt_set_callback_t)(ompt_callbacks_t event, ompt_callback_t callback); typedef int (*ompt_get_callback_t)(ompt_callbacks_t event, ompt_callback_t* callback); typedef ompt_data_t* (*ompt_get_thread_data_t)(void); typedef int (*ompt_get_num_procs_t)(void); typedef int (*ompt_get_num_places_t)(void); typedef int (*ompt_get_place_proc_ids_t)(int place_num, int ids_size, int* ids); typedef int (*ompt_get_place_num_t)(void); typedef int (*ompt_get_partition_place_nums_t)(int place_nums_size, int* place_nums); typedef int (*ompt_get_proc_id_t)(void); typedef int (*ompt_get_state_t)(ompt_wait_id_t* wait_id); typedef int (*ompt_get_parallel_info_t)(int ancestor_level, ompt_data_t** parallel_data, int* team_size); typedef int (*ompt_get_task_info_t)(int ancestor_level, int* flags, ompt_data_t** task_data, ompt_frame_t** task_frame, ompt_data_t** parallel_data, int* thread_num); typedef int (*ompt_get_task_memory_t)(void** addr, size_t* size, int block); typedef int (*ompt_get_target_info_t)(uint64_t* device_num, ompt_id_t* target_id, ompt_id_t* host_op_id); typedef int (*ompt_get_num_devices_t)(void); typedef void (*ompt_finalize_tool_t)(void); typedef int (*ompt_get_device_num_procs_t)(ompt_device_t* device); typedef ompt_device_time_t (*ompt_get_device_time_t)(ompt_device_t* device); typedef double (*ompt_translate_time_t)(ompt_device_t* device, ompt_device_time_t time); typedef ompt_set_result_t (*ompt_set_trace_ompt_t)(ompt_device_t* device, unsigned int enable, unsigned int etype); typedef ompt_set_result_t (*ompt_set_trace_native_t)(ompt_device_t* device, int enable, int flags); typedef int (*ompt_start_trace_t)(ompt_device_t* device, ompt_callback_buffer_request_t request, ompt_callback_buffer_complete_t complete); typedef int (*ompt_pause_trace_t)(ompt_device_t* device, int begin_pause); typedef int (*ompt_flush_trace_t)(ompt_device_t* device); typedef int (*ompt_stop_trace_t)(ompt_device_t* device); typedef int (*ompt_advance_buffer_cursor_t)(ompt_device_t* device, ompt_buffer_t* buffer, size_t size, ompt_buffer_cursor_t current, ompt_buffer_cursor_t* next); typedef ompt_record_t (*ompt_get_record_type_t)(ompt_buffer_t* buffer, ompt_buffer_cursor_t current); typedef void* (*ompt_get_record_native_t)(ompt_buffer_t* buffer, ompt_buffer_cursor_t current, ompt_id_t* host_op_id); typedef ompt_record_abstract_t* (*ompt_get_record_abstract_t)(void* native_record); typedef void (*ompt_callback_thread_begin_t)(ompt_thread_t thread_type, ompt_data_t* thread_data); typedef struct ompt_record_thread_begin_t { ompt_thread_t thread_type; } ompt_record_thread_begin_t; typedef void (*ompt_callback_thread_end_t)(ompt_data_t* thread_data); typedef void (*ompt_callback_parallel_begin_t)(ompt_data_t* encountering_task_data, const ompt_frame_t* encountering_task_frame, ompt_data_t* parallel_data, unsigned int requested_parallelism, int flags, const void* codeptr_ra); typedef struct ompt_record_parallel_begin_t { ompt_id_t encountering_task_id; ompt_id_t parallel_id; unsigned int requested_parallelism; int flags; const void* codeptr_ra; } ompt_record_parallel_begin_t; typedef void (*ompt_callback_parallel_end_t)(ompt_data_t* parallel_data, ompt_data_t* encountering_task_data, int flags, const void* codeptr_ra); typedef struct ompt_record_parallel_end_t { ompt_id_t parallel_id; ompt_id_t encountering_task_id; int flags; const void* codeptr_ra; } ompt_record_parallel_end_t; typedef void (*ompt_callback_work_t)(ompt_work_t work_type, ompt_scope_endpoint_t endpoint, ompt_data_t* parallel_data, ompt_data_t* task_data, uint64_t count, const void* codeptr_ra); typedef struct ompt_record_work_t { ompt_work_t work_type; ompt_scope_endpoint_t endpoint; ompt_id_t parallel_id; ompt_id_t task_id; uint64_t count; const void* codeptr_ra; } ompt_record_work_t; typedef void (*ompt_callback_dispatch_t)(ompt_data_t* parallel_data, ompt_data_t* task_data, ompt_dispatch_t kind, ompt_data_t instance); typedef struct ompt_record_dispatch_t { ompt_id_t parallel_id; ompt_id_t task_id; ompt_dispatch_t kind; ompt_data_t instance; } ompt_record_dispatch_t; typedef void (*ompt_callback_task_create_t)(ompt_data_t* encountering_task_data, const ompt_frame_t* encountering_task_frame, ompt_data_t* new_task_data, int flags, int has_dependences, const void* codeptr_ra); typedef struct ompt_record_task_create_t { ompt_id_t encountering_task_id; ompt_id_t new_task_id; int flags; int has_dependences; const void* codeptr_ra; } ompt_record_task_create_t; typedef void (*ompt_callback_dependences_t)(ompt_data_t* task_data, const ompt_dependence_t* deps, int ndeps); typedef struct ompt_record_dependences_t { ompt_id_t task_id; ompt_dependence_t dep; int ndeps; } ompt_record_dependences_t; typedef void (*ompt_callback_task_dependence_t)(ompt_data_t* src_task_data, ompt_data_t* sink_task_data); typedef struct ompt_record_task_dependence_t { ompt_id_t src_task_id; ompt_id_t sink_task_id; } ompt_record_task_dependence_t; typedef void (*ompt_callback_task_schedule_t)(ompt_data_t* prior_task_data, ompt_task_status_t prior_task_status, ompt_data_t* next_task_data); typedef struct ompt_record_task_schedule_t { ompt_id_t prior_task_id; ompt_task_status_t prior_task_status; ompt_id_t next_task_id; } ompt_record_task_schedule_t; typedef void (*ompt_callback_implicit_task_t)(ompt_scope_endpoint_t endpoint, ompt_data_t* parallel_data, ompt_data_t* task_data, unsigned int actual_parallelism, unsigned int index, int flags); typedef struct ompt_record_implicit_task_t { ompt_scope_endpoint_t endpoint; ompt_id_t parallel_id; ompt_id_t task_id; unsigned int actual_parallelism; unsigned int index; int flags; } ompt_record_implicit_task_t; typedef void (*ompt_callback_masked_t)(ompt_scope_endpoint_t endpoint, ompt_data_t* parallel_data, ompt_data_t* task_data, const void* codeptr_ra); typedef ompt_callback_masked_t ompt_callback_master_t DEPRECATED_51; typedef struct ompt_record_masked_t { ompt_scope_endpoint_t endpoint; ompt_id_t parallel_id; ompt_id_t task_id; const void* codeptr_ra; } ompt_record_masked_t; typedef void (*ompt_callback_sync_region_t)(ompt_sync_region_t kind, ompt_scope_endpoint_t endpoint, ompt_data_t* parallel_data, ompt_data_t* task_data, const void* codeptr_ra); typedef struct ompt_record_sync_region_t { ompt_sync_region_t kind; ompt_scope_endpoint_t endpoint; ompt_id_t parallel_id; ompt_id_t task_id; const void* codeptr_ra; } ompt_record_sync_region_t; typedef void (*ompt_callback_mutex_acquire_t)(ompt_mutex_t kind, unsigned int hint, unsigned int impl, ompt_wait_id_t wait_id, const void* codeptr_ra); typedef struct ompt_record_mutex_acquire_t { ompt_mutex_t kind; unsigned int hint; unsigned int impl; ompt_wait_id_t wait_id; const void* codeptr_ra; } ompt_record_mutex_acquire_t; typedef void (*ompt_callback_mutex_t)(ompt_mutex_t kind, ompt_wait_id_t wait_id, const void* codeptr_ra); typedef struct ompt_record_mutex_t { ompt_mutex_t kind; ompt_wait_id_t wait_id; const void* codeptr_ra; } ompt_record_mutex_t; typedef void (*ompt_callback_nest_lock_t)(ompt_scope_endpoint_t endpoint, ompt_wait_id_t wait_id, const void* codeptr_ra); typedef struct ompt_record_nest_lock_t { ompt_scope_endpoint_t endpoint; ompt_wait_id_t wait_id; const void* codeptr_ra; } ompt_record_nest_lock_t; typedef void (*ompt_callback_flush_t)(ompt_data_t* thread_data, const void* codeptr_ra); typedef struct ompt_record_flush_t { const void* codeptr_ra; } ompt_record_flush_t; typedef void (*ompt_callback_cancel_t)(ompt_data_t* task_data, int flags, const void* codeptr_ra); typedef struct ompt_record_cancel_t { ompt_id_t task_id; int flags; const void* codeptr_ra; } ompt_record_cancel_t; typedef void (*ompt_callback_device_initialize_t)(int device_num, const char* type, ompt_device_t* device, ompt_function_lookup_t lookup, const char* documentation); typedef void (*ompt_callback_device_finalize_t)(int device_num); typedef void (*ompt_callback_device_load_t)(int device_num, const char* filename, int64_t offset_in_file, void* vma_in_file, size_t bytes, void* host_addr, void* device_addr, uint64_t module_id); typedef void (*ompt_callback_device_unload_t)(int device_num, uint64_t module_id); typedef void (*ompt_callback_target_data_op_emi_t)(ompt_scope_endpoint_t endpoint, ompt_data_t* target_task_data, ompt_data_t* target_data, ompt_id_t* host_op_id, ompt_target_data_op_t optype, void* src_addr, int src_device_num, void* dest_addr, int dest_device_num, size_t bytes, const void* codeptr_ra); typedef void (*ompt_callback_target_data_op_t)(ompt_id_t target_id, ompt_id_t host_op_id, ompt_target_data_op_t optype, void* src_addr, int src_device_num, void* dest_addr, int dest_device_num, size_t bytes, const void* codeptr_ra); typedef struct ompt_record_target_data_op_t { ompt_id_t host_op_id; ompt_target_data_op_t optype; void* src_addr; int src_device_num; void* dest_addr; int dest_device_num; size_t bytes; ompt_device_time_t end_time; const void* codeptr_ra; } ompt_record_target_data_op_t; typedef void (*ompt_callback_target_emi_t)(ompt_target_t kind, ompt_scope_endpoint_t endpoint, int device_num, ompt_data_t* task_data, ompt_data_t* target_task_data, ompt_data_t* target_data, const void* codeptr_ra); typedef void (*ompt_callback_target_t)(ompt_target_t kind, ompt_scope_endpoint_t endpoint, int device_num, ompt_data_t* task_data, ompt_id_t target_id, const void* codeptr_ra); typedef struct ompt_record_target_t { ompt_target_t kind; ompt_scope_endpoint_t endpoint; int device_num; ompt_id_t task_id; ompt_id_t target_id; const void* codeptr_ra; } ompt_record_target_t; typedef void (*ompt_callback_target_map_emi_t)(ompt_data_t* target_data, unsigned int nitems, void** host_addr, void** device_addr, size_t* bytes, unsigned int* mapping_flags, const void* codeptr_ra); typedef void (*ompt_callback_target_map_t)(ompt_id_t target_id, unsigned int nitems, void** host_addr, void** device_addr, size_t* bytes, unsigned int* mapping_flags, const void* codeptr_ra); typedef struct ompt_record_target_map_t { ompt_id_t target_id; unsigned int nitems; void** host_addr; void** device_addr; size_t* bytes; unsigned int* mapping_flags; const void* codeptr_ra; } ompt_record_target_map_t; typedef void (*ompt_callback_target_submit_emi_t)(ompt_scope_endpoint_t endpoint, ompt_data_t* target_data, ompt_id_t* host_op_id, unsigned int requested_num_teams); typedef void (*ompt_callback_target_submit_t)(ompt_id_t target_id, ompt_id_t host_op_id, unsigned int requested_num_teams); typedef struct ompt_record_target_kernel_t { ompt_id_t host_op_id; unsigned int requested_num_teams; unsigned int granted_num_teams; ompt_device_time_t end_time; } ompt_record_target_kernel_t; typedef int (*ompt_callback_control_tool_t)(uint64_t command, uint64_t modifier, void* arg, const void* codeptr_ra); typedef struct ompt_record_control_tool_t { uint64_t command; uint64_t modifier; const void* codeptr_ra; } ompt_record_control_tool_t; typedef void (*ompt_callback_error_t)(ompt_severity_t severity, const char* message, size_t length, const void* codeptr_ra); typedef struct ompt_record_error_t { ompt_severity_t severity; const char* message; size_t length; const void* codeptr_ra; } ompt_record_error_t; typedef struct ompd_address_t { ompd_seg_t segment; ompd_addr_t address; } ompd_address_t; typedef struct ompd_frame_info_t { ompd_address_t frame_address; ompd_word_t frame_flag; } ompd_frame_info_t; typedef struct _ompd_aspace_handle ompd_address_space_handle_t; typedef struct _ompd_thread_handle ompd_thread_handle_t; typedef struct _ompd_parallel_handle ompd_parallel_handle_t; typedef struct _ompd_task_handle ompd_task_handle_t; typedef struct _ompd_aspace_cont ompd_address_space_context_t; typedef struct _ompd_thread_cont ompd_thread_context_t; typedef struct ompd_device_type_sizes_t { uint8_t sizeof_char; uint8_t sizeof_short; uint8_t sizeof_int; uint8_t sizeof_long; uint8_t sizeof_long_long; uint8_t sizeof_pointer; } ompd_device_type_sizes_t; void ompd_dll_locations_valid(void); typedef ompd_rc_t (*ompd_callback_memory_alloc_fn_t)(ompd_size_t nbytes, void** ptr); typedef ompd_rc_t (*ompd_callback_memory_free_fn_t)(void* ptr); typedef ompd_rc_t (*ompd_callback_get_thread_context_for_thread_id_fn_t)( ompd_address_space_context_t* address_space_context, ompd_thread_id_t kind, ompd_size_t sizeof_thread_id, const void* thread_id, ompd_thread_context_t** thread_context); typedef ompd_rc_t (*ompd_callback_sizeof_fn_t)(ompd_address_space_context_t* address_space_context, ompd_device_type_sizes_t* sizes); typedef ompd_rc_t (*ompd_callback_symbol_addr_fn_t)( ompd_address_space_context_t* address_space_context, ompd_thread_context_t* thread_context, const char* symbol_name, ompd_address_t* symbol_addr, const char* file_name); typedef ompd_rc_t (*ompd_callback_memory_read_fn_t)( ompd_address_space_context_t* address_space_context, ompd_thread_context_t* thread_context, const ompd_address_t* addr, ompd_size_t nbytes, void* buffer); typedef ompd_rc_t (*ompd_callback_memory_write_fn_t)( ompd_address_space_context_t* address_space_context, ompd_thread_context_t* thread_context, const ompd_address_t* addr, ompd_size_t nbytes, const void* buffer); typedef ompd_rc_t (*ompd_callback_device_host_fn_t)( ompd_address_space_context_t* address_space_context, const void* input, ompd_size_t unit_size, ompd_size_t count, void* output); typedef ompd_rc_t (*ompd_callback_print_string_fn_t)(const char* string, int category); typedef struct ompd_callbacks_t { ompd_callback_memory_alloc_fn_t alloc_memory; ompd_callback_memory_free_fn_t free_memory; ompd_callback_print_string_fn_t print_string; ompd_callback_sizeof_fn_t sizeof_type; ompd_callback_symbol_addr_fn_t symbol_addr_lookup; ompd_callback_memory_read_fn_t read_memory; ompd_callback_memory_write_fn_t write_memory; ompd_callback_memory_read_fn_t read_string; ompd_callback_device_host_fn_t device_to_host; ompd_callback_device_host_fn_t host_to_device; ompd_callback_get_thread_context_for_thread_id_fn_t get_thread_context_for_thread_id; } ompd_callbacks_t; void ompd_bp_parallel_begin(void); void ompd_bp_parallel_end(void); void ompd_bp_task_begin(void); void ompd_bp_task_end(void); void ompd_bp_thread_begin(void); void ompd_bp_thread_end(void); void ompd_bp_device_begin(void); void ompd_bp_device_end(void); ompd_rc_t ompd_initialize(ompd_word_t api_version, const ompd_callbacks_t* callbacks); ompd_rc_t ompd_get_api_version(ompd_word_t* version); ompd_rc_t ompd_get_version_string(const char** string); ompd_rc_t ompd_finalize(void); ompd_rc_t ompd_process_initialize(ompd_address_space_context_t* context, ompd_address_space_handle_t** handle); ompd_rc_t ompd_device_initialize(ompd_address_space_handle_t* process_handle, ompd_address_space_context_t* device_context, ompd_device_t kind, ompd_size_t sizeof_id, void* id, ompd_address_space_handle_t** device_handle); ompd_rc_t ompd_rel_address_space_handle(ompd_address_space_handle_t* handle); ompd_rc_t ompd_get_omp_version(ompd_address_space_handle_t* address_space, ompd_word_t* omp_version); ompd_rc_t ompd_get_omp_version_string(ompd_address_space_handle_t* address_space, const char** string); ompd_rc_t ompd_get_thread_in_parallel(ompd_parallel_handle_t* parallel_handle, int thread_num, ompd_thread_handle_t** thread_handle); ompd_rc_t ompd_get_thread_handle(ompd_address_space_handle_t* handle, ompd_thread_id_t kind, ompd_size_t sizeof_thread_id, const void* thread_id, ompd_thread_handle_t** thread_handle); ompd_rc_t ompd_rel_thread_handle(ompd_thread_handle_t* thread_handle); ompd_rc_t ompd_thread_handle_compare(ompd_thread_handle_t* thread_handle_1, ompd_thread_handle_t* thread_handle_2, int* cmp_value); ompd_rc_t ompd_get_thread_id(ompd_thread_handle_t* thread_handle, ompd_thread_id_t kind, ompd_size_t sizeof_thread_id, void* thread_id); ompd_rc_t ompd_get_curr_parallel_handle(ompd_thread_handle_t* thread_handle, ompd_parallel_handle_t** parallel_handle); ompd_rc_t ompd_get_enclosing_parallel_handle(ompd_parallel_handle_t* parallel_handle, ompd_parallel_handle_t** enclosing_parallel_handle); ompd_rc_t ompd_get_task_parallel_handle(ompd_task_handle_t* task_handle, ompd_parallel_handle_t** task_parallel_handle); ompd_rc_t ompd_rel_parallel_handle(ompd_parallel_handle_t* parallel_handle); ompd_rc_t ompd_parallel_handle_compare(ompd_parallel_handle_t* parallel_handle_1, ompd_parallel_handle_t* parallel_handle_2, int* cmp_value); ompd_rc_t ompd_get_curr_task_handle(ompd_thread_handle_t* thread_handle, ompd_task_handle_t** task_handle); ompd_rc_t ompd_get_generating_task_handle(ompd_task_handle_t* task_handle, ompd_task_handle_t** generating_task_handle); ompd_rc_t ompd_get_scheduling_task_handle(ompd_task_handle_t* task_handle, ompd_task_handle_t** scheduling_task_handle); ompd_rc_t ompd_get_task_in_parallel(ompd_parallel_handle_t* parallel_handle, int thread_num, ompd_task_handle_t** task_handle); ompd_rc_t ompd_rel_task_handle(ompd_task_handle_t* task_handle); ompd_rc_t ompd_task_handle_compare(ompd_task_handle_t* task_handle_1, ompd_task_handle_t* task_handle_2, int* cmp_value); ompd_rc_t ompd_get_task_function(ompd_task_handle_t* task_handle, ompd_address_t* entry_point); ompd_rc_t ompd_get_task_frame(ompd_task_handle_t* task_handle, ompd_frame_info_t* exit_frame, ompd_frame_info_t* enter_frame); ompd_rc_t ompd_enumerate_states(ompd_address_space_handle_t* address_space_handle, ompd_word_t current_state, ompd_word_t* next_state, const char** next_state_name, ompd_word_t* more_enums); ompd_rc_t ompd_get_state(ompd_thread_handle_t* thread_handle, ompd_word_t* state, ompd_wait_id_t* wait_id); ompd_rc_t ompd_get_display_control_vars(ompd_address_space_handle_t* address_space_handle, const char* const** control_vars); ompd_rc_t ompd_rel_display_control_vars(const char* const** control_vars); ompd_rc_t ompd_enumerate_icvs(ompd_address_space_handle_t* handle, ompd_icv_id_t current, ompd_icv_id_t* next_id, const char** next_icv_name, ompd_scope_t* next_scope, int* more); ompd_rc_t ompd_get_icv_from_scope(void* handle, ompd_scope_t scope, ompd_icv_id_t icv_id, ompd_word_t* icv_value); ompd_rc_t ompd_get_icv_string_from_scope(void* handle, ompd_scope_t scope, ompd_icv_id_t icv_id, const char** icv_string); ompd_rc_t ompd_get_tool_data(void* handle, ompd_scope_t scope, ompd_word_t* value, ompd_address_t* ptr); typedef struct ompt_record_ompt_t { ompt_callbacks_t type; ompt_device_time_t time; ompt_id_t thread_id; ompt_id_t target_id; union { ompt_record_thread_begin_t thread_begin; ompt_record_parallel_begin_t parallel_begin; ompt_record_parallel_end_t parallel_end; ompt_record_work_t work; ompt_record_dispatch_t dispatch; ompt_record_task_create_t task_create; ompt_record_dependences_t dependences; ompt_record_task_dependence_t task_dependence; ompt_record_task_schedule_t task_schedule; ompt_record_implicit_task_t implicit_task; ompt_record_masked_t masked; ompt_record_sync_region_t sync_region; ompt_record_mutex_acquire_t mutex_acquire; ompt_record_mutex_t mutex; ompt_record_nest_lock_t nest_lock; ompt_record_flush_t flush; ompt_record_cancel_t cancel; ompt_record_target_t target; ompt_record_target_data_op_t target_data_op; ompt_record_target_map_t target_map; ompt_record_target_kernel_t target_kernel; ompt_record_control_tool_t control_tool; } record; } ompt_record_ompt_t; typedef ompt_record_ompt_t* (*ompt_get_record_ompt_t)(ompt_buffer_t* buffer, ompt_buffer_cursor_t current); #define ompt_id_none 0 #define ompt_data_none \ { \ 0 \ } #define ompt_time_none 0 #define ompt_hwid_none 0 #define ompt_addr_none ~0 #define ompt_mutex_impl_none 0 #define ompt_wait_id_none 0 #define ompd_segment_none 0 #endif /* __OMPT__ */