[Openmp-commits] [PATCH] D106220: [OpenMP] Fixed a segmentation fault when using taskloop and target nowait
Shilei Tian via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Mon Jul 19 18:09:16 PDT 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rG996baa58a440: [OpenMP] Fixed a segmentation fault when using taskloop and target nowait (authored by tianshilei1992).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D106220/new/
https://reviews.llvm.org/D106220
Files:
openmp/libomptarget/test/offloading/taskloop_offload_nowait.cpp
openmp/runtime/src/kmp_tasking.cpp
Index: openmp/runtime/src/kmp_tasking.cpp
===================================================================
--- openmp/runtime/src/kmp_tasking.cpp
+++ openmp/runtime/src/kmp_tasking.cpp
@@ -2563,7 +2563,8 @@
if (!taskdata->td_flags.team_serial ||
(thread->th.th_task_team != NULL &&
- thread->th.th_task_team->tt.tt_found_proxy_tasks)) {
+ (thread->th.th_task_team->tt.tt_found_proxy_tasks ||
+ thread->th.th_task_team->tt.tt_hidden_helper_task_encountered))) {
kmp_flag_32<false, false> flag(
RCAST(std::atomic<kmp_uint32> *, &(taskgroup->count)), 0U);
while (KMP_ATOMIC_LD_ACQ(&taskgroup->count) != 0) {
Index: openmp/libomptarget/test/offloading/taskloop_offload_nowait.cpp
===================================================================
--- /dev/null
+++ openmp/libomptarget/test/offloading/taskloop_offload_nowait.cpp
@@ -0,0 +1,40 @@
+// RUN: %libomptarget-compilexx-run-and-check-generic
+
+#include <cmath>
+#include <cstdlib>
+#include <iostream>
+
+bool almost_equal(float x, float gold, float tol) {
+ if (std::signbit(x) != std::signbit(gold))
+ x = std::abs(gold) - std::abs(x);
+
+ return std::abs(gold) * (1 - tol) <= std::abs(x) &&
+ std::abs(x) <= std::abs(gold) * (1 + tol);
+}
+
+int main(int argc, char *argv[]) {
+ constexpr const int N0{2};
+ constexpr const int N1{182};
+ constexpr const float expected_value{N0 * N1};
+ float counter_N0{};
+
+#pragma omp target data map(tofrom : counter_N0)
+ {
+#pragma omp taskloop shared(counter_N0)
+ for (int i0 = 0; i0 < N0; i0++) {
+#pragma omp target teams distribute parallel for map(tofrom : counter_N0) nowait
+ for (int i1 = 0; i1 < N1; i1++) {
+#pragma omp atomic update
+ counter_N0 = counter_N0 + 1.;
+ }
+ }
+ }
+
+ if (!almost_equal(counter_N0, expected_value, 0.1)) {
+ std::cerr << "Expected: " << expected_value << " Got: " << counter_N0
+ << '\n';
+ return -1;
+ }
+
+ return 0;
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D106220.359976.patch
Type: text/x-patch
Size: 1998 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20210720/feab4e11/attachment.bin>
More information about the Openmp-commits
mailing list