如何让 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-tools
和 nvptx-newlib
的库。其他消息来源称 OpenACC 是 GOMP 库的一部分。其他消息来源称,OpenACC 支持的开发将仅在 GCC 6.x 上继续。我还读到对 OpenACC 的支持在 GCC 的主要 b运行ch 中。但是,如果我用 -fopenacc
和 -foffload=nvptx-non
编译程序是行不通的。有人可以向我解释编译器和 运行 带有 gcc 5.3+ 的 OpenACC 代码到底需要什么吗?
- 为什么有些指南似乎需要(重新)编译
nvptx-tools
、nvptx-newlib
和 GCC,如果像某些互联网资源所说的那样,OpenACC 支持是 GCC 主要分支的一部分?
- GOMP 库在这一切中的作用是什么?
- 从现在开始,对 OpenACC 支持的开发只会发生在 GCC 6+ 上,这是真的吗?
- 当 OpenACC 支持成熟时,我们的目标是以类似于我们启用 OpenMP 的方式启用它(即,仅添加几个编译器标志)吗?
- 有人可以在将 "OpenACC" 替换为 "OpenMP 4.0 GPU/MIC offload capability" 后提供以上所有问题的答案吗?
提前致谢
下面的 link 包含一个脚本,该脚本将编译 gcc 以获得 OpenACC 支持。
OpenACC现在是GCC主分支的一部分,但是有几点需要注意。即使有一些库是 gcc 的一部分,当你编译 gcc 时,你也必须指定要编译哪些库。默认情况下,并非所有这些都会被编译。对于 OpenACC,还有一个问题。由于 NVIDIA 驱动程序不是开源的,因此 GCC 无法将 OpenACC 直接编译为二进制文件。它需要将 OpenACC 编译为 Nvidia 运行时将处理的中间 NVPTX 指令。因此,您还需要安装 nvptx 库。
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 正在开源他们的驱动程序,我相信它们可能更容易集成到默认行为中。
我想了解如何使用 OpenACC 将计算卸载到 GCC 5.3 上的 nvidia GPU。我 google 事情越多,我就越困惑。我找到的所有指南都涉及重新编译整个 gcc 以及两个名为 nvptx-tools
和 nvptx-newlib
的库。其他消息来源称 OpenACC 是 GOMP 库的一部分。其他消息来源称,OpenACC 支持的开发将仅在 GCC 6.x 上继续。我还读到对 OpenACC 的支持在 GCC 的主要 b运行ch 中。但是,如果我用 -fopenacc
和 -foffload=nvptx-non
编译程序是行不通的。有人可以向我解释编译器和 运行 带有 gcc 5.3+ 的 OpenACC 代码到底需要什么吗?
- 为什么有些指南似乎需要(重新)编译
nvptx-tools
、nvptx-newlib
和 GCC,如果像某些互联网资源所说的那样,OpenACC 支持是 GCC 主要分支的一部分? - GOMP 库在这一切中的作用是什么?
- 从现在开始,对 OpenACC 支持的开发只会发生在 GCC 6+ 上,这是真的吗?
- 当 OpenACC 支持成熟时,我们的目标是以类似于我们启用 OpenMP 的方式启用它(即,仅添加几个编译器标志)吗?
- 有人可以在将 "OpenACC" 替换为 "OpenMP 4.0 GPU/MIC offload capability" 后提供以上所有问题的答案吗?
提前致谢
下面的 link 包含一个脚本,该脚本将编译 gcc 以获得 OpenACC 支持。
OpenACC现在是GCC主分支的一部分,但是有几点需要注意。即使有一些库是 gcc 的一部分,当你编译 gcc 时,你也必须指定要编译哪些库。默认情况下,并非所有这些都会被编译。对于 OpenACC,还有一个问题。由于 NVIDIA 驱动程序不是开源的,因此 GCC 无法将 OpenACC 直接编译为二进制文件。它需要将 OpenACC 编译为 Nvidia 运行时将处理的中间 NVPTX 指令。因此,您还需要安装 nvptx 库。
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 正在开源他们的驱动程序,我相信它们可能更容易集成到默认行为中。