1 // RUN: %libomp-tool -DFIRST_TOOL -o %t.first.tool.so %s && \ 2 // RUN: %libomp-tool -DSECOND_TOOL -o %t.second.tool.so %s && \ 3 // RUN: %libomp-compile && \ 4 // RUN: env OMP_TOOL_LIBRARIES=%t.first.tool.so \ 5 // RUN: CUSTOM_DATA_STORAGE_TOOL_LIBRARIES=%t.second.tool.so \ 6 // RUN: %libomp-run | %sort-threads | FileCheck %s 7 8 // For GCC we don't get an event for master, 9 // see runtime/test/ompt/sycnchronization/master.c 10 // UNSUPPORTED: gcc 11 12 #if defined(FIRST_TOOL) 13 #include "first-tool.h" 14 #elif defined(SECOND_TOOL) 15 #include "second-tool.h" 16 #else /* APP */ 17 18 #include "../ompt-signal.h" 19 #include "omp.h" 20 #include <stdio.h> 21 22 int main() { 23 int x, s = 0; 24 #pragma omp parallel num_threads(2) shared(s) 25 { 26 #pragma omp master 27 { 28 #pragma omp task shared(s) 29 { 30 omp_control_tool(5, 1, NULL); 31 OMPT_SIGNAL(s); 32 } 33 } 34 if (omp_get_thread_num() == 1) 35 OMPT_WAIT(s, 1); 36 } 37 return 0; 38 } 39 // Check if libomp supports the callbacks for this test. 40 // CHECK-NOT: {{^}}0: Could not register callback 41 42 // CHECK: {{^}}0: NULL_POINTER=[[NULL:.*$]] 43 // CHECK: {{^}}0: NULL_POINTER=[[NULL]] 44 // CHECK: {{^}}0: ompt_event_runtime_shutdown 45 // CHECK: {{^}}0: ompt_event_runtime_shutdown 46 47 // CHECK: {{^}}[[_1ST_MSTR_TID:[0-9]+]]: _first_tool: ompt_event_thread_begin: 48 // CHECK-SAME: thread_type=ompt_thread_initial=1, 49 // CHECK-SAME: thread_id=[[_1ST_MSTR_TID]] 50 51 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: ompt_event_initial_task_begin: 52 // CHECK-SAME: parallel_id=[[_FIRST_INIT_PARALLEL_ID:[0-9]+]], 53 // CHECK-SAME: task_id=[[_FIRST_INITIAL_TASK_ID:[0-9]+]], actual_parallelism=1, 54 55 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: ompt_event_parallel_begin: 56 // CHECK-SAME: parent_task_id=[[_FIRST_INITIAL_TASK_ID]], 57 // CHECK-SAME: parent_task_frame.exit=(nil), 58 // CHECK-SAME: parent_task_frame.reenter={{0x[0-f]+}}, 59 // CHECK-SAME: parallel_id=[[_FIRST_PARALLEL_ID:[0-9]+]], requested_team_size=2, 60 // CHECK-SAME: codeptr_ra={{0x[0-f]+}}, invoker 61 62 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: ompt_event_implicit_task_begin: 63 // CHECK-SAME: parallel_id=[[_FIRST_PARALLEL_ID]], 64 // CHECK-SAME: task_id=[[_FIRST_MASTER_IMPLICIT_TASK_ID:[0-9]+]], team_size=2, 65 // CHECK-SAME: thread_num=0 66 67 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: ompt_event_masked_begin: 68 // CHECK-SAME: parallel_id=[[_FIRST_PARALLEL_ID]], 69 // CHECK-SAME: task_id=[[_FIRST_MASTER_IMPLICIT_TASK_ID]], 70 // CHECK-SAME: codeptr_ra={{0x[0-f]+}} 71 72 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: ompt_event_task_create: 73 // CHECK-SAME: parent_task_id=[[_FIRST_MASTER_IMPLICIT_TASK_ID]], 74 // CHECK-SAME: parent_task_frame.exit={{0x[0-f]+}}, 75 // CHECK-SAME: parent_task_frame.reenter={{0x[0-f]+}}, 76 // CHECK-SAME: new_task_id=[[_FIRST_EXPLICIT_TASK_ID:[0-9]+]], 77 // CHECK-SAME: codeptr_ra={{0x[0-f]+}}, task_type=ompt_task_explicit=4, 78 // CHECK-SAME: has_dependences=no 79 80 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: ompt_event_masked_end: 81 // CHECK-SAME: parallel_id=[[_FIRST_PARALLEL_ID]], 82 // CHECK-SAME: task_id=[[_FIRST_MASTER_IMPLICIT_TASK_ID]], 83 // CHECK-SAME: codeptr_ra={{0x[0-f]+}} 84 85 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: 86 // CHECK-SAME: ompt_event_barrier_implicit_parallel_begin: 87 // CHECK-SAME: parallel_id=[[_FIRST_PARALLEL_ID]], 88 // CHECK-SAME: task_id=[[_FIRST_MASTER_IMPLICIT_TASK_ID]], 89 // CHECK-SAME: codeptr_ra={{0x[0-f]+}} 90 91 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: 92 // CHECK-SAME: ompt_event_wait_barrier_implicit_parallel_begin: 93 // CHECK-SAME: parallel_id=[[_FIRST_PARALLEL_ID]], 94 // CHECK-SAME: task_id=[[_FIRST_MASTER_IMPLICIT_TASK_ID]], 95 // CHECK-SAME: codeptr_ra={{0x[0-f]+}} 96 97 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: ompt_event_task_schedule: 98 // CHECK-SAME: first_task_id=[[_FIRST_MASTER_IMPLICIT_TASK_ID]], 99 // CHECK-SAME: second_task_id=[[_FIRST_EXPLICIT_TASK_ID]], 100 // CHECK-SAME: prior_task_status=ompt_task_switch=7 101 102 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: ompt_event_control_tool: 103 // CHECK-SAME: command=5, modifier=1, arg=(nil), 104 // CHECK-SAME: codeptr_ra={{0x[0-f]+}} 105 106 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: task level 0: 107 // CHECK-SAME: task_id=[[_FIRST_EXPLICIT_TASK_ID]] 108 109 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: task level 1: 110 // CHECK-SAME: task_id=[[_FIRST_MASTER_IMPLICIT_TASK_ID]] 111 112 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: task level 2: 113 // CHECK-SAME: task_id=[[_FIRST_INITIAL_TASK_ID]] 114 115 // CHECK: {{^}}[[_1ST_MSTR_TID]]: 116 // CHECK-SAME: _first_tool: parallel level 0: parallel_id=[[_FIRST_PARALLEL_ID]] 117 118 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: parallel level 1: 119 // CHECK-SAME: parallel_id={{[0-9]+}} 120 121 // CHECK: {{^}}[[_1ST_MSTR_TID]]: 122 // CHECK-SAME: _first_tool: ompt_event_task_schedule: 123 // CHECK-SAME: first_task_id=[[_FIRST_EXPLICIT_TASK_ID]], 124 // CHECK-SAME: second_task_id=[[_FIRST_MASTER_IMPLICIT_TASK_ID]], 125 // CHECK-SAME: prior_task_status=ompt_task_complete=1 126 127 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: ompt_event_task_end: 128 // CHECK-SAME: task_id=[[_FIRST_EXPLICIT_TASK_ID]] 129 130 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: 131 // CHECK-SAME: ompt_event_wait_barrier_implicit_parallel_end: 132 // CHECK-SAME: parallel_id=0, 133 // CHECK-SAME: task_id=[[_FIRST_MASTER_IMPLICIT_TASK_ID]], codeptr_ra=(nil) 134 135 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: 136 // CHECK-SAME: ompt_event_barrier_implicit_parallel_end: 137 // CHECK-SAME: parallel_id=0, 138 // CHECK-SAME: task_id=[[_FIRST_MASTER_IMPLICIT_TASK_ID]], codeptr_ra=(nil) 139 140 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: ompt_event_implicit_task_end: 141 // CHECK-SAME: parallel_id=0, task_id=[[_FIRST_MASTER_IMPLICIT_TASK_ID]], 142 // CHECK-SAME: team_size=2, thread_num=0 143 144 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: ompt_event_parallel_end: 145 // CHECK-SAME: parallel_id=[[_FIRST_PARALLEL_ID]], 146 // CHECK-SAME: task_id=[[_FIRST_INITIAL_TASK_ID]], invoker 147 // CHECK-SAME: codeptr_ra={{0x[0-f]+}} 148 149 // CHECK: {{^}}[[_1ST_MSTR_TID]]: _first_tool: ompt_event_thread_end: 150 // CHECK-SAME: thread_id=[[_1ST_MSTR_TID]] 151 152 // CHECK: {{^}}[[_2ND_MSTR_TID:[0-9]+]]: second_tool: ompt_event_thread_begin: 153 // CHECK-SAME: thread_type=ompt_thread_initial=1, 154 // CHECK-SAME: thread_id=[[_2ND_MSTR_TID]] 155 156 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: ompt_event_initial_task_begin: 157 // CHECK-SAME: parallel_id=[[SECOND_INIT_PARALLEL_ID:[0-9]+]], 158 // CHECK-SAME: task_id=[[SECOND_INITIAL_TASK_ID:[0-9]+]], actual_parallelism=1, 159 // CHECK-SAME: index=1, flags=1 160 161 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: ompt_event_parallel_begin: 162 // CHECK-SAME: parent_task_id=[[SECOND_INITIAL_TASK_ID]], 163 // CHECK-SAME: parent_task_frame.exit=(nil), 164 // CHECK-SAME: parent_task_frame.reenter={{0x[0-f]+}}, 165 // CHECK-SAME: parallel_id=[[SECOND_PARALLEL_ID:[0-9]+]], requested_team_size=2, 166 // CHECK-SAME: codeptr_ra={{0x[0-f]+}}, invoker 167 168 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: ompt_event_implicit_task_begin: 169 // CHECK-SAME: parallel_id=[[SECOND_PARALLEL_ID]], 170 // CHECK-SAME: task_id=[[SECOND_MASTER_IMPLICIT_TASK_ID:[0-9]+]], team_size=2, 171 // CHECK-SAME: thread_num=0 172 173 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: ompt_event_masked_begin: 174 // CHECK-SAME: parallel_id=[[SECOND_PARALLEL_ID]], 175 // CHECK-SAME: task_id=[[SECOND_MASTER_IMPLICIT_TASK_ID]], 176 // CHECK-SAME: codeptr_ra={{0x[0-f]+}} 177 178 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: ompt_event_task_create: 179 // CHECK-SAME: parent_task_id=[[SECOND_MASTER_IMPLICIT_TASK_ID]], 180 // CHECK-SAME: parent_task_frame.exit={{0x[0-f]+}}, 181 // CHECK-SAME: parent_task_frame.reenter={{0x[0-f]+}}, 182 // CHECK-SAME: new_task_id=[[SECOND_EXPLICIT_TASK_ID:[0-9]+]], 183 // CHECK-SAME: codeptr_ra={{0x[0-f]+}}, task_type=ompt_task_explicit=4, 184 // CHECK-SAME: has_dependences=no 185 186 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: ompt_event_masked_end: 187 // CHECK-SAME: parallel_id=[[SECOND_PARALLEL_ID]], 188 // CHECK-SAME: task_id=[[SECOND_MASTER_IMPLICIT_TASK_ID]], 189 // CHECK-SAME: codeptr_ra={{0x[0-f]+}} 190 191 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: 192 // CHECK-SAME: ompt_event_barrier_implicit_parallel_begin: 193 // CHECK-SAME: parallel_id=[[SECOND_PARALLEL_ID]], 194 // CHECK-SAME: task_id=[[SECOND_MASTER_IMPLICIT_TASK_ID]], 195 // CHECK-SAME: codeptr_ra={{0x[0-f]+}} 196 197 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: 198 // CHECK-SAME: ompt_event_wait_barrier_implicit_parallel_begin: 199 // CHECK-SAME: parallel_id=[[SECOND_PARALLEL_ID]], 200 // CHECK-SAME: task_id=[[SECOND_MASTER_IMPLICIT_TASK_ID]], 201 // CHECK-SAME: codeptr_ra={{0x[0-f]+}} 202 203 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: ompt_event_task_schedule: 204 // CHECK-SAME: first_task_id=[[SECOND_MASTER_IMPLICIT_TASK_ID]], 205 // CHECK-SAME: second_task_id=[[SECOND_EXPLICIT_TASK_ID]], 206 // CHECK-SAME: prior_task_status=ompt_task_switch=7 207 208 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: ompt_event_control_tool: 209 // CHECK-SAME: command=5, modifier=1, arg=(nil), 210 // CHECK-SAME: codeptr_ra={{0x[0-f]+}} 211 212 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: task level 0: 213 // CHECK-SAME: task_id=[[SECOND_EXPLICIT_TASK_ID]] 214 215 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: task level 1: 216 // CHECK-SAME: task_id=[[SECOND_MASTER_IMPLICIT_TASK_ID]] 217 218 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: task level 2: 219 // CHECK-SAME: task_id=[[SECOND_INITIAL_TASK_ID]] 220 221 // CHECK: {{^}}[[_2ND_MSTR_TID]]: 222 // CHECK-SAME: second_tool: parallel level 0: parallel_id=[[SECOND_PARALLEL_ID]] 223 224 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: parallel level 1: 225 // CHECK-SAME: parallel_id={{[0-9]+}} 226 227 // CHECK: {{^}}[[_2ND_MSTR_TID]]: 228 // CHECK-SAME: second_tool: ompt_event_task_schedule: 229 // CHECK-SAME: first_task_id=[[SECOND_EXPLICIT_TASK_ID]], 230 // CHECK-SAME: second_task_id=[[SECOND_MASTER_IMPLICIT_TASK_ID]], 231 // CHECK-SAME: prior_task_status=ompt_task_complete=1 232 233 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: ompt_event_task_end: 234 // CHECK-SAME: task_id=[[SECOND_EXPLICIT_TASK_ID]] 235 236 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: 237 // CHECK-SAME: ompt_event_wait_barrier_implicit_parallel_end: 238 // CHECK-SAME: parallel_id=0, 239 // CHECK-SAME: task_id=[[SECOND_MASTER_IMPLICIT_TASK_ID]], codeptr_ra=(nil) 240 241 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: 242 // CHECK-SAME: ompt_event_barrier_implicit_parallel_end: 243 // CHECK-SAME: parallel_id=0, 244 // CHECK-SAME: task_id=[[SECOND_MASTER_IMPLICIT_TASK_ID]], codeptr_ra=(nil) 245 246 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: ompt_event_implicit_task_end: 247 // CHECK-SAME: parallel_id=0, 248 // CHECK-SAME: task_id=[[SECOND_MASTER_IMPLICIT_TASK_ID]], team_size=2, 249 // CHECK-SAME: thread_num=0 250 251 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: ompt_event_parallel_end: 252 // CHECK-SAME: parallel_id=[[SECOND_PARALLEL_ID]], 253 // CHECK-SAME: task_id=[[SECOND_INITIAL_TASK_ID]], invoker 254 // CHECK-SAME: codeptr_ra={{0x[0-f]+}} 255 256 // CHECK: {{^}}[[_2ND_MSTR_TID]]: second_tool: ompt_event_thread_end: 257 // CHECK-SAME: thread_id=[[_2ND_MSTR_TID]] 258 259 // CHECK: {{^}}[[_1ST_WRKR_TID:[0-9]+]]: _first_tool: ompt_event_thread_begin: 260 // CHECK-SAME: thread_type=ompt_thread_worker=2, 261 // CHECK-SAME: thread_id=[[_1ST_WRKR_TID]] 262 263 // CHECK: {{^}}[[_1ST_WRKR_TID]]: _first_tool: ompt_event_implicit_task_begin: 264 // CHECK-SAME: parallel_id=[[_FIRST_PARALLEL_ID]], 265 // CHECK-SAME: task_id=[[_FIRST_WORKER_IMPLICIT_TASK_ID:[0-9]+]], team_size=2, 266 // CHECK-SAME: thread_num=1 267 268 // CHECK: {{^}}[[_1ST_WRKR_TID]]: _first_tool: 269 // CHECK-SAME: ompt_event_barrier_implicit_parallel_begin: 270 // CHECK-SAME: parallel_id=[[_FIRST_PARALLEL_ID]], 271 // CHECK-SAME: task_id=[[_FIRST_WORKER_IMPLICIT_TASK_ID]], codeptr_ra=(nil) 272 273 // CHECK: {{^}}[[_1ST_WRKR_TID]]: _first_tool: 274 // CHECK-SAME: ompt_event_wait_barrier_implicit_parallel_begin: 275 // CHECK-SAME: parallel_id=[[_FIRST_PARALLEL_ID]], 276 // CHECK-SAME: task_id=[[_FIRST_WORKER_IMPLICIT_TASK_ID]], codeptr_ra=(nil) 277 278 // CHECK: {{^}}[[_1ST_WRKR_TID]]: _first_tool: 279 // CHECK-SAME: ompt_event_wait_barrier_implicit_parallel_end: 280 // CHECK-SAME: parallel_id=0, 281 // CHECK-SAME: task_id=[[_FIRST_WORKER_IMPLICIT_TASK_ID]], codeptr_ra=(nil) 282 283 // CHECK: {{^}}[[_1ST_WRKR_TID]]: _first_tool: 284 // CHECK-SAME: ompt_event_barrier_implicit_parallel_end: 285 // CHECK-SAME: parallel_id=0, 286 // CHECK-SAME: task_id=[[_FIRST_WORKER_IMPLICIT_TASK_ID]], codeptr_ra=(nil) 287 288 // CHECK: {{^}}[[_1ST_WRKR_TID]]: _first_tool: ompt_event_implicit_task_end: 289 // CHECK-SAME: parallel_id=0, 290 // CHECK-SAME: task_id=[[_FIRST_WORKER_IMPLICIT_TASK_ID]], team_size=0, 291 // thread_num=1 292 293 // CHECK: {{^}}[[_1ST_WRKR_TID]]: _first_tool: ompt_event_thread_end: 294 // CHECK-SAME: thread_id=[[_1ST_WRKR_TID]] 295 296 // CHECK: {{^}}[[_2ND_WRKR_TID:[0-9]+]]: second_tool: ompt_event_thread_begin: 297 // CHECK-SAME: thread_type=ompt_thread_worker=2, 298 // CHECK-SAME: thread_id=[[_2ND_WRKR_TID]] 299 300 // CHECK: {{^}}[[_2ND_WRKR_TID]]: second_tool: ompt_event_implicit_task_begin: 301 // CHECK-SAME: parallel_id=[[SECOND_PARALLEL_ID]], 302 // CHECK-SAME: task_id=[[SECOND_WORKER_IMPLICIT_TASK_ID:[0-9]+]], team_size=2, 303 // CHECK-SAME: thread_num=1 304 305 // CHECK: {{^}}[[_2ND_WRKR_TID]]: second_tool: 306 // CHECK-SAME: ompt_event_barrier_implicit_parallel_begin: 307 // CHECK-SAME: parallel_id=[[SECOND_PARALLEL_ID]], 308 // CHECK-SAME: task_id=[[SECOND_WORKER_IMPLICIT_TASK_ID]], codeptr_ra=(nil) 309 310 // CHECK: {{^}}[[_2ND_WRKR_TID]]: second_tool: 311 // CHECK-SAME: ompt_event_wait_barrier_implicit_parallel_begin: 312 // CHECK-SAME: parallel_id=[[SECOND_PARALLEL_ID]], 313 // CHECK-SAME: task_id=[[SECOND_WORKER_IMPLICIT_TASK_ID]], codeptr_ra=(nil) 314 315 // CHECK: {{^}}[[_2ND_WRKR_TID]]: second_tool: 316 // CHECK-SAME: ompt_event_wait_barrier_implicit_parallel_end: 317 // CHECK-SAME: parallel_id=0, 318 // CHECK-SAME: task_id=[[SECOND_WORKER_IMPLICIT_TASK_ID]], codeptr_ra=(nil) 319 320 // CHECK: {{^}}[[_2ND_WRKR_TID]]: second_tool: 321 // CHECK-SAME: ompt_event_barrier_implicit_parallel_end: 322 // CHECK-SAME: parallel_id=0, 323 // CHECK-SAME: task_id=[[SECOND_WORKER_IMPLICIT_TASK_ID]], codeptr_ra=(nil) 324 325 // CHECK: {{^}}[[_2ND_WRKR_TID]]: second_tool: ompt_event_implicit_task_end: 326 // CHECK-SAME: parallel_id=0, 327 // CHECK-SAME: task_id=[[SECOND_WORKER_IMPLICIT_TASK_ID]], team_size=0, 328 // CHECK-SAME: thread_num=1 329 330 // CHECK: {{^}}[[_2ND_WRKR_TID]]: second_tool: ompt_event_thread_end: 331 // CHECK-SAME: thread_id=[[_2ND_WRKR_TID]] 332 333 #endif /* APP */ 334