kernel - 通过OpenCL使用OpenACC吗?

标签 kernel opencl openacc

我是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的商业解决方案,但是如果没有这些其他编译器,您将疏远许多用户。

关于kernel - 通过OpenCL使用OpenACC吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14622540/

相关文章:

c - OpenCL:GPU 上的类型转换

java - 如何安装aparapi

nvidia - gcc - openacc - 编译的程序无法正常运行

c++ - 使用pgc++编译器禁用OpenACC隐式编译指示生成

opengl - OpenCL 或 OpenGL – 使用哪一个?

machine-learning - 在 SVM 中练习核技巧

linux - 内联汇编可以关闭保护模式吗?

assembly - 将水平线和垂直线绘制到 VBE 返回的 LFB 的结果不正确

linux - 如何从 "struct linux_binprm"获取 argv?