我该如何在cmake(版本3.10)中设置CUDA架构为compute_50和sm_50?

11

我的项目使用带有Visual Studio的CMake-GUI。 我的系统上没有安装gpu卡。 生成的Visual Studio解决方案将nvcc标志设置为compute_30和sm_30,但我需要将其设置为compute_50和sm_50。

我使用的是CMake 3.10.1和64位编译的Visual Studio 14 2015。

我希望替代CMake的默认设置。 我没有使用Find CUDA方法来搜索和添加CUDA。 我正在将CUDA作为CMAKE中的语言支持添加,VS根据此启用CUDA构建自定义。


1
它对我没有起作用。它没有被设置。 - C0D3R
1
我没有使用“查找CUDA”方法来搜索和添加CUDA。我是通过在CMAKE中添加CUDA语言支持,并基于此启用CUDA构建自定义,使VS能够支持CUDA。 - C0D3R
你的问题实际上并不是关于CMake的;CUDA架构只是一个编译器标志。一旦你有了它,设置它就不是什么大问题了。 - einpoklum
升级CMake版本比人们意识到的更容易。它们的二进制发行版非常容忍不同的系统配置,所以你可能不必自己构建它。 - einpoklum
3个回答

12

正确的方式是:

target_compile_options(myTarget PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:-gencode arch=compute_50,code=sm_50>)

根据需要选择私有/公共。这是设置每个目标标志的正确方式。


10

在 CMake 3.18 版本中,新增了目标属性 CUDA_ARCHITECTURES。根据文档说明:

set_property(TARGET myTarget PROPERTY CUDA_ARCHITECTURES 35 50 72)

生成实际和虚拟架构的代码,包括30、50和72。

set_property(TARGET myTarget PROPERTY CUDA_ARCHITECTURES 70-real 72-virtual)

生成实际架构70和虚拟架构72的代码。


5

所以我自己能够弄清楚。我们可以按照以下方式设置 -

string(APPEND CMAKE_CUDA_FLAGS " -gencode arch=compute_50,code=sm_50")

1
这会附加到所有目标,这是使用 CMAKE 的旧方式,不利于模块化。现代 CMAKE 根据目标属性拥有这些标志,其中每个目标都可以被视为一个对象。 - Jimmy Pettersson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接