【问题标题】:clang 4.0.0 cuda and cmake best practices for minimal warningsclang 4.0.0 cuda 和 cmake 最小警告的最佳实践
【发布时间】: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_TYPESHAREDSTATIC
  • CXX_INCCXX_SRC:纯 C++ 头文件/源代码
  • CUDA_INCCUDA_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 编译。我是否必须将其分成两个单独的库,或者有什么方法可以告诉clanglinked docs in the comments 似乎表明它应该只对 .cu 文件进行 cuda 处理,但我似乎无法找到仅适用于该模式的特定标志。将其拆分为两个库并按逻辑拆分感觉很尴尬 - CPU 版本包含不同的文件,这些文件在没有 gpu 的情况下有效地做同样的事情。

【问题讨论】:

    标签: c++ c++11 cmake clang clang++


    【解决方案1】:

    您应该只为 CUDA 源文件添加 CUDA 编译标志作为 cmake 编译属性,而不是单方面添加它们然后尝试选择性地抑制它们。

    【讨论】:

    • 哈哈,这好多了,因为我已经有了一个需要为 CUDA 设置哪些文件的列表,只需向它们添加 CUDA 标志!
    【解决方案2】:

    有一种方法可以忽略它,如this answer所示

    # Squelch warnings about cuda flags for C++ files
    foreach(cxx ${CXX_SRC} ${CXX_INC})
      set_source_files_properties(${cxx} PROPERTIES COMPILE_FLAGS -Wno-unused-command-line-argument)
    endforeach()
    

    我认为给-Wno-unused-command-line-argument 一个毯子是不合适的,但似乎llvm 中没有单独处理标志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 2014-08-03
      • 2018-10-17
      • 2013-08-03
      • 2018-12-21
      • 2017-10-15
      • 2021-08-19
      相关资源
      最近更新 更多