适用于 AMD GPU 的 SYCL 和 OpenCL

适用于 AMD GPU 的 SYCL 和 OpenCL

我有一个 AMD 5700XT gpu,我正在尝试学习 SYCL,但我对 AMD gpu 驱动程序堆栈的当前状态有很多疑问。根据我的阅读,AMD GPU 有几个驱动程序堆栈:mesa、amdgpu 和 amdgpu-pro。如果我理解正确的话,mesa 有自己的 opencl 实现,并且 amdgpu 驱动程序还有另一个实现。

另外,AMD 有 ROCm,它是另一个 OpenCL 实现,HIP,它类似于 CUDA 和一些工具,对吧?

在此输入图像描述

至少有 2 个实现:ComputeCpp 和 hipSYCL,它们可以在 AMD GPU 上运行 SYCL。根据使用 OpenCL 和 SPIR-V 设备运行的图像,clang 实现是否也应该能够在 AMD GPU 上运行?

据我正确理解,还有一个 API,它是 SYCL (DPC++) 的实现,带有一些扩展 (SYCL 2020) 和 SYCL 实现之上的一些库(类似于 cuBLAS 或 cuSPARSE 与 CUDA 的关系)。是否可以在另一个 SYCL 实现之上运行 oneAPI 库?

Fonally,如果我使用台面进行图形处理(OpenGL 和 Vulkan),是否可以在此之上运行 ROCm? ROCm 和 OpenCL mesa 实现如何与 mesa 图形驱动程序交互?

正如你所看到的,我对整个生态系统有很大的困惑。有人可以提供一些线索吗?

答案1

我的理解是,有一个内核驱动程序,amdgpu。 Mesa 存在于用户空间,是一个 OpenGL 实现。 amdgpu-pro 提供替代的闭源用户层库(OpenGL、OpenCL 等)。

clover 是 Mesa 之上的 OpenCL 实现。我不确定它处于什么状态(我的印象是它有一段时间维护得不太好,开发已经停滞),但我怀疑它是否能够运行 SYCL 程序。

ROCm 不仅仅是 OpenCL 实现。它是 AMD 的 GPGPU 平台,提供 AI 平台、加速库、工具和编译器。它还包含 OpenCL 实现。 HIP 不是 OpenCL 实现,它实际上是 AMD 对 CUDA 编程模型的实现。

据我所知,不幸的是,最近的 AMD OpenCL 实现无法运行 SYCL 程序,因为 AMD 既不支持 SPIR 也不支持 SPIR-V。 AMD OpenCL 从未支持 SPIR-V,因此 DPC++/clang 无法工作。 ComputeCpp 也可以与 SPIR 一起使用,但对此的支持已经从 AMD 的 OpenCL 实现中删除了一段时间。

就 SYCL 对 AMD 的支持而言,hipSYCL 通常是最佳选择。不幸的是,AMD 不支持 ROCm(hipSYCL 构建于其上)上的特定 GPU,因为他们将 ROCm 支持重点放在也用于数据中心卡的芯片上。请参阅此处了解更多详细信息: https://github.com/RadeonOpenCompute/ROCm#supported-gpus

oneAPI 是英特尔计算平台的总称,提供库、工具和编译器(类似于 ROCm)。 DPC++/LLVM SYCL/Intel SYCL 是 oneAPI 的一部分。所有这些术语都指同一件事,即英特尔实施的 Khronos SYCL 2020 标准。几乎所有英特尔的扩展都已合并到 SYCL 2020 规范中,因此不要将 DPC++ 视为一种单独的语言。

可以向 oneAPI 库添加额外的后端,例如 Codeplay 已经为 NVIDIA 做到了这一点。原则上也可以将它们移植到另一个 SYCL 实现。我们正在做一些基础工作,通过提高 hipSYCL 和 DPC++ 之间的兼容性,有可能使 hipSYCL 朝这个方向发展: https://www.urz.uni-heidelberg.de/en/2020-09-29-oneapi-coe-urz

不可能在台面上运行 ROCm。它是一个完全独立的 GPU 计算堆栈。据我所知,ROCm 和台面之间没有相互作用。

相关内容