Skip to content

Commit 639c897

Browse files
authored
[SYCL] Build L0 v2 adapter by default (#17407)
L0 v2 adapter is expected to be shipped as part of 2025.2 release. Refactor params to configure.py into a single 'choice' param.
1 parent ae74e38 commit 639c897

File tree

6 files changed

+25
-16
lines changed

6 files changed

+25
-16
lines changed

.github/workflows/sycl-linux-build.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,7 @@ jobs:
167167
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
168168
-DLLVM_INSTALL_UTILS=ON \
169169
-DNATIVECPU_USE_OCK=Off \
170-
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=SPIRV \
171-
--level_zero_v1_and_v2
170+
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=SPIRV
172171
- name: Compile
173172
id: build
174173
run: cmake --build $GITHUB_WORKSPACE/build --target sycl-toolchain

buildbot/configure.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,13 @@ def do_configure(args, passthrough_args):
7070
if sys.platform != "darwin":
7171
# For more info on the enablement of level_zero_v2 refer to this document:
7272
# https://github.com/intel/llvm/blob/sycl/unified-runtime/source/adapters/level_zero/v2/README.md
73-
if args.level_zero_v2:
74-
sycl_enabled_backends.append("level_zero_v2")
75-
elif args.level_zero_v1_and_v2:
73+
if args.level_zero_adapter_version == "V1":
7674
sycl_enabled_backends.append("level_zero")
75+
if args.level_zero_adapter_version == "V2":
7776
sycl_enabled_backends.append("level_zero_v2")
78-
else:
77+
if args.level_zero_adapter_version == "ALL":
7978
sycl_enabled_backends.append("level_zero")
79+
sycl_enabled_backends.append("level_zero_v2")
8080

8181
# lld is needed on Windows or for the HIP adapter on AMD
8282
if platform.system() == "Windows" or (args.hip and args.hip_platform == "AMD"):
@@ -340,12 +340,11 @@ def main():
340340
help="choose hardware platform for HIP backend",
341341
)
342342
parser.add_argument(
343-
"--level_zero_v2", action="store_true", help="Enable SYCL Level Zero V2"
344-
)
345-
parser.add_argument(
346-
"--level_zero_v1_and_v2",
347-
action="store_true",
348-
help="Enable SYCL Level Zero Legacy and V2",
343+
"--level_zero_adapter_version",
344+
type=str,
345+
choices=["V1", "V2", "ALL"],
346+
default="ALL",
347+
help="Choose version of Level Zero adapter to build",
349348
)
350349
parser.add_argument(
351350
"--host-target",

sycl/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ endif()
2424
# If SYCL_ENABLE_BACKENDS is undefined, we default to enabling OpenCL and Level
2525
# Zero backends.
2626
if (NOT DEFINED SYCL_ENABLE_BACKENDS)
27-
set(SYCL_ENABLE_BACKENDS "opencl;level_zero")
27+
set(SYCL_ENABLE_BACKENDS "opencl;level_zero;level_zero_v2")
2828
endif()
2929

3030
# Option to enable JIT, this in turn makes kernel fusion and spec constant

sycl/doc/EnvironmentVariables.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ For a description of parallel for range rounding in DPC++ see
160160
| `SYCL_ENABLE_PCI` (Deprecated) | Integer | When set to 1, enables obtaining the GPU PCI address when using the Level Zero backend. The default is 1. This option is kept for compatibility reasons and is immediately deprecated. |
161161
| `SYCL_PI_LEVEL_ZERO_DISABLE_USM_ALLOCATOR` | Any(\*) | Disable USM allocator in Level Zero adapter (each memory request will go directly to Level Zero runtime) |
162162
| `SYCL_PI_LEVEL_ZERO_TRACK_INDIRECT_ACCESS_MEMORY` | Any(\*) | Enable support of the kernels with indirect access and corresponding deferred release of memory allocations in the Level Zero adapter. |
163+
| `SYCL_UR_USE_LEVEL_ZERO_V2` | Integer | Enable ('1') or disable ('0') the use of a preview version of the Level Zero adapter, which features a redesigned architecture aimed at optimizing performance for different queue modes (immediate/batched, in-order/out-of-order). This version is expected to reduce runtime overhead and currently only support immediate, in-order mode. If you experience any performance or functional issues with this adapter enabled, please report them on GitHub, specifying the adapter used. |
163164

164165
`(*) Note: Any means this environment variable is effective when set to any non-null value.`
165166

unified-runtime/source/adapters/level_zero/v2/README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ L0 v2 adapter can be enabled by setting passing `UR_BUILD_ADAPTER_L0_V2=1` optio
66

77
Currently, L0 v2 is only available as an experimental adapter to gather feedback and adding missing features. L0 v2 is planned to be the default adapter for L0 in 2026.0 release.
88

9+
To enable L0 v2 adapter at runtime, set, `SYCL_UR_USE_LEVEL_ZERO_V2=1`.
10+
11+
This forces UR and SYCL to use the v2 adapter instead of the legacy version.
12+
13+
Alternatively, `UR_ADAPTER_FORCE_LOAD` env variable can be used.
14+
15+
SYCL E2E tests can be used to test v2 adapter by passing `level_zero_v2:gpu` to llvm-lit `sycl_devices`.
16+
917
# Code structure
1018

1119
v2 adapters is is a standalone adapter but reuses some logic from the legacy L0 adapter implementation - most notably: adapter.cpp, platform.cpp, device.cpp

unified-runtime/source/loader/ur_adapter_registry.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -324,13 +324,15 @@ class AdapterRegistry {
324324
// Skip legacy L0 adapter if the v2 adapter is requested, and vice versa.
325325
if (std::string(adapterName).find("level_zero") != std::string::npos) {
326326
auto v2Requested = getenv_tobool("UR_LOADER_USE_LEVEL_ZERO_V2", false);
327+
v2Requested |= getenv_tobool("SYCL_UR_USE_LEVEL_ZERO_V2", false);
327328
auto v2Adapter =
328329
std::string(adapterName).find("v2") != std::string::npos;
329330

330331
if (v2Requested != v2Adapter) {
331-
logger::info("The adapter '{}' is skipped because {} {}.",
332-
adapterName, "UR_LOADER_USE_LEVEL_ZERO_V2",
333-
v2Requested ? "is set" : "is not set");
332+
logger::info(
333+
"The adapter '{}' is skipped because {} {}.", adapterName,
334+
"UR_LOADER_USE_LEVEL_ZERO_V2 or SYCL_UR_USE_LEVEL_ZERO_V2",
335+
v2Requested ? "is set" : "is not set");
334336
continue;
335337
}
336338
}

0 commit comments

Comments
 (0)