OpenCL或CUDA走哪条路?
我正在研究使用GPU来处理流数据的方法。 我有两个选择,但无法决定走哪条路?
我的标准如下:
- 易于使用(良好的API)
- 社区和文件
- 性能
- 未来
我将在linux下用C和C ++编写代码。
OpenCL的
- 从您的生产代码接口
- 可在不同图形硬件之间移植
- 有限的操作但准备好的快捷方式
CUDA
- 单独的语言(CUDA C)
- 仅限nVidia硬件
- 几乎完全控制代码(用类C语言编写)
- 很多分析和调试工具
底线 – OpenCL是便携式的,CUDA仅适用于nVidia。 然而,作为一种独立的语言,CUDAfunction更强大,拥有许多非常好的工具。
- 易于使用 – OpenCL更易于使用,但是一旦设置了CUDA编码环境,它几乎就像用C编码一样。
- 社区和文档 – 都有大量的文档和示例,但我认为CUDA更好。
- 性能 – CUDA允许更好的控制,因此可以更好地微调以获得更高的性能。
- 未来 – 很难说真的。
我的个人经历是:
-
API:OpenCL的api稍微复杂一些。 但是大多数时候你会花在编写内核代码上,而这两者几乎完全相同。
-
社区:CUDA现在拥有比OpenCL更大的社区,但这可能即将结束。
-
文档:两者都有很好的文档。
-
性能:我们的经验是,OpenCL驱动程序尚未完全优化。
-
未来:未来取决于OpenCL,因为它是一个开放标准,不限于供应商或特定硬件!
这项评估是从2010年开始的,所以可能已经过时了。
除非您有特定的理由使用CUDA,否则一直都是OpenCL。 除了运行GPU之外,OpenCL在Intel i7等多核上运行良好。 通过使用OpenCL,您可以在更广泛的硬件上运行它,从Droid手机到世界上最大的超级计算机Blue Waters的IBM Power7计算节点,该计算机将于明年上线。