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

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

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

OpenCL CC99 的子集。

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

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

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

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

This SO question(在 Boost.Compute 常见问题解答中引用)还包含对 OpenCL 对开发人员提出的一些相关设计约束的很好讨论。

我会在 Codeplay. They have been very active at IWOCL.org promoting the use of single source C++ host and kernel code. SYCL has OpenCL execution model "under the hood". https://en.wikipedia.org/wiki/SYCL 的 ComputeCpp 上添加 SYCL。虽然维基百科有关于 SYCL 的声明:"The open standards SYCL and OpenCL are similar to vendor-specific CUDA from Nvidia." 这与 SYCL 和 OpenCL 的可移植代码(不是性能可移植)的意图相去甚远。

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

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

OpenCL 内核语言有一个由社区驱动的 C++,由 clang Clang C++ for OpenCL and there is a Khronos extension cl_ext_cxx_for_opencl that adds an online compilation of this language to OpenCL drivers too. Arm has just announced the support for this extension 实现。尽管也可以使用上游工具将这种语言的内核离线编译为机器二进制文件、SPIR-V 或任何其他 IR,然后在没有任何扩展的情况下将预编译代码加载到 OpenCL 驱动程序中。