6

我是 OpenACC 的新手,它是 GPU 加速和 CPU 的新编程标准。据我所知,OpenACC 是一种编译器指令语言,我们可以直接在任何我们想要的地方加速代码,而无需更改整个代码。与 OpenMP 不同,此编程标准也适用于 GPU。

现在我的疑问在这里提出..

我们有用于加速的 OpenCL,现在是 OpenACC(非常易于使用,只需提供编译器提示即可)。对于宿主程序加速,我们可以简单地放置编译器指令,那么如果我们有内核呢?即现在我想为GPU(c语言)编写我的代码,我必须做什么?像 OpenCL 一样,我需要编写 example.c 和 example.cl 吗?那么需要添加OpenACC编译指令吗?或者以哪种方式?如果是这样,那么在这里使用 OpenACC 有什么用,因为我们正在编写 *.c 和 *.cl 文件,(我们需要检查所有内存限制以及所有用于编写 OpenCL 的内容,这是一项艰巨的工作)。

4

4 回答 4

8

实际上,OpenACC 很像 OpenMP,但针对的是 GPU 等加速设备。#pragma parallel for与让多线程 CPU 并行化循环的 OpenMP不同,OpenACC#pragma acc kernels会将包含的循环转换为在 GPU 上执行的内核函数。现在必须手动完成的大部分工作(例如,将数据从设备传输到设备)都被编译器隐藏了。因此,您没有两个单独的编译单元。

现在这是 OpenACC 的问题,我对为什么现在采用率非常低的回答是:没有来自 GCC 或 Clang 的支持。当然有来自 PGI 和 CAPS 的商业解决方案,但是如果没有这些其他编译器,您将疏远许多用户。

于 2013-01-31T11:02:30.470 回答
3

更新:gcc6 现在有部分工作:

“GCC 6 发布系列包括一个大大改进的 OpenACC 2.0a 规范实现。”

https://gcc.gnu.org/wiki/OpenACC

于 2017-01-11T15:58:28.090 回答
3

更新(2020 年 8 月):

于 2020-08-09T03:46:32.277 回答
2

更新:GCC6 + 7 积极集成 OpenACC 规范

https://gcc.gnu.org/wiki/OpenACC

于 2017-08-23T09:28:46.017 回答