[Openmp-commits] [openmp] [OpenMP] Tear down GenericDeviceTy's with GenericPluginTy (PR #73557)
via Openmp-commits
openmp-commits at lists.llvm.org
Mon Nov 27 11:11:27 PST 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-openmp
Author: Johannes Doerfert (jdoerfert)
<details>
<summary>Changes</summary>
There is no point in keeping GenericDeviceTy objects alive longer than the associated GenericPluginTy. Instead of the old API we now tear them down with the plugin, avoiding ordering issues.
---
Full diff: https://github.com/llvm/llvm-project/pull/73557.diff
6 Files Affected:
- (modified) openmp/libomptarget/include/omptargetplugin.h (-4)
- (modified) openmp/libomptarget/include/rtl.h (-2)
- (modified) openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.cpp (-11)
- (modified) openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.h (+5)
- (modified) openmp/libomptarget/src/device.cpp (-5)
- (modified) openmp/libomptarget/src/rtl.cpp (-2)
``````````diff
diff --git a/openmp/libomptarget/include/omptargetplugin.h b/openmp/libomptarget/include/omptargetplugin.h
index 40e58665b099583..8bdb39de9da9ec7 100644
--- a/openmp/libomptarget/include/omptargetplugin.h
+++ b/openmp/libomptarget/include/omptargetplugin.h
@@ -57,10 +57,6 @@ int64_t __tgt_rtl_init_requires(int64_t RequiresFlags);
// return an error code.
int32_t __tgt_rtl_init_device(int32_t ID);
-// Deinitialize the specified device. In case of success return 0; otherwise
-// return an error code.
-int32_t __tgt_rtl_deinit_device(int32_t ID);
-
// Pass an executable image section described by image to the specified
// device and prepare an address table of target entities. In case of error,
// return NULL. Otherwise, return a pointer to the built address table.
diff --git a/openmp/libomptarget/include/rtl.h b/openmp/libomptarget/include/rtl.h
index d5ac097302194f5..49a62685dcdbfa7 100644
--- a/openmp/libomptarget/include/rtl.h
+++ b/openmp/libomptarget/include/rtl.h
@@ -37,7 +37,6 @@ struct RTLInfoTy {
typedef int32_t(is_data_exchangable_ty)(int32_t, int32_t);
typedef int32_t(number_of_devices_ty)();
typedef int32_t(init_device_ty)(int32_t);
- typedef int32_t(deinit_device_ty)(int32_t);
typedef __tgt_target_table *(load_binary_ty)(int32_t, void *);
typedef void *(data_alloc_ty)(int32_t, int64_t, void *, int32_t);
typedef int32_t(data_submit_ty)(int32_t, void *, void *, int64_t);
@@ -94,7 +93,6 @@ struct RTLInfoTy {
is_data_exchangable_ty *is_data_exchangable = nullptr;
number_of_devices_ty *number_of_devices = nullptr;
init_device_ty *init_device = nullptr;
- deinit_device_ty *deinit_device = nullptr;
load_binary_ty *load_binary = nullptr;
data_alloc_ty *data_alloc = nullptr;
data_submit_ty *data_submit = nullptr;
diff --git a/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.cpp b/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.cpp
index f517c8371b334d7..39acf9699931947 100644
--- a/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.cpp
+++ b/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.cpp
@@ -1688,17 +1688,6 @@ int32_t __tgt_rtl_init_device(int32_t DeviceId) {
return OFFLOAD_SUCCESS;
}
-int32_t __tgt_rtl_deinit_device(int32_t DeviceId) {
- auto Err = Plugin::get().deinitDevice(DeviceId);
- if (Err) {
- REPORT("Failure to deinitialize device %d: %s\n", DeviceId,
- toString(std::move(Err)).data());
- return OFFLOAD_FAIL;
- }
-
- return OFFLOAD_SUCCESS;
-}
-
int32_t __tgt_rtl_number_of_devices() { return Plugin::get().getNumDevices(); }
int64_t __tgt_rtl_init_requires(int64_t RequiresFlags) {
diff --git a/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.h b/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.h
index fdbe23eeb2c0412..0093bef571f93c1 100644
--- a/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.h
+++ b/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.h
@@ -1144,6 +1144,11 @@ class Plugin {
static Error deinit() {
assert(SpecificPlugin && "Plugin no longer valid");
+ for (int32_t DevNo = 0, NumDev = SpecificPlugin->getNumDevices();
+ DevNo < NumDev; ++DevNo)
+ if (auto Err = SpecificPlugin->deinitDevice(DevNo))
+ return Err;
+
// Deinitialize the plugin.
if (auto Err = SpecificPlugin->deinit())
return Err;
diff --git a/openmp/libomptarget/src/device.cpp b/openmp/libomptarget/src/device.cpp
index da167845ccb06c4..11465d0b2cc3cf3 100644
--- a/openmp/libomptarget/src/device.cpp
+++ b/openmp/libomptarget/src/device.cpp
@@ -563,11 +563,6 @@ int32_t DeviceTy::initOnce() {
return OFFLOAD_FAIL;
}
-void DeviceTy::deinit() {
- if (RTL->deinit_device)
- RTL->deinit_device(RTLDeviceID);
-}
-
// Load binary to device.
__tgt_target_table *DeviceTy::loadBinary(void *Img) {
std::lock_guard<decltype(RTL->Mtx)> LG(RTL->Mtx);
diff --git a/openmp/libomptarget/src/rtl.cpp b/openmp/libomptarget/src/rtl.cpp
index 4688f3ed53af88d..3e2c0a64c9151fc 100644
--- a/openmp/libomptarget/src/rtl.cpp
+++ b/openmp/libomptarget/src/rtl.cpp
@@ -195,8 +195,6 @@ bool RTLsTy::attemptLoadRTL(const std::string &RTLName, RTLInfoTy &RTL) {
// Optional functions
*((void **)&RTL.is_valid_binary_info) =
DynLibrary->getAddressOfSymbol("__tgt_rtl_is_valid_binary_info");
- *((void **)&RTL.deinit_device) =
- DynLibrary->getAddressOfSymbol("__tgt_rtl_deinit_device");
*((void **)&RTL.init_requires) =
DynLibrary->getAddressOfSymbol("__tgt_rtl_init_requires");
*((void **)&RTL.data_submit_async) =
``````````
</details>
https://github.com/llvm/llvm-project/pull/73557
More information about the Openmp-commits
mailing list