1 #include <stdio.h> 2 #include <inttypes.h> 3 #include <ompt.h> 4 5 static ompt_get_task_id_t ompt_get_task_id; 6 static ompt_get_task_frame_t ompt_get_task_frame; 7 static ompt_get_thread_id_t ompt_get_thread_id; 8 static ompt_get_parallel_id_t ompt_get_parallel_id; 9 10 static void print_ids(int level) 11 { 12 ompt_frame_t* frame = ompt_get_task_frame(level); 13 printf("%" PRIu64 ": level %d: parallel_id=%" PRIu64 ", task_id=%" PRIu64 ", exit_frame=%p, reenter_frame=%p\n", ompt_get_thread_id(), level, ompt_get_parallel_id(level), ompt_get_task_id(level), frame->exit_runtime_frame, frame->reenter_runtime_frame); 14 } 15 16 #define print_frame(level)\ 17 do {\ 18 printf("%" PRIu64 ": __builtin_frame_address(%d)=%p\n", ompt_get_thread_id(), level, __builtin_frame_address(level));\ 19 } while(0) 20 21 22 static void 23 on_ompt_event_barrier_begin( 24 ompt_parallel_id_t parallel_id, 25 ompt_task_id_t task_id) 26 { 27 printf("%" PRIu64 ": ompt_event_barrier_begin: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id); 28 print_ids(0); 29 } 30 31 static void 32 on_ompt_event_barrier_end( 33 ompt_parallel_id_t parallel_id, 34 ompt_task_id_t task_id) 35 { 36 printf("%" PRIu64 ": ompt_event_barrier_end: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id); 37 } 38 39 static void 40 on_ompt_event_implicit_task_begin( 41 ompt_parallel_id_t parallel_id, 42 ompt_task_id_t task_id) 43 { 44 printf("%" PRIu64 ": ompt_event_implicit_task_begin: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id); 45 } 46 47 static void 48 on_ompt_event_implicit_task_end( 49 ompt_parallel_id_t parallel_id, 50 ompt_task_id_t task_id) 51 { 52 printf("%" PRIu64 ": ompt_event_implicit_task_end: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id); 53 } 54 55 static void 56 on_ompt_event_loop_begin( 57 ompt_parallel_id_t parallel_id, 58 ompt_task_id_t parent_task_id, 59 void *workshare_function) 60 { 61 printf("%" PRIu64 ": ompt_event_loop_begin: parallel_id=%" PRIu64 ", parent_task_id=%" PRIu64 ", workshare_function=%p\n", ompt_get_thread_id(), parallel_id, parent_task_id, workshare_function); 62 } 63 64 static void 65 on_ompt_event_loop_end( 66 ompt_parallel_id_t parallel_id, 67 ompt_task_id_t task_id) 68 { 69 printf("%" PRIu64 ": ompt_event_loop_end: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id); 70 } 71 72 static void 73 on_ompt_event_parallel_begin( 74 ompt_task_id_t parent_task_id, 75 ompt_frame_t *parent_task_frame, 76 ompt_parallel_id_t parallel_id, 77 uint32_t requested_team_size, 78 void *parallel_function, 79 ompt_invoker_t invoker) 80 { 81 printf("%" PRIu64 ": ompt_event_parallel_begin: parent_task_id=%" PRIu64 ", parent_task_frame.exit=%p, parent_task_frame.reenter=%p, parallel_id=%" PRIu64 ", requested_team_size=%" PRIu32 ", parallel_function=%p, invoker=%d\n", ompt_get_thread_id(), parent_task_id, parent_task_frame->exit_runtime_frame, parent_task_frame->reenter_runtime_frame, parallel_id, requested_team_size, parallel_function, invoker); 82 } 83 84 static void 85 on_ompt_event_parallel_end( 86 ompt_parallel_id_t parallel_id, 87 ompt_task_id_t task_id, 88 ompt_invoker_t invoker) 89 { 90 printf("%" PRIu64 ": ompt_event_parallel_end: parallel_id=%" PRIu64 ", task_id=%" PRIu64 ", invoker=%d\n", ompt_get_thread_id(), parallel_id, task_id, invoker); 91 } 92 93 94 void ompt_initialize( 95 ompt_function_lookup_t lookup, 96 const char *runtime_version, 97 unsigned int ompt_version) 98 { 99 ompt_set_callback_t ompt_set_callback = (ompt_set_callback_t) lookup("ompt_set_callback"); 100 ompt_get_task_id = (ompt_get_task_id_t) lookup("ompt_get_task_id"); 101 ompt_get_task_frame = (ompt_get_task_frame_t) lookup("ompt_get_task_frame"); 102 ompt_get_thread_id = (ompt_get_thread_id_t) lookup("ompt_get_thread_id"); 103 ompt_get_parallel_id = (ompt_get_parallel_id_t) lookup("ompt_get_parallel_id"); 104 105 ompt_set_callback(ompt_event_barrier_begin, (ompt_callback_t) &on_ompt_event_barrier_begin); 106 ompt_set_callback(ompt_event_barrier_end, (ompt_callback_t) &on_ompt_event_barrier_end); 107 ompt_set_callback(ompt_event_implicit_task_begin, (ompt_callback_t) &on_ompt_event_implicit_task_begin); 108 ompt_set_callback(ompt_event_implicit_task_end, (ompt_callback_t) &on_ompt_event_implicit_task_end); 109 ompt_set_callback(ompt_event_loop_begin, (ompt_callback_t) &on_ompt_event_loop_begin); 110 ompt_set_callback(ompt_event_loop_end, (ompt_callback_t) &on_ompt_event_loop_end); 111 ompt_set_callback(ompt_event_parallel_begin, (ompt_callback_t) &on_ompt_event_parallel_begin); 112 ompt_set_callback(ompt_event_parallel_end, (ompt_callback_t) &on_ompt_event_parallel_end); 113 printf("0: NULL_POINTER=%p\n", NULL); 114 } 115 116 ompt_initialize_t ompt_tool() 117 { 118 return &ompt_initialize; 119 } 120