[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:10:40 PST 2023
This revision was automatically updated to reflect the committed changes.
Closed by commit rG861709107b43: [Libomptarget] Check errors when synchronizing the async queue (authored by jhuber6).
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.498028.patch
Type: text/x-patch
Size: 2651 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20230216/e4134132/attachment.bin>
More information about the Openmp-commits
mailing list