AMD gpu 的 SYCL 和 OpenCL
我有一個 AMD 5700XT gpu,我正在嘗試學習 SYCL,但我對 AMD gpu 驅動程序堆棧的目前狀態有很多疑問。根據我閱讀的內容,AMD gpus 有幾個驅動程序堆棧:mesa、amdgpu 和 amdgpu-pro。如果我理解正確的話,mesa 有自己的 opencl 實現,並且 amdgpu 驅動程序還有另一個實現。
此外,amd 有 ROCm,它是另一個 OpenCL 實現,HIP,類似於 CUDA 和一些工具,對吧?
至少有 2 個實現,ComputeCpp 和 hipSYCL,它們可能在 AMD gpus 上執行 SYCL。根據它在 OpenCL 和 SPIR-V 設備上執行的映像,clang 實現是否也應該能夠在 AMD gpus 上執行?
在我正確理解的情況下,還有一個 API,它是 SYCL (DPC++) 的一個實現,帶有一些擴展 (SYCL 2020) 和一些在 SYCL 實現之上的庫(類似於 cuBLAS 或 cuSPARSE 對 CUDA 的影響)。是否可以在另一個 SYCL 實現之上執行一個 API 庫?
最後,如果我將檯面用於圖形(OpenGL 和 Vulkan),是否可以在此之上執行 ROCm?ROCm 和 OpenCL 檯面實現如何與檯面圖形驅動程序互動?
正如你所看到的,我對所有的生態系統都有很大的困惑。有人可以提供一些啟示嗎?
我的理解是只有一個核心驅動程序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 實現中已經刪除了對它的支持。
就 AMD 的 SYCL 支持而言,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
不可能在 mesa 上執行 ROCm。它是一個完全獨立的 GPU 計算堆棧。據我所知,ROCm 和檯面之間沒有互動。