我正在研究使用 GPU 来处理流数据的方法。我有两个选择,但无法决定走哪条路?
我的标准如下:
- 易于使用(良好的 API)
- 社区和文档
- 表现
- 未来
我将在 linux 下用 C 和 C++ 编写代码。
开放式
CUDA
底线——OpenCL 是可移植的,CUDA 仅适用于 nVidia。然而,作为一门独立的语言,CUDA 功能更强大,并且有很多非常好的工具。
我的个人经历是:
API:OpenCL 的 API 稍微复杂一些。然而,大部分时间你将花在编写内核代码上,而这两者几乎是相同的。
社区:到目前为止,CUDA 拥有比 OpenCL 更大的社区,但这可能会趋于平缓。
文档:两者都有很好的文档记录。
性能:我们获得了 OpenCL 驱动程序尚未完全优化的经验。
未来:未来在于 OpenCL,因为它是一个开放标准,不受供应商或特定硬件的限制!
这个评估是从 2010 年开始的,所以可能已经过时了。
除非您有特定的理由使用 CUDA,否则一直使用 OpenCL。除了在 GPU 上运行之外,OpenCL 还可以在 Intel i7 等多核上运行良好。通过使用 OpenCL,您可以在更广泛的硬件上运行它,从 Droid 手机到预计将于明年上线的全球最大超级计算机Blue Waters的 IBM Power7 计算节点。