33#define register_ompt_callback_t(name, type) \
35 type f_##name = &on_##name; \
36 if (ompt_set_callback(name, (ompt_callback_t)f_##name) == ompt_set_never) \
37 printf("0: Could not register callback '" #name "'\n"); \
40#define register_ompt_callback(name) register_ompt_callback_t(name, name##_t)
42#define OMPT_BUFFER_REQUEST_SIZE 256
44#ifdef OPENMP_LIBOMPTEST_BUILD_STANDALONE
45std::vector<std::pair<std::string, TestSuite>> TestRegistrar::Tests;
48static std::atomic<ompt_id_t>
NextOpId{0x8000000000000001};
72 ompt_buffer_t **buffer,
75 *buffer = malloc(*bytes);
83 int device_num, ompt_buffer_t *buffer,
85 ompt_buffer_cursor_t
begin,
int buffer_owned) {
90 ompt_buffer_cursor_t CurrentPos =
begin;
94 printf(
"Warning: received non-ompt type buffer object\n");
98 if (Record !=
nullptr)
101 CurrentPos, &CurrentPos);
111 return ompt_set_error;
115 ompt_callback_target_emi);
117 ompt_callback_target_data_op_emi);
119 ompt_callback_target_submit_emi);
123 ompt_callback_target_data_op);
125 ompt_callback_target_submit);
128 return ompt_set_always;
134 ompt_data_t *thread_data) {
143 ompt_data_t *encountering_task_data,
144 const ompt_frame_t *encountering_task_frame, ompt_data_t *parallel_data,
145 unsigned int requested_parallelism,
int flags,
const void *codeptr_ra) {
147 encountering_task_data, encountering_task_frame, parallel_data,
148 requested_parallelism, flags, codeptr_ra);
152 ompt_data_t *encountering_task_data,
153 int flags,
const void *codeptr_ra) {
155 parallel_data, encountering_task_data, flags, codeptr_ra);
160 const ompt_frame_t *encountering_task_frame,
161 ompt_data_t *new_task_data,
int flags,
162 int has_dependences,
const void *codeptr_ra) {
164 encountering_task_data, encountering_task_frame, new_task_data, flags,
165 has_dependences, codeptr_ra);
169 ompt_task_status_t prior_task_status,
170 ompt_data_t *next_task_data) {
172 prior_task_data, prior_task_status, next_task_data);
176 ompt_data_t *parallel_data,
177 ompt_data_t *task_data,
178 unsigned int actual_parallelism,
179 unsigned int index,
int flags) {
181 endpoint, parallel_data, task_data, actual_parallelism, index, flags);
187 ompt_scope_endpoint_t endpoint,
188 ompt_data_t *parallel_data,
189 ompt_data_t *task_data, uint64_t
count,
190 const void *codeptr_ra) {
192 task_data,
count, codeptr_ra);
196 ompt_data_t *task_data,
197 ompt_dispatch_t kind,
204 ompt_scope_endpoint_t endpoint,
205 ompt_data_t *parallel_data,
206 ompt_data_t *task_data,
207 const void *codeptr_ra) {
209 task_data, codeptr_ra);
216 ompt_device_t *device,
217 ompt_function_lookup_t lookup,
218 const char *documentation) {
220 lookup, documentation);
225 printf(
"Trace collection disabled on device %d\n", device_num);
235 (ompt_advance_buffer_cursor_t)lookup(
"ompt_advance_buffer_cursor");
238 (ompt_get_record_type_t)lookup(
"ompt_get_record_type");
240 printf(
"Warning: No function ompt_get_record_type found in device "
244 static bool IsDeviceMapInitialized =
false;
245 if (!IsDeviceMapInitialized) {
247 IsDeviceMapInitialized =
true;
266 int64_t offset_in_file,
267 void *vma_in_file,
size_t bytes,
268 void *host_addr,
void *device_addr,
269 uint64_t module_id) {
271 device_num, filename, offset_in_file, vma_in_file, bytes, host_addr,
272 device_addr, module_id);
280 ompt_id_t target_id, ompt_id_t host_op_id, ompt_target_data_op_t optype,
281 void *src_addr,
int src_device_num,
void *dest_addr,
int dest_device_num,
282 size_t bytes,
const void *codeptr_ra) {
284 target_id, host_op_id, optype, src_addr, src_device_num, dest_addr,
285 dest_device_num, bytes, codeptr_ra);
289 ompt_scope_endpoint_t endpoint,
290 int device_num, ompt_data_t *task_data,
292 const void *codeptr_ra) {
294 target_id, codeptr_ra);
298 ompt_id_t host_op_id,
299 unsigned int requested_num_teams) {
301 requested_num_teams);
305 ompt_scope_endpoint_t endpoint, ompt_data_t *target_task_data,
306 ompt_data_t *target_data, ompt_id_t *host_op_id,
307 ompt_target_data_op_t optype,
void *src_addr,
int src_device_num,
308 void *dest_addr,
int dest_device_num,
size_t bytes,
309 const void *codeptr_ra) {
310 assert(codeptr_ra != 0 &&
"Unexpected null codeptr");
314 if (optype != ompt_target_data_alloc)
315 assert((src_addr != 0 || dest_addr != 0) &&
"Both src and dest addr null");
316 if (endpoint == ompt_scope_begin)
317 *host_op_id =
NextOpId.fetch_add(1, std::memory_order_relaxed);
319 endpoint, target_task_data, target_data, host_op_id, optype, src_addr,
320 src_device_num, dest_addr, dest_device_num, bytes, codeptr_ra);
324 ompt_scope_endpoint_t endpoint,
325 int device_num, ompt_data_t *task_data,
326 ompt_data_t *target_task_data,
327 ompt_data_t *target_data,
328 const void *codeptr_ra) {
329 assert(codeptr_ra != 0 &&
"Unexpected null codeptr");
330 if (endpoint == ompt_scope_begin)
331 target_data->value =
NextOpId.fetch_add(1, std::memory_order_relaxed);
333 task_data, target_task_data,
334 target_data, codeptr_ra);
338 ompt_scope_endpoint_t endpoint, ompt_data_t *target_data,
339 ompt_id_t *host_op_id,
unsigned int requested_num_teams) {
341 endpoint, target_data, host_op_id, requested_num_teams);
345 unsigned int nitems,
void **host_addr,
346 void **device_addr,
size_t *bytes,
347 unsigned int *mapping_flags,
348 const void *codeptr_ra) {
349 assert(0 &&
"Target map callback is unimplemented");
355 void **device_addr,
size_t *bytes,
356 unsigned int *mapping_flags,
357 const void *codeptr_ra) {
358 assert(0 &&
"Target map emi callback is unimplemented");
363 if (VariableName ==
nullptr)
365 if (
const char *EnvValue = std::getenv(VariableName)) {
366 std::string
S{EnvValue};
368 C = (
char)std::tolower(
C);
369 if (
S ==
"1" ||
S ==
"on" ||
S ==
"true" ||
S ==
"yes")
377 ompt_data_t *tool_data) {
434 assert(
Handler &&
"Callback handler should be present at this point");
435 assert(
EventReporter &&
"EventReporter should be present at this point");
445 const char *runtime_version) {
457 "Device already present in the map");
474 size_t NumFlushedDevices = 0;
480 std::this_thread::sleep_for(std::chrono::milliseconds(1));
491 "Device not present in the map");
499 assert(
EventReporter &&
"EventReporter should be present at this point");
static OmptEventReporter * EventReporter
static ompt_get_record_ompt_t ompt_get_record_ompt
static void on_ompt_callback_target_map(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)
static void on_ompt_callback_target_map_emi(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)
static OmptDeviceSetPtrTy TracedDevices
OmptCallbackHandler * Handler
static ompt_set_result_t set_trace_ompt(ompt_device_t *Device)
bool getBoolEnvironmentVariable(const char *VariableName)
Load the value of a given boolean environmental variable.
static void on_ompt_callback_buffer_complete(int device_num, ompt_buffer_t *buffer, size_t bytes, ompt_buffer_cursor_t begin, int buffer_owned)
std::unique_ptr< OmptDeviceSetTy > OmptDeviceSetPtrTy
static bool RunAsTestSuite
static void on_ompt_callback_target_data_op(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)
static ompt_set_trace_ompt_t ompt_set_trace_ompt
#define register_ompt_callback(name)
static void on_ompt_callback_parallel_end(ompt_data_t *parallel_data, ompt_data_t *encountering_task_data, int flags, const void *codeptr_ra)
static void on_ompt_callback_device_initialize(int device_num, const char *type, ompt_device_t *device, ompt_function_lookup_t lookup, const char *documentation)
int ompt_initialize(ompt_function_lookup_t lookup, int initial_device_num, ompt_data_t *tool_data)
Called by the OMP runtime to initialize the OMPT.
static void on_ompt_callback_target(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)
static void on_ompt_callback_target_emi(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)
static void on_ompt_callback_target_submit(ompt_id_t target_id, ompt_id_t host_op_id, unsigned int requested_num_teams)
static void on_ompt_callback_device_finalize(int device_num)
void ompt_finalize(ompt_data_t *tool_data)
static void on_ompt_callback_target_submit_emi(ompt_scope_endpoint_t endpoint, ompt_data_t *target_data, ompt_id_t *host_op_id, unsigned int requested_num_teams)
static void on_ompt_callback_device_load(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)
int start_trace(ompt_device_t *Device)
static void on_ompt_callback_task_schedule(ompt_data_t *prior_task_data, ompt_task_status_t prior_task_status, ompt_data_t *next_task_data)
static void on_ompt_callback_thread_end(ompt_data_t *thread_data)
static ompt_start_trace_t ompt_start_trace
static void on_ompt_callback_parallel_begin(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)
static bool UseEMICallbacks
static void on_ompt_callback_sync_region(ompt_sync_region_t kind, ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, const void *codeptr_ra)
std::unordered_set< ompt_device_t * > OmptDeviceSetTy
int flush_trace(ompt_device_t *Device)
static ompt_get_record_type_t ompt_get_record_type_fn
#define OMPT_BUFFER_REQUEST_SIZE
static ompt_stop_trace_t ompt_stop_trace
void libomptest_global_eventreporter_set_active(bool State)
static void on_ompt_callback_target_data_op_emi(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)
static std::atomic< ompt_id_t > NextOpId
static void on_ompt_callback_implicit_task(ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, unsigned int actual_parallelism, unsigned int index, int flags)
static ompt_advance_buffer_cursor_t ompt_advance_buffer_cursor
static void on_ompt_callback_device_unload(int device_num, uint64_t module_id)
static void on_ompt_callback_work(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)
int flush_traced_devices()
static void on_ompt_callback_buffer_request(int device_num, ompt_buffer_t **buffer, size_t *bytes)
static void on_ompt_callback_thread_begin(ompt_thread_t thread_type, ompt_data_t *thread_data)
static void on_ompt_callback_task_create(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)
static void on_ompt_callback_dispatch(ompt_data_t *parallel_data, ompt_data_t *task_data, ompt_dispatch_t kind, ompt_data_t instance)
int stop_trace(ompt_device_t *Device)
static ompt_flush_trace_t ompt_flush_trace
This file represents the main header file for usage of the ompTest library.
static ompt_set_callback_t ompt_set_callback
Handler class to do whatever is needed to be done when a callback is invoked by the OMP runtime Suppo...
void handleImplicitTask(ompt_scope_endpoint_t Endpoint, ompt_data_t *ParallelData, ompt_data_t *TaskData, unsigned int ActualParallelism, unsigned int Index, int Flags)
void handleDeviceFinalize(int DeviceNum)
void handleTaskCreate(ompt_data_t *EncounteringTaskData, const ompt_frame_t *EncounteringTaskFrame, ompt_data_t *NewTaskData, int Flags, int HasDependences, const void *CodeptrRA)
void handleTargetSubmitEmi(ompt_scope_endpoint_t Endpoint, ompt_data_t *TargetData, ompt_id_t *HostOpId, unsigned int RequestedNumTeams)
void handleThreadEnd(ompt_data_t *ThreadData)
void subscribe(OmptListener *Listener)
Subscribe a listener to be notified for OMPT events.
void handleBufferComplete(int DeviceNum, ompt_buffer_t *Buffer, size_t Bytes, ompt_buffer_cursor_t Begin, int BufferOwned)
void handleDeviceUnload(int DeviceNum, uint64_t ModuleId)
void handleTargetSubmit(ompt_id_t TargetId, ompt_id_t HostOpId, unsigned int RequestedNumTeams)
void handleSyncRegion(ompt_sync_region_t Kind, ompt_scope_endpoint_t Endpoint, ompt_data_t *ParallelData, ompt_data_t *TaskData, const void *CodeptrRA)
void handleThreadBegin(ompt_thread_t ThreadType, ompt_data_t *ThreadData)
void handleDispatch(ompt_data_t *ParallelData, ompt_data_t *TaskData, ompt_dispatch_t Kind, ompt_data_t Instance)
void handleBufferRecord(ompt_record_ompt_t *Record)
void handleTaskSchedule(ompt_data_t *PriorTaskData, ompt_task_status_t PriorTaskStatus, ompt_data_t *NextTaskData)
void handleBufferRequest(int DeviceNum, ompt_buffer_t **Buffer, size_t *Bytes)
void handleTargetDataOp(ompt_id_t TargetId, ompt_id_t HostOpId, ompt_target_data_op_t OpType, void *SrcAddr, int SrcDeviceNum, void *DstAddr, int DstDeviceNum, size_t Bytes, const void *CodeptrRA)
void handleBufferRecordDeallocation(ompt_buffer_t *Buffer)
void handleTarget(ompt_target_t Kind, ompt_scope_endpoint_t Endpoint, int DeviceNum, ompt_data_t *TaskData, ompt_id_t TargetId, const void *CodeptrRA)
void handleParallelEnd(ompt_data_t *ParallelData, ompt_data_t *EncounteringTaskData, int Flags, const void *CodeptrRA)
void handleDeviceLoad(int DeviceNum, const char *Filename, int64_t OffsetInFile, void *VmaInFile, size_t Bytes, void *HostAddr, void *DeviceAddr, uint64_t ModuleId)
void handleTargetEmi(ompt_target_t Kind, ompt_scope_endpoint_t Endpoint, int DeviceNum, ompt_data_t *TaskData, ompt_data_t *TargetTaskData, ompt_data_t *TargetData, const void *CodeptrRA)
void handleTargetDataOpEmi(ompt_scope_endpoint_t Endpoint, ompt_data_t *TargetTaskData, ompt_data_t *TargetData, ompt_id_t *HostOpId, ompt_target_data_op_t OpType, void *SrcAddr, int SrcDeviceNum, void *DstAddr, int DstDeviceNum, size_t Bytes, const void *CodeptrRA)
void handleDeviceInitialize(int DeviceNum, const char *Type, ompt_device_t *Device, ompt_function_lookup_t LookupFn, const char *DocumentationStr)
void handleParallelBegin(ompt_data_t *EncounteringTaskData, const ompt_frame_t *EncounteringTaskFrame, ompt_data_t *ParallelData, unsigned int RequestedParallelism, int Flags, const void *CodeptrRA)
static OmptCallbackHandler & get()
Singleton handler.
void handleWork(ompt_work_t WorkType, ompt_scope_endpoint_t Endpoint, ompt_data_t *ParallelData, ompt_data_t *TaskData, uint64_t Count, const void *CodeptrRA)
Not needed for a conforming minimal OMPT implementation.
Class that reports the occurred events.
void setActive(bool Enabled)
Control whether this asserter should be considered 'active'.
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp begin
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance * instance
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t count
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark S
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type type
struct ompt_start_tool_result_t ompt_start_tool_result_t
static ompt_start_tool_result_t * ompt_start_tool_result