Skip to content

Commit 08ea7a8

Browse files
authored
Merge branch 'master' into feat/hygon-gemm
2 parents 77b13ef + 2a2375a commit 08ea7a8

2 files changed

Lines changed: 68 additions & 29 deletions

File tree

CMakeLists.txt

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
cmake_minimum_required(VERSION 3.18)
22
project(InfiniOps LANGUAGES CXX)
33

4+
if(POLICY CMP0116)
5+
cmake_policy(SET CMP0116 NEW)
6+
endif()
7+
48
set(CMAKE_CXX_STANDARD 17)
59
set(CMAKE_CXX_STANDARD_REQUIRED ON)
610

@@ -292,34 +296,24 @@ if(WITH_NVIDIA)
292296
find_package(CUDAToolkit REQUIRED)
293297
endif()
294298

295-
# Iluvatar: CUDA-compatible device, uses `clang++` with `-x ivcore` (not `nvcc`).
299+
# Iluvatar: CUDA-compatible device. CoreX clang++ works for `-x ivcore`
300+
# compilation, but CMake's CUDA language path appends `-x cuda` and can crash
301+
# the compiler. Keep CMake's CUDA language disabled for this backend and
302+
# compile the few generated dispatch sources that need CUDA syntax via custom
303+
# clang++ commands.
296304
# Reference: `InfiniCore` `xmake/iluvatar.lua`.
297305
if(WITH_ILUVATAR)
298306
add_compile_definitions(WITH_ILUVATAR=1)
299307
set(ILUVATAR_ARCH "ivcore20" CACHE STRING "Iluvatar GPU architecture")
300-
find_program(CLANGXX NAMES clang++)
301-
if(CLANGXX)
302-
set(CMAKE_CUDA_COMPILER "${CLANGXX}" CACHE STRING "Iluvatar CUDA compiler (clang++)")
303-
else()
304-
set(CMAKE_CUDA_COMPILER "clang++" CACHE STRING "Iluvatar CUDA compiler (clang++)")
308+
find_program(ILUVATAR_CUDA_COMPILER NAMES clang++ HINTS /usr/local/corex/bin)
309+
if(NOT ILUVATAR_CUDA_COMPILER)
310+
message(FATAL_ERROR "`WITH_ILUVATAR` is `ON` but CoreX `clang++` was not found.")
305311
endif()
306-
# `-x ivcore` must not be in `CMAKE_CUDA_FLAGS` — CMake passes those flags
307-
# to both compile and link steps. During linking, `-x ivcore` causes
308-
# `clang++` to re-parse `.o` files as source code.
309-
set(CMAKE_CUDA_FLAGS "--cuda-gpu-arch=${ILUVATAR_ARCH} -fPIC -Wno-error=unused-variable -Wno-error=unused-private-field -Wno-unused-variable -std=c++17" CACHE STRING "Iluvatar CUDA flags")
310-
set(CMAKE_CUDA_SEPARABLE_COMPILATION OFF CACHE BOOL "Disable RDC for Iluvatar")
311-
set(CMAKE_CUDA_ARCHITECTURES OFF CACHE STRING "Iluvatar CUDA architectures (passed via CMAKE_CUDA_FLAGS)")
312-
# Iluvatar does not ship `libcudadevrt`, which CMake's compiler test
313-
# tries to link. Disable automatic CUDA runtime linking and link
314-
# manually via `find_package(CUDAToolkit)` instead.
315-
set(CMAKE_CUDA_RUNTIME_LIBRARY NONE)
316-
message(STATUS "Iluvatar: CUDA compiler ${CMAKE_CUDA_COMPILER}, arch ${ILUVATAR_ARCH}")
317-
enable_language(CUDA)
312+
set(ILUVATAR_CUDA_FLAGS
313+
"--cuda-gpu-arch=${ILUVATAR_ARCH};-fPIC;-Wno-error=unused-variable;-Wno-error=unused-private-field;-Wno-unused-variable;-std=c++17;--cuda-path=/usr/local/corex;-x;ivcore"
314+
CACHE STRING "Iluvatar CUDA compiler flags")
315+
message(STATUS "Iluvatar: CUDA compiler ${ILUVATAR_CUDA_COMPILER}, arch ${ILUVATAR_ARCH}")
318316
find_package(CUDAToolkit REQUIRED)
319-
# Add `-x ivcore` as a compile-only flag so it is not passed during
320-
# linking, where it would cause `clang++` to re-parse `.o` files as
321-
# source.
322-
add_compile_options($<$<COMPILE_LANGUAGE:CUDA>:-x$<SEMICOLON>ivcore>)
323317
endif()
324318

325319
if(WITH_HYGON)

src/CMakeLists.txt

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,19 +61,12 @@ if(WITH_ILUVATAR)
6161

