【发布时间】:2017-11-08 04:35:40
【问题描述】:
我不知道如何为 CUDA 文件获取 clang CUDA 特定标志:
# building all except 20
set(BUILD_CUDA_ARCH "30;32;35;50;52;53")
# According to the docs, we need static cudart:
# http://llvm.org/docs/CompileCudaWithLLVM.html#compiling-cuda-code
list(APPEND EXTRA_LIBS "cudart_static")
# Let clang know exactly where cuda came from
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}")
# Add the compilation trajectories for different architectures
# go to the docs linked above
foreach(arch ${BUILD_CUDA_ARCH})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --cuda-gpu-arch=sm_${arch}")
endforeach()
# Add the executable like normal, now that CMAKE_CXX_FLAGS has been adjusted.
# clang will compile the .cu files separately
add_library(${LIB_NAME} ${LIBRARY_TYPE} ${CXX_INC} ${CXX_SRC} ${CUDA_INC} ${CUDA_SRC})
文件中其他地方的定义
-
LIB_NAME: 正在构建的库的名称 -
LIBRARY_TYPE:SHARED或STATIC -
CXX_INC和CXX_SRC:纯 C++ 头文件/源代码 -
CUDA_INC和CUDA_SRC:直接 CUDA 代码 -
EXTRA_LIBS: 只是在target_link_libraries中与其他东西一起使用
问题在于这种方法会导致:
clang-4.0: warning: argument unused during compilation: '--cuda-gpu-arch=sm_30' [-Wunused-command-line-argument]
clang-4.0: warning: argument unused during compilation: '--cuda-gpu-arch=sm_32' [-Wunused-command-line-argument]
clang-4.0: warning: argument unused during compilation: '--cuda-gpu-arch=sm_35' [-Wunused-command-line-argument]
clang-4.0: warning: argument unused during compilation: '--cuda-gpu-arch=sm_50' [-Wunused-command-line-argument]
clang-4.0: warning: argument unused during compilation: '--cuda-gpu-arch=sm_52' [-Wunused-command-line-argument]
clang-4.0: warning: argument unused during compilation: '--cuda-gpu-arch=sm_53' [-Wunused-command-line-argument]
警告 每个 非 cuda 编译。我是否必须将其分成两个单独的库,或者有什么方法可以告诉clang? linked docs in the comments 似乎表明它应该只对 .cu 文件进行 cuda 处理,但我似乎无法找到仅适用于该模式的特定标志。将其拆分为两个库并按逻辑拆分感觉很尴尬 - CPU 版本包含不同的文件,这些文件在没有 gpu 的情况下有效地做同样的事情。
【问题讨论】:
标签: c++ c++11 cmake clang clang++