GPU 编程、CUDA 或 OpenCL 还是? [已关闭]

问题描述 投票:0回答:1

GPU 编程的最佳方式是什么?

我知道:

  • CUDA 非常好,有很多开发人员支持和非常好的 zo 调试,但仅限于 NVidia 硬件
  • OpenCL 非常灵活,可以在 NVidia、AMD 和 Intel 硬件上运行,可以在加速器、GPU 和 CPU 上运行,但据我所知,NVidia 不再支持。
  • Coriander (https://github.com/hughperkins/coriander) 将 CUDA 转换为 OpenCL
  • HIP https://github.com/ROCm-Developer-Tools/HIP 由 AMD 制作,可以以转换为 AMD 和 NVidia CUDA 的方式编写。它还可以将 CUDA 转换为 HIP。

OpenCL 是我更喜欢的方式,我希望在硬件支持方面非常灵活。但如果不再得到 NVidia 的支持,那就是淘汰赛了。 对于我来说,HIP 对于不同的发布文件来说是最好的。但英特尔即将推出的硬件的支持如何?

还有其他选择吗? 对我来说重要的是许多受支持的硬件,长期支持,以便在几年内也可以编译并独立制造。 附加:应该能够使用超过 obe 编译器,在 Linux 和 Windows 上受支持。

cuda gpu opencl cpu hip
1个回答
13
投票

Nvidia 不会很快取消 OpenCL 支持。

SYCL 是一种新兴的 GPU 上可移植代码方法。它可以从单个源文件进行更高级别的编程,然后编译两次,一次用于 CPU,一次用于 GPU。然后 GPU 部分通过 OpenCL、CUDA 或其他后端在 GPU 上运行。

然而,截至目前,跨平台支持最好的 GPU 框架是 OpenCL 1.2,目前该框架已经非常完善。这样,您的代码就可以在 10 年前的 GPU、所有最新、最快的数据中心 GPU、所有游戏和工作站 GPU 上运行,如果您需要更多内存,甚至可以在 CPU 上运行。支持所有供应商(Nvidia、AMD、Intel)。与 CUDA 相比,在 Nvidia GPU 上根本不存在性能/效率权衡;它运行得同样快。

如果您选择从 OpenCL 开始,请查看这个 OpenCL-Wrapper。原生 OpenCL C++ 绑定使用起来有点麻烦,这个轻量级包装器大大简化了学习,同时保持功能和完整性能。

如果您已经拥有大量代码库,那么移植工具非常有用,但性能可能会受到影响。我的建议是选择一种开放框架 (OpenCL/SYCL) 并完全致力于它,而不是从仅在 Nvidia 或 AMD GPU 上运行的专有语言 (CUDA/HIP) 开始,然后生成一个优化不佳的端口支持其他硬件。

© www.soinside.com 2019 - 2024. All rights reserved.