6262
file(GLOB_RECURSE ILUVATAR_SOURCES CONFIGURE_DEPENDS ${ILUVATAR_PATTERNS})
6363

64-
enable_language(CUDA)
65-
6664
target_compile_definitions(infiniops PUBLIC WITH_ILUVATAR=1)
6765
target_sources(infiniops PRIVATE ${ILUVATAR_SOURCES})
6866

6967
find_package(CUDAToolkit REQUIRED)
7068
target_link_libraries(infiniops PUBLIC CUDA::cudart CUDA::cublas CUDA::cuda_driver)
7169

72-
set_target_properties(infiniops PROPERTIES
73-
CUDA_STANDARD 17
74-
CUDA_STANDARD_REQUIRED ON
75-
)
76-
7770
list(APPEND DEVICE_LIST "iluvatar")
7871
endif()
7972

@@ -552,9 +545,61 @@ if(GENERATE_PYTHON_BINDINGS)
552545
endif()
553546
list(APPEND PYBIND11_COMPILE_SOURCES ${PYBIND11_DISPATCH_SOURCES})
554547

548+
<<<<<<< feat/hygon-gemm
555549
# TODO: There might be a better solution.
556550
if(WITH_NVIDIA OR WITH_ILUVATAR OR WITH_HYGON)
551+
=======
552+
if(WITH_NVIDIA)
553+
>>>>>>> master
557554
set_source_files_properties(${PYBIND11_COMPILE_SOURCES} PROPERTIES LANGUAGE CUDA)
555+
elseif(WITH_ILUVATAR)
556+
set(_iluvatar_dispatch_include_flags
557+
"-I${CMAKE_CURRENT_SOURCE_DIR}"
558+
"-I${PROJECT_SOURCE_DIR}"
559+
"-I${PROJECT_SOURCE_DIR}/generated")
560+
foreach(_dir IN LISTS TORCH_INCLUDE_DIRS CUDAToolkit_INCLUDE_DIRS)
561+
list(APPEND _iluvatar_dispatch_include_flags "-I${_dir}")
562+
endforeach()
563+
564+
set(_iluvatar_dispatch_defs -DWITH_ILUVATAR=1)
565+
if(WITH_TORCH)
566+
list(APPEND _iluvatar_dispatch_defs -DWITH_TORCH=1)
567+
endif()
568+
if(DEFINED TORCH_CXX11_ABI)
569+
list(APPEND _iluvatar_dispatch_defs "-D_GLIBCXX_USE_CXX11_ABI=${TORCH_CXX11_ABI}")
570+
endif()
571+
572+
set(ILUVATAR_DISPATCH_OBJECTS)
573+
set(_iluvatar_dispatch_object_dir "${CMAKE_CURRENT_BINARY_DIR}/iluvatar_dispatch_objs")
574+
foreach(_src IN LISTS PYBIND11_DISPATCH_SOURCES)
575+
get_filename_component(_name "${_src}" NAME_WE)
576+
set(_obj "${_iluvatar_dispatch_object_dir}/${_name}.o")
577+
set(_dep "${_obj}.d")
578+
set(_depfile_arg)
579+
if(CMAKE_GENERATOR MATCHES "Ninja")
580+
set(_depfile_arg DEPFILE "${_dep}")
581+
endif()
582+
add_custom_command(
583+
OUTPUT "${_obj}"
584+
COMMAND ${CMAKE_COMMAND} -E make_directory "${_iluvatar_dispatch_object_dir}"
585+
COMMAND ${ILUVATAR_CUDA_COMPILER}
586+
${_iluvatar_dispatch_defs}
587+
${_iluvatar_dispatch_include_flags}
588+
${ILUVATAR_CUDA_FLAGS}
589+
-MMD -MF "${_dep}"
590+
-c "${_src}" -o "${_obj}"
591+
DEPENDS "${_src}"
592+
${_depfile_arg}
593+
COMMENT "Compiling ${_name}.cc with CoreX clang++"
594+
VERBATIM
595+
)
596+
list(APPEND ILUVATAR_DISPATCH_OBJECTS "${_obj}")
597+
endforeach()
598+
599+
list(REMOVE_ITEM PYBIND11_COMPILE_SOURCES ${PYBIND11_DISPATCH_SOURCES})
600+
set_source_files_properties(${ILUVATAR_DISPATCH_OBJECTS}
601+
PROPERTIES EXTERNAL_OBJECT TRUE GENERATED TRUE)
602+
list(APPEND PYBIND11_COMPILE_SOURCES ${ILUVATAR_DISPATCH_OBJECTS})
558603
endif()
559604

560605
find_package(Python COMPONENTS Interpreter Development)

0 commit comments

Comments
 (0)