有没有可能使用C++编写OpenCL内核而不是C语言?

7

我知道有一个OpenCL C++ API,但是我在编译内核时遇到了问题... 内核必须用C语言编写吗?然后只能允许使用C++编写主机代码?还是有一些我没有发现的用C++编写内核的方法?具体来说,我正在尝试使用pyopencl编译我的内核,但它似乎失败了,因为它将它们编译为C代码。


1
OpenCL C是C99的子集。还有OpenCL C++,它是C++14的子集,但目前尚未被任何供应商实现。主机代码可以用C、C++、Python等编写。你的代码在哪里? - doqtor
我会接受那个答案。所以让我确认一下我的理解:OpenCL C++已经被规定,但还没有在任何平台上实现?因此,我必须用OpenCL C编写我的内核? - Elliot Gorokhovsky
4个回答

10

OpenCL CC99 的子集。

还有OpenCL C++(OpenCL 2.1 和 OpenCL 2.2 规范),它是 C++14 的子集,但目前没有任何厂商实现它(Intel 部分实现了 OpenCL 2.1,但没有实现 C++ 内核)。

主机代码可以用 C、C++、Python 等语言编写。

简而言之,您可以在维基百科上了解 OpenCL。其中有关于每个 OpenCL 版本的描述。在 pyopencl 中,您可以使用 OpenCL1.2(据我所知,目前还不支持 OpenCL2.0)。 有关 OpenCL 的更多详细信息,请参见Khronos网站。


自2012年起,AMD的实现支持有限数量的C++特性,作为扩展 - user703016
2
@doqtor,请问您能否更新您的答案,告知当前情况吗? - einpoklum

4
我会在Codeplay的ComputeCpp上添加SYCL。他们一直在IWOCL.org上积极推广使用单源C++主机和内核代码。SYCL在底层具有OpenCL执行模型https://en.wikipedia.org/wiki/SYCL。尽管维基百科对SYCL有这样的说法:“开放标准SYCL和OpenCL类似于Nvidia的供应商特定CUDA。” 这与SYCL和OpenCL可移植代码(而非性能可移植)的意图相去甚远。

您可以在sycl.tech网站上找到有关SYCL的信息,新闻,博客,视频和资源。


刚得知RedHat Developers开始着手开发供应商中立的计算堆栈。SYCL是前端:https://www.phoronix.com/scan.php?page=news_item&px=Red-Hat-Plumbing-Compute-Stack - My Name
今天早上我在 LinkedIn 上发现了另一条消息,Intel 正计划添加 SYCL,包括 FPGAs:https://www.phoronix.com/scan.php?page=news_item&px=Intel-SYCL-For-LLVM-Clang - My Name

1

供参考,还有Boost.Compute。它不能帮助你处理pyopencl,但它解决了pyopencl的许多问题,并具有一些元编程魔法,可帮助在C++中编写OpenCL内核。

这个SO问题(在Boost.Compute FAQ中引用)还包含了一些关于OpenCL对开发人员施加的相关设计约束的很好的讨论。


1
这是一个旧问题,"解决"它的工作已经进行了一段时间...
有一个由Clang实现的社区驱动的C++ for OpenCL内核语言(Clang C++ for OpenCL),以及一个Khronos扩展(cl_ext_cxx_for_opencl),将此语言的在线编译添加到OpenCL驱动程序中。Arm刚刚宣布支持这个扩展。虽然也可以使用上游工具离线编译此语言的内核为机器二进制、SPIR-V或任何其他IR,然后在没有任何扩展的情况下加载预编译代码到OpenCL驱动程序中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接