From 0541ae031eef974118df24502658776bde51212e Mon Sep 17 00:00:00 2001 From: Igor Chorazewicz Date: Thu, 1 May 2025 21:34:46 +0000 Subject: [PATCH 1/2] [SYCL] Do not preload L0 v2 adapter if it's not requested The adapter sets certain env variables during adapter init. Preloding it will set those variables and result in unexpected behavior for the legacy adater. --- .../ur_win_proxy_loader.cpp | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/sycl/ur_win_proxy_loader/ur_win_proxy_loader.cpp b/sycl/ur_win_proxy_loader/ur_win_proxy_loader.cpp index 3798d81f6a544..73b6d62ef4d66 100644 --- a/sycl/ur_win_proxy_loader/ur_win_proxy_loader.cpp +++ b/sycl/ur_win_proxy_loader/ur_win_proxy_loader.cpp @@ -107,6 +107,27 @@ void *&getDllHandle() { return dllHandle; } +static bool shouldLoadL0V2adapter() { + auto SyclEnv = std::getenv("SYCL_UR_USE_LEVEL_ZERO_V2"); + auto UREnv = std::getenv("UR_LOADER_USE_LEVEL_ZERO_V2"); + + try { + if (SyclEnv && std::stoi(SyclEnv) == 1) { + return true; + } + } catch (...) { + } + + try { + if (UREnv && std::stoi(UREnv) == 1) { + return true; + } + } catch (...) { + } + + return false; +} + /// Load the adapter libraries void preloadLibraries() { // Suppress system errors. @@ -142,7 +163,8 @@ void preloadLibraries() { getDllHandle() = loadAdapter(UR_LIBRARY_NAME(loader)); loadAdapter(UR_LIBRARY_NAME(adapter_opencl)); loadAdapter(UR_LIBRARY_NAME(adapter_level_zero)); - loadAdapter(UR_LIBRARY_NAME(adapter_level_zero_v2)); + if (shouldLoadL0V2adapter()) + loadAdapter(UR_LIBRARY_NAME(adapter_level_zero_v2)); loadAdapter(UR_LIBRARY_NAME(adapter_cuda)); loadAdapter(UR_LIBRARY_NAME(adapter_hip)); loadAdapter(UR_LIBRARY_NAME(adapter_native_cpu)); From a675319715bde6009beebeda41e17fc8e0fa41c7 Mon Sep 17 00:00:00 2001 From: Igor Chorazewicz Date: Wed, 19 Mar 2025 16:40:20 +0000 Subject: [PATCH 2/2] [SYCL][UR][L0 v2] enable API logging through L0 loader --- .../source/adapters/level_zero/adapter.cpp | 17 ++++++++ .../source/adapters/level_zero/common.cpp | 7 ++++ .../source/adapters/level_zero/v2/common.hpp | 40 ++++++------------- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/unified-runtime/source/adapters/level_zero/adapter.cpp b/unified-runtime/source/adapters/level_zero/adapter.cpp index efbbef02aff36..c3a8a8baf5b6a 100644 --- a/unified-runtime/source/adapters/level_zero/adapter.cpp +++ b/unified-runtime/source/adapters/level_zero/adapter.cpp @@ -309,6 +309,12 @@ ur_adapter_handle_t_::ur_adapter_handle_t_() if (UrL0Debug & UR_L0_DEBUG_BASIC) { logger.setLegacySink(std::make_unique()); +#ifdef UR_ADAPTER_LEVEL_ZERO_V2 + setEnvVar("ZEL_ENABLE_LOADER_LOGGING", "1"); + setEnvVar("ZEL_LOADER_LOGGING_LEVEL", "trace"); + setEnvVar("ZEL_LOADER_LOG_CONSOLE", "1"); + setEnvVar("ZE_ENABLE_VALIDATION_LAYER", "1"); +#endif }; if (UrL0Debug & UR_L0_DEBUG_VALIDATION) { @@ -419,6 +425,17 @@ ur_adapter_handle_t_::ur_adapter_handle_t_() loader_version.patch >= 2)) { useInitDrivers = true; } + +#ifdef UR_ADAPTER_LEVEL_ZERO_V2 + if ((loader_version.major == 1 && loader_version.minor < 21) || + (loader_version.major == 1 && loader_version.minor == 21 && + loader_version.patch < 2)) { + UR_LOG( + WARN, + "WARNING: Level Zero Loader version is older than 1.21.2. " + "Please update to the latest version for API logging support.\n"); + } +#endif } if (useInitDrivers) { diff --git a/unified-runtime/source/adapters/level_zero/common.cpp b/unified-runtime/source/adapters/level_zero/common.cpp index 397032767f4bd..bac059c46f170 100644 --- a/unified-runtime/source/adapters/level_zero/common.cpp +++ b/unified-runtime/source/adapters/level_zero/common.cpp @@ -137,6 +137,12 @@ void zeParseError(ze_result_t ZeError, const char *&ErrorString) { } // switch } +#ifdef UR_ADAPTER_LEVEL_ZERO_V2 +ze_result_t ZeCall::doCall(ze_result_t ZeResult, const char *, const char *, + bool) { + return ZeResult; +} +#else ze_result_t ZeCall::doCall(ze_result_t ZeResult, const char *ZeName, const char *ZeArgs, bool TraceError) { UR_LOG(DEBUG, "ZE ---> {}{}", ZeName, ZeArgs); @@ -155,6 +161,7 @@ ze_result_t ZeCall::doCall(ze_result_t ZeResult, const char *ZeName, } return ZeResult; } +#endif // Specializations for various L0 structures template <> ze_structure_type_t getZeStructureType() { diff --git a/unified-runtime/source/adapters/level_zero/v2/common.hpp b/unified-runtime/source/adapters/level_zero/v2/common.hpp index 5f26108207fef..fc3dcd93ca67b 100644 --- a/unified-runtime/source/adapters/level_zero/v2/common.hpp +++ b/unified-runtime/source/adapters/level_zero/v2/common.hpp @@ -15,24 +15,8 @@ #include "../common.hpp" #include "logger/ur_logger.hpp" -namespace { -#define DECLARE_DESTROY_FUNCTION(name) \ - template ze_result_t name##_wrapped(ZeHandleT handle) { \ - return ZE_CALL_NOCHECK_NAME(name, (handle), #name); \ - } - -#define HANDLE_WRAPPER_TYPE(handle, destroy) \ - ze_handle_wrapper> -} // namespace namespace v2 { - -DECLARE_DESTROY_FUNCTION(zeKernelDestroy) -DECLARE_DESTROY_FUNCTION(zeEventDestroy) -DECLARE_DESTROY_FUNCTION(zeEventPoolDestroy) -DECLARE_DESTROY_FUNCTION(zeContextDestroy) -DECLARE_DESTROY_FUNCTION(zeCommandListDestroy) -DECLARE_DESTROY_FUNCTION(zeImageDestroy) namespace raii { template @@ -108,23 +92,23 @@ struct ze_handle_wrapper { bool ownZeHandle; }; -using ze_kernel_handle_t = HANDLE_WRAPPER_TYPE(::ze_kernel_handle_t, - zeKernelDestroy); +using ze_kernel_handle_t = + ze_handle_wrapper<::ze_kernel_handle_t, zeKernelDestroy>; -using ze_event_handle_t = HANDLE_WRAPPER_TYPE(::ze_event_handle_t, - zeEventDestroy); +using ze_event_handle_t = + ze_handle_wrapper<::ze_event_handle_t, zeEventDestroy>; -using ze_event_pool_handle_t = HANDLE_WRAPPER_TYPE(::ze_event_pool_handle_t, - zeEventPoolDestroy); +using ze_event_pool_handle_t = + ze_handle_wrapper<::ze_event_pool_handle_t, zeEventPoolDestroy>; -using ze_context_handle_t = HANDLE_WRAPPER_TYPE(::ze_context_handle_t, - zeContextDestroy); +using ze_context_handle_t = + ze_handle_wrapper<::ze_context_handle_t, zeContextDestroy>; -using ze_command_list_handle_t = HANDLE_WRAPPER_TYPE(::ze_command_list_handle_t, - zeCommandListDestroy); +using ze_command_list_handle_t = + ze_handle_wrapper<::ze_command_list_handle_t, zeCommandListDestroy>; -using ze_image_handle_t = HANDLE_WRAPPER_TYPE(::ze_image_handle_t, - zeImageDestroy); +using ze_image_handle_t = + ze_handle_wrapper<::ze_image_handle_t, zeImageDestroy>; } // namespace raii } // namespace v2