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

What it takes to make OpenACC/OpenMP4.0 offloading to nvidia/mic work om GCC?

我想了解如何使用 OpenACC 将计算卸载到 GCC 5.3 上的 nvidia GPU。我 google 事情越多,我就越困惑。我找到的所有指南都涉及重新编译整个 gcc 以及两个名为 nvptx-toolsnvptx-newlib 的库。其他消息来源称 OpenACC 是 GOMP 库的一部分。其他消息来源称,OpenACC 支持的开发将仅在 GCC 6.x 上继续。我还读到对 OpenACC 的支持在 GCC 的主要 b运行ch 中。但是,如果我用 -fopenacc-foffload=nvptx-non 编译程序是行不通的。有人可以向我解释编译器和 运行 带有 gcc 5.3+ 的 OpenACC 代码到底需要什么吗?

提前致谢

下面的 link 包含一个脚本,该脚本将编译 gcc 以获得 OpenACC 支持。

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 库。

  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 正在开源他们的驱动程序,我相信它们可能更容易集成到默认行为中。