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)); 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