我对OpenACC是个新手,它是一个新的图形处理器加速编程标准。据我所知,OpenACC是一种编译器指令语言,我们可以直接在任何我们想要的地方加速代码,而不需要改变整个代码。这个编程标准将适用于图形处理器,这也不同于OpenMP。
现在我的疑虑出现在这里..
我们有用于加速的OpenCL,现在是OpenACC(它非常容易使用,只需给出编译器提示)。对于主机程序加速,我们可以简单地放上编译器指令,那么如果我们有一个内核呢?也就是说,现在我想写我的GPU(c语言)的代码,我必须做什么?像OpenCL一样,我需要写example.c &example.cl吗?那么需要添加OpenACC编译器指令吗?或者以哪种方式?如果是这样,那么OpenACC在这里有什么用,因为我们正在编写*.c和*.cl文件,(我们需要检查所有的内存约束以及所有用于编写OpenCL的内容,这是一项艰巨的工作)。
发布于 2013-01-31 19:02:30
实际上,OpenACC很像OpenMP,但它的目标是GPU等加速设备。OpenACCs #pragma acc kernels将包含的循环转换为在图形处理器上执行的内核函数,而不是让OpenMP #pragma parallel for并行化多线程CPU的循环。现在必须手动完成的大部分工作(例如,在设备之间传输数据)都被编译器隐藏了。因此,您没有两个独立的编译单元。
这就是OpenACC的问题所在,而我对为什么现在的采用率很低的回答是非常低的:没有来自GCC或克隆的支持。当然,也有来自PGI和CAPS的商业解决方案,但如果没有这些其他编译器,您将疏远许多用户。
发布于 2017-01-11 23:58:28
发布于 2020-08-09 11:46:32
更新(2020年8月):
https://stackoverflow.com/questions/14622540
复制相似问题