diff --git a/unified-runtime/source/adapters/level_zero/usm.cpp b/unified-runtime/source/adapters/level_zero/usm.cpp index 4e99f12d09ed8..5a5dab0e527c7 100644 --- a/unified-runtime/source/adapters/level_zero/usm.cpp +++ b/unified-runtime/source/adapters/level_zero/usm.cpp @@ -45,23 +45,23 @@ usm::DisjointPoolAllConfigs DisjointPoolConfigInstance = InitializeDisjointPoolConfig(); usm::DisjointPoolAllConfigs InitializeDisjointPoolConfig() { - const char *PoolUrTraceVal = std::getenv("UR_L0_USM_ALLOCATOR_TRACE"); - const char *PoolPiTraceVal = - std::getenv("SYCL_PI_LEVEL_ZERO_USM_ALLOCATOR_TRACE"); - const char *PoolTraceVal = PoolUrTraceVal - ? PoolUrTraceVal - : (PoolPiTraceVal ? PoolPiTraceVal : nullptr); + // Prefer the UR-specific env var, fall back to the PI-specific one. + const char *PoolTraceVal = std::getenv("UR_L0_USM_ALLOCATOR_TRACE"); + if (!PoolTraceVal) { + PoolTraceVal = std::getenv("SYCL_PI_LEVEL_ZERO_USM_ALLOCATOR_TRACE"); + } + // Parse integer value, defaulting to 0 on missing/invalid input. int PoolTrace = 0; - if (PoolTraceVal != nullptr) { + if (PoolTraceVal) { PoolTrace = std::atoi(PoolTraceVal); } - const char *PoolUrConfigVal = std::getenv("SYCL_PI_LEVEL_ZERO_USM_ALLOCATOR"); - const char *PoolPiConfigVal = std::getenv("UR_L0_USM_ALLOCATOR"); - const char *PoolConfigVal = - PoolUrConfigVal ? PoolUrConfigVal : PoolPiConfigVal; - if (PoolConfigVal == nullptr) { + const char *PoolConfigVal = std::getenv("UR_L0_USM_ALLOCATOR"); + if (!PoolConfigVal) { + PoolConfigVal = std::getenv("SYCL_PI_LEVEL_ZERO_USM_ALLOCATOR"); + } + if (!PoolConfigVal) { return usm::DisjointPoolAllConfigs(PoolTrace); } diff --git a/unified-runtime/source/adapters/level_zero/usm.hpp b/unified-runtime/source/adapters/level_zero/usm.hpp index aa7558926b5ed..f5f25c438b862 100644 --- a/unified-runtime/source/adapters/level_zero/usm.hpp +++ b/unified-runtime/source/adapters/level_zero/usm.hpp @@ -9,8 +9,6 @@ //===----------------------------------------------------------------------===// #pragma once -#include - #include "common.hpp" #include "common/ur_ref_count.hpp" #include "enqueued_pool.hpp" diff --git a/unified-runtime/source/adapters/level_zero/v2/usm.cpp b/unified-runtime/source/adapters/level_zero/v2/usm.cpp index 9774ff7e212e6..5042697894386 100644 --- a/unified-runtime/source/adapters/level_zero/v2/usm.cpp +++ b/unified-runtime/source/adapters/level_zero/v2/usm.cpp @@ -43,19 +43,13 @@ ur_result_t getProviderNativeError(const char *providerName, static std::optional initializeDisjointPoolConfig() { - const char *UrRetDisable = std::getenv("UR_L0_DISABLE_USM_ALLOCATOR"); - const char *PiRetDisable = - std::getenv("SYCL_PI_LEVEL_ZERO_DISABLE_USM_ALLOCATOR"); - const char *Disable = - UrRetDisable ? UrRetDisable : (PiRetDisable ? PiRetDisable : nullptr); - if (Disable != nullptr && Disable != std::string("")) { + if (getenv_tobool("UR_L0_DISABLE_USM_ALLOCATOR") || + getenv_tobool("SYCL_PI_LEVEL_ZERO_DISABLE_USM_ALLOCATOR")) { return std::nullopt; } - const char *PoolUrTraceVal = std::getenv("UR_L0_USM_ALLOCATOR_TRACE"); - int PoolTrace = 0; - if (PoolUrTraceVal != nullptr) { + if (auto PoolUrTraceVal = std::getenv("UR_L0_USM_ALLOCATOR_TRACE")) { PoolTrace = std::atoi(PoolUrTraceVal); } @@ -64,14 +58,7 @@ initializeDisjointPoolConfig() { return usm::DisjointPoolAllConfigs(PoolTrace); } - // TODO: rework parseDisjointPoolConfig to return optional, - // once EnableBuffers is no longer used (by legacy L0) - auto configs = usm::parseDisjointPoolConfig(PoolUrConfigVal, PoolTrace); - if (configs.EnableBuffers) { - return configs; - } - - return std::nullopt; + return usm::parseDisjointPoolConfigOptional(PoolUrConfigVal, PoolTrace); } inline umf_usm_memory_type_t urToUmfMemoryType(ur_usm_type_t type) { diff --git a/unified-runtime/source/common/umf_pools/disjoint_pool_config_parser.cpp b/unified-runtime/source/common/umf_pools/disjoint_pool_config_parser.cpp index d2b12e576b825..21349a5432b5e 100644 --- a/unified-runtime/source/common/umf_pools/disjoint_pool_config_parser.cpp +++ b/unified-runtime/source/common/umf_pools/disjoint_pool_config_parser.cpp @@ -267,4 +267,13 @@ DisjointPoolAllConfigs parseDisjointPoolConfig(const std::string &config, return AllConfigs; } + +std::optional +parseDisjointPoolConfigOptional(const std::string &config, int trace) { + auto configs = parseDisjointPoolConfig(config, trace); + if (configs.EnableBuffers == 0) { + return std::nullopt; + } + return configs; +} } // namespace usm diff --git a/unified-runtime/source/common/umf_pools/disjoint_pool_config_parser.hpp b/unified-runtime/source/common/umf_pools/disjoint_pool_config_parser.hpp index 65ffe8fccd977..f3885e7e0f884 100644 --- a/unified-runtime/source/common/umf_pools/disjoint_pool_config_parser.hpp +++ b/unified-runtime/source/common/umf_pools/disjoint_pool_config_parser.hpp @@ -12,6 +12,7 @@ #include #include +#include #include #include @@ -71,6 +72,13 @@ class DisjointPoolAllConfigs { DisjointPoolAllConfigs parseDisjointPoolConfig(const std::string &config, int trace = 1); +// Parse optional config parameters with optional return. +// Returns std::nullopt when EnableBuffers is 0, indicating pooling is disabled. +// This is for use cases where EnableBuffers flag controls pool creation, +// particularly in the v2 Level Zero adapter. +std::optional +parseDisjointPoolConfigOptional(const std::string &config, int trace = 1); + static inline void UMF_CALL_THROWS(umf_result_t res) { if (res != UMF_RESULT_SUCCESS) { throw res;