Kernel 在OpenCL上使用OpenACC?

Kernel 在OpenCL上使用OpenACC?,kernel,opencl,openacc,Kernel,Opencl,Openacc,我是OpenACC的新手,OpenACC是GPU加速和CPU的新编程标准。据我所知,OpenACC是一种作为编译器指令的语言,我们可以在任何需要的地方直接加速代码,而无需更改整个代码。与OpenMP不同,此编程标准也适用于GPU 现在我的疑问在这里提出 我们有用于加速的OpenCL,现在是OpenACC(它非常容易使用,只需给出编译器提示)。对于主机程序加速,我们可以简单地放入编译器指令,那么如果我们有一个内核呢?i、 现在我想为GPU(c语言)编写代码,我要做什么?像OpenCL一样,我是否需

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

现在我的疑问在这里提出


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

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


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

更新:gcc6现在部分功能正常:

“GCC 6发行版系列包含了OpenACC 2.0a规范的一个大大改进的实现。”


请参见更新:GCC6+7主动集成OpenACC规范

参见更新(2020年8月):

  • 并且可以瞄准nVidia PTX、AMD GCN和Intel MIC(至强Phi产品)。这意味着支持所有最新的nVidia和AMD Radeon卡
  • 铿锵(LLVM)似乎有

非常感谢您的回答。。我的疑问澄清了。。我想在这个OpenACC上探索更多。。我研究了一些关于这个的pdf和文档。。我想学习更多,你能给我提供什么最适合学习的资源吗?不幸的是,除了你能从官方网站上获得的信息之外,没有更多的信息。这也可能是由于OpenACC的采用率较低。GCC在4.9Mentor Graphics中可能会取得进展。有3个级别需要考虑:1)OpenCL是低级的,自己编写加速器并行,2)OpenCL库更易于使用,基于OpenCL,手工编写以实现加速器并行,3)OpenACC依靠编译器自动在代码中找到加速器并行性。在实践中,编译器无法完成为大多数问题自动查找并行性的任务。去年我们写了这个话题:如果你还没有找到它,你可以考虑调查“教育”和