[Openmp-commits] [openmp] ba02586 - [OpenMP][OMPT][GOMP] task frame support in KMP_API_NAME_GOMP_PARALLEL_SECTIONS
Jonathan Peyton via Openmp-commits
openmp-commits at lists.llvm.org
Fri Oct 22 09:02:06 PDT 2021
Author: Vladimir Inđić
Date: 2021-10-22T11:01:10-05:00
New Revision: ba02586fbe188c4d66dcce72bc0c39e852228cb0
URL: https://github.com/llvm/llvm-project/commit/ba02586fbe188c4d66dcce72bc0c39e852228cb0
DIFF: https://github.com/llvm/llvm-project/commit/ba02586fbe188c4d66dcce72bc0c39e852228cb0.diff
LOG: [OpenMP][OMPT][GOMP] task frame support in KMP_API_NAME_GOMP_PARALLEL_SECTIONS
KMP_API_NAME_GOMP_PARALLEL_SECTIONS function was missing the task frame support.
This patch introduced a fix responsible to set properly the exit_frame of
the innermost implicit task that corresponds to the parallel section construct,
as well as the enter_frame of the task that encloses the mentioned implicit task.
This patch also introduced a simple test case sections_serialized.c that contains
serialized parallel section construct and validates whether the mentioned
task frames are set correctly.
Differential Revision: https://reviews.llvm.org/D112205
Added:
openmp/runtime/test/ompt/worksharing/taskinfo/sections_serialized.c
Modified:
openmp/runtime/src/kmp_gsupport.cpp
Removed:
################################################################################
diff --git a/openmp/runtime/src/kmp_gsupport.cpp b/openmp/runtime/src/kmp_gsupport.cpp
index d800a5184d008..d77d4809a7e95 100644
--- a/openmp/runtime/src/kmp_gsupport.cpp
+++ b/openmp/runtime/src/kmp_gsupport.cpp
@@ -1522,6 +1522,13 @@ void KMP_EXPAND_NAME(KMP_API_NAME_GOMP_PARALLEL_SECTIONS)(void (*task)(void *),
KA_TRACE(20, ("GOMP_parallel_sections: T#%d\n", gtid));
#if OMPT_SUPPORT
+ ompt_frame_t *task_frame;
+ kmp_info_t *thr;
+ if (ompt_enabled.enabled) {
+ thr = __kmp_threads[gtid];
+ task_frame = &(thr->th.th_current_task->ompt_task_info.frame);
+ task_frame->enter_frame.ptr = OMPT_GET_FRAME_ADDRESS(0);
+ }
OMPT_STORE_RETURN_ADDRESS(gtid);
#endif
@@ -1537,9 +1544,31 @@ void KMP_EXPAND_NAME(KMP_API_NAME_GOMP_PARALLEL_SECTIONS)(void (*task)(void *),
KMP_DISPATCH_INIT(&loc, gtid, kmp_nm_dynamic_chunked, 1, count, 1, 1, TRUE);
}
+
+#if OMPT_SUPPORT
+ ompt_frame_t *child_frame;
+ if (ompt_enabled.enabled) {
+ child_frame = &(thr->th.th_current_task->ompt_task_info.frame);
+ child_frame->exit_frame.ptr = OMPT_GET_FRAME_ADDRESS(0);
+ }
+#endif
+
task(data);
+
+#if OMPT_SUPPORT
+ if (ompt_enabled.enabled) {
+ child_frame->exit_frame = ompt_data_none;
+ }
+#endif
+
KMP_EXPAND_NAME(KMP_API_NAME_GOMP_PARALLEL_END)();
KA_TRACE(20, ("GOMP_parallel_sections exit: T#%d\n", gtid));
+
+#if OMPT_SUPPORT
+ if (ompt_enabled.enabled) {
+ task_frame->enter_frame = ompt_data_none;
+ }
+#endif
}
#define PARALLEL_LOOP(func, schedule, ompt_pre, ompt_post) \
diff --git a/openmp/runtime/test/ompt/worksharing/taskinfo/sections_serialized.c b/openmp/runtime/test/ompt/worksharing/taskinfo/sections_serialized.c
new file mode 100644
index 0000000000000..9e4415b5a55b9
--- /dev/null
+++ b/openmp/runtime/test/ompt/worksharing/taskinfo/sections_serialized.c
@@ -0,0 +1,48 @@
+// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %s
+// REQUIRES: ompt
+
+#include "callback.h"
+#include <omp.h>
+
+int main()
+{
+#pragma omp parallel sections num_threads(1)
+ {
+#pragma omp section
+ {
+ // implicit task info
+ print_ids(0);
+ // initial task info
+ print_ids(1);
+ }
+ }
+
+ // Check if libomp supports the callbacks for this test.
+ // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_task_create'
+ // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_implicit_task'
+
+
+ // CHECK: {{^}}0: NULL_POINTER=[[NULL:.*$]]
+ // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_initial_task_begin: parallel_id=[[INITIAL_PARALLEL_ID:[0-9]+]], task_id=[[INITIAL_TASK_ID:[0-9]+]], actual_parallelism=1, index=1, flags=1
+
+ // region 0
+ // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_parallel_begin
+ // CHECK-SAME: parent_task_frame.exit=[[NULL]], parent_task_frame.reenter=[[INITIAL_TASK_FRAME_ENTER:0x[0-f]+]],
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID:[0-9]+]]
+
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[TASK_ID:[0-9]+]]
+
+ // information about implicit task (exit frame should be set, while enter should be NULL)
+ // CHECK: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]], task_id=[[TASK_ID]]
+ // CHECK-SAME: exit_frame={{0x[0-f]+}}
+ // CHECK-SAME: reenter_frame=[[NULL]]
+ // CHECK-SAME: task_type=ompt_task_implicit
+
+ // information about initial task (exit frame should be NULL, while enter frame shoule be set)
+ // CHECK: {{^}}[[MASTER_ID]]: task level 1: parallel_id=[[INITIAL_PARALLEL_ID]], task_id=[[INITIAL_TASK_ID]]
+ // CHECK-SAME: exit_frame=[[NULL]]
+ // CHECK-SAME: reenter_frame=[[INITIAL_TASK_FRAME_ENTER]]
+ // CHECK-SAME: task_type=ompt_task_initial
+
+ return 0;
+}
More information about the Openmp-commits
mailing list