[Openmp-commits] [openmp] r321421 - [OMPT] Set and reset frame address when creating a task with dependences
Joachim Protze via Openmp-commits
openmp-commits at lists.llvm.org
Sat Dec 23 23:30:23 PST 2017
Author: jprotze
Date: Sat Dec 23 23:30:23 2017
New Revision: 321421
URL: http://llvm.org/viewvc/llvm-project?rev=321421&view=rev
Log:
[OMPT] Set and reset frame address when creating a task with dependences
As for normal task creation, the task frame addresses need to be stored
for the encountering task.
Differential Revision: https://reviews.llvm.org/D41165
Modified:
openmp/trunk/runtime/src/kmp_taskdeps.cpp
openmp/trunk/runtime/test/ompt/tasks/dependences.c
Modified: openmp/trunk/runtime/src/kmp_taskdeps.cpp
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/kmp_taskdeps.cpp?rev=321421&r1=321420&r2=321421&view=diff
==============================================================================
--- openmp/trunk/runtime/src/kmp_taskdeps.cpp (original)
+++ openmp/trunk/runtime/src/kmp_taskdeps.cpp Sat Dec 23 23:30:23 2017
@@ -475,15 +475,15 @@ kmp_int32 __kmpc_omp_task_with_deps(iden
kmp_taskdata_t *current_task = thread->th.th_current_task;
#if OMPT_SUPPORT
- OMPT_STORE_RETURN_ADDRESS(gtid);
-
if (ompt_enabled.enabled) {
+ OMPT_STORE_RETURN_ADDRESS(gtid);
+ if (!current_task->ompt_task_info.frame.enter_frame)
+ current_task->ompt_task_info.frame.enter_frame = OMPT_GET_FRAME_ADDRESS(1);
if (ompt_enabled.ompt_callback_task_create) {
- kmp_taskdata_t *parent = new_taskdata->td_parent;
ompt_data_t task_data = ompt_data_none;
ompt_callbacks.ompt_callback(ompt_callback_task_create)(
- parent ? &(parent->ompt_task_info.task_data) : &task_data,
- parent ? &(parent->ompt_task_info.frame) : NULL,
+ current_task ? &(current_task->ompt_task_info.task_data) : &task_data,
+ current_task ? &(current_task->ompt_task_info.frame) : NULL,
&(new_taskdata->ompt_task_info.task_data),
ompt_task_explicit | TASK_TYPE_DETAILS_FORMAT(new_taskdata), 1,
OMPT_LOAD_RETURN_ADDRESS(gtid));
@@ -574,6 +574,11 @@ kmp_int32 __kmpc_omp_task_with_deps(iden
"dependencies: "
"loc=%p task=%p, return: TASK_CURRENT_NOT_QUEUED\n",
gtid, loc_ref, new_taskdata));
+#if OMPT_SUPPORT
+ if (ompt_enabled.enabled) {
+ current_task->ompt_task_info.frame.enter_frame = NULL;
+ }
+#endif
return TASK_CURRENT_NOT_QUEUED;
}
} else {
@@ -588,7 +593,13 @@ kmp_int32 __kmpc_omp_task_with_deps(iden
"loc=%p task=%p, transferring to __kmpc_omp_task\n",
gtid, loc_ref, new_taskdata));
- return __kmp_omp_task(gtid, new_task, true);
+ kmp_int32 ret = __kmp_omp_task(gtid, new_task, true);
+#if OMPT_SUPPORT
+ if (ompt_enabled.enabled) {
+ current_task->ompt_task_info.frame.enter_frame = NULL;
+ }
+#endif
+ return ret;
}
/*!
Modified: openmp/trunk/runtime/test/ompt/tasks/dependences.c
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/test/ompt/tasks/dependences.c?rev=321421&r1=321420&r2=321421&view=diff
==============================================================================
--- openmp/trunk/runtime/test/ompt/tasks/dependences.c (original)
+++ openmp/trunk/runtime/test/ompt/tasks/dependences.c Sat Dec 23 23:30:23 2017
@@ -14,17 +14,20 @@ int main()
{
#pragma omp master
{
+ print_ids(0);
#pragma omp task depend(out:x)
{
x++;
delay(100);
}
print_fuzzy_address(1);
+ print_ids(0);
#pragma omp task depend(in:x)
{
x = -1;
}
+ print_ids(0);
}
}
@@ -41,13 +44,17 @@ int main()
// make sure initial data pointers are null
// CHECK-NOT: 0: new_task_data initially not null
- // CHECK: {{^}}{{[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit={{0x[0-f]+}}, parent_task_frame.reenter=[[NULL]], new_task_id=[[FIRST_TASK:[0-f]+]], codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]]{{[0-f][0-f]}}, task_type=ompt_task_explicit=4, has_dependences=yes
- // CHECK: {{^}}{{[0-9]+}}: ompt_event_task_dependences: task_id=[[FIRST_TASK]], deps={{0x[0-f]+}}, ndeps=1
- // CHECK: {{^}}{{[0-9]+}}: fuzzy_address={{.*}}[[RETURN_ADDRESS]]
-
- // CHECK: {{^}}{{[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit={{0x[0-f]+}}, parent_task_frame.reenter=[[NULL]], new_task_id=[[SECOND_TASK:[0-f]+]], codeptr_ra={{0x[0-f]+}}, task_type=ompt_task_explicit=4, has_dependences=yes
- // CHECK: {{^}}{{[0-9]+}}: ompt_event_task_dependences: task_id=[[SECOND_TASK]], deps={{0x[0-f]+}}, ndeps=1
- // CHECK: {{^}}{{[0-9]+}}: ompt_event_task_dependence_pair: first_task_id=[[FIRST_TASK]], second_task_id=[[SECOND_TASK]]
+ // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
+ // CHECK: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[EXIT:0x[0-f]+]], reenter_frame=[[NULL]]
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit=[[EXIT]], parent_task_frame.reenter={{0x[0-f]+}}, new_task_id=[[FIRST_TASK:[0-f]+]], codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]]{{[0-f][0-f]}}, task_type=ompt_task_explicit=4, has_dependences=yes
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_dependences: task_id=[[FIRST_TASK]], deps={{0x[0-f]+}}, ndeps=1
+ // CHECK: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS]]
+ // CHECK: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[EXIT]], reenter_frame=[[NULL]]
+
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit=[[EXIT]], parent_task_frame.reenter={{0x[0-f]+}}, new_task_id=[[SECOND_TASK:[0-f]+]], codeptr_ra={{0x[0-f]+}}, task_type=ompt_task_explicit=4, has_dependences=yes
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_dependences: task_id=[[SECOND_TASK]], deps={{0x[0-f]+}}, ndeps=1
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_dependence_pair: first_task_id=[[FIRST_TASK]], second_task_id=[[SECOND_TASK]]
+ // CHECK: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[EXIT]], reenter_frame=[[NULL]]
return 0;
More information about the Openmp-commits
mailing list