165 lines · c
1#include <assert.h>2#include <stdio.h>3#include <stdlib.h>4 5// Tool related code below6#include <omp-tools.h>7 8static const char *ompt_target_data_op_t_values[] = {9 "",10 "ompt_target_data_alloc",11 "ompt_target_data_transfer_to_device",12 "ompt_target_data_transfer_from_device",13 "ompt_target_data_delete",14 "ompt_target_data_associate",15 "ompt_target_data_disassociate",16 "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 21static const char *ompt_scope_endpoint_t_values[] = {22 "", "ompt_scope_begin", "ompt_scope_end", "ompt_scope_beginend"};23 24static const char *ompt_target_t_values[] = {"",25 "ompt_target",26 "ompt_target_enter_data",27 "ompt_target_exit_data",28 "ompt_target_update",29 "",30 "",31 "",32 "",33 "",34 "ompt_target_nowait",35 "ompt_target_enter_data_nowait",36 "ompt_target_exit_data_nowait",37 "ompt_target_update_nowait"};38 39// For EMI callbacks40ompt_id_t next_op_id = 0x8000000000000001;41 42// OMPT callbacks43 44// Synchronous callbacks45static void on_ompt_callback_device_initialize(int device_num, const char *type,46 ompt_device_t *device,47 ompt_function_lookup_t lookup,48 const char *documentation) {49 printf("Callback Init: device_num=%d type=%s device=%p lookup=%p doc=%p\n",50 device_num, type, device, lookup, documentation);51}52 53static void on_ompt_callback_device_finalize(int device_num) {54 printf("Callback Fini: device_num=%d\n", device_num);55}56 57static void on_ompt_callback_device_load(int device_num, const char *filename,58 int64_t offset_in_file,59 void *vma_in_file, size_t bytes,60 void *host_addr, void *device_addr,61 uint64_t module_id) {62 printf("Callback Load: device_num:%d module_id:%lu filename:%s host_adddr:%p "63 "device_addr:%p bytes:%lu\n",64 device_num, module_id, filename, host_addr, device_addr, bytes);65}66 67static void on_ompt_callback_target_data_op(68 ompt_id_t target_id, ompt_id_t host_op_id, ompt_target_data_op_t optype,69 void *src_addr, int src_device_num, void *dest_addr, int dest_device_num,70 size_t bytes, const void *codeptr_ra) {71 assert(codeptr_ra != 0 && "Unexpected null codeptr");72 printf(" Callback DataOp: target_id=%lu host_op_id=%lu optype=%s src=%p "73 "src_device_num=%d "74 "dest=%p dest_device_num=%d bytes=%lu code=%p\n",75 target_id, host_op_id, ompt_target_data_op_t_values[optype], src_addr,76 src_device_num, dest_addr, dest_device_num, bytes, codeptr_ra);77}78 79static void on_ompt_callback_target(ompt_target_t kind,80 ompt_scope_endpoint_t endpoint,81 int device_num, ompt_data_t *task_data,82 ompt_id_t target_id,83 const void *codeptr_ra) {84 assert(codeptr_ra != 0 && "Unexpected null codeptr");85 printf("Callback Target: target_id=%lu kind=%s endpoint=%s device_num=%d "86 "code=%p\n",87 target_id, ompt_target_t_values[kind],88 ompt_scope_endpoint_t_values[endpoint], device_num, codeptr_ra);89}90 91static void on_ompt_callback_target_submit(ompt_id_t target_id,92 ompt_id_t host_op_id,93 unsigned int requested_num_teams) {94 printf(" Callback Submit: target_id=%lu host_op_id=%lu req_num_teams=%d\n",95 target_id, host_op_id, requested_num_teams);96}97 98static void on_ompt_callback_target_map(ompt_id_t target_id,99 unsigned int nitems, void **host_addr,100 void **device_addr, size_t *bytes,101 unsigned int *mapping_flags,102 const void *codeptr_ra) {103 printf("Target map callback is unimplemented\n");104 abort();105}106 107static void on_ompt_callback_target_data_op_emi(108 ompt_scope_endpoint_t endpoint, ompt_data_t *target_task_data,109 ompt_data_t *target_data, ompt_id_t *host_op_id,110 ompt_target_data_op_t optype, void *src_addr, int src_device_num,111 void *dest_addr, int dest_device_num, size_t bytes,112 const void *codeptr_ra) {113 assert(codeptr_ra != 0 && "Unexpected null codeptr");114 if (endpoint == ompt_scope_begin)115 *host_op_id = next_op_id++;116 // target_task_data may be null, avoid dereferencing it117 uint64_t target_task_data_value =118 (target_task_data) ? target_task_data->value : 0;119 printf(" Callback DataOp EMI: endpoint=%s optype=%s target_task_data=%p "120 "(0x%lx) target_data=%p (0x%lx) host_op_id=%p (0x%lx) src=%p "121 "src_device_num=%d "122 "dest=%p dest_device_num=%d bytes=%lu code=%p\n",123 ompt_scope_endpoint_t_values[endpoint],124 ompt_target_data_op_t_values[optype], target_task_data,125 target_task_data_value, target_data, target_data->value, host_op_id,126 *host_op_id, src_addr, src_device_num, dest_addr, dest_device_num,127 bytes, codeptr_ra);128}129 130static void on_ompt_callback_target_emi(ompt_target_t kind,131 ompt_scope_endpoint_t endpoint,132 int device_num, ompt_data_t *task_data,133 ompt_data_t *target_task_data,134 ompt_data_t *target_data,135 const void *codeptr_ra) {136 assert(codeptr_ra != 0 && "Unexpected null codeptr");137 if (endpoint == ompt_scope_begin)138 target_data->value = next_op_id++;139 printf("Callback Target EMI: kind=%s endpoint=%s device_num=%d task_data=%p "140 "(0x%lx) target_task_data=%p (0x%lx) target_data=%p (0x%lx) code=%p\n",141 ompt_target_t_values[kind], ompt_scope_endpoint_t_values[endpoint],142 device_num, task_data, task_data ? task_data->value : 0,143 target_task_data, target_task_data ? target_task_data->value : 0,144 target_data, target_data->value, codeptr_ra);145}146 147static void on_ompt_callback_target_submit_emi(148 ompt_scope_endpoint_t endpoint, ompt_data_t *target_data,149 ompt_id_t *host_op_id, unsigned int requested_num_teams) {150 printf(" Callback Submit EMI: endpoint=%s req_num_teams=%d target_data=%p "151 "(0x%lx) host_op_id=%p (0x%lx)\n",152 ompt_scope_endpoint_t_values[endpoint], requested_num_teams,153 target_data, target_data->value, host_op_id, *host_op_id);154}155 156static void on_ompt_callback_target_map_emi(ompt_data_t *target_data,157 unsigned int nitems,158 void **host_addr,159 void **device_addr, size_t *bytes,160 unsigned int *mapping_flags,161 const void *codeptr_ra) {162 printf("Target map emi callback is unimplemented\n");163 abort();164}165