Coelacanth's Dream

AMD RDNA 2 情報近況 ―― BIG_PAGE、VCN3、VF 【2020-09-01】

以前にも書いたが、AMDGPU のコンパイラバックエンドとして用いられる LLVM は、RDNA 2 /GFX10.3 世代を LLVM 11 からサポートする予定にあり1、そして LLVM のリリースサイクルから、LLVM 11 は 2020/09、今月にリリースされると思われる2
NVIDIA がコンシューマ向けに Ampere世代の GPU を発表した今、AMD側にも何かしら動きがあることを期待しているが、さて。

Index

帯域を節約する BIG_PAGE 機能

バッファがある特定のアラインメントに一致する場合に、CB (Command Buffer?) /DB (Data Buffer?) /TCP 間のデータトラフィックを減らす機能と説明されている。
radv: set BIG_PAGE to improve performance on GFX10.3 (f4d86169) · Commits · Mesa / mesa · GitLab TCP は何の略か不明だが、CU内の L1ベクタキャッシュ (RDNAアーキテクチャにおける L0ベクタキャッシュ) を指すようだ。3

また、RDNA 2 /GFX10.3 世代はカラー圧縮、DCC(Delta Color Compression) を行なうブロックのサイズを拡張する等、RenderBackend部やフレームバッファに関わる部分でメモリ帯域を節約する工夫を実装している。4
こうした機能は広帯域の専用メモリを持つ dGPU にも効くが、CPU と共有する関係上、帯域が縛られる APU だと特に活きてくるのではないかと思う。

VCN3 を 2基持つのは Sienna Cichlid のみ

Navy Flounder をサポートする最初の Linux Kernel パッチが投稿された際にも少し触れたが5、主に動画のデコード/エンコードを担当するユニット VCN3 (Video Core Next) を 2基持つのは Sienna Cichlid のみであるようだ。
drm/amdgpu/vcn3.0: only SIENNA_CICHLID need specify instance for dec/enc

そして片方がデコードのみを、もう片方がエンコードのみを担当する。
分けるにあたって必要の無い部分の回路を削っている可能性があるが、余計な手間がかかるため、機能としては非対称にしているが、実際はどちらも同じ回路で実装されているのではないかと思う。
しかし役割をはっきりと分けることで、そのユニットへの電源の供給を止めるパワーゲーティングによる消費電力削減を行ないやすくなる。
VCN3 1基を持つ Navy Flounder より、割くダイサイズ、トランジスタ数は増えるが電力効率においては Sienna Cichlid のが優れるだろう。

個人的な用途で語れば、ワークロードとしては動画の視聴によるデコード処理が圧倒的に多いため、分けるのは確かに効率的だ。
また、Intel SG1 のようにマルチメディアサーバー向けのGPUとして意識された部分であるようにも思える。

Virtual Function をサポート

RDNA /Navi1x /GFX10.1 世代では Navi12 しかサポートしていなかった VF (Virtual Function) だが、RDNA 2 /GFX10.3 世代では、今の所 Sienna CichlidNavy Flounder の両方がサポートしているようだ。
drm/amdkfd: sienna_cichlid virtual function support drm/amdkfd: Support navy_flounder KFD

Navi12 をベースとした製品が現状 Apple 向けの Radeon Pro 5600M しかないため、何か推測を打ち立てることは気が引けるが、サーバー向けの機能であると言える。