当 objective 要拥有最兼容硬件的程序时,使用 OpenCL 而不是 SYCL 是否更安全?

Is it safer to use OpenCL rather than SYCL when the objective is to have the most hardware-compatible program?

我的 objective 是获得并行化代码的能力,以便能够 运行 它在 GPU 上,而 Graal 将有一个软件可以 运行 在任何 GPU 甚至 CPU(Intel、NVIDIA、AMD 等...)上并行。

据我了解,最好的解决方案是使用 OpenCL。但在那之后不久,我也读到了 SYCL,它应该可以简化 GPU 上 运行 的代码。

但仅此而已吗?使用较低级别的语言以确保可以在尽可能多的硬件中使用不是更好吗?

我知道 The Khronos Group website 上列出了所有兼容性,但我正在阅读互联网上的所有内容及其相反内容(例如,如果 NVIDIA 卡支持 CUDA,则它支持 OpenCL,否则 NVIDIA 卡永远不会与 OpenCL 一起工作,即使 OpenCL 应该与所有东西一起工作)...

这对我来说是一个新话题,互联网上有很多信息...如果有人能给我一个简单的答案就太好了。

可能是。

自 2009 年左右以来,所有 AMD/Nvidia/Intel GPU 和所有 Intel CPU 都支持 OpenCL。为了与几乎所有设备实现最佳兼容性,请使用 OpenCL 1.2。好消息是 OpenCL 运行时包含在图形驱动程序中,因此您无需安装任何额外的东西即可使用它或让它在另一台机器上运行。

另一方面,SYCL 较新,尚未建立得很好。例如,Nvidia GPU 尚未正式支持它:https://forums.developer.nvidia.com/t/is-sycl-available-on-cuda/37717/7 但是已经有与 Nvidia/AMD GPU 兼容的 SYCL 实现,基本上构建在 CUDA 或 OpenCL 1.2 之上,请参见此处: