Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[OMPT] Fix ompt_get_task_info() and add tests for it
The thread_num parameter of ompt_get_task_info() was not being used previously, but need to be set. The print_task_type() function (form the task-types.c testcase) was merged into the print_ids() function (in callback.h). Testing of ompt_get_task_info() was added to the task-types.c testcase. It was not tested extensively previously. Differential Revision: https://reviews.llvm.org/D42472 llvm-svn: 326338
- Loading branch information
Showing
3 changed files
with
182 additions
and
88 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,112 +1,190 @@ | ||
// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %s | ||
// RUN: %libomp-compile-and-run | FileCheck %s | ||
// REQUIRES: ompt | ||
#include "callback.h" | ||
#include <omp.h> | ||
#include <math.h> | ||
|
||
__attribute__ ((noinline)) // workaround for bug in icc | ||
void print_task_type(int id) | ||
{ | ||
#pragma omp critical | ||
{ | ||
int task_type; | ||
char buffer[2048]; | ||
ompt_get_task_info(0, &task_type, NULL, NULL, NULL, NULL); | ||
format_task_type(task_type, buffer); | ||
printf("%" PRIu64 ": id=%d task_type=%s=%d\n", ompt_get_thread_data()->value, id, buffer, task_type); | ||
} | ||
}; | ||
|
||
int main() | ||
{ | ||
//initial task | ||
print_task_type(0); | ||
int main() { | ||
// initial task | ||
print_ids(0); | ||
|
||
int x; | ||
//implicit task | ||
#pragma omp parallel num_threads(1) | ||
// implicit task | ||
#pragma omp parallel num_threads(1) | ||
{ | ||
print_task_type(1); | ||
print_ids(0); | ||
x++; | ||
} | ||
|
||
#pragma omp parallel num_threads(2) | ||
#pragma omp master | ||
#pragma omp parallel num_threads(2) | ||
{ | ||
//explicit task | ||
#pragma omp task | ||
// explicit task | ||
#pragma omp single | ||
#pragma omp task | ||
{ | ||
print_task_type(2); | ||
print_ids(0); | ||
x++; | ||
} | ||
|
||
//explicit task with undeferred | ||
#pragma omp task if(0) | ||
// explicit task with undeferred | ||
#pragma omp single | ||
#pragma omp task if (0) | ||
{ | ||
print_task_type(3); | ||
print_ids(0); | ||
x++; | ||
} | ||
|
||
//explicit task with untied | ||
#pragma omp task untied | ||
// explicit task with untied | ||
#pragma omp single | ||
#pragma omp task untied | ||
{ | ||
print_task_type(4); | ||
// Output of thread_id is needed to know on which thread task is executed | ||
printf("%" PRIu64 ": explicit_untied\n", ompt_get_thread_data()->value); | ||
print_ids(0); | ||
x++; | ||
} | ||
|
||
//explicit task with final | ||
#pragma omp task final(1) | ||
// explicit task with final | ||
#pragma omp single | ||
#pragma omp task final(1) | ||
{ | ||
print_task_type(5); | ||
print_ids(0); | ||
x++; | ||
//nested explicit task with final and undeferred | ||
#pragma omp task | ||
// nested explicit task with final and undeferred | ||
#pragma omp task | ||
{ | ||
print_task_type(6); | ||
print_ids(0); | ||
x++; | ||
} | ||
} | ||
|
||
//Mergeable task test deactivated for now | ||
//explicit task with mergeable | ||
// Mergeable task test deactivated for now | ||
// explicit task with mergeable | ||
/* | ||
#pragma omp task mergeable if((int)sin(0)) | ||
{ | ||
print_task_type(7); | ||
print_ids(0); | ||
x++; | ||
} | ||
*/ | ||
|
||
//TODO: merged task | ||
// TODO: merged task | ||
} | ||
|
||
|
||
|
||
// Check if libomp supports the callbacks for this test. | ||
// CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_task_create' | ||
|
||
|
||
// CHECK: {{^}}0: NULL_POINTER=[[NULL:.*$]] | ||
|
||
// CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_task_create: parent_task_id=0, parent_task_frame.exit=[[NULL]], parent_task_frame.reenter=[[NULL]], new_task_id={{[0-9]+}}, codeptr_ra=[[NULL]], task_type=ompt_task_initial=1, has_dependences=no | ||
// CHECK-NOT: 0: parallel_data initially not null | ||
// CHECK: {{^}}[[MASTER_ID]]: id=0 task_type=ompt_task_initial=1 | ||
// CHECK: {{^}}[[MASTER_ID]]: id=1 task_type=ompt_task_implicit|ompt_task_undeferred=134217730 | ||
|
||
// CHECK-DAG: {{^[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit={{0x[0-f]+}}, parent_task_frame.reenter={{0x[0-f]+}}, new_task_id={{[0-9]+}}, codeptr_ra={{0x[0-f]+}}, task_type=ompt_task_explicit=4, has_dependences=no | ||
// CHECK-DAG: {{^[0-9]+}}: id=2 task_type=ompt_task_explicit=4 | ||
// CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_task_create: parent_task_id=0 | ||
// CHECK-SAME: parent_task_frame.exit=[[NULL]] | ||
// CHECK-SAME: parent_task_frame.reenter=[[NULL]] | ||
// CHECK-SAME: new_task_id=[[INITIAL_TASK_ID:[0-9]+]], codeptr_ra=[[NULL]] | ||
// CHECK-SAME: task_type=ompt_task_initial=1, has_dependences=no | ||
|
||
// CHECK-DAG: {{^[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit={{0x[0-f]+}}, parent_task_frame.reenter={{0x[0-f]+}}, new_task_id={{[0-9]+}}, codeptr_ra={{0x[0-f]+}}, task_type=ompt_task_explicit|ompt_task_undeferred=134217732, has_dependences=no | ||
// CHECK-DAG: {{^[0-9]+}}: id=3 task_type=ompt_task_explicit|ompt_task_undeferred=134217732 | ||
|
||
// CHECK-DAG: {{^[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit={{0x[0-f]+}}, parent_task_frame.reenter={{0x[0-f]+}}, new_task_id={{[0-9]+}}, codeptr_ra={{0x[0-f]+}}, task_type=ompt_task_explicit|ompt_task_untied=268435460, has_dependences=no | ||
// CHECK-DAG: {{^[0-9]+}}: id=4 task_type=ompt_task_explicit|ompt_task_untied=268435460 | ||
|
||
// CHECK-DAG: {{^[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit={{0x[0-f]+}}, parent_task_frame.reenter={{0x[0-f]+}}, new_task_id={{[0-9]+}}, codeptr_ra={{0x[0-f]+}}, task_type=ompt_task_explicit|ompt_task_final=536870916, has_dependences=no | ||
// CHECK-DAG: {{^[0-9]+}}: id=5 task_type=ompt_task_explicit|ompt_task_final=536870916 | ||
// CHECK-NOT: 0: parallel_data initially not null | ||
|
||
// CHECK-DAG: {{^[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit={{0x[0-f]+}}, parent_task_frame.reenter={{0x[0-f]+}}, new_task_id={{[0-9]+}}, codeptr_ra={{0x[0-f]+}}, task_type=ompt_task_explicit|ompt_task_undeferred|ompt_task_final=671088644, has_dependences=no | ||
// CHECK-DAG: {{^[0-9]+}}: id=6 task_type=ompt_task_explicit|ompt_task_undeferred|ompt_task_final=671088644 | ||
// initial task | ||
// CHECK: {{^}}[[MASTER_ID]]: task level 0: parallel_id={{[0-9]+}} | ||
// CHECK-SAME: task_id=[[INITIAL_TASK_ID]], exit_frame=[[NULL]] | ||
// CHECK-SAME: reenter_frame=[[NULL]] | ||
// CHECK-SAME: task_type=ompt_task_initial=1, thread_num=0 | ||
|
||
// implicit task | ||
// CHECK: {{^}}[[MASTER_ID]]: task level 0: parallel_id={{[0-9]+}} | ||
// CHECK-SAME: task_id={{[0-9]+}}, exit_frame={{0x[0-f]+}} | ||
// CHECK-SAME: reenter_frame=[[NULL]] | ||
// CHECK-SAME: task_type=ompt_task_implicit|ompt_task_undeferred=134217730 | ||
// CHECK-SAME: thread_num=0 | ||
|
||
// explicit task | ||
// CHECK: {{^[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}} | ||
// CHECK-SAME: parent_task_frame.exit={{0x[0-f]+}} | ||
// CHECK-SAME: parent_task_frame.reenter={{0x[0-f]+}} | ||
// CHECK-SAME: new_task_id=[[EXPLICIT_TASK_ID:[0-9]+]] | ||
// CHECK-SAME: codeptr_ra={{0x[0-f]+}} | ||
// CHECK-SAME: task_type=ompt_task_explicit=4 | ||
// CHECK-SAME: has_dependences=no | ||
|
||
// CHECK: [[THREAD_ID_1:[0-9]+]]: ompt_event_task_schedule: | ||
// CHECK-SAME: second_task_id=[[EXPLICIT_TASK_ID]] | ||
|
||
// CHECK: [[THREAD_ID_1]]: task level 0: parallel_id=[[PARALLEL_ID:[0-9]+]] | ||
// CHECK-SAME: task_id=[[EXPLICIT_TASK_ID]], exit_frame={{0x[0-f]+}} | ||
// CHECK-SAME: reenter_frame=[[NULL]], task_type=ompt_task_explicit=4 | ||
// CHECK-SAME: thread_num={{[01]}} | ||
|
||
// explicit task with undeferred | ||
// CHECK: {{^[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}} | ||
// CHECK-SAME: parent_task_frame.exit={{0x[0-f]+}} | ||
// CHECK-SAME: parent_task_frame.reenter={{0x[0-f]+}} | ||
// CHECK-SAME: new_task_id=[[EXPLICIT_UNDEFERRED_TASK_ID:[0-9]+]] | ||
// CHECK-SAME: codeptr_ra={{0x[0-f]+}} | ||
// CHECK-SAME: task_type=ompt_task_explicit|ompt_task_undeferred=134217732 | ||
// CHECK-SAME: has_dependences=no | ||
|
||
// CHECK: [[THREAD_ID_2:[0-9]+]]: ompt_event_task_schedule: | ||
// CHECK-SAME: second_task_id=[[EXPLICIT_UNDEFERRED_TASK_ID]] | ||
|
||
// CHECK: [[THREAD_ID_2]]: task level 0: parallel_id=[[PARALLEL_ID]] | ||
// CHECK-SAME: task_id=[[EXPLICIT_UNDEFERRED_TASK_ID]] | ||
// CHECK-SAME: exit_frame={{0x[0-f]+}}, reenter_frame=[[NULL]] | ||
// CHECK-SAME: task_type=ompt_task_explicit|ompt_task_undeferred=134217732 | ||
// CHECK-SAME: thread_num={{[01]}} | ||
|
||
// explicit task with untied | ||
// CHECK: {{^[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}} | ||
// CHECK-SAME: parent_task_frame.exit={{0x[0-f]+}} | ||
// CHECK-SAME: parent_task_frame.reenter={{0x[0-f]+}} | ||
// CHECK-SAME: new_task_id=[[EXPLICIT_UNTIED_TASK_ID:[0-9]+]] | ||
// CHECK-SAME: codeptr_ra={{0x[0-f]+}} | ||
// CHECK-SAME: task_type=ompt_task_explicit|ompt_task_untied=268435460 | ||
// CHECK-SAME: has_dependences=no | ||
|
||
// Here the thread_id cannot be taken from a schedule event as there | ||
// may be multiple of those | ||
// CHECK: [[THREAD_ID_3:[0-9]+]]: explicit_untied | ||
// CHECK: [[THREAD_ID_3]]: task level 0: parallel_id=[[PARALLEL_ID]] | ||
// CHECK-SAME: task_id=[[EXPLICIT_UNTIED_TASK_ID]], exit_frame={{[^\,]*}} | ||
// CHECK-SAME: reenter_frame=[[NULL]] | ||
// CHECK-SAME: task_type=ompt_task_explicit|ompt_task_untied=268435460 | ||
// CHECK-SAME: thread_num={{[01]}} | ||
|
||
// explicit task with final | ||
// CHECK: {{^[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}} | ||
// CHECK-SAME: parent_task_frame.exit={{0x[0-f]+}} | ||
// CHECK-SAME: parent_task_frame.reenter={{0x[0-f]+}} | ||
// CHECK-SAME: new_task_id=[[EXPLICIT_FINAL_TASK_ID:[0-9]+]] | ||
// CHECK-SAME: codeptr_ra={{0x[0-f]+}} | ||
// CHECK-SAME: task_type=ompt_task_explicit|ompt_task_final=536870916 | ||
// CHECK-SAME: has_dependences=no | ||
|
||
// CHECK: [[THREAD_ID_4:[0-9]+]]: ompt_event_task_schedule: | ||
// CHECK-SAME: second_task_id=[[EXPLICIT_FINAL_TASK_ID]] | ||
|
||
// CHECK: [[THREAD_ID_4]]: task level 0: parallel_id=[[PARALLEL_ID]] | ||
// CHECK-SAME: task_id=[[EXPLICIT_FINAL_TASK_ID]] | ||
// CHECK-SAME: exit_frame={{0x[0-f]+}}, reenter_frame=[[NULL]] | ||
// CHECK-SAME: task_type=ompt_task_explicit|ompt_task_final=536870916 | ||
// CHECK-SAME: thread_num={{[01]}} | ||
|
||
// nested explicit task with final and undeferred | ||
// CHECK: {{^[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}} | ||
// CHECK-SAME: parent_task_frame.exit={{0x[0-f]+}} | ||
// CHECK-SAME: parent_task_frame.reenter={{0x[0-f]+}} | ||
// CHECK-SAME: new_task_id=[[NESTED_FINAL_UNDEFERRED_TASK_ID:[0-9]+]] | ||
// CHECK-SAME: codeptr_ra={{0x[0-f]+}} | ||
// CHECK-SAME: task_type=ompt_task_explicit|ompt_task_undeferred | ||
// CHECK-SAME:|ompt_task_final=671088644 | ||
// CHECK-SAME: has_dependences=no | ||
|
||
// CHECK: [[THREAD_ID_5:[0-9]+]]: ompt_event_task_schedule: | ||
// CHECK-SAME: second_task_id=[[NESTED_FINAL_UNDEFERRED_TASK_ID]] | ||
|
||
// CHECK: [[THREAD_ID_5]]: task level 0: parallel_id=[[PARALLEL_ID]] | ||
// CHECK-SAME: task_id=[[NESTED_FINAL_UNDEFERRED_TASK_ID]] | ||
// CHECK-SAME: exit_frame={{0x[0-f]+}}, reenter_frame=[[NULL]] | ||
// CHECK-SAME: task_type=ompt_task_explicit|ompt_task_undeferred | ||
// CHECK-SAME:|ompt_task_final=671088644 | ||
// CHECK-SAME: thread_num={{[01]}} | ||
|
||
return 0; | ||
} |