首页 > 解决方案 > CMake Cuda 架构标志

问题描述

有没有区别

CMAKE_CUDA_ARCHITECTURES="75"

CMAKE_CUDA_FLAGS="--generate-code=arch=compute_75,code=[compute_75,sm_75]"?

我在“调试”模式下编译了一个代码,第一个版本出现分段错误,而另一个版本正常。

标签: cmakebuildcuda

解决方案


这是两个 CMake 变量。第二个简单地附加到 CUDA 编译器行,通常是 nvcc。(我实际上不确定你的第二行是否有效...... gencode 语法总是让我对所有的逗号和等号感到困惑。)

我在“调试”模式下编译了一个代码,第一个版本出现分段错误,而另一个版本正常。

这就是为什么您需要跟踪实际执行的内容。所以 - 假设您使用 GNU make、runmake VERBOSE=yes和 grep 构建实际编译行的输出。或者,如果它是 ninja 或某些 Windows 构建机制,请遵循 - 启用第一个选项,然后启用第二个选项。这样你就会知道你是否有相同的程序。


另一个值得一提的区别是CMAKE_CUDA_ARCHITECTURES仅与 CMake 3.18 一起使用,因此在今天(2021 年 5 月)大多数已安装的系统上,它不可用:-(

对于早期的 CMake 版本,您可以编写如下内容:

cuda_select_nvcc_arch_flags(ARCH_FLAGS 7.5)
list(APPEND CUDA_NVCC_FLAGS ${ARCH_FLAGS})

而不是你的第二行。

有关此旧机制的详细讨论,请参阅FindCUDA 模块文档


推荐阅读