是否可以用 C++ 而不是 C 编写 OpenCL 内核
Is it possible to write OpenCL kernels in C++ rather than C?
我知道有一个 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 驱动程序中加载预编译的代码,而无需任何扩展。
- 使用std::vector的OpenCL矩阵乘法
- 正在为Xtensa simcall函数编写回调函数
- 在程序中编写脚本来编写和编译代码
- 编写时C++中的输入重定向问题
- 在C++中,如何在类和函数(可能是模板化的)的头中编写完整的实现
- c++多进程编写一个唯一的文件
- 如何用C++编写BFS函数
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- 为C++03编译器编写部分unique_ptr,该编译器与较新的编译器在公共代码库上运行
- 如何为 C 型字符串数组编写 getter 和 setter?
- 如何在没有函数的情况下编写此代码并使C++更简单?
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 如何使用OpenCV-C++编写*.mp4视频?
- 3-3. 编写一个程序来计算每个不同单词在其输入中出现的次数
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 如何编写带有异常的构造函数
- 如何为包含头文件的目标编写生成文件?
- 我可以为nVIDIA GPU编写OpenCL-C++内核吗
- 是否可以用 C++ 而不是 C 编写 OpenCL 内核