gcc - 怎样才能使 OpenACC/OpenMP4.0 卸载到 nvidia/mic 在 GCC 上工作?

标签 gcc openmp openacc intel-mic offloading

我试图了解如何使用 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-toolsnvptx-newlib 和 GCC,如果正如一些互联网来源所说,OpenACC 支持是GCC 主要分支的一部分?
  • GOMP 库在这一切中扮演什么角色?
  • 从现在开始,OpenACC 支持的开发真的只会针对 GCC 6+ 进行吗?
  • 当 OpenACC 支持成熟时,我们的目标是否是以与启用 OpenMP 类似的方式启用它(即仅添加几个编译器标志)?
  • 在将“OpenACC”替换为“OpenMP 4.0 GPU/MIC 卸载功能”后,有人还能提供上述所有问题的答案吗?

提前致谢

最佳答案

下面的链接包含一个脚本,该脚本将编译 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 正在将他们的驱动程序开源,我相信它们可能更容易集成到默认行为中。

关于gcc - 怎样才能使 OpenACC/OpenMP4.0 卸载到 nvidia/mic 在 GCC 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38283471/

相关文章:

gcc - 树莓派上的 scikit-learn/python3

cuda - openacc 与 openmp 和 mpi 的区别?

c++ - rand中的C++/OpenMP错误

c++ - OpenMp 任务 : can't pass argument by reference

cuda - 在 OpenACC 中使用共享内存

c++ - 未生成 OpenACC 并行内核

c++ - OpenMP 卸载到 Nvidia 错误减少

c++ - 是否有用于 C++ 短路的 gcc 扩展?

c++ - 使用本地头文件时 undefined reference

gcc - cygwin64::./configure 返回 "configure: exit 77"