我应该如何为特定 GPU 修改 GCC 运行时编译器选项

问题描述 投票:0回答:1

使用 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

gcc gpu openmp hpc ptxas
1个回答
0
投票

使用

-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

(也许你实际上并不需要后者,这取决于你到底在做什么。)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.