利用 GPU 的最佳方式



我有一段相对较小的代码来处理大型数据集,我已经使用 openmp 并行化了这些数据集,并且热衷于使用 GPU 进一步提高性能。 该程序C++,在VS2015下开发,仅在Windows上运行,并且需要在尽可能多的各种GPU上支持7以上的64位版本。 到目前为止,我一直在研究的技术包括AMP,OpenCL,HLSL和CUDA。 已经提出的问题,例如 Ade Miller 提供的信息丰富的答案,让我质疑 AMP 是否是要走的路,尽管它看起来是最简单的选择。 我正在解雇 CUDA,因为它在支持的硬件方面限制了我,并且在目前正在阅读下一本书的同时倾向于 OpenCL。 因此,我有以下问题;

OpenCL在这里是一个好方法吗,因为其他帖子表明它也可能在路上?

如果我在想要支持最广泛的GPU的同时选择OpenCL,那么使用1.x版本的OpenCL会更好吗? 我问这个的原因是,使用最新版本的 CUDA SDK 下载的 OpenCL.DLL 是 1.9。 我必须下载面向 OpenCL 的英特尔 SDK 才能获得 2.x 版本。

如果我使用 OpenCL,我必须随应用程序分发什么(假设至少使用 OpenCL.DLL(,是否存在任何许可问题? 大多数卡的默认驱动程序是否支持 OpenCL,如果是,哪些版本?

关于上述内容,我实际上是否更适合 AMP,因为它适用于具有 DirectX 11 或更好的任何东西?

(抱歉,如果以上内容有点偏离主题,如果有人认为也许他们可以指出我一个更好的论坛来问这些问题(

OpenCL在这里是一个好方法吗,因为其他帖子表明它也可能在路上?

OpenCL似乎是支持最广泛的GPU计算平台。由nVidia,AMD和Intel支持。也适用于大多数移动平台。它也是大量的库可用:ViennaCL,clBLast,clBlast,Boost-Compute等。

如果我在想要支持最广泛的GPU的同时选择OpenCL,那么使用1.x版本的OpenCL会更好吗?

是的,目前最安全的是坚持使用 1.2 - 实际上它已经足够了。

所有主要的桌面GPU供应商(Intel,AMD,nVidia(至少支持OpenCL 1.2。 实际上只有 nVidia 没有发布官方的 2.0 支持 - 它仍处于测试阶段。

另请注意,一些较旧的GPU也仅支持OpenCL 1.2。

最新更新