Skip to content

Commit 69c7287

Browse files
authored
Fix XPU build (#256)
* Fix XPU build The XPU build would fail in some cases, e.g. when using sycl-cutlass. The compiler detection really needs to be done before the CMake project is defined. * Try to fix Windows Python build while also keeping XPU fixed * CI: build XPU cutlass-gemm kernel
1 parent b66edd8 commit 69c7287

2 files changed

Lines changed: 27 additions & 14 deletions

File tree

.github/workflows/build_kernel_xpu.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,6 @@ jobs:
3535

3636
- name: Build relu kernel (compiler flags)
3737
run: ( cd builder/examples/relu-compiler-flags && nix build .\#redistributable.torch29-cxx11-xpu20252-x86_64-linux )
38+
39+
- name: Build cutlass-gemm kernel
40+
run: ( cd builder/examples/cutlass-gemm && nix build .\#redistributable.torch29-cxx11-xpu20252-x86_64-linux -L )

build2cmake/src/templates/preamble.cmake

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,19 @@
11
cmake_minimum_required(VERSION 3.26)
2+
3+
# Set Intel SYCL compiler before project() call
4+
find_program(ICX_COMPILER icx)
5+
find_program(ICPX_COMPILER icpx)
6+
7+
if(ICX_COMPILER OR ICPX_COMPILER)
8+
set(CMAKE_C_COMPILER ${ICX_COMPILER})
9+
10+
if(WIN32)
11+
set(CMAKE_CXX_COMPILER ${ICX_COMPILER})
12+
else()
13+
set(CMAKE_CXX_COMPILER ${ICPX_COMPILER})
14+
endif()
15+
endif()
16+
217
project({{name}} LANGUAGES CXX)
318

419
install(CODE "set(CMAKE_INSTALL_LOCAL_ONLY TRUE)" ALL_COMPONENTS)
@@ -23,16 +38,16 @@ else()
2338
find_package(Python3 REQUIRED COMPONENTS Development Development.SABIModule Interpreter)
2439
endif()
2540

41+
get_gpu_lang(DETECTED_GPU_LANG)
42+
set(GPU_LANG "${DETECTED_GPU_LANG}" CACHE STRING "GPU language")
43+
message(STATUS "Using GPU language: ${GPU_LANG}")
44+
2645
append_cmake_prefix_path("torch" "torch.utils.cmake_prefix_path")
2746

2847
find_package(Torch REQUIRED)
2948

3049
run_python(TORCH_VERSION "import torch; print(torch.__version__.split('+')[0])" "Failed to get Torch version")
3150

32-
get_gpu_lang(DETECTED_GPU_LANG)
33-
set(GPU_LANG "${DETECTED_GPU_LANG}" CACHE STRING "GPU language")
34-
message(STATUS "Using GPU language: ${GPU_LANG}")
35-
3651
{% if torch_minver %}
3752
if (TORCH_VERSION VERSION_LESS {{ torch_minver }})
3853
message(FATAL_ERROR "Torch version ${TORCH_VERSION} is too old. "
@@ -109,6 +124,10 @@ elseif(GPU_LANG STREQUAL "METAL")
109124
set(ALL_METAL_SOURCES)
110125
set(METAL_INCLUDE_DIRS)
111126
elseif(GPU_LANG STREQUAL "SYCL")
127+
if(NOT ICX_COMPILER AND NOT ICPX_COMPILER)
128+
message(FATAL_ERROR "Intel SYCL C++ compiler (icpx) and/or C compiler (icx) not found. Please install Intel oneAPI toolkit.")
129+
endif()
130+
112131
add_compile_definitions(XPU_KERNEL)
113132
add_compile_definitions(USE_XPU)
114133
else()
@@ -147,32 +166,23 @@ elseif(GPU_LANG STREQUAL "HIP")
147166
set(ROCM_ARCHS ${GPU_ARCHES})
148167
message(STATUS "ROCM supported target architectures: ${ROCM_ARCHS}")
149168
elseif(GPU_LANG STREQUAL "SYCL")
150-
find_program(ICX_COMPILER icx)
151-
find_program(ICPX_COMPILER icpx)
152-
153-
if(NOT ICX_COMPILER AND NOT ICPX_COMPILER)
154-
message(FATAL_ERROR "Intel SYCL C++ compiler (icpx) and/or C compiler (icx) not found. Please install Intel oneAPI toolkit.")
155-
endif()
156-
157169
execute_process(
158170
COMMAND ${ICPX_COMPILER} --version
159171
OUTPUT_VARIABLE ICPX_VERSION_OUTPUT
160172
OUTPUT_STRIP_TRAILING_WHITESPACE
161173
)
162174
string(REGEX MATCH "[0-9]+\\.[0-9]+" DPCPP_VERSION "${ICPX_VERSION_OUTPUT}")
163175
set(DPCPP_VERSION "${DPCPP_VERSION}" CACHE STRING "DPCPP major.minor version")
164-
set(CMAKE_C_COMPILER ${ICX_COMPILER})
165176

166177
# On Windows, use icx (MSVC-compatible) for C++ to work with Ninja generator
167178
# On Linux, use icpx (GNU-compatible) for C++
168179
if(WIN32)
169-
set(CMAKE_CXX_COMPILER ${ICX_COMPILER})
170180
message(STATUS "Using Intel SYCL C++ compiler: ${ICX_COMPILER} and C compiler: ${ICX_COMPILER} Version: ${DPCPP_VERSION} (Windows MSVC-compatible mode)")
171181
else()
172-
set(CMAKE_CXX_COMPILER ${ICPX_COMPILER})
173182
message(STATUS "Using Intel SYCL C++ compiler: ${ICPX_COMPILER} and C compiler: ${ICX_COMPILER} Version: ${DPCPP_VERSION}")
174183
endif()
175184

185+
176186
set(sycl_link_flags "-fsycl;--offload-compress;-fsycl-targets=spir64_gen,spir64;-Xs;-device pvc,xe-lpg,ats-m150 -options ' -cl-intel-enable-auto-large-GRF-mode -cl-poison-unsupported-fp64-kernels -cl-intel-greater-than-4GB-buffer-required';")
177187
set(GPU_FLAGS "-fsycl;-fhonor-nans;-fhonor-infinities;-fno-associative-math;-fno-approx-func;-fno-sycl-instrument-device-code;--offload-compress;-fsycl-targets=spir64_gen,spir64;")
178188
set(GPU_ARCHES "")

0 commit comments

Comments
 (0)