【发布时间】:2018-08-28 09:55:56
【问题描述】:
我有一小段代码处理大量数据集,我已经使用 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。我必须下载 Intel SDK for OpenCL 才能获得 2.x 版本。
如果我使用 OpenCL,我必须与我的应用程序一起分发什么(假设至少为 OpenCL.DLL)并且是否存在任何许可问题?大多数卡的默认驱动程序是否支持 OpenCL?如果支持,哪些版本?
关于上述内容,我实际上是否更适合使用 AMP,因为它适用于任何具有 DirectX 11 或更高版本的设备?
(抱歉,如果以上内容稍微偏离主题,如果有人认为可能他们可以将我指向一个更好的论坛来提出这些问题)
【问题讨论】:
-
数据集有多大,你想处理什么样的数据?
-
数据集在数十亿个笛卡尔坐标中运行,但在达到我希望优化的循环之前被显着剔除。这两个循环本质上对应于八叉树的叶子和最后一个分支阶段的条目堆栈,
-
既然你坚持Windows,就用DirectCompute吧,很多Open层最终都在用。
-
@Khouri Giordano,谢谢。我查看了一些 DirectCompute 示例,它看起来与 OpenCL 的实现工作量相似,但没有潜在的安装和驱动程序支持问题。一旦我的解决方案启动并运行,我会再次发布。