2016-07-07 112 views
4

我知道有一个openCL C++ API,但我在编译内核时遇到了麻烦......内核是否必须用C编写?然后它只是允许使用C++编写的主机代码?或者有没有办法用C++编写内核,我没有找到?具体来说,我试图使用pyopencl编译我的内核,并且它似乎失败了,因为它将它们编译为C代码。是否可以用C++而不是C编写OpenCL内核?

+0

OpenCL C是C99的一个子集。还有OpenCL C++,它是C++ 14的子集,但它尚未被任何供应商实现。主机代码可以用C,C++,Python等编写。你的代码在哪里? – doqtor

+0

我会接受这个答案。所以让我检查一下我的理解:OpenCL C++已被指定,但尚未在任何平台上实现?所以我必须在OpenCL C中编写我的内核? –

+0

是的。 C现在。 – mfa

回答

9

OpenCL CC99的子集。

还有OpenCL C++(OpenCL 2.1和OpenCL 2.2规范),它是C++14的子集,但它尚未被任何厂商实现(OpenCL 2.1部分由Intel实现,但不包括C++内核)。

主机代码可以用C,C++,Python等

总之你可以在wikipedia了解OpenCL的。有关每个OpenCL版本的说明。在pyopencl中,您可以使用OpenCL1.2(据我所知,目前还不支持OpenCL2.0)。 有关OpenCL的更多详情,请致电Khronos网站。

+0

自2012年起,AMD的实施支持(限制)数量的C++功能,作为[扩展](http://developer.amd.com/community/blog/2012/05/21/opencl-1-2-and-c-静态内核语言现在可用/)。 –

+0

@doqtor,你可以根据当前事态更新你的答案吗? – einpoklum

0

仅供参考,还有Boost.Compute。它不能帮助你使用pyopencl,但它解决了pyopencl所做的许多问题,并且有一些元编程的魔力,有助于在C++中编写OpenCL内核。

This SO question(在Boost.Compute FAQ中引用)也很好地讨论了OpenCL对开发者提出的一些相关设计限制。

相关问题