1 // RUN: %libomp-compile-and-run | FileCheck %s 2 // RUN: %libomp-compile-and-run | FileCheck --check-prefix=TASKS %s 3 // REQUIRES: ompt 4 5 // These compilers don't support the taskloop construct 6 // UNSUPPORTED: gcc-4, gcc-5, icc-16 7 // GCC 6 has support for taskloops, but at least 6.3.0 is crashing on this test 8 // UNSUPPORTED: gcc-6 9 10 #include "callback.h" 11 #include <omp.h> 12 13 int main() { 14 unsigned int i, x; 15 16 #pragma omp parallel num_threads(2) 17 { 18 #pragma omp barrier 19 20 #pragma omp master 21 #pragma omp taskloop 22 for (i = 0; i < 5; i += 3) { 23 x++; 24 } 25 } 26 // CHECK: 0: NULL_POINTER=[[NULL:.*$]] 27 28 // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_parallel_begin: 29 // CHECK-SAME: parent_task_id={{[0-9]+}} 30 // CHECK-SAME: parallel_id=[[PARALLEL_ID:[0-9]+]] 31 // CHECK-SAME: requested_team_size=2 32 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: 33 // CHECK-SAME: parallel_id=[[PARALLEL_ID]] 34 // CHECK-SAME: task_id=[[IMPLICIT_TASK_ID1:[0-9]+]] 35 // CHECK-SAME: team_size=2, thread_num=0 36 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_taskgroup_begin: 37 // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID1]] 38 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_taskloop_begin: 39 // CHECK-SAME: parallel_id=[[PARALLEL_ID]] 40 // CHECK-SAME: parent_task_id=[[IMPLICIT_TASK_ID1]] 41 // CHECK-SAME: codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]], count=2 42 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_create: 43 // CHECK-SAME: parent_task_id=[[IMPLICIT_TASK_ID1]] 44 // CHECK-SAME: new_task_id=[[TASK_ID1:[0-9]+]] 45 // CHECK-SAME: codeptr_ra=[[RETURN_ADDRESS]] 46 // CHECK-SAME: task_type=ompt_task_explicit=4 47 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_create: 48 // CHECK-SAME: parent_task_id=[[IMPLICIT_TASK_ID1]] 49 // CHECK-SAME: new_task_id=[[TASK_ID2:[0-9]+]] 50 // CHECK-SAME: codeptr_ra=[[RETURN_ADDRESS]] 51 // CHECK-SAME: task_type=ompt_task_explicit=4 52 // CHECK-NOT: {{^}}[[MASTER_ID]]: ompt_event_task_create: 53 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_taskloop_end: 54 // CHECK-SAME: parallel_id=[[PARALLEL_ID]] 55 // CHECK-SAME: parent_task_id=[[IMPLICIT_TASK_ID1]] 56 // CHECK-SAME: count=2 57 // CHECK-DAG: {{^}}[[MASTER_ID]]: ompt_event_wait_taskgroup_begin: 58 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_wait_taskgroup_end: 59 // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID1]] 60 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_taskgroup_end: 61 // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID1]] 62 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end: parallel_id=0 63 // CHECK-SAME: task_id=[[IMPLICIT_TASK_ID1]], team_size=2, thread_num=0 64 // CHECK: {{^}}[[MASTER_ID]]: ompt_event_parallel_end: 65 // CHECK-SAME: parallel_id=[[PARALLEL_ID]] 66 67 // TASKS: ompt_event_task_create:{{.*}} new_task_id={{[0-9]+}} 68 // TASKS-SAME: task_type=ompt_task_initial 69 // TASKS: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_taskloop_begin: 70 // TASKS: ompt_event_task_create:{{.*}} new_task_id=[[TASK_ID1:[0-9]+]] 71 // TASKS-SAME: task_type=ompt_task_explicit 72 // TASKS-DAG: ompt_event_task_create:{{.*}} new_task_id=[[TASK_ID2:[0-9]+]] 73 // Schedule events: 74 // TASKS-DAG: {{^.*}}first_task_id={{[0-9]+}}, second_task_id=[[TASK_ID1]] 75 // TASKS-DAG: {{^.*}}first_task_id=[[TASK_ID1]], second_task_id={{[0-9]+}} 76 // TASKS-DAG: {{^.*}}first_task_id={{[0-9]+}}, second_task_id=[[TASK_ID2]] 77 // TASKS-DAG: {{^.*}}first_task_id=[[TASK_ID2]], second_task_id={{[0-9]+}} 78 // TASKS-NOT: ompt_event_task_schedule 79 80 return 0; 81 } 82