AMD 5700XT GPUがあり、SYCLを学習しようとしていますが、AMD GPUドライバスタックの現在の状態について質問があります。私が読んだことによれば、AMD GPU用のドライバスタックにはmesa、amdgpu、amdgpu-proがあります。私が正しく理解した場合、メサには独自のopencl実装があり、amdgpuドライバの別の実装があります。
そしてAMDには、別のOpenCL実装であるROCmとCUDAやいくつかのツールに似たHIPがあります。
AMD GPUでSYCLを実行できるComputeCppとhipSYCLの2つの実装があります。 OpenCLおよびSPIR-Vデバイスで実行されるイメージに基づいて、clang実装をAMD GPUでも実行できる必要がありますか?
私が正しく理解している限り、いくつかの拡張(SYCL 2020)を含むSYCL(DPC ++)実装であるAPIとSYCL実装の上にいくつかのライブラリ(cuBLASまたはcuSPARSEがCUDAに関連する方法に似ています)もあります。他のSYCL実装の上でoneAPIライブラリを実行できますか?
最後に、グラフィックス用のテーブルトップ(OpenGLとVulkan)を使用している場合は、その上でROCmを実行できますか? ROCmとOpenCLメサの実装は、メサグラフィックドライバとどのようにやり取りするのですか?
ご覧のとおり、私は生態系全体について非常に混乱しています。誰でも手がかりを提供できますか?
ベストアンサー1
私の理解は、カーネルドライバamdgpuがあるということです。メサはユーザー空間に存在し、OpenGLの実装です。 amdgpu-proは、代替のクローズソースユーザーレベルライブラリ(OpenGL、OpenCLなど)を提供します。
cloverはMesaの上にOpenCLを実装したものです。どのような状態なのかは分かりませんが(私の考えにはしばらくメンテナンスができず、開発が中断されたようです)、SYCLプログラムを実行できるかどうか疑問です。
ROCmは単なるOpenCLの実装以上です。 AMDのGPGPUプラットフォームとして、AIプラットフォーム、アクセラレータライブラリ、ツール、コンパイラを提供します。 OpenCLの実装も含まれています。 HIPはOpenCLの実装ではなく、実際にはAMDのCUDAプログラミングモデルの実装です。
私が知っている限り、残念ながら最近のAMD OpenCL実装は、AMDがSPIRまたはSPIR-Vをサポートしていないため、SYCLプログラムを実行できません。 AMD OpenCLはSPIR-Vをサポートしていないため、DPC ++ / clangは機能しません。 ComputeCpp は SPIR で使用することもできますが、そのサポートはしばらく AMD の OpenCL 実装から削除されました。
AMD に対する SYCL サポートの観点から、通常、hipSYCL が最良の選択肢です。残念ながら、AMDはデータセンターカードにも使用されるチップにROCmサポートを集中しているため、ROCm(hipSYCLが構築されている)では特定のGPUをサポートしていません。詳しくはこちらをご覧ください。 https://github.com/RadeonOpenCompute/ROCm#supported-gpus
oneAPIはIntelコンピューティングプラットフォームの一般的な名前で、ライブラリ、ツール、およびコンパイラ(ROCmに似ています)を提供します。 DPC++/LLVM SYCL/Intel SYCL は oneAPI の一部です。これらの用語はすべて、IntelのKhronos SYCL 2020標準実装と同じものを指します。 Intelのほぼすべての拡張機能が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とカウンタートップの間に相互作用はありません。