[Openmp-commits] [openmp] [OpenMP] Reorganize the initialization of `PluginAdaptorTy` (PR #74397)
Shilei Tian via Openmp-commits
openmp-commits at lists.llvm.org
Tue Dec 5 15:58:01 PST 2023
================
@@ -92,45 +112,61 @@ void PluginManager::init() {
// Attempt to open all the plugins and, if they exist, check if the interface
// is correct and if they are supporting any devices.
for (const char *Name : RTLNames) {
- PluginAdaptors.emplace_back(std::string(Name) + ".so");
- if (PluginAdaptors.back().getNumDevices() <= 0)
- PluginAdaptors.pop_back();
+ auto PluginAdaptorOrErr =
+ PluginAdaptorTy::create(std::string(Name) + ".so");
+ if (!PluginAdaptorOrErr) {
+ [[maybe_unused]] std::string InfoMsg =
+ toString(PluginAdaptorOrErr.takeError());
+ DP("%s", InfoMsg.c_str());
+ } else {
+ PluginAdaptors.push_back(std::move(*PluginAdaptorOrErr));
+ }
}
DP("RTLs loaded!\n");
}
-void PluginManager::initPlugin(PluginAdaptorTy &Plugin) {
- // If this RTL is not already in use, initialize it.
- if (Plugin.isUsed() || !Plugin.NumberOfDevices)
+void PluginAdaptorTy::initDevices(PluginManager &PM) {
+ if (isUsed())
return;
+ // If this RTL is not already in use, initialize it.
+ assert(getNumberOfPluginDevices() > 0 &&
+ "Tried to initialize useless plugin adaptor");
+
// Initialize the device information for the RTL we are about to use.
- auto ExclusiveDevicesAccessor = getExclusiveDevicesAccessor();
- const size_t Start = ExclusiveDevicesAccessor->size();
- ExclusiveDevicesAccessor->reserve(Start + Plugin.NumberOfDevices);
- for (int32_t DeviceId = 0; DeviceId < Plugin.NumberOfDevices; DeviceId++) {
- ExclusiveDevicesAccessor->push_back(std::make_unique<DeviceTy>(&Plugin));
- // global device ID
- (*ExclusiveDevicesAccessor)[Start + DeviceId]->DeviceID = Start + DeviceId;
- // RTL local device ID
- (*ExclusiveDevicesAccessor)[Start + DeviceId]->RTLDeviceID = DeviceId;
- }
+ auto ExclusiveDevicesAccessor = PM.getExclusiveDevicesAccessor();
// Initialize the index of this RTL and save it in the used RTLs.
- Plugin.DeviceOffset = Start;
+ DeviceOffset = ExclusiveDevicesAccessor->size();
// If possible, set the device identifier offset in the plugin.
- if (Plugin.set_device_offset)
- Plugin.set_device_offset(Start);
+ if (set_device_offset)
+ set_device_offset(DeviceOffset);
----------------
shiltian wrote:
Why was this function named this way? This function is not like some others that are actually function pointers of C library/plugin functions. Of course it is not this patch's issue.
https://github.com/llvm/llvm-project/pull/74397
More information about the Openmp-commits
mailing list