利用GPU的最佳方法

时间:2018-08-28 09:55:56

标签: c++ gpu opencl c++-amp

我有一小段代码处理庞大的数据集,这些数据集我已经使用openmp进行了并行化,并且渴望使用GPU进一步提高性能。该程序是C ++,是在VS2015下开发的,仅在Windows上运行,并且需要在可行的各种GPU上支持7位以上的64位版本。到目前为止,我一直在研究的技术包括AMP,OpenCL,HLSL和CUDA。尽管已经问过诸如this with an informative answer by Ade Miller之类的问题,但使我感到疑问,尽管AMP似乎是最简单的选择,但它是否仍是解决方案。我解雇了CUDA,因为它在支持的硬件方面限制了我,并且在目前通过following book的过程中倾向于OpenCL。因此,我有以下问题;

这里的OpenCL是一种好方法吗,如other posts所暗示的那样,它可能还在淘汰中?

如果我想支持最大范围的GPU时选择OpenCL,那么使用1.x版本的OpenCL更好吗?我问这的原因是,使用最新版本的CUDA SDK下载的OpenCL.DLL是1.9。我必须下载用于OpenCL的英特尔SDK才能获得2.x版本。

如果我使用OpenCL,我必须随我的应用程序一起分发什么(假定最低为OpenCL.DLL),并且是否存在许可问题?大多数卡的默认驱动程序是否支持OpenCL?如果支持,哪个版本?

关于上述内容,我实际上对AMP更好,因为它可以与任何具有DirectX 11或更高版本的产品一起使用?

(很抱歉,如果上面的内容不太合适,或者有人认为这可能会指向我一个更好的论坛来提出这些问题)

1 个答案:

答案 0 :(得分:2)

  

OpenCL在这里是否是一种好方法,就像其他帖子所暗示的那样,它可能还在淘汰中?

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

  

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

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

所有主要的台式机GPU供应商(英特尔,AMD,nVidia)至少支持OpenCL 1.2。 实际上,只有nVidia尚未发布官方2.0支持-它仍处于beta阶段。

还请注意,某些较旧的GPU也将仅支持OpenCL 1.2。