使用 GCC 编译器和 OpenMP 编程,我现在正在开发一个将数据卸载到 Nvidia GPU 的项目。我需要一些帮助来解决问题。 默认设置使用模拟 Kepler 架构(计算能力 3.1)的虚拟 GPU,而不是使用真实的 GPU(Maxwell 架构,计算能力 5.3),这会导致 GPU 利用率较低。 汇编代码的生成包括使用“-march”和 PTX ISA 版本“-mptx”覆盖默认 GCC 配置的方法,但从生成的汇编代码可以看出,这些都没有真正改变设置。 更改构建 GCC 时的默认配置是否需要任何特殊的 GCC 构建配置? 或者除此之外我应该做的任何其他事情。如果你们中有人在类似的环境中工作过,请告诉我。
我在生成的汇编代码的序言中得到了这个 .版本6.0 .目标 sm_30 .地址空间63
而我需要 .目标为 sm_53
使用
-foffload-options=nvptx-none=-march=sm_53
调用卸载编译(对于 GCC 来说发生在链接时)应该可以满足您的需求——至少对于您的用户代码而言。
如果您还需要为
sm_53
构建任何潜在的 GCC/nvptx 运行时库,这实际上是 GCC 构建时配置;请参阅https://gcc.gnu.org/install/specific.html#nvptx-x-none:
可以指定
选项来覆盖
--with-arch
选项的默认值,并构建相应的目标库。默认为
-march
。
--with-arch=sm_30
例如,如果指定了
,则构建
--with-arch=sm_70
和
-march=sm_30
目标库,并且代码生成默认为
-march=sm_70
。
-march=sm_70
(也许你实际上并不需要后者,这取决于你到底在做什么。)