我知道有一个openCL C++ API,但我在编译内核时遇到了麻烦......内核是否必须用C编写?然后它只是允许使用C++编写的主机代码?或者有没有办法用C++编写内核,我没有找到?具体来说,我试图使用pyopencl编译我的内核,并且它似乎失败了,因为它将它们编译为C代码。是否可以用C++而不是C编写OpenCL内核?
回答
OpenCL C
是C99
的子集。
还有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网站。
自2012年起,AMD的实施支持(限制)数量的C++功能,作为[扩展](http://developer.amd.com/community/blog/2012/05/21/opencl-1-2-and-c-静态内核语言现在可用/)。 –
@doqtor,你可以根据当前事态更新你的答案吗? – einpoklum
仅供参考,还有Boost.Compute。它不能帮助你使用pyopencl,但它解决了pyopencl所做的许多问题,并且有一些元编程的魔力,有助于在C++中编写OpenCL内核。
This SO question(在Boost.Compute FAQ中引用)也很好地讨论了OpenCL对开发者提出的一些相关设计限制。
- 1. 为什么一些OpenCL示例用C++编写而不是C?
- 2. 你可以用C#编写C++包装,而不是使用C++/CLI吗?
- 3. OpenCL - 是否可以在内核中调用另一个函数?
- 4. 是否可以使用c#编写a = b == c?
- 5. 是否有OpenCL 2.2功能,这些功能在OpenCL C++中可用,但在OpenCL C中不可用?
- 6. 是否可以在C++中编写通用可变参数zipWith?
- 7. 是否可以在Libgdx中编写C/C++代码?
- 8. 是否可以在C#中编写DirectShow过滤器(不在c \ C++中)?
- 9. 是否可以用C编写一个自毁程序?
- 10. AMD OpenCL 1.1 image3d_t在内核编写
- 11. 是否可以使用C++编写应用程序的核心,并使用Obj-C和Cocoa作为UI?
- 12. 是否可以使用.net核心编写soap web服务?
- 13. 用C#编写的ANTLR是否有效?
- 14. 是否可以在Windows上编写Objective-C?
- 15. 是否可以使用Turbo C/C++编译器生成DLL?
- 16. 是否可以限制Parallel.ForEach的内核?
- 17. 是否可以在不使用头文件的情况下编写c程序
- 18. 是否可以从VB6读取/写入用C#编写的类/结构?
- 19. 是否可以跨越OpenCL内核在CPU和GPU上同时运行
- 20. OpenCL内核无法编译
- 21. 编译我自己的内核(而不是从Linux内核源)
- 22. OpenCL代码是否可以优化?
- 23. 是否可以在OpenCL中为不同的内核使用相同的内存缓冲区?
- 24. C编写结构的规则是否因Turbo C++编译器和GCC而异?
- 25. 可以在Dev C++而不是Microsoft Visual Studio上编程吗?
- 26. C# - 是否可以用类而不是表单启动我的项目?
- 27. 是否有任何asp.net组件可以编写而不是添加
- 28. 编写一个C宏以在CUDA内核中使用
- 29. 是否可以将System Verilog函数编译为C或C++?
- 30. 是否可以编译c/C++混合源代码?
OpenCL C是C99的一个子集。还有OpenCL C++,它是C++ 14的子集,但它尚未被任何供应商实现。主机代码可以用C,C++,Python等编写。你的代码在哪里? – doqtor
我会接受这个答案。所以让我检查一下我的理解:OpenCL C++已被指定,但尚未在任何平台上实现?所以我必须在OpenCL C中编写我的内核? –
是的。 C现在。 – mfa