[Openmp-commits] [PATCH] D144191: [Libomptarget] Check errors when synchronizing the async queue

Joseph Huber via Phabricator via Openmp-commits openmp-commits at lists.llvm.org
Thu Feb 16 08:05:27 PST 2023


jhuber6 updated this revision to Diff 498026.
jhuber6 added a comment.

Add line for the error.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D144191/new/

https://reviews.llvm.org/D144191

Files:
  openmp/libomptarget/include/omptarget.h
  openmp/libomptarget/src/interface.cpp
  openmp/libomptarget/src/omptarget.cpp
  openmp/libomptarget/src/private.h


Index: openmp/libomptarget/src/private.h
===================================================================
--- openmp/libomptarget/src/private.h
+++ openmp/libomptarget/src/private.h
@@ -250,9 +250,12 @@
     if (AsyncInfo == &LocalAsyncInfo)
       return;
 
+    auto DoneOrErr = AsyncInfo->isDone();
+    if (!DoneOrErr)
+      FATAL_MESSAGE0(1, "Error while synchronizing the async queue\n");
     // If the are device operations still pending, return immediately without
     // deallocating the handle.
-    if (!AsyncInfo->isDone())
+    if (!*DoneOrErr)
       return;
 
     // Delete the handle and unset it from the OpenMP task data.
Index: openmp/libomptarget/src/omptarget.cpp
===================================================================
--- openmp/libomptarget/src/omptarget.cpp
+++ openmp/libomptarget/src/omptarget.cpp
@@ -51,8 +51,10 @@
   return BufferLocations.back();
 }
 
-bool AsyncInfoTy::isDone() {
-  synchronize();
+std::optional<bool> AsyncInfoTy::isDone() {
+  if (int Result = synchronize())
+    return std::nullopt;
+
   // The async info operations are completed when the internal queue is empty.
   return isQueueEmpty();
 }
Index: openmp/libomptarget/src/interface.cpp
===================================================================
--- openmp/libomptarget/src/interface.cpp
+++ openmp/libomptarget/src/interface.cpp
@@ -412,9 +412,12 @@
   if (QueryCounter.isAboveThreshold())
     AsyncInfo->SyncType = AsyncInfoTy::SyncTy::BLOCKING;
 
+  auto DoneOrErr = AsyncInfo->isDone();
+  if (!DoneOrErr)
+    FATAL_MESSAGE0(1, "Error while synchronizing the async queue\n");
   // If there are device operations still pending, return immediately without
   // deallocating the handle and increase the current thread query count.
-  if (!AsyncInfo->isDone()) {
+  if (!*DoneOrErr) {
     QueryCounter.increment();
     return;
   }
Index: openmp/libomptarget/include/omptarget.h
===================================================================
--- openmp/libomptarget/include/omptarget.h
+++ openmp/libomptarget/include/omptarget.h
@@ -17,6 +17,7 @@
 #include <cstdint>
 #include <deque>
 #include <functional>
+#include <optional>
 #include <stddef.h>
 #include <stdint.h>
 #include <type_traits>
@@ -247,8 +248,8 @@
   /// functions will be executed once and unregistered afterwards.
   ///
   /// \returns true if there is no pending asynchronous operations, false
-  /// otherwise.
-  bool isDone();
+  /// otherwise. We return a null value in the case of an error from the plugin.
+  std::optional<bool> isDone();
 
   /// Add a new post-processing function to be executed after synchronization.
   ///


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D144191.498026.patch
Type: text/x-patch
Size: 2651 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20230216/fd012860/attachment-0001.bin>


More information about the Openmp-commits mailing list