Skip to content

Commit d7a7de7

Browse files
smaslov-intelPavel V Chupinsteffenlarsen
authored
[SYCL] Add Unified Runtime Plugin (#7521)
Add new pi_unified_plugin that implements only piPlatformsGet (via Unified Runtime zerPlatformGet) The next step is to add a new backend to SYCL and actually start calling to pi_unified_plugin Signed-off-by: Sergey V Maslov <[email protected]> Co-authored-by: Pavel V Chupin <[email protected]> Co-authored-by: Steffen Larsen <[email protected]>
1 parent 9dc14a2 commit d7a7de7

21 files changed

+495
-432
lines changed
Lines changed: 70 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -1,143 +1,106 @@
11
# PI Level Zero plugin library
22

3-
if(MSVC)
4-
set(LEVEL_ZERO_LOADER
5-
"${LLVM_LIBRARY_OUTPUT_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}ze_loader${CMAKE_STATIC_LIBRARY_SUFFIX}")
6-
else()
7-
set(LEVEL_ZERO_LOADER
8-
"${LLVM_LIBRARY_OUTPUT_INTDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}ze_loader${CMAKE_SHARED_LIBRARY_SUFFIX}")
9-
endif()
10-
113
if (NOT DEFINED LEVEL_ZERO_LIBRARY OR NOT DEFINED LEVEL_ZERO_INCLUDE_DIR)
124
message(STATUS "Download Level Zero loader and headers from github.com")
13-
if (CMAKE_C_COMPILER)
14-
list(APPEND AUX_CMAKE_FLAGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER})
15-
endif()
16-
if (CMAKE_CXX_COMPILER)
17-
list(APPEND AUX_CMAKE_FLAGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER})
18-
endif()
19-
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/level_zero_loader_build)
20-
set(LEVEL_ZERO_LOADER_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/level_zero/level_zero_loader")
21-
if (NOT DEFINED SYCL_EP_LEVEL_ZERO_LOADER_SKIP_AUTO_UPDATE)
22-
set(SYCL_EP_LEVEL_ZERO_LOADER_SKIP_AUTO_UPDATE ${SYCL_EXTERNAL_PROJECTS_SKIP_AUTO_UPDATE})
23-
endif()
24-
set(LEVEL_ZERO_LOADER_SOURCE_VERSION v1.8.8)
25-
26-
#TODO: Replace ExternalProject with FetchContent for better maintainance and
27-
# cmake files simplification
28-
include(ExternalProject)
29-
ExternalProject_Add(level-zero-loader
30-
GIT_REPOSITORY https://github.com/oneapi-src/level-zero.git
31-
GIT_TAG ${LEVEL_ZERO_LOADER_SOURCE_VERSION}
32-
UPDATE_DISCONNECTED ${SYCL_EP_LEVEL_ZERO_LOADER_SKIP_AUTO_UPDATE}
33-
SOURCE_DIR ${LEVEL_ZERO_LOADER_SOURCE_DIR}
34-
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/level_zero_loader_build"
35-
INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/level_zero_loader_install"
36-
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
37-
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
38-
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
39-
-DCMAKE_INSTALL_LIBDIR:PATH=lib${LLVM_LIBDIR_SUFFIX}
40-
${AUX_CMAKE_FLAGS}
41-
LOG_DOWNLOAD 1
42-
LOG_UPDATE 1
43-
LOG_CONFIGURE 1
44-
LOG_BUILD 1
45-
LOG_INSTALL 1
46-
STEP_TARGETS configure,build,install
47-
DEPENDS OpenCL-Headers
48-
BUILD_BYPRODUCTS ${LEVEL_ZERO_LOADER}
49-
)
50-
ExternalProject_Add_Step(level-zero-loader llvminstall
51-
COMMAND ${CMAKE_COMMAND} -E copy_directory <INSTALL_DIR>/lib/ ${LLVM_BINARY_DIR}/lib
52-
COMMAND ${CMAKE_COMMAND} -E copy_directory <INSTALL_DIR>/include/ ${LLVM_BINARY_DIR}/include/sycl
53-
COMMENT "Installing level-zero-loader into the LLVM binary directory"
54-
DEPENDEES install
55-
)
565

57-
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/level_zero_loader_install/"
58-
DESTINATION "."
59-
COMPONENT level-zero-loader
60-
)
6+
set(LEVEL_ZERO_LOADER_REPO "https://github.com/oneapi-src/level-zero.git")
7+
set(LEVEL_ZERO_LOADER_TAG v1.8.8)
618

