Skip to content

Commit cb7feb1

Browse files
committed
[L0] Dynamic load of SysMan separate init and DeviceUUID lookup
- To enable backwards compatability with older L0 Loaders, dynamic load of the zes separate init symbols along with the EXP Device UUID lookup symbol has been added during adapter init. Signed-off-by: Neil R. Spruit <neil.r.spruit@intel.com>
1 parent 9ac62df commit cb7feb1

File tree

2 files changed

+44
-5
lines changed

2 files changed

+44
-5
lines changed

source/adapters/level_zero/adapter.cpp

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,14 @@ ur_result_t getZesDeviceHandle(zes_uuid_t coreDeviceUuid,
6060
std::vector<zes_driver_handle_t> ZesDrivers;
6161
std::vector<zes_device_handle_t> ZesDevices;
6262
ze_result_t ZesResult = ZE_RESULT_ERROR_INVALID_ARGUMENT;
63-
ZE2UR_CALL(zesDriverGet, (&ZesDriverCount, nullptr));
63+
ZE2UR_CALL(GlobalAdapter->getSysManDriversFunctionPtr,
64+
(&ZesDriverCount, nullptr));
6465
ZesDrivers.resize(ZesDriverCount);
65-
ZE2UR_CALL(zesDriverGet, (&ZesDriverCount, ZesDrivers.data()));
66+
ZE2UR_CALL(GlobalAdapter->getSysManDriversFunctionPtr,
67+
(&ZesDriverCount, ZesDrivers.data()));
6668
for (uint32_t I = 0; I < ZesDriverCount; ++I) {
6769
ZesResult = ZE_CALL_NOCHECK(
68-
zesDriverGetDeviceByUuidExp,
70+
GlobalAdapter->getDeviceByUUIdFunctionPtr,
6971
(ZesDrivers[I], coreDeviceUuid, ZesDevice, SubDevice, SubDeviceId));
7072
if (ZesResult == ZE_RESULT_SUCCESS) {
7173
return UR_RESULT_SUCCESS;
@@ -207,8 +209,38 @@ ur_adapter_handle_t_::ur_adapter_handle_t_()
207209

208210
return;
209211
}
210-
211-
GlobalAdapter->ZesResult = ZE_CALL_NOCHECK(zesInit, (0));
212+
// Dynamically load the new L0 SysMan separate init and new EXP apis
213+
// separately. This must be done to avoid attempting to use symbols that do
214+
// not exist in older loader runtimes.
215+
#ifdef _WIN32
216+
std::string l0LoaderName = "ze_loader.dll";
217+
#else
218+
std::string l0LoaderName = "libze_loader.so.1";
219+
#endif
220+
GlobalAdapter->loaderHandle =
221+
ur_loader::LibLoader::loadAdapterLibrary(l0LoaderName.c_str());
222+
if (GlobalAdapter->loaderHandle.get() != nullptr) {
223+
GlobalAdapter->getDeviceByUUIdFunctionPtr =
224+
(zes_pfnDriverGetDeviceByUuidExp_t)
225+
ur_loader::LibLoader::getFunctionPtr(
226+
GlobalAdapter->loaderHandle.get(),
227+
"zesDriverGetDeviceByUuidExp");
228+
GlobalAdapter->getSysManDriversFunctionPtr =
229+
(zes_pfnDriverGet_t)ur_loader::LibLoader::getFunctionPtr(
230+
GlobalAdapter->loaderHandle.get(), "zesDriverGet");
231+
GlobalAdapter->sysManInitFunctionPtr =
232+
(zes_pfnInit_t)ur_loader::LibLoader::getFunctionPtr(
233+
GlobalAdapter->loaderHandle.get(), "zesInit");
234+
}
235+
if (GlobalAdapter->getDeviceByUUIdFunctionPtr &&
236+
GlobalAdapter->getSysManDriversFunctionPtr &&
237+
GlobalAdapter->sysManInitFunctionPtr) {
238+
logger::debug("\nzesInit with flags value of {}\n", static_cast<int>(0));
239+
GlobalAdapter->ZesResult =
240+
ZE_CALL_NOCHECK(GlobalAdapter->sysManInitFunctionPtr, (0));
241+
} else {
242+
GlobalAdapter->ZesResult = ZE_RESULT_ERROR_UNINITIALIZED;
243+
}
212244

213245
ur_result_t err = initPlatforms(platforms, *GlobalAdapter->ZesResult);
214246
if (err == UR_RESULT_SUCCESS) {

source/adapters/level_zero/adapter.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111

1212
#include "logger/ur_logger.hpp"
1313
#include <atomic>
14+
#include <loader/ur_loader.hpp>
1415
#include <loader/ze_loader.h>
1516
#include <mutex>
1617
#include <optional>
1718
#include <ur/ur.hpp>
1819
#include <ze_api.h>
20+
#include <zes_ddi.h>
1921

2022
using PlatformVec = std::vector<std::unique_ptr<ur_platform_handle_t_>>;
2123

@@ -26,6 +28,11 @@ struct ur_adapter_handle_t_ {
2628
std::atomic<uint32_t> RefCount = 0;
2729
std::mutex Mutex;
2830

31+
zes_pfnDriverGetDeviceByUuidExp_t getDeviceByUUIdFunctionPtr = nullptr;
32+
zes_pfnDriverGet_t getSysManDriversFunctionPtr = nullptr;
33+
zes_pfnInit_t sysManInitFunctionPtr = nullptr;
34+
std::unique_ptr<HMODULE, ur_loader::LibLoader::lib_dtor> loaderHandle;
35+
2936
std::optional<ze_result_t> ZeResult;
3037
std::optional<ze_result_t> ZesResult;
3138
ZeCache<Result<PlatformVec>> PlatformCache;

0 commit comments

Comments
 (0)