[Openmp-commits] [openmp] 2464f1c - [OpenMP][OMPT] Add missing callbacks for asynchronous target tasks (#93472)
via Openmp-commits
openmp-commits at lists.llvm.org
Tue Jun 4 08:07:19 PDT 2024
Author: Joachim
Date: 2024-06-04T17:07:15+02:00
New Revision: 2464f1cef3d28182da42debe6abf9bad8ab5a4d2
URL: https://github.com/llvm/llvm-project/commit/2464f1cef3d28182da42debe6abf9bad8ab5a4d2
DIFF: https://github.com/llvm/llvm-project/commit/2464f1cef3d28182da42debe6abf9bad8ab5a4d2.diff
LOG: [OpenMP][OMPT] Add missing callbacks for asynchronous target tasks (#93472)
- The first hidden-helper-thread did not trigger thread-begin
- The "detaching" from a target-task when waiting for completion missed
to call task-switch
- Target tasks identified themself as explicit task
Co-authored-by: Kaloyan Ignatov <kaloyan.ignatov at rwth-aachen.de>
Added:
Modified:
openmp/runtime/src/kmp.h
openmp/runtime/src/kmp_runtime.cpp
openmp/runtime/src/kmp_taskdeps.cpp
openmp/runtime/src/kmp_tasking.cpp
openmp/runtime/src/ompt-internal.h
openmp/runtime/src/ompt-specific.cpp
Removed:
################################################################################
diff --git a/openmp/runtime/src/kmp.h b/openmp/runtime/src/kmp.h
index 64a3ea6d5be5d..f625e84a93d43 100644
--- a/openmp/runtime/src/kmp.h
+++ b/openmp/runtime/src/kmp.h
@@ -2675,11 +2675,12 @@ typedef struct kmp_tasking_flags { /* Total struct must be exactly 32 bits */
#if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
/* Same fields as in the #else branch, but in reverse order */
#if OMPX_TASKGRAPH
- unsigned reserved31 : 6;
+ unsigned reserved31 : 5;
unsigned onced : 1;
#else
- unsigned reserved31 : 7;
+ unsigned reserved31 : 6;
#endif
+ unsigned target : 1;
unsigned native : 1;
unsigned freed : 1;
unsigned complete : 1;
@@ -2728,11 +2729,12 @@ typedef struct kmp_tasking_flags { /* Total struct must be exactly 32 bits */
unsigned complete : 1; /* 1==complete, 0==not complete */
unsigned freed : 1; /* 1==freed, 0==allocated */
unsigned native : 1; /* 1==gcc-compiled task, 0==intel */
+ unsigned target : 1;
#if OMPX_TASKGRAPH
unsigned onced : 1; /* 1==ran once already, 0==never ran, record & replay purposes */
- unsigned reserved31 : 6; /* reserved for library use */
+ unsigned reserved31 : 5; /* reserved for library use */
#else
- unsigned reserved31 : 7; /* reserved for library use */
+ unsigned reserved31 : 6; /* reserved for library use */
#endif
#endif
} kmp_tasking_flags_t;
diff --git a/openmp/runtime/src/kmp_runtime.cpp b/openmp/runtime/src/kmp_runtime.cpp
index 4be67f3b59873..74b44b5d4d9cc 100644
--- a/openmp/runtime/src/kmp_runtime.cpp
+++ b/openmp/runtime/src/kmp_runtime.cpp
@@ -3972,7 +3972,7 @@ int __kmp_register_root(int initial_thread) {
__kmp_root_counter++;
#if OMPT_SUPPORT
- if (!initial_thread && ompt_enabled.enabled) {
+ if (ompt_enabled.enabled) {
kmp_info_t *root_thread = ompt_get_thread();
diff --git a/openmp/runtime/src/kmp_taskdeps.cpp b/openmp/runtime/src/kmp_taskdeps.cpp
index e575ad8b08a55..39cf3496c5a18 100644
--- a/openmp/runtime/src/kmp_taskdeps.cpp
+++ b/openmp/runtime/src/kmp_taskdeps.cpp
@@ -739,7 +739,7 @@ kmp_int32 __kmpc_omp_task_with_deps(ident_t *loc_ref, kmp_int32 gtid,
&(current_task->ompt_task_info.task_data),
&(current_task->ompt_task_info.frame),
&(new_taskdata->ompt_task_info.task_data),
- ompt_task_explicit | TASK_TYPE_DETAILS_FORMAT(new_taskdata), 1,
+ TASK_TYPE_DETAILS_FORMAT(new_taskdata), 1,
OMPT_LOAD_OR_GET_RETURN_ADDRESS(gtid));
}
diff --git a/openmp/runtime/src/kmp_tasking.cpp b/openmp/runtime/src/kmp_tasking.cpp
index a78202749449e..936afb91ac2f8 100644
--- a/openmp/runtime/src/kmp_tasking.cpp
+++ b/openmp/runtime/src/kmp_tasking.cpp
@@ -811,8 +811,7 @@ static void __kmpc_omp_task_begin_if0_template(ident_t *loc_ref, kmp_int32 gtid,
ompt_callbacks.ompt_callback(ompt_callback_task_create)(
&(parent_info->task_data), &(parent_info->frame),
&(taskdata->ompt_task_info.task_data),
- ompt_task_explicit | TASK_TYPE_DETAILS_FORMAT(taskdata), 0,
- return_address);
+ TASK_TYPE_DETAILS_FORMAT(taskdata), 0, return_address);
}
__ompt_task_start(task, current_task, gtid);
}
@@ -1156,6 +1155,11 @@ static void __kmp_task_finish(kmp_int32 gtid, kmp_task_t *task,
// Note: no need to translate gtid to its shadow. If the current thread is a
// hidden helper one, then the gtid is already correct. Otherwise, hidden
// helper threads are disabled, and gtid refers to a OpenMP thread.
+#if OMPT_SUPPORT
+ if (ompt) {
+ __ompt_task_finish(task, resumed_task, ompt_task_switch);
+ }
+#endif
__kmpc_give_task(task, __kmp_tid_from_gtid(gtid));
if (KMP_HIDDEN_HELPER_THREAD(gtid))
__kmp_hidden_helper_worker_thread_signal();
@@ -1711,6 +1715,7 @@ kmp_task_t *__kmpc_omp_target_task_alloc(ident_t *loc_ref, kmp_int32 gtid,
auto &input_flags = reinterpret_cast<kmp_tasking_flags_t &>(flags);
// target task is untied defined in the specification
input_flags.tiedness = TASK_UNTIED;
+ input_flags.target = 1;
if (__kmp_enable_hidden_helper)
input_flags.hidden_helper = TRUE;
@@ -1942,6 +1947,11 @@ __kmp_invoke_task(kmp_int32 gtid, kmp_task_t *task,
#endif
__kmp_task_finish<false>(gtid, task, current_task);
}
+#if OMPT_SUPPORT
+ else if (UNLIKELY(ompt_enabled.enabled && taskdata->td_flags.target)) {
+ __ompt_task_finish(task, current_task, ompt_task_switch);
+ }
+#endif
KA_TRACE(
30,
@@ -1974,7 +1984,8 @@ kmp_int32 __kmpc_omp_task_parts(ident_t *loc_ref, kmp_int32 gtid,
if (ompt_enabled.ompt_callback_task_create) {
ompt_callbacks.ompt_callback(ompt_callback_task_create)(
&(parent->ompt_task_info.task_data), &(parent->ompt_task_info.frame),
- &(new_taskdata->ompt_task_info.task_data), ompt_task_explicit, 0,
+ &(new_taskdata->ompt_task_info.task_data),
+ TASK_TYPE_DETAILS_FORMAT(new_taskdata), 0,
OMPT_GET_RETURN_ADDRESS(0));
}
}
@@ -2132,7 +2143,7 @@ kmp_int32 __kmpc_omp_task(ident_t *loc_ref, kmp_int32 gtid,
&(parent->ompt_task_info.task_data),
&(parent->ompt_task_info.frame),
&(new_taskdata->ompt_task_info.task_data),
- ompt_task_explicit | TASK_TYPE_DETAILS_FORMAT(new_taskdata), 0,
+ TASK_TYPE_DETAILS_FORMAT(new_taskdata), 0,
OMPT_LOAD_RETURN_ADDRESS(gtid));
}
} else {
@@ -2193,8 +2204,7 @@ kmp_int32 __kmp_omp_taskloop_task(ident_t *loc_ref, kmp_int32 gtid,
ompt_callbacks.ompt_callback(ompt_callback_task_create)(
&(parent->ompt_task_info.task_data), &(parent->ompt_task_info.frame),
&(new_taskdata->ompt_task_info.task_data),
- ompt_task_explicit | TASK_TYPE_DETAILS_FORMAT(new_taskdata), 0,
- codeptr_ra);
+ TASK_TYPE_DETAILS_FORMAT(new_taskdata), 0, codeptr_ra);
}
}
#endif
diff --git a/openmp/runtime/src/ompt-internal.h b/openmp/runtime/src/ompt-internal.h
index 0d77413d54904..580a7c2ac7916 100644
--- a/openmp/runtime/src/ompt-internal.h
+++ b/openmp/runtime/src/ompt-internal.h
@@ -50,6 +50,10 @@ typedef struct ompt_callbacks_active_s {
: 0x0) | \
((!(info->td_flags.tiedness)) ? ompt_task_untied : 0x0) | \
(info->td_flags.final ? ompt_task_final : 0x0) | \
+ (info->td_flags.target \
+ ? ompt_task_target \
+ : (info->td_flags.tasktype ? ompt_task_explicit \
+ : ompt_task_implicit)) | \
(info->td_flags.merged_if0 ? ompt_task_mergeable : 0x0)
typedef struct {
diff --git a/openmp/runtime/src/ompt-specific.cpp b/openmp/runtime/src/ompt-specific.cpp
index 9743f35d2c4ff..16acbe052d12e 100644
--- a/openmp/runtime/src/ompt-specific.cpp
+++ b/openmp/runtime/src/ompt-specific.cpp
@@ -421,9 +421,7 @@ int __ompt_get_task_info_internal(int ancestor_level, int *type,
team_info = &team->t.ompt_team_info;
if (type) {
if (taskdata->td_parent) {
- *type = (taskdata->td_flags.tasktype ? ompt_task_explicit
- : ompt_task_implicit) |
- TASK_TYPE_DETAILS_FORMAT(taskdata);
+ *type = TASK_TYPE_DETAILS_FORMAT(taskdata);
} else {
*type = ompt_task_initial;
}
More information about the Openmp-commits
mailing list