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_thread_id_t ompt_get_thread_id; 7 static ompt_get_parallel_id_t ompt_get_parallel_id; 8 9 static void print_ids(int level) 10 { 11 printf("%" PRIu64 ": level %d: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), level, ompt_get_parallel_id(level), ompt_get_task_id(level)); 12 } 13 14 static void 15 on_ompt_event_barrier_begin( 16 ompt_parallel_id_t parallel_id, 17 ompt_task_id_t task_id) 18 { 19 printf("%" PRIu64 ": ompt_event_barrier_begin: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id); 20 } 21 22 static void 23 on_ompt_event_barrier_end( 24 ompt_parallel_id_t parallel_id, 25 ompt_task_id_t task_id) 26 { 27 printf("%" PRIu64 ": ompt_event_barrier_end: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id); 28 } 29 30 static void 31 on_ompt_event_implicit_task_begin( 32 ompt_parallel_id_t parallel_id, 33 ompt_task_id_t task_id) 34 { 35 printf("%" PRIu64 ": ompt_event_implicit_task_begin: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id); 36 } 37 38 static void 39 on_ompt_event_implicit_task_end( 40 ompt_parallel_id_t parallel_id, 41 ompt_task_id_t task_id) 42 { 43 printf("%" PRIu64 ": ompt_event_implicit_task_end: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id); 44 } 45 46 static void 47 on_ompt_event_loop_begin( 48 ompt_parallel_id_t parallel_id, 49 ompt_task_id_t parent_task_id, 50 void *workshare_function) 51 { 52 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); 53 } 54 55 static void 56 on_ompt_event_loop_end( 57 ompt_parallel_id_t parallel_id, 58 ompt_task_id_t task_id) 59 { 60 printf("%" PRIu64 ": ompt_event_loop_end: parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", ompt_get_thread_id(), parallel_id, task_id); 61 } 62 63 static void 64 on_ompt_event_parallel_begin( 65 ompt_task_id_t parent_task_id, 66 ompt_frame_t *parent_task_frame, 67 ompt_parallel_id_t parallel_id, 68 uint32_t requested_team_size, 69 void *parallel_function, 70 ompt_invoker_t invoker) 71 { 72 printf("%" PRIu64 ": ompt_event_parallel_begin: parent_task_id=%" PRIu64 ", parent_task_frame=%p, parallel_id=%" PRIu64 ", requested_team_size=%" PRIu32 ", parallel_function=%p, invoker=%d\n", ompt_get_thread_id(), parent_task_id, parent_task_frame, parallel_id, requested_team_size, parallel_function, invoker); 73 } 74 75 static void 76 on_ompt_event_parallel_end( 77 ompt_parallel_id_t parallel_id, 78 ompt_task_id_t task_id, 79 ompt_invoker_t invoker) 80 { 81 printf("%" PRIu64 ": ompt_event_parallel_end: parallel_id=%" PRIu64 ", task_id=%" PRIu64 ", invoker=%d\n", ompt_get_thread_id(), parallel_id, task_id, invoker); 82 } 83 84 85 void ompt_initialize( 86 ompt_function_lookup_t lookup, 87 const char *runtime_version, 88 unsigned int ompt_version) 89 { 90 ompt_set_callback_t ompt_set_callback = (ompt_set_callback_t) lookup("ompt_set_callback"); 91 ompt_get_task_id = (ompt_get_task_id_t) lookup("ompt_get_task_id"); 92 ompt_get_thread_id = (ompt_get_thread_id_t) lookup("ompt_get_thread_id"); 93 ompt_get_parallel_id = (ompt_get_parallel_id_t) lookup("ompt_get_parallel_id"); 94 95 ompt_set_callback(ompt_event_barrier_begin, (ompt_callback_t) &on_ompt_event_barrier_begin); 96 ompt_set_callback(ompt_event_barrier_end, (ompt_callback_t) &on_ompt_event_barrier_end); 97 ompt_set_callback(ompt_event_implicit_task_begin, (ompt_callback_t) &on_ompt_event_implicit_task_begin); 98 ompt_set_callback(ompt_event_implicit_task_end, (ompt_callback_t) &on_ompt_event_implicit_task_end); 99 ompt_set_callback(ompt_event_loop_begin, (ompt_callback_t) &on_ompt_event_loop_begin); 100 ompt_set_callback(ompt_event_loop_end, (ompt_callback_t) &on_ompt_event_loop_end); 101 ompt_set_callback(ompt_event_parallel_begin, (ompt_callback_t) &on_ompt_event_parallel_begin); 102 ompt_set_callback(ompt_event_parallel_end, (ompt_callback_t) &on_ompt_event_parallel_end); 103 } 104 105 ompt_initialize_t ompt_tool() 106 { 107 return &ompt_initialize; 108 } 109