Coelacanth's Dream

RadeonSI、RADV が AMD Navy Flounder をサポート

AMDGPU向けオープンソース・ドライバー、RadeonSI (OpenGL)RADV(Vulkan) に AMD の次世代 RDNA 2 GPU、Navy Flounder をサポートするパッチ/マージリクエストが投稿された。
amd: Navy Flounder support, enable displayable DCC on gfx10.3 (!6100) · Merge Requests · Mesa / mesa · GitLab

しかし、GFX10.3世代での主な追加点、変更点は Sienna Cichlid サポートの時点で作業が行なわれたためか、今回のパッチから読み取れることはそう多くない。

Index

Linux Kernel へのパッチが投稿された際にも書いたが、chipRevision の範囲が、以前 GPUOpen-Drivers/pal 一時的に組み込まれた Navi22 のコードのものと一致するため1、やはり Navy Flounder == Navi22 であると考えられる。

  #define AMDGPU_NAVY_FLOUNDER_RANGE      0x32, 0x3C

引用元: amd: Navy Flounder support, enable displayable DCC on gfx10.3 (!6100) · Merge Requests · Mesa / mesa · GitLab

  #define AMDGPU_NAVI22_RANGE     0x32, 0x3C

引用元: pal/amdgpu_asic_addr.h at 39abe2297ca58a2b84dcd9bc5e238fbc399bd6e0 · GPUOpen-Drivers/pal

しかし、AMD GPU のオープンソース・ドライバーは Kernel側も User側も Navi2x は使わず、基本「色 + 硬骨魚」のコードネームで通しており、llvm/llvm-projectのようなコンパイラバックエンドは ASIC ごとのサポートではなくマイクロアーキテクチャのサポートであるため、GPUID で示される。
AMD GPU の GPU ID は何を意味するか | Coelacanth’s Dream そのため、自分の範囲では Navi21 とか Navi22 といったコードネームに拘りを持つ必要は無く、支障が無い限り、コード中で使われているコードネーム「色 + 硬骨魚」を用いていくつもりでいる。
コードネームから製品展開を推測する気はないし。

gfx1030 に関連付けられる

Navy Flounder の GPUID だが、Sienna Cichlid と同じ gfx1030 とされている。2
だが、自分が確認できる情報3では Navi22gfx1031gfx1032 (恐らく前者)、インターネット上で言われている情報では gfx1031 とされている。

ここで考えられるのは、LLVM 側の対応がそこまで追い付いていないため、仮のコードとして記述した、
もしくは、Sienna CichlidNavy Flounder の間にマイクロアーキテクチャレベルの対応命令やバグに違いは無く、両方を gfx1030 としても問題ないか。
別チップ/ASIC であってもマイクロアーキテクチャは同一、ということは普通にある。
しかし後者では情報と矛盾するため、前者である可能性が高いだろう。

余談

同じ Navi1x /GFX10.1 世代であっても、命令の対応範囲が Navi10Navi12 /Navi14 で異なり、Navi10 は一部命令に対応していないことは、これまで何度か触れたことがあったが、
Navi12情報近況 (2020-03-09) & 推測 | Coelacanth’s Dream RenderBackendの機能にも差異があるらしく、DCC(Delta Color Compression) 機能の一部を Navi12 /Navi14 はサポートし、Navi10 はサポートしないとなっている。4
RDNA 2/GFX10.3 世代はすべてサポートするとして判定が行なわれている。

その機能についてコードを漁ってみると、独立した 64Byte のブロックで DCC を実行するものらしいことがわかる。5
それと、RDNA 2 /GFX10.3 世代ではそのブロックサイズの対応が拡張され、128B のブロックもサポートされる。