sycl CUDA 后端的 Cmake 文件

问题描述 投票:0回答:3

我在编写 CMake 文件以将 SYCL 代码卸载到 NVIDIA 后端时遇到问题。我的 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)

set(SYCL_FLAGS "-fsycl"
      "-fsycl-targets=nvptx64-nvidia-cuda"
      "-fsycl-unnamed-lambda"
      "-Wno-linker-warnings")
FIND_PACKAGE(IntelSYCL REQUIRED)

ADD_EXECUTABLE(${PROJECT_NAME} ${CMAKE_SOURCE_DIR} test1.cpp)

TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC sycl ${SYCL_FLAGS})
target_compile_options(${PROJECT_NAME} PUBLIC ${SYCL_FLAGS})
ADD_SYCL_TO_TARGET(TARGET ${PROJECT_NAME} SOURCES ${CMAKE_SOURCE_DIR} test1.cpp)

错误信息是

terminate called after throwing an instance of 'sycl::_V1::runtime_error'
  what():  Native API failed. Native API returns: -42 (PI_ERROR_INVALID_BINARY) -42 (PI_ERROR_INVALID_BINARY)
Aborted

在终端中使用以下命令即可编译并执行代码,所以问题不在于代码

dpcpp -fsycl -fsycl-targets=nvptx64-nvidia-cuda test1.cpp -o test

更正 cmakefile,以便将代码卸载到 nvidia 硬件。

cmake nvidia sycl
3个回答
1
投票

问题在于 SYCL 编译选项 (SYCL_FLAGS)。当您使用 find_package(IntelSYCL) 时,它可能会覆盖 SYCL_FLAGS 以使用 -fsycl 标志,该标志特定于 Intel SYCL 实现。因此,它可能会阻止 SYCL 通过 -fsycl-targets=nvptx64-nvidia-cuda 标志使用 NVIDIA 后端。


0
投票

我认为您违反了 CMake 字符串连接规则。您的

${SYCL_FLAGS}
实际上是:

-fsycl-fsycl-targets=nvptx64-nvidia-cuda-fsycl-unnamed-lambda-Wno-linker-warnings

尝试在每个后面加一个空格。


0
投票

你能告诉我正确的 CMakeLists.txt 表示法吗?我和你有同样的问题,目前还无法解决。非常感谢。

© www.soinside.com 2019 - 2024. All rights reserved.