是否可以用 C++ 而不是 C 编写 OpenCL 内核

Is it possible to write OpenCL kernels in C++ rather than C?

本文关键字:编写 OpenCL 内核 C++ 是否      更新时间:2023-10-16

我知道有一个 openCL C++ API,但我在编译内核时遇到问题......内核必须用 C 编写吗?然后只是允许用C++编写的主机代码?或者有没有办法在我找不到的C++中编写内核?具体来说,我正在尝试使用 pyopencl 编译我的内核,但它似乎失败了,因为它将它们编译为 C 代码。

OpenCL C

C99的子集。

还有OpenCL C++(OpenCL 2.1 和 OpenCL 2.2 规范),它是C++14的一个子集,但尚未由任何供应商实施(OpenCL 2.1 部分由英特尔实现,但未C++内核)。

主机代码可以用C,C++,python等编写。

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

我会在Codeplay的ComputeCpp上添加SYCL。他们一直非常积极地 IWOCL.org 促进使用单一源代码C++主机和内核代码。SYCL具有"幕后"的OpenCL执行模型。https://en.wikipedia.org/wiki/SYCL。尽管维基百科有这样关于SYCL的声明:"开放标准SYCL和OpenCL类似于Nvidia的供应商特定CUDA。这不能与SYCL和OpenCL的可移植代码(不是性能可移植)的意图相去甚远。

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

作为参考,还有 Boost.Compute。 它对pyopencl没有帮助,但它解决了pyopencl的许多问题,并且有一些元编程魔法,有助于用C++编写OpenCL内核。

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

这是一个老问题,"解决"它的工作已经进行了一段时间......

有一个

社区驱动的OpenCL内核语言C++,由clang Clang C++ for OpenCL实现,还有一个Khronos扩展cl_ext_cxx_for_opencl,该扩展也将这种语言的在线编译添加到OpenCL驱动程序中。Arm刚刚宣布支持此扩展。尽管也可以使用上游工具将这种语言的内核离线编译为机器二进制文件、SPIR-V 或任何其他 IR,然后在 OpenCL 驱动程序中加载预编译的代码,而无需任何扩展。