我有一个AMD 5700 of,我正在努力学习SYCL,但我有很多疑问,目前的状态AMD gpu驱动程序栈。根据我所读到的,有几个驱动程序栈为AMD gpus: mesa,amdgpu和amdgpu-pro。如果我正确理解,mesa有它自己的opencl实现,还有另一个用于amdgpu驱动程序的实现。
而且,ROCm也有它的另一个OpenCL实现HIP,比如CUDA和一些工具,对吗?

至少有两个实现,ComputeCpp和hipSYCL,它们可能在AMD上运行SYCL。clang的实现不应该也能在AMD上运行吗?就像它用OpenCL和SPIR设备运行的图像一样吗?
在我正确的理解中,也有oneAPI,它是SYCL (DPC++)的一个实现,它有一些扩展(SYCL 2020),还有一些库在这个SYCL实现之上(类似于cuBLAS或cuSPARSE对CUDA的意义)。是否可以在另一个SYCL实现之上运行oneAPI库?
对于图形(OpenGL和Vulkan),如果我使用mesa,是否可以在此基础上运行ROCm?ROCm和OpenCL mesa实现如何与mesa图形驱动程序交互?
正如你所看到的,我对所有的生态系统都很困惑。有人能为它提供一些光线吗?
发布于 2020-10-05 17:40:50
我的理解是只有一个内核驱动程序,amdgpu。Mesa生活在userland中,是一个OpenGL实现。amdgpu提供了可供选择的封闭源用户库(OpenGL、OpenCL等)。
OpenCL是在Mesa之上的一个实现。我不知道它处于什么状态(我的印象是它在一段时间内没有得到很好的维护,而且开发已经停滞),但我怀疑它是否能够运行SYCL程序。
ROCm不仅仅是一个OpenCL实现。它是AMD的GPGPU平台,提供人工智能平台、加速库、工具和编译器。它还包含一个OpenCL实现。HIP不是一个OpenCL的实现,它有效地实现了AMD的CUDA编程模型。
据我所知,不幸的是,最近没有一个AMD OpenCL实现能够运行SYCL程序,因为AMD既不支持SPIR,也不支持SPIR-V。AMD OpenCL从来不支持SPIR,所以DPC++/clang不能工作.ComputeCpp也可以使用SPIR,但是对它的支持在一段时间前已经从AMD的OpenCL实现中删除了。
至于对AMD的SYCL支持,hipSYCL通常是可行的。不幸的是,AMD不支持ROCm上的特定GPU ( hipSYCL在其上构建),因为它们将ROCm支持集中在数据中心卡中也使用的芯片上。有关更多细节,请参见这里:https://github.com/RadeonOpenCompute/ROCm#supported-gpus
oneAPI是英特尔对其计算平台的总称,提供库、工具和编译器(类似于ROCm)。DPC++/LLVM /Intel是oneAPI的一部分。所有这些术语都是指相同的东西,即Intel对Khronos SYCL 2020标准的实现。几乎所有英特尔的扩展都被合并到SYCL 2020规范中,所以不要把DPC++当作一种单独的语言。
可以为oneAPI库添加额外的后端,例如Codeplay已经为NVIDIA添加了这样的后端。原则上也可以将它们移植到另一个SYCL实现。我们正在进行一些基础工作,通过改进hipSYCL和DPC++:https://www.urz.uni-heidelberg.de/en/2020-09-29-oneapi-coe-urz之间的兼容性,从而朝着这个方向发展。
在mesa之上运行ROCm是不可能的。这是一个完全独立的GPU计算堆栈。据我所知,ROCm和mesa之间没有交互作用。
https://unix.stackexchange.com/questions/612736
复制相似问题