Coelacanth's Dream

ROCm v4.5 がリリース ―― CPU+GPU の統合メモリをサポート、RDNA系のサポートは v5.0 に?

AMD ROCm v4.5 がリリースされた。
今リリースの大きな変更点としては、HIP (Heterogeneous-Compute Interface for Portability) において CPU+GPU の統合メモリをサポートしたことが挙げられる。

統合メモリは Vega/GFX9 世代とそれ以降の世代の GPU でサポートされ、PolarisFiji といった GFX8 世代の GPU ではサポートされない。
これは、そもそも ROCm v4.0 から GFX8 世代は、動作はするが公式的に完全なサポートは保証しないことが明言されており、また GFX8 世代では 49-bitアドレッシングもサポートしていないことが関係していると思われる。

統合メモリは 2種類の方法でサポートされ、XNACK-enabled と XNACK-disabled からなる。
XNACK-disabled では、GPU が使うメモリすべてが GPU側のページテーブルにマッピングされている必要があり、ページフォールトが発生した際はドライバーが一時的に GPUキューに割り込み、それからページ移行の処理を行い、GPU は再度メモリアクセスを試みる。
XNACK-enabled では GPU がページフォールトとページ移行の処理を行うことができるため、CPU+GPU の統合メモリにおいては XNACK-enabled の方が有利だと考えられる。

しかしコンパイラは XNACK-enabled/disabled でそれぞれ別のコードを生成するため、現時点では XNACK-enabled は実験的なサポートとしている。
XNACK を有効としてコンパイルされたコードを、XNACK が無効化されている GPU で実行すると、正しく実行されない、実行されても性能が低下する恐れがある。
Linux Kernel に CPU + GPU の統合メモリ空間をサポートする最初のパッチが投稿される | Coelacanth’s Dream

外されつつある Polaris と追加されつつある RDNA

上で既に公式的なサポートから GFX8 世代が外れていることには触れたが、一部 ROCmソフトウェア/ライブラリからは Polaris (gfx803) のサポートを 取り除く 動きも見られる。

再度サポートが有効化されたり、プルリクエストが取り込まれなかったりでほとんどは Polaris (gfx803) のサポートを継続しているが、今後サポートする AMD GPU が増えた場合には今度こそ取り除かれると思われる。

Vega10 (gfx900) についてもサポートから外される予兆を見せており、Vega10 ベースのサーバー向け SKU Instint MI25 は EOL (End of Life) に達し、ROCm v4.5 がサポートする最後の公式リリースになるとしている。1
Vega64 に対しては触れられていないが、ROCm のメインターゲットであるサーバー向け SKU が EOL に入った以上、同様にサポートから外されることが考えられる。

今リリースでサポートに追加された AMD GPU は無いが、ROCm Installation Guide では対応リストに Sienna Cichlid/Navi21 (gfx1030) ベースの Radeon Pro W6800 がさり気なく追加されており、ROCmソフトウェア/ライブラリも gfx1030 に対応している。

余談に近いが、Radeon Pro W6800 には DeviceID: 0x73A3 が割り当てられている。だが Tensile 等ではまた別の Navi21/Sienna CichlidDeviceID: 0x73A2、まだリリースされていない SKU を対象としている。
これが間違いでなければ、Radeon Pro W6800 以外に Navi21/Sienna Cichlid ベースのワークステーション向け、あるいはサーバー向けの SKU を計画しているのかもしれない。

以前には RDNA/GFX10 系 GPU のサポートを 2021年に追加する予定があると述べられており、それが一応達成されたことにはなるが、ROCmSupport アカウントは ROCm v5.0 で RDNA/GFX10 系の公式サポートについて良いニュースがあるかもしれない、とコメントしている。

ROCm Installation GuideRadeon Pro W6800 が載ってるのはミスで、正式なサポートは ROCm v5.0 で追加するつもりなのだろうか。
ただ他 RDNA 2/GFX10.3 世代の GPU がサポートされるか、RDNA 1/GFX10.1 世代もサポートされるかは不透明なまま。

参考リンク