使用OpenACC而不是OpenCL?

时间:2013-01-31 09:36:59

标签: kernel opencl openacc

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

现在我怀疑了......

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

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

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

  

" GCC 6发布系列包括对OpenACC 2.0a规范的大大改进的实现。"

请参阅https://gcc.gnu.org/wiki/OpenACC

答案 2 :(得分:1)

更新:GCC6 + 7积极整合OpenACC规范

请参阅https://gcc.gnu.org/wiki/OpenACC

答案 3 :(得分:1)

更新(2020年8月):