diff options
Diffstat (limited to 'final/runtime/src/include/50/ompt.h.var')
-rw-r--r-- | final/runtime/src/include/50/ompt.h.var | 697 |
1 files changed, 697 insertions, 0 deletions
diff --git a/final/runtime/src/include/50/ompt.h.var b/final/runtime/src/include/50/ompt.h.var new file mode 100644 index 0000000..21b4c46 --- /dev/null +++ b/final/runtime/src/include/50/ompt.h.var @@ -0,0 +1,697 @@ +/* + * include/50/ompt.h.var + */ + +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.txt for details. +// +//===----------------------------------------------------------------------===// + +#ifndef __OMPT__ +#define __OMPT__ + +/***************************************************************************** + * system include files + *****************************************************************************/ + +#include <stdint.h> +#include <stddef.h> + + + +/***************************************************************************** + * 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_thread_data) \ + macro (ompt_get_unique_id) \ + \ + 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_OMP_STATE(macro) \ + \ + /* first available state */ \ + macro (omp_state_undefined, 0x102) /* undefined thread state */ \ + \ + /* work states (0..15) */ \ + macro (omp_state_work_serial, 0x000) /* working outside parallel */ \ + macro (omp_state_work_parallel, 0x001) /* working within parallel */ \ + macro (omp_state_work_reduction, 0x002) /* performing a reduction */ \ + \ + /* barrier wait states (16..31) */ \ + macro (omp_state_wait_barrier, 0x010) /* waiting at a barrier */ \ + macro (omp_state_wait_barrier_implicit_parallel, 0x011) \ + /* implicit barrier at the end of parallel region */\ + macro (omp_state_wait_barrier_implicit_workshare, 0x012) \ + /* implicit barrier at the end of worksharing */ \ + macro (omp_state_wait_barrier_implicit, 0x013) /* implicit barrier */ \ + macro (omp_state_wait_barrier_explicit, 0x014) /* explicit barrier */ \ + \ + /* task wait states (32..63) */ \ + macro (omp_state_wait_taskwait, 0x020) /* waiting at a taskwait */ \ + macro (omp_state_wait_taskgroup, 0x021) /* waiting at a taskgroup */ \ + \ + /* mutex wait states (64..127) */ \ + macro (omp_state_wait_mutex, 0x040) \ + macro (omp_state_wait_lock, 0x041) /* waiting for lock */ \ + macro (omp_state_wait_critical, 0x042) /* waiting for critical */ \ + macro (omp_state_wait_atomic, 0x043) /* waiting for atomic */ \ + macro (omp_state_wait_ordered, 0x044) /* waiting for ordered */ \ + \ + /* target wait states (128..255) */ \ + macro (omp_state_wait_target, 0x080) /* waiting for target region */ \ + macro (omp_state_wait_target_map, 0x081) /* waiting for target data mapping operation */ \ + macro (omp_state_wait_target_update, 0x082) /* waiting for target update operation */ \ + \ + /* misc (256..511) */ \ + macro (omp_state_idle, 0x100) /* waiting for work */ \ + macro (omp_state_overhead, 0x101) /* overhead excluding wait states */ \ + \ + /* implementation-specific states (512..) */ + + +#define FOREACH_KMP_MUTEX_IMPL(macro) \ + macro (ompt_mutex_impl_unknown, 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_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_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 */ \ + \ + macro (ompt_callback_control_tool, ompt_callback_control_tool_t, 11) /* control tool */ \ + \ + 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 */ \ + \ + /* 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_task_dependences, ompt_callback_task_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_master, ompt_callback_master_t, 21) /* task at master begin or end */ \ + \ + macro (ompt_callback_target_map, ompt_callback_target_map_t, 22) /* target map */ \ + \ + 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_idle, ompt_callback_idle_t, 31) /* begin or end idle state */ + + + +/***************************************************************************** + * data types + *****************************************************************************/ + +/*--------------------- + * identifiers + *---------------------*/ + +typedef uint64_t ompt_id_t; +#define ompt_id_none 0 + +typedef union ompt_data_t { + uint64_t value; /* data initialized by runtime to unique id */ + void *ptr; /* pointer under tool control */ +} ompt_data_t; + +static const ompt_data_t ompt_data_none = {0}; + +typedef uint64_t omp_wait_id_t; +static const omp_wait_id_t omp_wait_id_none = 0; + +typedef void ompt_device_t; + +/*--------------------- + * omp_frame_t + *---------------------*/ + +typedef struct omp_frame_t { + void *exit_frame; /* next frame is user code */ + void *enter_frame; /* previous frame is user code */ +} omp_frame_t; + + +/*--------------------- + * dependences types + *---------------------*/ + +typedef enum ompt_task_dependence_flag_t { + // a two bit field for the dependence type + ompt_task_dependence_type_out = 1, + ompt_task_dependence_type_in = 2, + ompt_task_dependence_type_inout = 3, +} ompt_task_dependence_flag_t; + +typedef struct ompt_task_dependence_t { + void *variable_addr; + unsigned int dependence_flags; +} ompt_task_dependence_t; + + +/***************************************************************************** + * enumerations for thread states and runtime events + *****************************************************************************/ + +/*--------------------- + * runtime states + *---------------------*/ + +typedef enum { +#define omp_state_macro(state, code) state = code, + FOREACH_OMP_STATE(omp_state_macro) +#undef omp_state_macro +} omp_state_t; + + +/*--------------------- + * runtime events + *---------------------*/ + +typedef enum ompt_callbacks_e{ +#define ompt_event_macro(event, callback, eventid) event = eventid, + FOREACH_OMPT_EVENT(ompt_event_macro) +#undef ompt_event_macro +} ompt_callbacks_t; + + +/*--------------------- + * set callback results + *---------------------*/ +typedef enum ompt_set_result_t { + ompt_set_error = 0, + ompt_set_never = 1, + ompt_set_sometimes = 2, + ompt_set_sometimes_paired = 3, + ompt_set_always = 4 +} ompt_set_result_t; + + +/*---------------------- + * mutex implementations + *----------------------*/ +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; + + +/***************************************************************************** + * callback signatures + *****************************************************************************/ + +/* initialization */ +typedef void (*ompt_interface_fn_t)(void); + +typedef ompt_interface_fn_t (*ompt_function_lookup_t)( + const char * /* entry point to look up */ +); + +/* threads */ +typedef enum ompt_thread_type_t { + ompt_thread_initial = 1, // start the enumeration at 1 + ompt_thread_worker = 2, + ompt_thread_other = 3, + ompt_thread_unknown = 4 +} ompt_thread_type_t; + +typedef enum ompt_invoker_t { + ompt_invoker_program = 1, /* program invokes master task */ + ompt_invoker_runtime = 2 /* runtime invokes master task */ +} ompt_invoker_t; + +typedef void (*ompt_callback_thread_begin_t) ( + ompt_thread_type_t thread_type, /* type of thread */ + ompt_data_t *thread_data /* data of thread */ +); + +typedef void (*ompt_callback_thread_end_t) ( + ompt_data_t *thread_data /* data of thread */ +); + +typedef void (*ompt_wait_callback_t) ( + omp_wait_id_t wait_id /* wait data */ +); + +/* parallel and workshares */ +typedef enum ompt_scope_endpoint_t { + ompt_scope_begin = 1, + ompt_scope_end = 2 +} ompt_scope_endpoint_t; + + +/* implicit task */ +typedef void (*ompt_callback_implicit_task_t) ( + ompt_scope_endpoint_t endpoint, /* endpoint of implicit task */ + ompt_data_t *parallel_data, /* data of parallel region */ + ompt_data_t *task_data, /* data of implicit task */ + unsigned int team_size, /* team size */ + unsigned int thread_num /* thread number of calling thread */ +); + +typedef void (*ompt_callback_parallel_begin_t) ( + ompt_data_t *encountering_task_data, /* data of encountering task */ + const omp_frame_t *encountering_task_frame, /* frame data of encountering task */ + ompt_data_t *parallel_data, /* data of parallel region */ + unsigned int requested_team_size, /* requested number of threads in team */ + ompt_invoker_t invoker, /* invoker of master task */ + const void *codeptr_ra /* return address of runtime call */ +); + +typedef void (*ompt_callback_parallel_end_t) ( + ompt_data_t *parallel_data, /* data of parallel region */ + ompt_data_t *encountering_task_data, /* data of encountering task */ + ompt_invoker_t invoker, /* invoker of master task */ + const void *codeptr_ra /* return address of runtime call */ +); + +/* tasks */ +typedef enum ompt_task_type_t { + ompt_task_initial = 0x1, + ompt_task_implicit = 0x2, + ompt_task_explicit = 0x4, + ompt_task_target = 0x8, + ompt_task_undeferred = 0x8000000, + ompt_task_untied = 0x10000000, + ompt_task_final = 0x20000000, + ompt_task_mergeable = 0x40000000, + ompt_task_merged = 0x80000000 +} ompt_task_type_t; + +typedef enum ompt_task_status_t { + ompt_task_complete = 1, + ompt_task_yield = 2, + ompt_task_cancel = 3, + ompt_task_others = 4 +} ompt_task_status_t; + +typedef void (*ompt_callback_task_schedule_t) ( + ompt_data_t *prior_task_data, /* data of prior task */ + ompt_task_status_t prior_task_status, /* status of prior task */ + ompt_data_t *next_task_data /* data of next task */ +); + +typedef void (*ompt_callback_task_create_t) ( + ompt_data_t *encountering_task_data, /* data of parent task */ + const omp_frame_t *encountering_task_frame, /* frame data for parent task */ + ompt_data_t *new_task_data, /* data of created task */ + int type, /* type of created task */ + int has_dependences, /* created task has dependences */ + const void *codeptr_ra /* return address of runtime call */ +); + +/* task dependences */ +typedef void (*ompt_callback_task_dependences_t) ( + ompt_data_t *task_data, /* data of task */ + const ompt_task_dependence_t *deps, /* dependences of task */ + int ndeps /* dependences count of task */ +); + +typedef void (*ompt_callback_task_dependence_t) ( + ompt_data_t *src_task_data, /* data of source task */ + ompt_data_t *sink_task_data /* data of sink task */ +); + +/* target and device */ +typedef enum ompt_target_type_t { + ompt_target = 1, + ompt_target_enter_data = 2, + ompt_target_exit_data = 3, + ompt_target_update = 4 +} ompt_target_type_t; + +typedef void (*ompt_callback_target_t) ( + ompt_target_type_t kind, + ompt_scope_endpoint_t endpoint, + uint64_t device_num, + ompt_data_t *task_data, + ompt_id_t target_id, + const void *codeptr_ra +); + +typedef enum ompt_target_data_op_t { + ompt_target_data_alloc = 1, + ompt_target_data_transfer_to_dev = 2, + ompt_target_data_transfer_from_dev = 3, + ompt_target_data_delete = 4 +} ompt_target_data_op_t; + +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 *host_addr, + void *device_addr, + size_t bytes +); + +typedef void (*ompt_callback_target_submit_t) ( + ompt_id_t target_id, + ompt_id_t host_op_id +); + +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 +); + +typedef void (*ompt_callback_device_initialize_t) ( + uint64_t device_num, + const char *type, + ompt_device_t *device, + ompt_function_lookup_t lookup, + const char *documentation +); + +typedef void (*ompt_callback_device_finalize_t) ( + uint64_t device_num +); + +typedef void (*ompt_callback_device_load_t) ( + uint64_t 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 +); + +#define ompt_addr_unknown ((void *) ~0) + +typedef void (*ompt_callback_device_unload_t) ( + uint64_t device_num, + uint64_t module_id +); + +/* control_tool */ +typedef int (*ompt_callback_control_tool_t) ( + uint64_t command, /* command of control call */ + uint64_t modifier, /* modifier of control call */ + void *arg, /* argument of control call */ + const void *codeptr_ra /* return address of runtime call */ +); + +typedef enum ompt_mutex_kind_t { + ompt_mutex = 0x10, + ompt_mutex_lock = 0x11, + ompt_mutex_nest_lock = 0x12, + ompt_mutex_critical = 0x13, + ompt_mutex_atomic = 0x14, + ompt_mutex_ordered = 0x20 +} ompt_mutex_kind_t; + +typedef void (*ompt_callback_mutex_acquire_t) ( + ompt_mutex_kind_t kind, /* mutex kind */ + unsigned int hint, /* mutex hint */ + unsigned int impl, /* mutex implementation */ + omp_wait_id_t wait_id, /* id of object being awaited */ + const void *codeptr_ra /* return address of runtime call */ +); + +typedef void (*ompt_callback_mutex_t) ( + ompt_mutex_kind_t kind, /* mutex kind */ + omp_wait_id_t wait_id, /* id of object being awaited */ + const void *codeptr_ra /* return address of runtime call */ +); + +typedef void (*ompt_callback_nest_lock_t) ( + ompt_scope_endpoint_t endpoint, /* endpoint of nested lock */ + omp_wait_id_t wait_id, /* id of object being awaited */ + const void *codeptr_ra /* return address of runtime call */ +); + +typedef void (*ompt_callback_master_t) ( + ompt_scope_endpoint_t endpoint, /* endpoint of master region */ + ompt_data_t *parallel_data, /* data of parallel region */ + ompt_data_t *task_data, /* data of task */ + const void *codeptr_ra /* return address of runtime call */ +); + +typedef void (*ompt_callback_idle_t) ( + ompt_scope_endpoint_t endpoint /* endpoint of idle time */ +); + +typedef enum ompt_work_type_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_type_t; + +typedef void (*ompt_callback_work_t) ( + ompt_work_type_t wstype, /* type of work region */ + ompt_scope_endpoint_t endpoint, /* endpoint of work region */ + ompt_data_t *parallel_data, /* data of parallel region */ + ompt_data_t *task_data, /* data of task */ + uint64_t count, /* quantity of work */ + const void *codeptr_ra /* return address of runtime call */ +); + +typedef enum ompt_sync_region_kind_t { + ompt_sync_region_barrier = 1, + ompt_sync_region_taskwait = 2, + ompt_sync_region_taskgroup = 3 +} ompt_sync_region_kind_t; + +typedef void (*ompt_callback_sync_region_t) ( + ompt_sync_region_kind_t kind, /* kind of sync region */ + ompt_scope_endpoint_t endpoint, /* endpoint of sync region */ + ompt_data_t *parallel_data, /* data of parallel region */ + ompt_data_t *task_data, /* data of task */ + const void *codeptr_ra /* return address of runtime call */ +); + +typedef enum ompt_cancel_flag_t { + ompt_cancel_parallel = 0x1, + ompt_cancel_sections = 0x2, + ompt_cancel_do = 0x4, + ompt_cancel_taskgroup = 0x8, + ompt_cancel_activated = 0x10, + ompt_cancel_detected = 0x20, + ompt_cancel_discarded_task = 0x40 +} ompt_cancel_flag_t; + +typedef void (*ompt_callback_cancel_t) ( + ompt_data_t *task_data, /* data of task */ + int flags, /* cancel flags */ + const void *codeptr_ra /* return address of runtime call */ +); + +typedef void (*ompt_callback_flush_t) ( + ompt_data_t *thread_data, /* data of thread */ + const void *codeptr_ra /* return address of runtime call */ +); + +/**************************************************************************** + * ompt API + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +#define OMPT_API_FNTYPE(fn) fn##_t + +#define OMPT_API_FUNCTION(return_type, fn, args) \ + typedef return_type (*OMPT_API_FNTYPE(fn)) args + + + +/**************************************************************************** + * INQUIRY FUNCTIONS + ***************************************************************************/ + +/* state */ +OMPT_API_FUNCTION(omp_state_t, ompt_get_state, ( + omp_wait_id_t *wait_id +)); + +/* thread */ +OMPT_API_FUNCTION(ompt_data_t*, ompt_get_thread_data, (void)); + +/* parallel region */ +OMPT_API_FUNCTION(int, ompt_get_parallel_info, ( + int ancestor_level, + ompt_data_t **parallel_data, + int *team_size +)); + +/* task */ +OMPT_API_FUNCTION(int, ompt_get_task_info, ( + int ancestor_level, + int *type, + ompt_data_t **task_data, + omp_frame_t **task_frame, + ompt_data_t **parallel_data, + int *thread_num +)); + +/* procs */ +OMPT_API_FUNCTION(int, ompt_get_num_procs, (void)); + +/* places */ +OMPT_API_FUNCTION(int, ompt_get_num_places, (void)); + +OMPT_API_FUNCTION(int, ompt_get_place_proc_ids, ( + int place_num, + int ids_size, + int *ids +)); + +OMPT_API_FUNCTION(int, ompt_get_place_num, (void)); + +OMPT_API_FUNCTION(int, ompt_get_partition_place_nums, ( + int place_nums_size, + int *place_nums +)); + +/* proc_id */ +OMPT_API_FUNCTION(int, ompt_get_proc_id, (void)); + + +/**************************************************************************** + * INITIALIZATION FUNCTIONS + ***************************************************************************/ + +OMPT_API_FUNCTION(int, ompt_initialize, ( + ompt_function_lookup_t ompt_fn_lookup, + ompt_data_t *tool_data +)); + +OMPT_API_FUNCTION(void, ompt_finalize, ( + 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; + +/* initialization interface to be defined by tool */ +#ifdef _WIN32 +__declspec(dllexport) +#endif +ompt_start_tool_result_t * ompt_start_tool( + unsigned int omp_version, + const char * runtime_version +); + +typedef void (*ompt_callback_t)(void); + +OMPT_API_FUNCTION(int, ompt_set_callback, ( + ompt_callbacks_t which, + ompt_callback_t callback +)); + +OMPT_API_FUNCTION(int, ompt_get_callback, ( + ompt_callbacks_t which, + ompt_callback_t *callback +)); + + + +/**************************************************************************** + * MISCELLANEOUS FUNCTIONS + ***************************************************************************/ + +/* state enumeration */ +OMPT_API_FUNCTION(int, ompt_enumerate_states, ( + int current_state, + int *next_state, + const char **next_state_name +)); + +/* mutex implementation enumeration */ +OMPT_API_FUNCTION(int, ompt_enumerate_mutex_impls, ( + int current_impl, + int *next_impl, + const char **next_impl_name +)); + +/* get_unique_id */ +OMPT_API_FUNCTION(uint64_t, ompt_get_unique_id, (void)); + +#ifdef __cplusplus +}; +#endif + +/**************************************************************************** + * TARGET + ***************************************************************************/ + + OMPT_API_FUNCTION(int, ompt_get_target_info, ( + uint64_t *device_num, + ompt_id_t *target_id, + ompt_id_t *host_op_id +)); + + OMPT_API_FUNCTION(int, ompt_get_num_devices, (void)); + +#endif /* __OMPT__ */ |