62-
set(LEVEL_ZERO_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/level_zero_loader_install/include/
63-
CACHE INTERNAL "Path containing Level_Zero header files.")
64-
else()
65-
file(GLOB LEVEL_ZERO_LIBRARY_SRC "${LEVEL_ZERO_LIBRARY}*")
66-
get_filename_component(LEVEL_ZERO_LIB_NAME ${LEVEL_ZERO_LIBRARY} NAME)
67-
add_custom_target(level-zero-loader
68-
DEPENDS
69-
${LLVM_LIBRARY_OUTPUT_INTDIR}/${LEVEL_ZERO_LIB_NAME}
70-
${LLVM_BINARY_DIR}/include/sycl/level_zero
71-
)
72-
add_custom_command(
73-
OUTPUT
74-
${LLVM_LIBRARY_OUTPUT_INTDIR}/${LEVEL_ZERO_LIB_NAME}
75-
${LLVM_BINARY_DIR}/include/sycl/level_zero
76-
COMMENT
77-
"Copying Level Zero loader and headers"
78-
COMMAND
79-
${CMAKE_COMMAND} -E copy ${LEVEL_ZERO_LIBRARY_SRC} ${LLVM_LIBRARY_OUTPUT_INTDIR}
80-
COMMAND
81-
${CMAKE_COMMAND} -E copy_directory ${LEVEL_ZERO_INCLUDE_DIR} ${LLVM_BINARY_DIR}/include/sycl
82-
DEPENDS
83-
${LEVEL_ZERO_LIBRARY}
84-
${LEVEL_ZERO_INCLUDE_DIR}
9+
# Disable due to a bug https://github.com/oneapi-src/level-zero/issues/104
10+
set(CMAKE_INCLUDE_CURRENT_DIR OFF)
11+
12+
message(STATUS "Will fetch Level Zero Loader from ${LEVEL_ZERO_LOADER_REPO}")
13+
include(FetchContent)
14+
FetchContent_Declare(level-zero-loader
15+
GIT_REPOSITORY ${LEVEL_ZERO_LOADER_REPO}
16+
GIT_TAG ${LEVEL_ZERO_LOADER_TAG}
8517
)
86-
endif()
8718

88-
list(APPEND SYCL_TOOLCHAIN_DEPLOY_COMPONENTS level-zero-loader level-zero-headers)
19+
# Suppress some pedantic warnings for Level Zero build
20+
set(CMAKE_CXX_FLAGS_BAK "${CMAKE_CXX_FLAGS}")
21+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-but-set-variable")
22+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-pedantic")
23+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-stringop-truncation")
24+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option")
8925

90-
include_directories("${LEVEL_ZERO_INCLUDE_DIR}")
26+
FetchContent_MakeAvailable(level-zero-loader)
27+
FetchContent_GetProperties(level-zero-loader)
28+
29+
# Restore original flags
30+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_BAK}")
31+
32+
set(LEVEL_ZERO_LIBRARY ze_loader)
33+
set(LEVEL_ZERO_INCLUDE_DIR
34+
${level-zero-loader_SOURCE_DIR}/include CACHE PATH "Path to Level Zero Headers")
35+
endif()
36+
37+
add_library (LevelZeroLoader INTERFACE)
38+
target_link_libraries(LevelZeroLoader
39+
INTERFACE "${LEVEL_ZERO_LIBRARY}"
40+
)
9141

9242
add_library (LevelZeroLoader-Headers INTERFACE)
93-
add_library (LevelZeroLoader::Headers ALIAS LevelZeroLoader-Headers)
9443
target_include_directories(LevelZeroLoader-Headers
9544
INTERFACE "${LEVEL_ZERO_INCLUDE_DIR}"
9645
)
9746

9847
if (SYCL_ENABLE_XPTI_TRACING)
9948
set(XPTI_PROXY_SRC "${CMAKE_SOURCE_DIR}/../xpti/src/xpti_proxy.cpp")
49+
set(XPTI_INCLUDE "${CMAKE_SOURCE_DIR}/../xpti/include")
50+
set(XPTI_LIBS "${CMAKE_DL_LIBS}")
10051
endif()
10152

