Skip to content

Commit 281e6d2

Browse files
mshahneoakroviakovnbpatel
authored
[mlir][ExecutionEngine] Add LevelZeroRuntimeWrapper. (#151038)
Adds LevelZeroRuntime wrapper and tests. Co-authored-by: Artem Kroviakov <[email protected]> Co-authored-by: Nishant Patel <[email protected]> --------- Co-authored-by: Artem Kroviakov <[email protected]> Co-authored-by: Nishant Patel <[email protected]>
1 parent 66392a8 commit 281e6d2

12 files changed

+928
-61
lines changed

mlir/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ endif()
140140
set(MLIR_ENABLE_CUDA_RUNNER 0 CACHE BOOL "Enable building the MLIR CUDA runner")
141141
set(MLIR_ENABLE_ROCM_RUNNER 0 CACHE BOOL "Enable building the MLIR ROCm runner")
142142
set(MLIR_ENABLE_SYCL_RUNNER 0 CACHE BOOL "Enable building the MLIR SYCL runner")
143+
set(MLIR_ENABLE_LEVELZERO_RUNNER 0 CACHE BOOL "Enable building the MLIR LevelZero runner")
143144
set(MLIR_ENABLE_SPIRV_CPU_RUNNER 0 CACHE BOOL "Enable building the MLIR SPIR-V cpu runner")
144145
set(MLIR_ENABLE_VULKAN_RUNNER 0 CACHE BOOL "Enable building the MLIR Vulkan runner")
145146
set(MLIR_ENABLE_NVPTXCOMPILER 0 CACHE BOOL

mlir/cmake/modules/FindLevelZero.cmake renamed to mlir/cmake/modules/FindLevelZeroRuntime.cmake

Lines changed: 55 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -20,40 +20,39 @@ include(FindPackageHandleStandardArgs)
2020
# Search path priority
2121
# 1. CMake Variable LEVEL_ZERO_DIR
2222
# 2. Environment Variable LEVEL_ZERO_DIR
23-
2423
if(NOT LEVEL_ZERO_DIR)
2524
if(DEFINED ENV{LEVEL_ZERO_DIR})
2625
set(LEVEL_ZERO_DIR "$ENV{LEVEL_ZERO_DIR}")
2726
endif()
2827
endif()
2928

3029
if(LEVEL_ZERO_DIR)
31-
find_path(LevelZero_INCLUDE_DIR
30+
find_path(LevelZeroRuntime_INCLUDE_DIR
3231
NAMES level_zero/ze_api.h
3332
PATHS ${LEVEL_ZERO_DIR}/include
3433
NO_DEFAULT_PATH
3534
)
3635

3736
if(LINUX)
38-
find_library(LevelZero_LIBRARY
37+
find_library(LevelZeroRuntime_LIBRARY
3938
NAMES ze_loader
4039
PATHS ${LEVEL_ZERO_DIR}/lib
41-
${LEVEL_ZERO_DIR}/lib/x86_64-linux-gnu
40+
${LEVEL_ZERO_DIR}/lib/x86_64-linux-gnu
4241
NO_DEFAULT_PATH
4342
)
4443
else()
45-
find_library(LevelZero_LIBRARY
44+
find_library(LevelZeroRuntime_LIBRARY
4645
NAMES ze_loader
4746
PATHS ${LEVEL_ZERO_DIR}/lib
4847
NO_DEFAULT_PATH
4948
)
5049
endif()
5150
else()
52-
find_path(LevelZero_INCLUDE_DIR
51+
find_path(LevelZeroRuntime_INCLUDE_DIR
5352
NAMES level_zero/ze_api.h
5453
)
5554

56-
find_library(LevelZero_LIBRARY
55+
find_library(LevelZeroRuntime_LIBRARY
5756
NAMES ze_loader
5857
)
5958
endif()
@@ -64,12 +63,14 @@ endif()
6463
# lists of equal lengths, with the shorter string getting zero-padded.
6564
function(compare_versions VERSION_STR1 VERSION_STR2 OUTPUT)
6665
# Convert the strings to list
67-
string(REPLACE "." ";" VL1 ${VERSION_STR1})
68-
string(REPLACE "." ";" VL2 ${VERSION_STR2})
66+
string(REPLACE "." ";" VL1 ${VERSION_STR1})
67+
string(REPLACE "." ";" VL2 ${VERSION_STR2})
68+
6969
# get lengths of both lists
7070
list(LENGTH VL1 VL1_LEN)
7171
list(LENGTH VL2 VL2_LEN)
7272
set(LEN ${VL1_LEN})
73+
7374
# If they differ in size pad the shorter list with 0s
7475
if(VL1_LEN GREATER VL2_LEN)
7576
math(EXPR DIFF "${VL1_LEN} - ${VL2_LEN}" OUTPUT_FORMAT DECIMAL)
@@ -98,12 +99,10 @@ function(compare_versions VERSION_STR1 VERSION_STR2 OUTPUT)
9899
set(${OUTPUT} TRUE PARENT_SCOPE)
99100
endif()
100101
endforeach()
101-
102-
endfunction(compare_versions)
102+
endfunction(compare_versions)
103103

104104
# Creates a small function to run and extract the LevelZero loader version.
105105
function(get_l0_loader_version)
106-
107106
set(L0_VERSIONEER_SRC
108107
[====[
109108
#include <iostream>
@@ -142,19 +141,20 @@ function(get_l0_loader_version)
142141

143142
# We need both the directories in the include path as ze_loader.h
144143
# includes "ze_api.h" and not "level_zero/ze_api.h".
145-
list(APPEND INCLUDE_DIRS ${LevelZero_INCLUDE_DIR})
146-
list(APPEND INCLUDE_DIRS ${LevelZero_INCLUDE_DIR}/level_zero)
144+
list(APPEND INCLUDE_DIRS ${LevelZeroRuntime_INCLUDE_DIR})
145+
list(APPEND INCLUDE_DIRS ${LevelZeroRuntime_INCLUDE_DIR}/level_zero)
147146
list(JOIN INCLUDE_DIRS ";" INCLUDE_DIRS_STR)
148147
try_run(L0_VERSIONEER_RUN L0_VERSIONEER_COMPILE
149-
"${CMAKE_BINARY_DIR}"
150-
"${L0_VERSIONEER_FILE}"
151-
LINK_LIBRARIES ${LevelZero_LIBRARY}
152-
CMAKE_FLAGS
153-
"-DINCLUDE_DIRECTORIES=${INCLUDE_DIRS_STR}"
154-
RUN_OUTPUT_VARIABLE L0_VERSION
148+
"${CMAKE_BINARY_DIR}"
149+
"${L0_VERSIONEER_FILE}"
150+
LINK_LIBRARIES ${LevelZeroRuntime_LIBRARY}
151+
CMAKE_FLAGS
152+
"-DINCLUDE_DIRECTORIES=${INCLUDE_DIRS_STR}"
153+
RUN_OUTPUT_VARIABLE L0_VERSION
155154
)
156-
if(${L0_VERSIONEER_COMPILE} AND (DEFINED L0_VERSIONEER_RUN))
157-
set(LevelZero_VERSION ${L0_VERSION} PARENT_SCOPE)
155+
156+
if(${L0_VERSIONEER_COMPILE} AND(DEFINED L0_VERSIONEER_RUN))
157+
set(LevelZeroRuntime_VERSION ${L0_VERSION} PARENT_SCOPE)
158158
message(STATUS "Found Level Zero of version: ${L0_VERSION}")
159159
else()
160160
message(FATAL_ERROR
@@ -163,59 +163,61 @@ function(get_l0_loader_version)
163163
endif()
164164
endfunction(get_l0_loader_version)
165165

166-
if(LevelZero_INCLUDE_DIR AND LevelZero_LIBRARY)
167-
list(APPEND LevelZero_LIBRARIES "${LevelZero_LIBRARY}")
168-
list(APPEND LevelZero_INCLUDE_DIRS ${LevelZero_INCLUDE_DIR})
166+
if(LevelZeroRuntime_INCLUDE_DIR AND LevelZeroRuntime_LIBRARY)
167+
list(APPEND LevelZeroRuntime_LIBRARIES "${LevelZeroRuntime_LIBRARY}")
168+
list(APPEND LevelZeroRuntime_INCLUDE_DIRS ${LevelZeroRuntime_INCLUDE_DIR})
169+
169170
if(OpenCL_FOUND)
170-
list(APPEND LevelZero_INCLUDE_DIRS ${OpenCL_INCLUDE_DIRS})
171+
list(APPEND LevelZeroRuntime_INCLUDE_DIRS ${OpenCL_INCLUDE_DIRS})
171172
endif()
172173

173-
cmake_path(GET LevelZero_LIBRARY PARENT_PATH LevelZero_LIBRARIES_PATH)
174-
set(LevelZero_LIBRARIES_DIR ${LevelZero_LIBRARIES_PATH})
175-
176-
if(NOT TARGET LevelZero::LevelZero)
177-
add_library(LevelZero::LevelZero INTERFACE IMPORTED)
178-
set_target_properties(LevelZero::LevelZero
179-
PROPERTIES INTERFACE_LINK_LIBRARIES "${LevelZero_LIBRARIES}"
180-
)
181-
set_target_properties(LevelZero::LevelZero
182-
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LevelZero_INCLUDE_DIRS}"
183-
)
174+
cmake_path(GET LevelZeroRuntime_LIBRARY PARENT_PATH LevelZeroRuntime_LIBRARIES_PATH)
175+
set(LevelZeroRuntime_LIBRARIES_DIR ${LevelZeroRuntime_LIBRARIES_PATH})
176+
177+
if(NOT TARGET LevelZeroRuntime::LevelZeroRuntime)
178+
add_library(LevelZeroRuntime::LevelZeroRuntime INTERFACE IMPORTED)
179+
set_target_properties(LevelZeroRuntime::LevelZeroRuntime
180+
PROPERTIES INTERFACE_LINK_LIBRARIES "${LevelZeroRuntime_LIBRARIES}"
181+
)
182+
set_target_properties(LevelZeroRuntime::LevelZeroRuntime
183+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LevelZeroRuntime_INCLUDE_DIRS}"
184+
)
184185
endif()
185186
endif()
186187

187188
# Check if a specific version of Level Zero is required
188-
if(LevelZero_FIND_VERSION)
189+
if(LevelZeroRuntime_FIND_VERSION)
189190
get_l0_loader_version()
190191
set(VERSION_GT_FIND_VERSION FALSE)
191192
compare_versions(
192-
${LevelZero_VERSION}
193-
${LevelZero_FIND_VERSION}
193+
${LevelZeroRuntime_VERSION}
194+
${LevelZeroRuntime_FIND_VERSION}
194195
VERSION_GT_FIND_VERSION
195196
)
197+
196198
if(${VERSION_GT_FIND_VERSION})
197-
set(LevelZero_FOUND TRUE)
199+
set(LevelZeroRuntime_FOUND TRUE)
198200
else()
199-
set(LevelZero_FOUND FALSE)
201+
set(LevelZeroRuntime_FOUND FALSE)
200202
endif()
201203
else()
202-
set(LevelZero_FOUND TRUE)
204+
set(LevelZeroRuntime_FOUND TRUE)
203205
endif()
204206

205-
find_package_handle_standard_args(LevelZero
207+
find_package_handle_standard_args(LevelZeroRuntime
206208
REQUIRED_VARS
207-
LevelZero_FOUND
208-
LevelZero_INCLUDE_DIRS
209-
LevelZero_LIBRARY
210-
LevelZero_LIBRARIES_DIR
209+
LevelZeroRuntime_FOUND
210+
LevelZeroRuntime_INCLUDE_DIRS
211+
LevelZeroRuntime_LIBRARY
212+
LevelZeroRuntime_LIBRARIES_DIR
211213
HANDLE_COMPONENTS
212214
)
213-
mark_as_advanced(LevelZero_LIBRARY LevelZero_INCLUDE_DIRS)
215+
mark_as_advanced(LevelZeroRuntime_LIBRARY LevelZeroRuntime_INCLUDE_DIRS)
214216

215-
if(LevelZero_FOUND)
216-
find_package_message(LevelZero "Found LevelZero: ${LevelZero_LIBRARY}"
217-
"(found version ${LevelZero_VERSION})"
217+
if(LevelZeroRuntime_FOUND)
218+
find_package_message(LevelZeroRuntime "Found LevelZero: ${LevelZeroRuntime_LIBRARY}"
219+
"(found version ${LevelZeroRuntime_VERSION})"
218220
)
219221
else()
220-
find_package_message(LevelZero "Could not find LevelZero" "")
222+
find_package_message(LevelZeroRuntime "Could not find LevelZero" "")
221223
endif()

mlir/lib/ExecutionEngine/CMakeLists.txt

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ set(LLVM_OPTIONAL_SOURCES
1414
RunnerUtils.cpp
1515
OptUtils.cpp
1616
JitRunner.cpp
17+
LevelZeroRuntimeWrappers.cpp
1718
SpirvCpuRuntimeWrappers.cpp
1819
SyclRuntimeWrappers.cpp
1920
VulkanRuntimeWrappers.cpp
@@ -374,19 +375,22 @@ if(LLVM_ENABLE_PIC)
374375
)
375376
endif()
376377

378+
if(MLIR_ENABLE_SYCL_RUNNER OR MLIR_ENABLE_LEVELZERO_RUNNER)
379+
# Both runtimes require LevelZero, so we can find it once.
380+
find_package(LevelZeroRuntime)
381+
382+
if(NOT LevelZeroRuntime_FOUND)
383+
message(FATAL_ERROR "LevelZero not found. Please set LEVEL_ZERO_DIR.")
384+
endif()
385+
endif()
386+
377387
if(MLIR_ENABLE_SYCL_RUNNER)
378388
find_package(SyclRuntime)
379389

380390
if(NOT SyclRuntime_FOUND)
381391
message(FATAL_ERROR "syclRuntime not found. Please set check oneapi installation and run setvars.sh.")
382392
endif()
383393

384-
find_package(LevelZero)
385-
386-
if(NOT LevelZero_FOUND)
387-
message(FATAL_ERROR "LevelZero not found. Please set LEVEL_ZERO_DIR.")
388-
endif()
389-
390394
add_mlir_library(mlir_sycl_runtime
391395
SHARED
392396
SyclRuntimeWrappers.cpp
@@ -404,9 +408,28 @@ if(LLVM_ENABLE_PIC)
404408
${MLIR_INCLUDE_DIRS}
405409
)
406410

407-
target_link_libraries(mlir_sycl_runtime PRIVATE LevelZero::LevelZero SyclRuntime::SyclRuntime)
411+
target_link_libraries(mlir_sycl_runtime PRIVATE LevelZeroRuntime::LevelZeroRuntime SyclRuntime::SyclRuntime)
412+
413+
set_property(TARGET mlir_sycl_runtime APPEND PROPERTY BUILD_RPATH "${LevelZeroRuntime_LIBRARIES_DIR}" "${SyclRuntime_LIBRARIES_DIR}")
414+
endif()
415+
416+
if(MLIR_ENABLE_LEVELZERO_RUNNER)
417+
add_mlir_library(mlir_levelzero_runtime
418+
SHARED
419+
LevelZeroRuntimeWrappers.cpp
420+
421+
EXCLUDE_FROM_LIBMLIR
422+
)
423+
424+
target_compile_options(mlir_levelzero_runtime PUBLIC -fexceptions -frtti)
425+
426+
target_include_directories(mlir_levelzero_runtime PRIVATE
427+
${MLIR_INCLUDE_DIRS}
428+
)
429+
430+
target_link_libraries(mlir_levelzero_runtime PRIVATE LevelZeroRuntime::LevelZeroRuntime)
408431

409-
set_property(TARGET mlir_sycl_runtime APPEND PROPERTY BUILD_RPATH "${LevelZero_LIBRARIES_DIR}" "${SyclRuntime_LIBRARIES_DIR}")
432+
set_property(TARGET mlir_levelzero_runtime APPEND PROPERTY BUILD_RPATH "${LevelZeroRuntime_LIBRARIES_DIR}")
410433
endif()
411434

412435
if(MLIR_ENABLE_SPIRV_CPU_RUNNER)

0 commit comments

Comments
 (0)