1 // RUN: %libomp-cxx-compile-and-run | %sort-threads | FileCheck %s 2 // REQUIRES: ompt 3 4 #include <iostream> 5 #include <thread> 6 #include "callback.h" 7 int condition = 0; 8 void f() { 9 OMPT_SIGNAL(condition); 10 // wait for both pthreads to arrive 11 OMPT_WAIT(condition, 2); 12 int i = 0; 13 #pragma omp parallel num_threads(2) 14 { 15 OMPT_SIGNAL(condition); 16 OMPT_WAIT(condition, 6); 17 } 18 } 19 int main() { 20 std::thread t1(f); 21 std::thread t2(f); 22 t1.join(); 23 t2.join(); 24 } 25 26 // Check if libomp supports the callbacks for this test. 27 // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_task_create' 28 // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_task_schedule' 29 // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_parallel_begin' 30 // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_parallel_end' 31 // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_implicit_task' 32 // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_thread_begin' 33 34 // CHECK: 0: NULL_POINTER=[[NULL:.*$]] 35 36 // first master thread 37 // CHECK: {{^}}[[MASTER_ID_1:[0-9]+]]: ompt_event_thread_begin: 38 // CHECK-SAME: thread_type=ompt_thread_initial=1, thread_id=[[MASTER_ID_1]] 39 40 // CHECK: {{^}}[[MASTER_ID_1]]: ompt_event_task_create: parent_task_id=0 41 // CHECK-SAME: parent_task_frame.exit=[[NULL]] 42 // CHECK-SAME: parent_task_frame.reenter=[[NULL]] 43 // CHECK-SAME: new_task_id=[[PARENT_TASK_ID_1:[0-9]+]] 44 // CHECK-SAME: codeptr_ra=[[NULL]], task_type=ompt_task_initial=1 45 // CHECK-SAME: has_dependences=no 46 47 // CHECK: {{^}}[[MASTER_ID_1]]: ompt_event_parallel_begin: 48 // CHECK-SAME: parent_task_id=[[PARENT_TASK_ID_1]] 49 // CHECK-SAME: parent_task_frame.exit=[[NULL]] 50 // CHECK-SAME: parent_task_frame.reenter={{0x[0-f]+}} 51 // CHECK-SAME: parallel_id=[[PARALLEL_ID_1:[0-9]+]], requested_team_size=2 52 // CHECK-SAME: codeptr_ra=0x{{[0-f]+}}, invoker={{.*}} 53 54 // CHECK: {{^}}[[MASTER_ID_1]]: ompt_event_parallel_end: 55 // CHECK-SAME: parallel_id=[[PARALLEL_ID_1]], task_id=[[PARENT_TASK_ID_1]] 56 // CHECK-SAME: invoker={{[0-9]+}} 57 58 // CHECK: {{^}}[[MASTER_ID_1]]: ompt_event_thread_end: 59 // CHECK-SAME: thread_id=[[MASTER_ID_1]] 60 61 // second master thread 62 // CHECK: {{^}}[[MASTER_ID_2:[0-9]+]]: ompt_event_thread_begin: 63 // CHECK-SAME: thread_type=ompt_thread_initial=1, thread_id=[[MASTER_ID_2]] 64 65 // CHECK: {{^}}[[MASTER_ID_2]]: ompt_event_task_create: parent_task_id=0 66 // CHECK-SAME: parent_task_frame.exit=[[NULL]] 67 // CHECK-SAME: parent_task_frame.reenter=[[NULL]] 68 // CHECK-SAME: new_task_id=[[PARENT_TASK_ID_2:[0-9]+]] 69 // CHECK-SAME: codeptr_ra=[[NULL]], task_type=ompt_task_initial=1 70 // CHECK-SAME: has_dependences=no 71 72 // CHECK: {{^}}[[MASTER_ID_2]]: ompt_event_parallel_begin: 73 // CHECK-SAME: parent_task_id=[[PARENT_TASK_ID_2]] 74 // CHECK-SAME: parent_task_frame.exit=[[NULL]] 75 // CHECK-SAME: parent_task_frame.reenter={{0x[0-f]+}} 76 // CHECK-SAME: parallel_id=[[PARALLEL_ID_2:[0-9]+]] 77 // CHECK-SAME: requested_team_size=2, codeptr_ra=0x{{[0-f]+}} 78 // CHECK-SAME: invoker={{.*}} 79 80 // CHECK: {{^}}[[MASTER_ID_2]]: ompt_event_parallel_end: 81 // CHECK-SAME: parallel_id=[[PARALLEL_ID_2]], task_id=[[PARENT_TASK_ID_2]] 82 // CHECK-SAME: invoker={{[0-9]+}} 83 84 // CHECK: {{^}}[[MASTER_ID_2]]: ompt_event_thread_end: 85 // CHECK-SAME: thread_id=[[MASTER_ID_2]] 86 87 // first worker thread 88 // CHECK: {{^}}[[THREAD_ID_1:[0-9]+]]: ompt_event_thread_begin: 89 // CHECK-SAME: thread_type=ompt_thread_worker=2, thread_id=[[THREAD_ID_1]] 90 91 // CHECK: {{^}}[[THREAD_ID_1]]: ompt_event_thread_end: 92 // CHECK-SAME: thread_id=[[THREAD_ID_1]] 93 94 // second worker thread 95 // CHECK: {{^}}[[THREAD_ID_2:[0-9]+]]: ompt_event_thread_begin: 96 // CHECK-SAME: thread_type=ompt_thread_worker=2, thread_id=[[THREAD_ID_2]] 97 98 // CHECK: {{^}}[[THREAD_ID_2]]: ompt_event_thread_end: 99 // CHECK-SAME: thread_id=[[THREAD_ID_2]] 100