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

现在我的疑问在这里提出了。

我们有用于加速的OpenCL,现在是OpenACC(非常简单,只需给出编译器提示即可使用)。对于主机程序加速,我们可以简单地放置编译器指令,那么如果我们有内核该怎么办?即现在我想为GPU(C语言)编写代码,我该怎么办?像OpenCL一样,我需要写example.c&example.cl吗?然后需要添加OpenACC编译器指令?否则以哪种方式?如果是这样,那么这里的OpenACC有什么用,因为我们正在编写* .c和* .cl文件(我们需要检查所有内存约束以及所有用于编写OpenCL的文件,这是一项艰巨的工作)。

最佳答案

实际上,OpenACC与OpenMP非常相似,但其目标是诸如GPU之类的加速设备。 OpenACC #pragma parallel for不会使OpenMP #pragma acc kernels并行化多线程CPU的循环,而是将包含的循环转换为可在GPU上执行的内核功能。编译器隐藏了许多现在必须手动完成的操作(例如,与设备之间的数据传输)。因此,您没有两个单独的编译单元。

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

10-07 12:03