【问题标题】:Best way to leverage the GPU利用 GPU 的最佳方式
【发布时间】: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 的实现工作量相似,但没有潜在的安装和驱动程序支持问题。一旦我的解决方案启动并运行,我会再次发布。

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


【解决方案1】:

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。

【讨论】:

  • 感谢您的回答。我在这里尝试在我的 PC 上构建和运行一些示例 OpenCL 程序,虽然一些更简单的程序运行正常,但我遇到了很多系统死机,这涉及到不得不转动 PC。我还尝试了一些 DirectCompute/HLSL 示例,这些示例被证明更易于构建且更稳定,因此对于我当前的需求,我将使用它来运行。就是说,我喜欢 OpenCL 的外观,等我有时间再回来看看。
猜你喜欢
  • 2010-12-13
  • 2011-01-10
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 2013-05-13
  • 2019-09-25
  • 1970-01-01
  • 2017-05-10
相关资源
最近更新 更多