[llvm-branch-commits] [llvm] make device initialization more liboffload friendly (PR #235001)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Oct 23 08:55:30 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-offload
Author: Alex Duran (adurang)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/235001.diff
3 Files Affected:
- (modified) offload/include/device.h (+4-3)
- (modified) offload/libompaccsupport/PluginManager.cpp (+2-8)
- (modified) offload/libompaccsupport/device.cpp (+12-5)
``````````diff
diff --git a/offload/include/device.h b/offload/include/device.h
index a849c383d595f..fb69e673998f9 100644
--- a/offload/include/device.h
+++ b/offload/include/device.h
@@ -111,13 +111,14 @@ struct PluginManager;
struct DeviceTy {
int32_t DeviceID;
- GenericPluginTy *RTL;
- int32_t RTLDeviceID;
+ GenericPluginTy *RTL = nullptr;
+ int32_t RTLDeviceID = -1;
+ ol_platform_handle_t Platform;
ol_device_handle_t DeviceHandle;
PluginManager *PM;
ol_context_handle_t Context = nullptr;
- DeviceTy(GenericPluginTy *RTL, int32_t DeviceID, int32_t RTLDeviceID,
+ DeviceTy(int32_t DeviceID, ol_platform_handle_t Platform,
ol_device_handle_t DeviceHandle, PluginManager *PM);
// DeviceTy is not copyable
DeviceTy(const DeviceTy &D) = delete;
diff --git a/offload/libompaccsupport/PluginManager.cpp b/offload/libompaccsupport/PluginManager.cpp
index 4cab03e40f00c..b49ace3404443 100644
--- a/offload/libompaccsupport/PluginManager.cpp
+++ b/offload/libompaccsupport/PluginManager.cpp
@@ -39,7 +39,6 @@ using namespace llvm::omp::target::helpers;
using llvm::omp::target::plugin::GenericKernelTy;
namespace llvm::offload::tmp {
GenericPluginTy *__ol_tgt_GetPluginFromPlatform(ol_platform_handle_t Platform);
-int32_t __ol_tgt_GetPluginDeviceId(ol_device_handle_t Device);
GenericKernelTy *__ol_tgt_GetKernelFromSymbol(ol_symbol_handle_t Symbol);
} // namespace llvm::offload::tmp
@@ -104,21 +103,16 @@ bool PluginManager::initializeDevice(ol_device_handle_t DeviceHandle) {
return false;
}
- GenericPluginTy &Plugin =
- *llvm::offload::tmp::__ol_tgt_GetPluginFromPlatform(PlatformHandle);
- int32_t DeviceId =
- llvm::offload::tmp::__ol_tgt_GetPluginDeviceId(DeviceHandle);
-
// Initialize the device information for the RTL we are about to use.
auto ExclusiveDevicesAccessor = getExclusiveDevicesAccessor();
int32_t UserId = ExclusiveDevicesAccessor->size();
auto Device =
- std::make_unique<DeviceTy>(&Plugin, UserId, DeviceId, DeviceHandle, this);
+ std::make_unique<DeviceTy>(UserId, PlatformHandle, DeviceHandle, this);
if (auto Err = Device->init()) {
std::string InfoMsg = toString(std::move(Err));
- ODBG(ODT_Init) << "Failed to init device " << DeviceId << ": " << InfoMsg;
+ ODBG(ODT_Init) << "Failed to init device " << UserId << ": " << InfoMsg;
return false;
}
diff --git a/offload/libompaccsupport/device.cpp b/offload/libompaccsupport/device.cpp
index 73fe1b0fced6b..83eb8b3b35acd 100644
--- a/offload/libompaccsupport/device.cpp
+++ b/offload/libompaccsupport/device.cpp
@@ -45,6 +45,11 @@ using namespace llvm::omp::target::error;
using namespace llvm::omp::target::plugin;
using namespace llvm::omp::target::debug;
+namespace llvm::offload::tmp {
+GenericPluginTy *__ol_tgt_GetPluginFromPlatform(ol_platform_handle_t Platform);
+int32_t __ol_tgt_GetPluginDeviceId(ol_device_handle_t Device);
+} // namespace llvm::offload::tmp
+
int HostDataToTargetTy::addEventIfNecessary(DeviceTy &Device,
AsyncInfoTy &AsyncInfo) const {
// First, check if the user disabled atomic map transfer/malloc/dealloc.
@@ -65,10 +70,10 @@ int HostDataToTargetTy::addEventIfNecessary(DeviceTy &Device,
return OFFLOAD_SUCCESS;
}
-DeviceTy::DeviceTy(GenericPluginTy *RTL, int32_t DeviceID, int32_t RTLDeviceID,
+DeviceTy::DeviceTy(int32_t DeviceID, ol_platform_handle_t Platform,
ol_device_handle_t DeviceHandle, PluginManager *PM)
- : DeviceID(DeviceID), RTL(RTL), RTLDeviceID(RTLDeviceID),
- DeviceHandle(DeviceHandle), PM(PM), MappingInfo(*this) {}
+ : DeviceID(DeviceID), Platform(Platform), DeviceHandle(DeviceHandle),
+ PM(PM), MappingInfo(*this) {}
DeviceTy::~DeviceTy() {
if (DeviceID == -1 || !(getInfoLevel() & OMP_INFOTYPE_DUMP_TABLE))
@@ -138,9 +143,11 @@ llvm::Error DeviceTy::init() {
IsHostDevice =
getInfo<ol_device_type_t>(DeviceInfo::TYPE) == OL_DEVICE_TYPE_HOST;
+ RTL = llvm::offload::tmp::__ol_tgt_GetPluginFromPlatform(Platform);
+ RTLDeviceID = llvm::offload::tmp::__ol_tgt_GetPluginDeviceId(DeviceHandle);
+
// Needs to be initialized before the GeometryProps.
- if (auto *Platform = getInfo<ol_platform_handle_t>(DeviceInfo::PLATFORM);
- olGetPlatformInfo(Platform, OL_PLATFORM_INFO_BACKEND,
+ if (olGetPlatformInfo(Platform, OL_PLATFORM_INFO_BACKEND,
sizeof(GeometryProps.Backend), &GeometryProps.Backend))
Backend = OL_PLATFORM_BACKEND_UNKNOWN;
``````````
</details>
https://github.com/llvm/llvm-project/pull/235001
More information about the llvm-branch-commits
mailing list