[Openmp-commits] [PATCH] D79944: [OpenMP] Fix for https://bugs.llvm.org/show_bug.cgi?id=45904.

Andrey Churbanov via Phabricator via Openmp-commits openmp-commits at lists.llvm.org
Thu May 14 08:38:27 PDT 2020


AndreyChurbanov created this revision.
AndreyChurbanov added reviewers: hbae, tlwilmar.
AndreyChurbanov added a project: OpenMP.
Herald added a reviewer: jdoerfert.
AndreyChurbanov retitled this revision from "Fix for https://bugs.llvm.org/show_bug.cgi?id=45904." to "[OpenMP] Fix for https://bugs.llvm.org/show_bug.cgi?id=45904.".
Herald added subscribers: guansong, yaxunl.

Fixed task bookkeeping for serialized detached tasks.

Not sure how to properly request the OpenMP 5.0 option for the test; hardcoded the -fopenmp-version=50 option for now.  If somebody knows a better way, please advise.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D79944

Files:
  openmp/runtime/src/kmp_tasking.cpp
  openmp/runtime/test/tasking/omp_detach_taskwait.c


Index: openmp/runtime/test/tasking/omp_detach_taskwait.c
===================================================================
--- /dev/null
+++ openmp/runtime/test/tasking/omp_detach_taskwait.c
@@ -0,0 +1,23 @@
+// RUN: %libomp-compile -fopenmp-version=50 && env OMP_NUM_THREADS='3' %libomp-run
+// RUN: %libomp-compile -fopenmp-version=50 && env OMP_NUM_THREADS='1' %libomp-run
+
+// Checked gcc 9.2 does not support detach clause on task construct,
+// clang supports detach clause since version 11
+// UNSUPPORTED: gcc, clang-10, clang-9, clang-8, clang-7
+
+#include <omp.h>
+
+int main()
+{
+  #pragma omp parallel
+  #pragma omp master
+  {
+    omp_event_handle_t event;
+    #pragma omp task detach(event)
+    {
+      omp_fulfill_event(event);
+    }
+    #pragma omp taskwait
+  }
+  return 0;
+}
Index: openmp/runtime/src/kmp_tasking.cpp
===================================================================
--- openmp/runtime/src/kmp_tasking.cpp
+++ openmp/runtime/src/kmp_tasking.cpp
@@ -884,7 +884,8 @@
 
     // Only need to keep track of count if team parallel and tasking not
     // serialized
-    if (!(taskdata->td_flags.team_serial || taskdata->td_flags.tasking_ser)) {
+    if (!(taskdata->td_flags.team_serial || taskdata->td_flags.tasking_ser) ||
+        taskdata->td_flags.detachable == TASK_DETACHABLE) {
       // Predecrement simulated by "- 1" calculation
       children =
           KMP_ATOMIC_DEC(&taskdata->td_parent->td_incomplete_child_tasks) - 1;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D79944.264000.patch
Type: text/x-patch
Size: 1483 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20200514/5990853b/attachment.bin>


More information about the Openmp-commits mailing list