Coelacanth's Dream

AMD Sienna Cichlid をサポートするパッチが OpenGL、Vulkanドライバーに投稿される

AMDGPU向けのオープンソースなドライバー、RadeonSI(OpenGL)、RADV(Vulkan) が Sienna Cichlid サポートに向けて動き始めた。

今回パッチ、マージリクエストから、Sienna Cichlid が以下のような特徴を備えていることが読み取れる。

RADV のバックエンドに使われる LLVM は ver11 で Sienna Cichlid をサポートする予定でいるらしく7
LLVM のリリース間隔を見ると、ver11 は 2020/09 に来る可能性が高い。
Download LLVM releases インターネット上の噂でもそのくらいに新GPUが出るのではと囁かれている。

SIMDユニットあたりで保持する Wave数が減る、スレッド性能の向上が目的か

AMD GCNアーキテクチャ では SIMD16ユニットあたりに保持する実行中の Wave数(Wavefront)が 10エントリであり、CU全体では 40エントリとなっていた。
AMD RDNAアーキテクチャ でもそのバランスを保ち、SIMD32ユニットあたり 20エントリ、WGP(2CU)全体では 80エントリとなっていた。
それが Sienna Cichlid では SIMD32ユニットあたり 16エントリ、WGP(2CU)全体で 64エントリになることが今回のマージリクエストからわかる。
同時に実行可能な Wave(スレッド)数は減るが、保持した Wavefrontを順番に実行する方式であるため、同じ Wavefrontを実行するまでの間隔が小さくなり、スレッド性能は高まる。
スレッドに割り当てられるレジスタ数も増えるため、その点でもスレッド性能の向上が期待できる。
参考: コンピュータアーキテクチャの話(365) GCNのブロックダイヤグラムを読む | マイナビニュース

 -	if (info->chip_class >= GFX10)
 +	if (info->chip_class >= GFX10_3)
 +		info->max_wave64_per_simd = 16;
 +	else if (info->chip_class >= GFX10)
  		info->max_wave64_per_simd = 20;
  	else if (info->family >= CHIP_POLARIS10 && info->family <= CHIP_VEGAM)
  		info->max_wave64_per_simd = 8;

ちなみに、コードを見る限り AMD Polaris系 (Polaris10/11/12, VegaM) も SIMD16ユニットあたり 8エントリ、CU全体で 32エントリとなっているらしく、過去にゲーミングGPUのため取り入れた改良点を再度取り入れたとも見られる。

GPU ID: gfx1030

ディスプレイコントローラの eChipRev が Navi21 と一致していたことから、Sienna Cichlid == Navi21 と考えたが、gfx1030 という GPU ID もやはり Navi21 と一致する。

DFSM のサポートが外される

DFSM(Deterministic Finite State Machine) は、
GFX9 で追加された、レンダリング領域を細かいタイルに分割、頻繁に使われる部分を L2cache に置くことで効率化する DSBR(Draw Stream Binning Rasterizer) 機能のソフトウェア側実装だが、
まあ色々あったり効果が無かったりで微妙な扱いを受けていた。
Vegaの新機能今いずこ | Coelacanth’s Dream

今回追加されたコメントにも、Navi1x では効果が無かったとしている。
元あったコードでは、専用VRAMが無い場合、つまり APU ならば有効可能にする処理を取っていたが、Navi1x GPUを統合した APU は現在無い。

 -      sscreen->dfsm_allowed = !sscreen->info.has_dedicated_vram;
 +      /* DFSM is not supported on GFX 10.3 and not beneficial on Navi1x. */

Raven でも DFSM有効化により、かえって性能が下がるケースがあったため、今後 GFX 10.3 またはそれ以降の GPU を統合した APU が出てきても DFSM が有効にされることはないだろう。

pc_lines は 1024

pc_lines は Parameter Cache Lines の略とされている8、のだが正直、自分自身詳しいことはわかっていない。
上記 DFSM機能にその一部が使われるというくらいで。

Sienna Cichlidpc_lines の値は 1024 で、Navi10 /Navi12 と同一である、ということを言及するに留めておく。

フレームバッファの big_page に対応

使用するメモリを表すバッファオブジェクトをより大きな単位で取り扱う機能と推察される。
メモリの効率化が目的だろうか。

SDMAが巨大なサイズ(約1GB)のパケットに対応

これまでは 4MBまでだったパケットサイズが、1GBまでに拡張された。
これもまた上記 big_page のように効率化が目的と思われる。

加えて Sienna Cichlid はSDMAコントローラを4基持つことからも、SDMA周りの機能をかなり強化している印象を受けるが、それが向かう先はまだベールに包まれている。

参考リンク