GPU 编程,CUDA 或 OpenCL 还是?

GPU Programming, CUDA or OpenCL or?

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

我知道:

OpenCL 是我的首选方式,我希望在硬件支持方面非常灵活。但如果不再得到 NVidia 的支持,它就是一个淘汰赛。 HIP 听起来对我来说最好用不同的发布文件。但是英特尔即将推出的硬件将如何支持?

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

Nvidia 不会很快取消对 OpenCL 的支持。

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

然而,截至目前,跨平台支持最好的 GPU 框架是 OpenCL 1.2,它在这一点上已经非常成熟。因此,您的代码可以在 10 年前的 GPU、最新和最快的 data-center GPU、游戏和工作站 GPU 上运行,如果您需要更多内存,甚至可以在 CPU 上运行。与 CUDA 相比,在 Nvidia GPU 上根本没有 performance/efficiency 权衡;它运行得一样快。

如果您已经拥有庞大的代码库,那么像 HIP 这样的移植工具非常有用,但性能可能会受到影响。我的建议是选择其中一个框架并完全致力于它,而不是使用某种工具然后生成可能优化不佳的端口。


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