OpenCL或CUDA走哪条路?

我正在研究使用GPU来处理流数据的方法。 我有两个选择,但无法决定走哪条路?

我的标准如下:

  1. 易于使用(良好的API)
  2. 社区和文件
  3. 性能
  4. 未来

我将在linux下用C和C ++编写代码。

OpenCL的

  • 从您的生产代码接口
  • 可在不同图形硬件之间移植
  • 有限的操作但准备好的快捷方式

CUDA

  • 单独的语言(CUDA C)
  • 仅限nVidia硬件
  • 几乎完全控制代码(用类C语言编写)
  • 很多分析和调试工具

底线 – OpenCL是便携式的,CUDA仅适用于nVidia。 然而,作为一种独立的语言,CUDAfunction更强大,拥有许多非常好的工具。

  1. 易于使用 – OpenCL更易于使用,但是一旦设置了CUDA编码环境,它几乎就像用C编码一样。
  2. 社区和文档 – 都有大量的文档和示例,但我认为CUDA更好。
  3. 性能 – CUDA允许更好的控制,因此可以更好地微调以获得更高的性能。
  4. 未来 – 很难说真的。

我的个人经历是:

  1. API:OpenCL的api稍微复杂一些。 但是大多数时候你会花在编写内核代码上,而这两者几乎完全相同。

  2. 社区:CUDA现在拥有比OpenCL更大的社区,但这可能即将结束。

  3. 文档:两者都有很好的文档。

  4. 性能:我们的经验是,OpenCL驱动程序尚未完全优化。

  5. 未来:未来取决于OpenCL,因为它是一个开放标准,不限于供应商或特定硬件!

这项评估是从2010年开始的,所以可能已经过时了。

除非您有特定的理由使用CUDA,否则一直都是OpenCL。 除了运行GPU之外,OpenCL在Intel i7等多核上运行良好。 通过使用OpenCL,您可以在更广泛的硬件上运行它,从Droid手机到世界上最大的超级计算机Blue Waters的IBM Power7计算节点,该计算机将于明年上线。