53+
find_package(Python3 REQUIRED)
54+
55+
add_custom_target(ze-api
56+
COMMAND ${Python3_EXECUTABLE}
57+
${CMAKE_CURRENT_SOURCE_DIR}/ze_api_generator.py
58+
${LEVEL_ZERO_INCLUDE_DIR}/ze_api.h
59+
BYPRODUCTS
60+
${CMAKE_CURRENT_BINARY_DIR}/ze_api.def
61+
)
62+
10263
find_package(Threads REQUIRED)
10364

10465
add_sycl_plugin(level_zero
10566
SOURCES
106-
"${sycl_inc_dir}/sycl/detail/pi.h"
107-
"${CMAKE_CURRENT_SOURCE_DIR}/pi_level_zero.cpp"
108-
"${CMAKE_CURRENT_SOURCE_DIR}/pi_level_zero.hpp"
109-
"${CMAKE_CURRENT_SOURCE_DIR}/usm_allocator.cpp"
110-
"${CMAKE_CURRENT_SOURCE_DIR}/usm_allocator.hpp"
111-
"${CMAKE_CURRENT_SOURCE_DIR}/tracing.cpp"
67+
# These are short-term shared with Unified Runtime
68+
# The two plugins define a few things differrently so must
69+
# be built separately. This difference is spelled in
70+
# their "ur_bindings.hpp" files.
71+
#
72+
"ur_bindings.hpp"
73+
"../unified_runtime/pi2ur.hpp"
74+
"../unified_runtime/pi2ur.cpp"
75+
"../unified_runtime/ur/ur.hpp"
76+
"../unified_runtime/ur/ur.cpp"
77+
"../unified_runtime/ur/adapters/level_zero/ur_level_zero.hpp"
78+
"../unified_runtime/ur/adapters/level_zero/ur_level_zero.cpp"
79+
# Following are the PI Level-Zero Plugin only codes.
80+
"pi_level_zero.cpp"
81+
"pi_level_zero.hpp"
82+
"usm_allocator.cpp"
83+
"usm_allocator.hpp"
84+
"tracing.cpp"
11285
${XPTI_PROXY_SRC}
86+
INCLUDE_DIRS
87+
${CMAKE_CURRENT_BINARY_DIR} # for ze_api.def
88+
${CMAKE_CURRENT_SOURCE_DIR} # for Level-Zero Plugin "ur_bindings.hpp"
89+
${CMAKE_CURRENT_SOURCE_DIR}/../unified_runtime # for Unified Runtime
90+
${XPTI_INCLUDE}
11391
LIBRARIES
114-
"${LEVEL_ZERO_LOADER}"
92+
LevelZeroLoader-Headers
93+
UnifiedRuntime-Headers
94+
LevelZeroLoader
11595
Threads::Threads
116-
unified_runtime
96+
${XPTI_LIBS}
11797
)
11898

119-
find_package(Python3 REQUIRED)
120-
121-
add_custom_target(ze-api
122-
COMMAND ${Python3_EXECUTABLE}
123-
${CMAKE_CURRENT_SOURCE_DIR}/ze_api_generator.py
124-
${LEVEL_ZERO_INCLUDE_DIR}/level_zero/ze_api.h
125-
BYPRODUCTS
126-
${CMAKE_CURRENT_BINARY_DIR}/ze_api.def
127-
)
128-
target_include_directories(pi_level_zero PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
12999
add_dependencies(pi_level_zero ze-api)
130100

131101
if (SYCL_ENABLE_XPTI_TRACING)
132102
target_compile_definitions(pi_level_zero PRIVATE
133103
XPTI_ENABLE_INSTRUMENTATION
134104
XPTI_STATIC_LIBRARY
135105
)
136-
target_include_directories(pi_level_zero PRIVATE "${CMAKE_SOURCE_DIR}/../xpti/include")
137-
target_link_libraries(pi_level_zero PRIVATE ${CMAKE_DL_LIBS})
138-
endif()
139-
140-
if (TARGET level-zero-loader)
141-
add_dependencies(ze-api level-zero-loader)
142-
add_dependencies(pi_level_zero level-zero-loader)
143106
endif()

0 commit comments

Comments
 (0)