22

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

我的标准如下:

  1. 易于使用(良好的 API)
  2. 社区和文档
  3. 表现
  4. 未来

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

4

3 回答 3

36

开放式

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

CUDA

  • 独立语言 (CUDA C)
  • 仅 nVidia 硬件
  • 几乎完全控制代码(使用类 C 语言进行编码)
  • 许多分析和调试工具

底线——OpenCL 是可移植的,CUDA 仅适用于 nVidia。然而,作为一门独立的语言,CUDA 功能更强大,并且有很多非常好的工具。

  1. 易于使用——OpenCL 开箱即用更容易使用,但是一旦你设置了 CUDA 编码环境,它几乎就像用 C 编码一样。
  2. 社区和文档——两者都有大量的文档和示例,但我认为 CUDA 更好。
  3. 性能——CUDA 允许更好的控制,因此可以更好地微调以获得更高的性能。
  4. 未来——真的很难说。
于 2010-04-15T12:02:57.063 回答
17

我的个人经历是:

  1. API:OpenCL 的 API 稍微复杂一些。然而,大部分时间你将花在编写内核代码上,而这两者几乎是相同的。

  2. 社区:到目前为止,CUDA 拥有比 OpenCL 更大的社区,但这可能会趋于平缓。

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

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

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

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

于 2010-04-15T13:17:55.977 回答
6

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

于 2010-07-01T16:20:55.980 回答