我试图了解我是如何使用OpenACC将计算卸载到GCC 5.3上的nvidia GPU。我写的东西越多,我就越困惑。我发现的所有指南都涉及重新编译整个gcc以及两个名为nvptx-tools
和nvptx-newlib
的库。其他消息来源称OpenACC是GOMP库的一部分。其他消息来源表示,OpenACC支持的开发将仅在GCC 6.x上继续。我也读过,对OpenACC的支持是GCC的主要早午餐。但是,如果我用-fopenacc
和-foffload=nvptx-non
编译一个程序,那就不行了。有人可以向我解释使用gcc 5.3 +编译和运行OpenACC代码究竟需要什么?
nvptx-tools
,nvptx-newlib
和GCC,如果像某些互联网消息来源所说,OpenACC支持是GCC主要分支的一部分? 提前致谢
答案 0 :(得分:4)
下面的链接包含一个脚本,可以为OpenACC支持编译gcc。
OpenACC现在是GCC主要分支的一部分,但有一些要点需要注意。即使有库是gcc的一部分,当你编译gcc时,你必须指定要编译的库。并非所有这些都将默认编译。对于OpenACC,还有一个问题。由于NVIDIA驱动程序不是开源的,GCC无法直接将OpenACC编译为二进制文件。它需要将OpenACC编译为Nvidia运行时将处理的中间NVPTX指令。因此,您还需要安装nvptx libs。
GOMP库是处理OpenMP和OpenACC的中间库
是的,我认为OpenACC开发只会在GCC 6中进行,但它仍可能会被移植到GCC 5.但最好的方法是使用GCC 6.
虽然我不能评论GCC开发人员决定做什么,但我认为在第一点我已经说明了问题所在。除非NVIDIA让他们的驱动程序成为开源,否则我认为必须采取额外措施。
我相信现在OpenMP仅适用于CPU和MIC。我相信两者的OpenMP支持可能会成为默认行为。我不确定针对NVIDIA GPU的OpenMP是否立即成为其目标的一部分,但由于GCC正在为OpenMP和OpenACC使用GOMP,我相信他们最终可能会这样做。此外,GCC也使用OpenMP瞄准HSA,所以基本上是AMD APU。我不确定AMD GPU是否会以相同的方式工作,但它可能是可能的。由于AMD正在开发他们的驱动程序,我相信它们可能更容易集成到默认行为中。