SYCL代码向NVIDIA CUDA后端卸载的CMake文件修正请求
修正后的SYCL NVIDIA后端CMake配置
问题根源
原CMake配置存在两个核心问题:
- 将编译专属的SYCL flags错误传入
TARGET_LINK_LIBRARIES,导致链接阶段生成的二进制不符合NVIDIA设备要求 ADD_SYCL_TO_TARGET的源文件参数冗余,干扰了SYCL目标的正确生成
修正后的CMake代码
cmake_minimum_required(VERSION 3.22.1) set(CMAKE_C_COMPILER /opt/intel/oneapi/compiler/latest/linux/bin/icx) set(CMAKE_CXX_COMPILER /opt/intel/oneapi/compiler/latest/linux/bin/icpx) project(HELLOESycl) # 拆分编译与链接阶段的SYCL选项 set(SYCL_COMPILE_FLAGS "-fsycl" "-fsycl-targets=nvptx64-nvidia-cuda" "-fsycl-unnamed-lambda" "-Wno-linker-warnings") set(SYCL_LINK_FLAGS "-fsycl" "-fsycl-targets=nvptx64-nvidia-cuda") find_package(IntelSYCL REQUIRED) # 源文件路径直接指定,无需额外添加CMAKE_SOURCE_DIR add_executable(${PROJECT_NAME} test1.cpp) # 仅向编译阶段传入编译专属flags target_compile_options(${PROJECT_NAME} PUBLIC ${SYCL_COMPILE_FLAGS}) # 向链接阶段传入必要的SYCL链接参数,替代原错误的TARGET_LINK_LIBRARIES写法 target_link_options(${PROJECT_NAME} PUBLIC ${SYCL_LINK_FLAGS}) # 正确关联SYCL目标与源文件 add_sycl_to_target(TARGET ${PROJECT_NAME} SOURCES test1.cpp)
额外注意事项
- 确保系统已安装NVIDIA CUDA Toolkit,且
CUDA_PATH环境变量正确指向CUDA安装目录 - 若仍有问题,可在CMake配置时显式指定CUDA编译器:
cmake .. -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc
内容的提问来源于stack exchange,提问作者peizhao qiu
相关产品推荐
相关产品推荐

