Skip to content

Commit 2f8de1a

Browse files
committed
[UR][Offload] Add option to build offload adapter
1 parent 6c7bc5c commit 2f8de1a

File tree

2 files changed

+89
-22
lines changed

2 files changed

+89
-22
lines changed

buildbot/configure.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ def do_configure(args, passthrough_args):
8282
if libclc_enabled:
8383
llvm_enable_projects += ";libclc"
8484

85+
# DeviceRIL uses -fuse-ld=lld, so enbale lld.
86+
if args.offload:
87+
llvm_enable_projects += ";lld"
88+
8589
if args.cuda:
8690
llvm_targets_to_build += ";NVPTX"
8791
libclc_targets_to_build = libclc_nvidia_target_names
@@ -210,6 +214,12 @@ def do_configure(args, passthrough_args):
210214
"-DSYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB={}".format(sycl_preview_lib),
211215
"-DBUG_REPORT_URL=https://github.com/intel/llvm/issues",
212216
]
217+
if args.offload:
218+
cmake_cmd.extend(
219+
[
220+
"-DUR_BUILD_ADAPTER_OFFLOAD=ON",
221+
]
222+
)
213223

214224
if libclc_enabled:
215225
cmake_cmd.extend(
@@ -340,6 +350,9 @@ def main():
340350
default="AMD",
341351
help="choose hardware platform for HIP backend",
342352
)
353+
parser.add_argument(
354+
"--offload", action="store_true", help="Enable UR liboffload adapter (experimental)"
355+
)
343356
parser.add_argument(
344357
"--level_zero_adapter_version",
345358
type=str,

unified-runtime/source/adapters/offload/CMakeLists.txt

Lines changed: 76 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,84 @@
55

66
set(TARGET_NAME ur_adapter_offload)
77

8-
set(UR_OFFLOAD_INSTALL_DIR "" CACHE PATH "Path to the directory containing libomptarget.so etc")
9-
if (UR_OFFLOAD_INSTALL_DIR STREQUAL "")
10-
message(FATAL_ERROR "UR_OFFLOAD_INSTALL_DIR must be defined for the Offload adapter")
11-
endif()
8+
add_ur_adapter(${TARGET_NAME}
9+
SHARED
10+
${CMAKE_CURRENT_SOURCE_DIR}/adapter.cpp
11+
${CMAKE_CURRENT_SOURCE_DIR}/context.cpp
12+
${CMAKE_CURRENT_SOURCE_DIR}/device.cpp
13+
${CMAKE_CURRENT_SOURCE_DIR}/enqueue.cpp
14+
${CMAKE_CURRENT_SOURCE_DIR}/event.cpp
15+
${CMAKE_CURRENT_SOURCE_DIR}/kernel.cpp
16+
${CMAKE_CURRENT_SOURCE_DIR}/memory.cpp
17+
${CMAKE_CURRENT_SOURCE_DIR}/platform.cpp
18+
${CMAKE_CURRENT_SOURCE_DIR}/program.cpp
19+
${CMAKE_CURRENT_SOURCE_DIR}/queue.cpp
20+
${CMAKE_CURRENT_SOURCE_DIR}/ur2offload.hpp
21+
${CMAKE_CURRENT_SOURCE_DIR}/ur_interface_loader.cpp
22+
${CMAKE_CURRENT_SOURCE_DIR}/usm.cpp
23+
)
1224

25+
set(UR_OFFLOAD_INSTALL_DIR "" CACHE PATH "Path to the directory containing libomptarget.so etc")
1326
set(UR_OFFLOAD_INCLUDE_DIR "" CACHE PATH "Path to the directory containing LLVM headers")
14-
if (UR_OFFLOAD_INCLUDE_DIR STREQUAL "")
15-
message(FATAL_ERROR "UR_OFFLOAD_INCLUDE_DIR must be defined for the Offload adapter")
27+
if (UR_OFFLOAD_INSTALL_DIR STREQUAL "" OR UR_OFFLOAD_INCLUDE_DIR STREQUAL "")
28+
include(ExternalProject)
29+
30+
set(LLVM_PROJECT_GIT https://github.com/llvm/llvm-project.git)
31+
set(LLVM_PROJECT_TAG ffddf33beb8097e760fafcbdd28d56c1d055e820)
32+
message(STATUS "UR_OFFLOAD_INSTALL_DIR and/or UR_OFFLOAD_INCLUDE_DIR not set, building liboffload runtime from source using llvm-project tag: ${LLVM_PROJECT_TAG}")
33+
set(LLVM_PROJECT_SOURCE_DIR ${CMAKE_BINARY_DIR}/llvm-project-src)
34+
set(OPENMP_INSTALL_DIR ${CMAKE_BINARY_DIR}/openmp-install)
35+
# Install to the same directory as main build
36+
set(UR_OFFLOAD_INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
37+
set(UR_OFFLOAD_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/include)
38+
# Clone llvm-project only once
39+
ExternalProject_Add(llvm_project_src
40+
GIT_REPOSITORY ${LLVM_PROJECT_GIT}
41+
GIT_TAG ${LLVM_PROJECT_TAG}
42+
SOURCE_DIR ${LLVM_PROJECT_SOURCE_DIR}
43+
CONFIGURE_COMMAND ""
44+
BUILD_COMMAND ""
45+
INSTALL_COMMAND ""
46+
UPDATE_COMMAND ""
47+
)
48+
# Build OpenMP runtime (required dependency for offlload's libomptarget) from the cloned source
49+
ExternalProject_Add(openmp_ext
50+
# DeviceRIL uses -fuse-ld=lld, so add lld to the dependencies.
51+
DEPENDS llvm_project_src llvm-tblgen LLVMSupport clang lld
52+
SOURCE_DIR ${LLVM_PROJECT_SOURCE_DIR}/openmp
53+
CMAKE_ARGS
54+
-DCMAKE_INSTALL_PREFIX=${OPENMP_INSTALL_DIR}
55+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
56+
-DCMAKE_C_COMPILER=${CMAKE_BINARY_DIR}/bin/clang
57+
-DCMAKE_CXX_COMPILER=${CMAKE_BINARY_DIR}/bin/clang++
58+
-DLIBOMP_OMPD_GDB_SUPPORT=OFF
59+
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install
60+
UPDATE_COMMAND ""
61+
DOWNLOAD_COMMAND ""
62+
)
63+
64+
# Build liboffload runtime from the same source tree
65+
ExternalProject_Add(offload_ext
66+
DEPENDS openmp_ext
67+
SOURCE_DIR ${LLVM_PROJECT_SOURCE_DIR}/offload
68+
LIST_SEPARATOR |
69+
CMAKE_ARGS
70+
-DCMAKE_INSTALL_PREFIX=${UR_OFFLOAD_INSTALL_DIR}
71+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
72+
-DCMAKE_C_COMPILER=${CMAKE_BINARY_DIR}/bin/clang
73+
-DCMAKE_CXX_COMPILER=${CMAKE_BINARY_DIR}/bin/clang++
74+
-DLIBOMPTARGET_LLVM_INCLUDE_DIRS=${LLVM_PROJECT_SOURCE_DIR}/llvm/include;${CMAKE_BINARY_DIR}/include
75+
-DLLVM_DIR=${CMAKE_BINARY_DIR}/lib/cmake/llvm
76+
-DLIBOMPTARGET_PLUGINS_TO_BUILD=cuda|amdgpu
77+
-DLIBOMP_INCLUDE_DIR=${OPENMP_INSTALL_DIR}/include
78+
-DLLVM_TABLEGEN=${CMAKE_BINARY_DIR}/bin/llvm-tblgen
79+
-DCMAKE_PREFIX_PATH=${OPENMP_INSTALL_DIR};${CMAKE_BINARY_DIR}/bin
80+
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install
81+
UPDATE_COMMAND ""
82+
DOWNLOAD_COMMAND ""
83+
BUILD_BYPRODUCTS "${UR_OFFLOAD_INSTALL_DIR}/lib/libLLVMOffload.so"
84+
)
85+
add_dependencies(${TARGET_NAME} offload_ext)
1686
endif()
1787

1888
# When targetting CUDA devices, we need a workaround to avoid sending PTX to
@@ -29,22 +99,6 @@ if (NOT TARGET cudadrv)
2999
)
30100
endif()
31101

32-
add_ur_adapter(${TARGET_NAME}
33-
SHARED
34-
${CMAKE_CURRENT_SOURCE_DIR}/adapter.cpp
35-
${CMAKE_CURRENT_SOURCE_DIR}/context.cpp
36-
${CMAKE_CURRENT_SOURCE_DIR}/device.cpp
37-
${CMAKE_CURRENT_SOURCE_DIR}/enqueue.cpp
38-
${CMAKE_CURRENT_SOURCE_DIR}/event.cpp
39-
${CMAKE_CURRENT_SOURCE_DIR}/kernel.cpp
40-
${CMAKE_CURRENT_SOURCE_DIR}/memory.cpp
41-
${CMAKE_CURRENT_SOURCE_DIR}/platform.cpp
42-
${CMAKE_CURRENT_SOURCE_DIR}/program.cpp
43-
${CMAKE_CURRENT_SOURCE_DIR}/queue.cpp
44-
${CMAKE_CURRENT_SOURCE_DIR}/ur2offload.hpp
45-
${CMAKE_CURRENT_SOURCE_DIR}/ur_interface_loader.cpp
46-
${CMAKE_CURRENT_SOURCE_DIR}/usm.cpp
47-
)
48102
install_ur_library(${TARGET_NAME})
49103

50104
set_target_properties(${TARGET_NAME} PROPERTIES

0 commit comments

Comments
 (0)