From ce5988749c9c4bdc3f743053522314eed6a3e793 Mon Sep 17 00:00:00 2001 From: Abhishek Bagusetty Date: Wed, 17 Sep 2025 19:35:51 +0000 Subject: [PATCH 1/2] [BLAS][SPARSE][DPC++] Add CUDA_TARGETS option to pass for AoT compilation --- CMakeLists.txt | 1 + src/blas/backends/cublas/CMakeLists.txt | 7 +++++-- src/blas/backends/generic/CMakeLists.txt | 6 +++--- src/sparse_blas/backends/cusparse/CMakeLists.txt | 9 +++++++++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 46198d185..b43a97917 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,6 +70,7 @@ option(ENABLE_CUSPARSE_BACKEND "Enable the cuSPARSE backend for the SPARSE_BLAS option(ENABLE_ROCSPARSE_BACKEND "Enable the rocSPARSE backend for the SPARSE_BLAS interface" OFF) set(ONEMATH_SYCL_IMPLEMENTATION "dpc++" CACHE STRING "Name of the SYCL compiler") +set(CUDA_TARGETS "" CACHE STRING "Target CUDA architectures") set(HIP_TARGETS "" CACHE STRING "Target HIP architectures") ## Testing diff --git a/src/blas/backends/cublas/CMakeLists.txt b/src/blas/backends/cublas/CMakeLists.txt index 0015af52b..d62f05064 100644 --- a/src/blas/backends/cublas/CMakeLists.txt +++ b/src/blas/backends/cublas/CMakeLists.txt @@ -42,11 +42,14 @@ target_include_directories(${LIB_OBJ} target_compile_options(${LIB_OBJ} PRIVATE ${ONEMATH_BUILD_COPT}) if(NOT ${ONEMATH_SYCL_IMPLEMENTATION} STREQUAL "adaptivecpp") + if(DEFINED CUDA_TARGETS) target_compile_options(ONEMATH::SYCL::SYCL INTERFACE - -fsycl-targets=nvptx64-nvidia-cuda -fsycl-unnamed-lambda) + -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS}) target_link_options(ONEMATH::SYCL::SYCL INTERFACE - -fsycl-targets=nvptx64-nvidia-cuda) + -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS}) + endif() endif() + target_link_libraries(${LIB_OBJ} PUBLIC ONEMATH::SYCL::SYCL ONEMATH::cuBLAS::cuBLAS) target_compile_features(${LIB_OBJ} PUBLIC cxx_std_11) set_target_properties(${LIB_OBJ} PROPERTIES diff --git a/src/blas/backends/generic/CMakeLists.txt b/src/blas/backends/generic/CMakeLists.txt index cdfdf9a9b..ea12f493f 100644 --- a/src/blas/backends/generic/CMakeLists.txt +++ b/src/blas/backends/generic/CMakeLists.txt @@ -82,11 +82,11 @@ if(GENERIC_BLAS_TUNING_TARGET) -fsycl-targets=nvptx64-nvidia-cuda -fsycl-unnamed-lambda) target_link_options(ONEMATH::SYCL::SYCL INTERFACE -fsycl-targets=nvptx64-nvidia-cuda) - if(DEFINED CUDA_TARGET) + if(DEFINED CUDA_TARGETS) target_compile_options(ONEMATH::SYCL::SYCL INTERFACE - -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGET}) + -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS}) target_link_options(ONEMATH::SYCL::SYCL INTERFACE - -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGET}) + -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS}) endif() else() message(WARNING "Compiler is not supported." diff --git a/src/sparse_blas/backends/cusparse/CMakeLists.txt b/src/sparse_blas/backends/cusparse/CMakeLists.txt index 790e26de9..50fa6aca9 100644 --- a/src/sparse_blas/backends/cusparse/CMakeLists.txt +++ b/src/sparse_blas/backends/cusparse/CMakeLists.txt @@ -43,6 +43,15 @@ target_include_directories(${LIB_OBJ} target_compile_options(${LIB_OBJ} PRIVATE ${ONEMATH_BUILD_COPT}) +if(NOT ${ONEMATH_SYCL_IMPLEMENTATION} STREQUAL "adaptivecpp") + if(DEFINED CUDA_TARGETS) + target_compile_options(ONEMATH::SYCL::SYCL INTERFACE + -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS}) + target_link_options(ONEMATH::SYCL::SYCL INTERFACE + -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS}) + endif() +endif() + if (${CMAKE_VERSION} VERSION_LESS "3.17.0") find_package(CUDA 12.2 REQUIRED) target_include_directories(${LIB_OBJ} PRIVATE ${CUDA_INCLUDE_DIRS}) From c0e71481e0a50f457f35e8d4644f7fdfeb785b40 Mon Sep 17 00:00:00 2001 From: Abhishek Bagusetty Date: Tue, 23 Sep 2025 03:57:35 +0000 Subject: [PATCH 2/2] [SYCL] Fall back to the logic when CUDA_TARGETS is not provided --- src/blas/backends/cublas/CMakeLists.txt | 17 +++++++++++++---- .../backends/cusparse/CMakeLists.txt | 17 +++++++++++++---- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/blas/backends/cublas/CMakeLists.txt b/src/blas/backends/cublas/CMakeLists.txt index d62f05064..485af0b09 100644 --- a/src/blas/backends/cublas/CMakeLists.txt +++ b/src/blas/backends/cublas/CMakeLists.txt @@ -41,12 +41,21 @@ target_include_directories(${LIB_OBJ} ) target_compile_options(${LIB_OBJ} PRIVATE ${ONEMATH_BUILD_COPT}) -if(NOT ${ONEMATH_SYCL_IMPLEMENTATION} STREQUAL "adaptivecpp") - if(DEFINED CUDA_TARGETS) +if (NOT "${ONEMATH_SYCL_IMPLEMENTATION}" STREQUAL "adaptivecpp") + target_compile_options(ONEMATH::SYCL::SYCL INTERFACE + -fsycl-targets=nvptx64-nvidia-cuda -fsycl-unnamed-lambda + ) + target_link_options(ONEMATH::SYCL::SYCL INTERFACE + -fsycl-targets=nvptx64-nvidia-cuda + ) + + if (DEFINED CUDA_TARGETS AND NOT "${CUDA_TARGETS}" STREQUAL "") target_compile_options(ONEMATH::SYCL::SYCL INTERFACE - -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS}) + -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS} + ) target_link_options(ONEMATH::SYCL::SYCL INTERFACE - -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS}) + -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS} + ) endif() endif() diff --git a/src/sparse_blas/backends/cusparse/CMakeLists.txt b/src/sparse_blas/backends/cusparse/CMakeLists.txt index 50fa6aca9..517a2b9ca 100644 --- a/src/sparse_blas/backends/cusparse/CMakeLists.txt +++ b/src/sparse_blas/backends/cusparse/CMakeLists.txt @@ -43,12 +43,21 @@ target_include_directories(${LIB_OBJ} target_compile_options(${LIB_OBJ} PRIVATE ${ONEMATH_BUILD_COPT}) -if(NOT ${ONEMATH_SYCL_IMPLEMENTATION} STREQUAL "adaptivecpp") - if(DEFINED CUDA_TARGETS) +if (NOT "${ONEMATH_SYCL_IMPLEMENTATION}" STREQUAL "adaptivecpp") + target_compile_options(ONEMATH::SYCL::SYCL INTERFACE + -fsycl-targets=nvptx64-nvidia-cuda -fsycl-unnamed-lambda + ) + target_link_options(ONEMATH::SYCL::SYCL INTERFACE + -fsycl-targets=nvptx64-nvidia-cuda + ) + + if (DEFINED CUDA_TARGETS AND NOT "${CUDA_TARGETS}" STREQUAL "") target_compile_options(ONEMATH::SYCL::SYCL INTERFACE - -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS}) + -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS} + ) target_link_options(ONEMATH::SYCL::SYCL INTERFACE - -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS}) + -Xsycl-target-backend --cuda-gpu-arch=${CUDA_TARGETS} + ) endif() endif()