如何将OpenACC / OpenMP4.0卸载到nvidia / mic工作到GCC?

时间:2016-07-09 15:40:00

标签: gcc openmp openacc intel-mic offloading

我试图了解我是如何使用OpenACC将计算卸载到GCC 5.3上的nvidia GPU。我写的东西越多,我就越困惑。我发现的所有指南都涉及重新编译整个gcc以及两个名为nvptx-toolsnvptx-newlib的库。其他消息来源称OpenACC是GOMP库的一部分。其他消息来源表示,OpenACC支持的开发将仅在GCC 6.x上继续。我也读过,对OpenACC的支持是GCC的主要早午餐。但是,如果我用-fopenacc-foffload=nvptx-non编译一个程序,那就不行了。有人可以向我解释使用gcc 5.3 +编译和运行OpenACC代码究竟需要什么?

  • 为什么某些指南似乎需要(重新)编译nvptx-toolsnvptx-newlib和GCC,如果像某些互联网消息来源所说,OpenACC支持是GCC主要分支的一部分?
  • GOMP库在这一切中的作用是什么?
  • 从现在开始,OpenACC支持的开发只适用于GCC 6+吗?
  • 当OpenACC支持成熟时,我们的目标是以类似的方式启用OpenMP(即只添加几个编译器标志)吗?
  • 在更换" OpenACC"之后,有人也可以提供上述所有答案。使用" OpenMP 4.0 GPU / MIC卸载功能"?

提前致谢

1 个答案:

答案 0 :(得分:4)

下面的链接包含一个脚本,可以为OpenACC支持编译gcc。

https://github.com/olcf/OLCFHack15/blob/master/GCC5OffloadTest/auto-gcc5-offload-openacc-build-install.sh

  1. OpenACC现在是GCC主要分支的一部分,但有一些要点需要注意。即使有库是gcc的一部分,当你编译gcc时,你必须指定要编译的库。并非所有这些都将默认编译。对于OpenACC,还有一个问题。由于NVIDIA驱动程序不是开源的,GCC无法直接将OpenACC编译为二进制文件。它需要将OpenACC编译为Nvidia运行时将处理的中间NVPTX指令。因此,您还需要安装nvptx libs。

  2. GOMP库是处理OpenMP和OpenACC的中间库

  3. 是的,我认为OpenACC开发只会在GCC 6中进行,但它仍可能会被移植到GCC 5.但最好的方法是使用GCC 6.

  4. 虽然我不能评论GCC开发人员决定做什么,但我认为在第一点我已经说明了问题所在。除非NVIDIA让他们的驱动程序成为开源,否则我认为必须采取额外措施。

  5. 我相信现在OpenMP仅适用于CPU和MIC。我相信两者的OpenMP支持可能会成为默认行为。我不确定针对NVIDIA GPU的OpenMP是否立即成为其目标的一部分,但由于GCC正在为OpenMP和OpenACC使用GOMP,我相信他们最终可能会这样做。此外,GCC也使用OpenMP瞄准HSA,所以基本上是AMD APU。我不确定AMD GPU是否会以相同的方式工作,但它可能是可能的。由于AMD正在开发他们的驱动程序,我相信它们可能更容易集成到默认行为中。