【问题标题】:Howto pass flag to nvcc compiler in CMAKE如何在 CMAKE 中将标志传递给 nvcc 编译器
【发布时间】:2019-04-14 20:01:13
【问题描述】:

我在 Cmake 有一个 C 项目,其中嵌入了 cuda 内核模块

我只想将--ptxas-options=-v 传递给nvcc 以便查看 每个线程使用的寄存器数每个块的共享内存使用量

通过在Cmake 中搜索如何将标志传递给nvcc,我遇到了一个解决方案

add_compile_options(myprog
    PRIVATE
    $<$<COMPILE_LANGUAGE:C>:-Wall>
    $<$<COMPILE_LANGUAGE:CUDA>:-arch=sm_20 -ptxas-options=-v>
)

但这并没有向我显示上述属性。我认为这些标志没有正确传递给nvcc

如何将--ptxas-options=-v 传递给我的nvcc 编译器?

【问题讨论】:

标签: cmake cuda nvcc


【解决方案1】:

仅在目标上设置 CUDA 标志的正确方法是

target_compile_options(<my_target> PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:my_cuda_option>) 

这将通过生成器表达式设置选项,仅适用于为 CUDA 语言编译的文件。

按照其他答案的建议使用 CMAKE_CUDA_FLAGS 为所有目标设置一个全局属性,这可能是也可能不是正确的方法,具体取决于用例。

【讨论】:

  • 这个答案要精确得多,设置 CMAKE_CUDA_FLAGS 是个杂事
【解决方案2】:

cmake cuda 的新方法设置了一些其他变量。检查docs here

我们需要设置CMAKE_<LANG>_FLAGS,这里实际上是CMAKE_CUDA_FLAGS

set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --ptxas-options=-v")

【讨论】:

    【解决方案3】:

    怎么样?...

    find_package( CUDA REQUIRED )
    set( CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}" "--ptxas-options=-v" )
    
    include_directories( ${CUDA_INCLUDE_DIRS} )
    cuda_add_library( kernel_lib ${sources} )    
    

    您还可以在线查看 CMake CUDA 文档...https://cmake.org/cmake/help/latest/module/FindCUDA.html

    【讨论】:

    • 确保使用 cuda__add ... 目标命令进行编译。
    • 您还应该考虑拆分您的 CMakeLists.txt 文件。你里面有很多东西。考虑将一些东西发送到 /config 目录,并添加子目录 - 将 C 和 CUDA 代码分离到单独的目录中是个好主意。
    猜你喜欢
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多