如何在 CMAKE 中将标志传递给 nvcc 编译器
Howto pass flag to nvcc compiler in CMAKE
我在 Cmake
中有一个 C 项目,我在其中嵌入了 cuda
内核模块 .
我只想将--ptxas-options=-v
传给nvcc
以便查看
每个线程使用的寄存器数量 和
每个块的共享内存使用量。
通过在 Cmake
中搜索 howto pass flags to nvcc
,我找到了一个解决方案
add_compile_options(myprog
PRIVATE
$<$<COMPILE_LANGUAGE:C>:-Wall>
$<$<COMPILE_LANGUAGE:CUDA>:-arch=sm_20 -ptxas-options=-v>
)
但这并没有向我展示上述属性。我认为这些标志没有正确传递给 nvcc
。
如何将 --ptxas-options=-v
传递给我的 nvcc
编译器?
怎么样?...
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
cmake cuda 的新方法设置了一些其他变量。检查 docs here.
我们需要设置的是CMAKE_<LANG>_FLAGS,这里其实是CMAKE_CUDA_FLAGS
。
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --ptxas-options=-v")
仅在目标上设置 CUDA 标志的正确方法是
target_compile_options(<my_target> PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:my_cuda_option>)
这将通过生成器表达式设置选项,仅适用于为 CUDA 语言编译的文件。
按照其他答案的建议使用 CMAKE_CUDA_FLAGS
为所有目标设置全局 属性,这可能是也可能不是正确的方法,具体取决于用例。
我在 Cmake
中有一个 C 项目,我在其中嵌入了 cuda
内核模块 .
我只想将--ptxas-options=-v
传给nvcc
以便查看
每个线程使用的寄存器数量 和
每个块的共享内存使用量。
通过在 Cmake
中搜索 howto pass flags to nvcc
,我找到了一个解决方案
add_compile_options(myprog
PRIVATE
$<$<COMPILE_LANGUAGE:C>:-Wall>
$<$<COMPILE_LANGUAGE:CUDA>:-arch=sm_20 -ptxas-options=-v>
)
但这并没有向我展示上述属性。我认为这些标志没有正确传递给 nvcc
。
如何将 --ptxas-options=-v
传递给我的 nvcc
编译器?
怎么样?...
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
cmake cuda 的新方法设置了一些其他变量。检查 docs here.
我们需要设置的是CMAKE_<LANG>_FLAGS,这里其实是CMAKE_CUDA_FLAGS
。
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --ptxas-options=-v")
仅在目标上设置 CUDA 标志的正确方法是
target_compile_options(<my_target> PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:my_cuda_option>)
这将通过生成器表达式设置选项,仅适用于为 CUDA 语言编译的文件。
按照其他答案的建议使用 CMAKE_CUDA_FLAGS
为所有目标设置全局 属性,这可能是也可能不是正确的方法,具体取决于用例。