360 lines · c
1// clang-format off2// RUN: %libomp-compile-and-run | FileCheck %s3// RUN: %libomp-compile-and-run | %sort-threads | FileCheck --check-prefix=THREADS %s4// REQUIRES: ompt5// UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-76// clang-format on7#define TEST_NEED_PRINT_FRAME_FROM_OUTLINED_FN8#include "callback.h"9#include <omp.h>10#include <unistd.h>11 12int main() {13 int condition = 0;14 omp_set_nested(1);15 print_frame(0);16 17#pragma omp parallel num_threads(2)18 {19 print_frame_from_outlined_fn(1);20 print_ids(0);21 print_ids(1);22 print_frame(0);23 24// get all implicit task events before starting nested:25#pragma omp barrier26 27#pragma omp parallel num_threads(2)28 {29 print_frame_from_outlined_fn(1);30 print_ids(0);31 print_ids(1);32 print_ids(2);33 print_frame(0);34 OMPT_SIGNAL(condition);35 OMPT_WAIT(condition, 4);36#pragma omp barrier37 print_fuzzy_address(1);38 print_ids(0);39 }40 print_fuzzy_address(2);41 print_ids(0);42 }43 print_fuzzy_address(3);44 45 return 0;46}47// clang-format off48// Check if libomp supports the callbacks for this test.49// CHECK-NOT: {{^}}0: Could not register callback50 51// CHECK: 0: NULL_POINTER=[[NULL:.*$]]52 53// make sure initial data pointers are null54// CHECK-NOT: 0: parallel_data initially not null55// CHECK-NOT: 0: task_data initially not null56// CHECK-NOT: 0: thread_data initially not null57 58// CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_parallel_begin:59// CHECK-SAME: parent_task_id=[[PARENT_TASK_ID:[0-f]+]],60// CHECK-SAME: parent_task_frame.exit=[[NULL]],61// CHECK-SAME: parent_task_frame.reenter={{(0x)?[0-f]+}},62// CHECK-SAME: parallel_id=[[PARALLEL_ID:[0-f]+]],63// CHECK-SAME: requested_team_size=2,64// CHECK-SAME: codeptr_ra=[[RETURN_ADDRESS:(0x)?[0-f]+]]{{[0-f][0-f]}},65// CHECK-SAME: invoker=[[PARALLEL_INVOKER:[0-9]+]]66 67// CHECK-DAG: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin:68// CHECK-DAG: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end:69 70// Note that we cannot ensure that the worker threads have already called71// barrier_end and implicit_task_end before parallel_end!72 73// CHECK-DAG: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin:74// CHECK-DAG: {{^}}[[THREAD_ID]]: ompt_event_barrier_implicit_parallel_begin:75 76// CHECK: ompt_event_parallel_end: parallel_id=[[PARALLEL_ID]], 77// CHECK-SAME: task_id=[[PARENT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]78// CHECK: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS]]79 80// THREADS: {{^}}0: NULL_POINTER=[[NULL:.*$]]81// THREADS: __builtin_frame_address(0)=[[MAIN_REENTER:(0x)?[0-f]+]]82// THREADS: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_parallel_begin:83// THREADS-SAME: parent_task_id=[[PARENT_TASK_ID:[0-f]+]], 84// THREADS-SAME: parent_task_frame.exit=[[NULL]],85// THREADS-SAME: parent_task_frame.reenter={{(0x)?[0-f]+}},86// THREADS-SAME: parallel_id=[[PARALLEL_ID:[0-f]+]], requested_team_size=2,87// THREADS-SAME: codeptr_ra=[[RETURN_ADDRESS:(0x)?[0-f]+]]{{[0-f][0-f]}},88// THREADS-SAME: invoker=[[PARALLEL_INVOKER:[0-9]+]]89 90// nested parallel masters91// THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin:92// THREADS-SAME: parallel_id=[[PARALLEL_ID]], 93// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID:[0-f]+]],94// THREADS-SAME: team_size=2, thread_num=095 96// THREADS: __builtin_frame_address({{.}})=[[EXIT:(0x)?[0-f]+]]97 98// THREADS: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]],99// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[EXIT]], 100// THREADS-SAME: reenter_frame=[[NULL]], 101// THREADS-SAME: thread_num=0102 103// THREADS: {{^}}[[MASTER_ID]]: task level 1:104// THREADS-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID:[0-f]+]], 105// THREADS-SAME: task_id=[[PARENT_TASK_ID]], exit_frame=[[NULL]], 106// THREADS-SAME: reenter_frame={{(0x)?[0-f]+}}107 108// THREADS: __builtin_frame_address(0)=[[REENTER:(0x)?[0-f]+]]109 110// THREADS: {{^}}[[MASTER_ID]]: ompt_event_parallel_begin:111// THREADS-SAME: parent_task_id=[[IMPLICIT_TASK_ID]], 112// THREADS-SAME: parent_task_frame.exit=[[EXIT]],113// THREADS-SAME: parent_task_frame.reenter={{(0x)?[0-f]+}},114// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID:[0-f]+]], 115// THREADS-SAME: requested_team_size=2,116// THREADS-SAME: codeptr_ra=[[NESTED_RETURN_ADDRESS:(0x)?[0-f]+]]{{[0-f][0-f]}},117// THREADS-SAME: invoker=[[PARALLEL_INVOKER]]118 119// THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin:120// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]],121// THREADS-SAME: task_id=[[NESTED_IMPLICIT_TASK_ID:[0-f]+]], team_size=2, 122// THREADS-SAME: thread_num=0123 124// THREADS: __builtin_frame_address({{.}})=[[NESTED_EXIT:(0x)?[0-f]+]]125 126// THREADS: {{^}}[[MASTER_ID]]: task level 0:127// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]], 128// THREADS-SAME: task_id=[[NESTED_IMPLICIT_TASK_ID]],129// THREADS-SAME: exit_frame=[[NESTED_EXIT]], reenter_frame=[[NULL]], 130// THREADS-SAME: thread_num=0131 132// THREADS: {{^}}[[MASTER_ID]]: task level 1: parallel_id=[[PARALLEL_ID]],133// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[EXIT]],134// THREADS-SAME: reenter_frame={{(0x)?[0-f]+}}135 136// THREADS: {{^}}[[MASTER_ID]]: task level 2:137// THREADS-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID]], 138// THREADS-SAME: task_id=[[PARENT_TASK_ID]], exit_frame=[[NULL]], 139// THREADS-SAME: reenter_frame={{(0x)?[0-f]+}}140 141// THREADS: __builtin_frame_address(0)=[[NESTED_REENTER:(0x)?[0-f]+]]142 143// THREADS-NOT: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end144// explicit barrier145 146// THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_explicit_begin:147// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]],148// THREADS-SAME: task_id=[[NESTED_IMPLICIT_TASK_ID]],149// THREADS-SAME: codeptr_ra=[[BARRIER_RETURN_ADDRESS:(0x)?[0-f]+]]{{[0-f][0-f]}}150 151// THREADS: {{^}}[[MASTER_ID]]: task level 0:152// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]], 153// THREADS-SAME: task_id=[[NESTED_IMPLICIT_TASK_ID]],154// THREADS-SAME: exit_frame=[[NESTED_EXIT]], reenter_frame={{(0x)?[0-f]+}}155 156// THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_explicit_end:157// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]],158// THREADS-SAME: task_id=[[NESTED_IMPLICIT_TASK_ID]]159 160// THREADS: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[BARRIER_RETURN_ADDRESS]]161 162// THREADS: {{^}}[[MASTER_ID]]: task level 0:163// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]], 164// THREADS-SAME: task_id=[[NESTED_IMPLICIT_TASK_ID]],165// THREADS-SAME: exit_frame=[[NESTED_EXIT]], reenter_frame=[[NULL]]166 167// implicit barrier168// THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_implicit_parallel_begin:169// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]],170// THREADS-SAME: task_id=[[NESTED_IMPLICIT_TASK_ID]],171// THREADS-SAME: codeptr_ra=[[NESTED_RETURN_ADDRESS]]{{[0-f][0-f]}}172 173// THREADS: {{^}}[[MASTER_ID]]: task level 0:174// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]], 175// THREADS-SAME: task_id=[[NESTED_IMPLICIT_TASK_ID]],176// THREADS-SAME: exit_frame=[[NULL]], reenter_frame=[[NULL]]177 178// THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_implicit_parallel_end:179// THREADS-SAME: parallel_id={{[0-f]+}}, task_id=[[NESTED_IMPLICIT_TASK_ID]],180// THREADS-SAME: codeptr_ra=[[NESTED_RETURN_ADDRESS]]{{[0-f][0-f]}}181 182// THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end:183// THREADS-SAME: parallel_id={{[0-f]+}}, task_id=[[NESTED_IMPLICIT_TASK_ID]]184 185// THREADS: {{^}}[[MASTER_ID]]: ompt_event_parallel_end:186// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]], 187// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID]],188// THREADS-SAME: invoker=[[PARALLEL_INVOKER]],189// THREADS-SAME: codeptr_ra=[[NESTED_RETURN_ADDRESS]]{{[0-f][0-f]}}190 191// THREADS: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[NESTED_RETURN_ADDRESS]]192 193// THREADS-NOT: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end194 195// THREADS: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]],196// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[EXIT]], 197// THREADS-SAME: reenter_frame=[[NULL]]198 199// implicit barrier200// THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_implicit_parallel_begin:201// THREADS-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]],202// THREADS-SAME: codeptr_ra=[[RETURN_ADDRESS]]{{[0-f][0-f]}}203 204// THREADS: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]],205// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[NULL]], 206// THREADS-SAME: reenter_frame=[[NULL]]207 208// THREADS: {{^}}[[MASTER_ID]]: ompt_event_barrier_implicit_parallel_end:209// THREADS-SAME: parallel_id={{[0-f]+}}, task_id=[[IMPLICIT_TASK_ID]],210// THREADS-SAME: codeptr_ra=[[RETURN_ADDRESS]]{{[0-f][0-f]}}211 212// THREADS: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end:213// THREADS-SAME: parallel_id={{[0-f]+}}, task_id=[[IMPLICIT_TASK_ID]]214 215// THREADS: {{^}}[[MASTER_ID]]: ompt_event_parallel_end:216// THREADS-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[PARENT_TASK_ID]],217// THREADS-SAME: invoker=[[PARALLEL_INVOKER]], 218// THREADS-SAME: codeptr_ra=[[RETURN_ADDRESS]]{{[0-f][0-f]}}219 220// THREADS: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS]]221 222// Worker of first nesting level223 224// THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin:225// THREADS-SAME: parallel_id=[[PARALLEL_ID]], 226// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID:[0-f]+]], team_size=2, 227// THREADS-SAME: thread_num=[[OUTER_THREADNUM:[0-9]+]]228 229// THREADS: {{^}}[[THREAD_ID]]: task level 0: parallel_id=[[PARALLEL_ID]],230// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID]], 231// THREADS-SAME: thread_num=[[OUTER_THREADNUM]]232 233// THREADS: {{^}}[[THREAD_ID]]: task level 1:234// THREADS-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID]], 235// THREADS-SAME: task_id=[[PARENT_TASK_ID]]236 237// THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_begin:238// THREADS-SAME: parent_task_id=[[IMPLICIT_TASK_ID]], 239// THREADS-SAME: parent_task_frame.exit={{(0x)?[0-f]+}},240// THREADS-SAME: parent_task_frame.reenter={{(0x)?[0-f]+}},241// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID:[0-f]+]], requested_team_size=2,242// THREADS-SAME: codeptr_ra=[[NESTED_RETURN_ADDRESS]]{{[0-f][0-f]}},243// THREADS-SAME: invoker=[[PARALLEL_INVOKER]]244 245// THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_begin:246// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]],247// THREADS-SAME: task_id=[[NESTED_IMPLICIT_TASK_ID:[0-f]+]], team_size=2,248// THREADS-SAME: thread_num=[[INNER_THREADNUM:[0-9]+]]249 250// THREADS: {{^}}[[THREAD_ID]]: task level 0:251// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]], 252// THREADS-SAME: task_id=[[NESTED_IMPLICIT_TASK_ID]],253// THREADS-SAME: thread_num=[[INNER_THREADNUM]]254 255// THREADS: {{^}}[[THREAD_ID]]: task level 1: parallel_id=[[PARALLEL_ID]],256// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID]], 257// THREADS-SAME: thread_num=[[OUTER_THREADNUM]]258 259// THREADS: {{^}}[[THREAD_ID]]: task level 2:260// THREADS-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID]], 261// THREADS-SAME: task_id=[[PARENT_TASK_ID]]262 263// THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end264 265// THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_implicit_parallel_begin:266// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]],267// THREADS-SAME: task_id=[[NESTED_IMPLICIT_TASK_ID]]268 269// THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_implicit_parallel_end:270// THREADS-SAME: parallel_id={{[0-f]+}}, task_id=[[NESTED_IMPLICIT_TASK_ID]]271 272// THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end:273// THREADS-SAME: parallel_id={{[0-f]+}}, task_id=[[NESTED_IMPLICIT_TASK_ID]]274 275// THREADS: {{^}}[[THREAD_ID]]: ompt_event_parallel_end:276// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]], 277// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID]], invoker=[[PARALLEL_INVOKER]]278 279// THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end280 281// THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_implicit_parallel_begin:282// THREADS-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]283 284// THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_implicit_parallel_end:285// THREADS-SAME: parallel_id={{[0-f]+}}, task_id=[[IMPLICIT_TASK_ID]]286 287// THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end:288// THREADS-SAME: parallel_id={{[0-f]+}}, task_id=[[IMPLICIT_TASK_ID]]289 290// nested parallel worker threads291 292// THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin:293// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID:[0-f]+]],294// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID:[0-f]+]]295// THREADS-SAME: thread_num=[[THREADNUM:[0-9]+]]296 297// THREADS: {{^}}[[THREAD_ID]]: task level 0:298// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]], 299// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID]]300// THREADS-SAME: thread_num=[[THREADNUM]]301 302// can't reliably tell which parallel region is the parent...303 304// THREADS: {{^}}[[THREAD_ID]]: task level 1: parallel_id={{[0-f]+}},305// THREADS-SAME: task_id={{[0-f]+}}306// THREADS-SAME: thread_num={{[01]}}307 308// THREADS: {{^}}[[THREAD_ID]]: task level 2:309// THREADS-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID]], 310// THREADS-SAME: task_id=[[PARENT_TASK_ID]]311// THREADS-SAME: thread_num=0312 313// THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end314 315// THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_implicit_parallel_begin:316// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]],317// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID]]318 319// THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_implicit_parallel_end:320// THREADS-SAME: parallel_id={{[0-f]+}}, task_id=[[IMPLICIT_TASK_ID]]321 322// THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end:323// THREADS-SAME: parallel_id={{[0-f]+}}, task_id=[[IMPLICIT_TASK_ID]]324 325// other nested parallel worker threads326 327// THREADS: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin:328// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID:[0-f]+]],329// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID:[0-f]+]]330// THREADS-SAME: thread_num=[[THREADNUM:[0-9]+]]331 332// THREADS: {{^}}[[THREAD_ID]]: task level 0:333// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]], 334// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID]]335// THREADS-SAME: thread_num=[[THREADNUM]]336 337// can't reliably tell which parallel region is the parent...338 339// THREADS: {{^}}[[THREAD_ID]]: task level 1: parallel_id={{[0-f]+}},340// THREADS-SAME: task_id={{[0-f]+}}341// THREADS-SAME: thread_num={{[01]}}342 343// THREADS: {{^}}[[THREAD_ID]]: task level 2:344// THREADS-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID]], 345// THREADS-SAME: task_id=[[PARENT_TASK_ID]]346// THREADS-SAME: thread_num=0347 348// THREADS-NOT: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end349 350// THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_implicit_parallel_begin:351// THREADS-SAME: parallel_id=[[NESTED_PARALLEL_ID]],352// THREADS-SAME: task_id=[[IMPLICIT_TASK_ID]]353 354// THREADS: {{^}}[[THREAD_ID]]: ompt_event_barrier_implicit_parallel_end:355// THREADS-SAME: parallel_id={{[0-f]+}}, task_id=[[IMPLICIT_TASK_ID]]356 357// THREADS: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end:358// THREADS-SAME: parallel_id={{[0-f]+}}, task_id=[[IMPLICIT_TASK_ID]]359// clang-format on360