Coelacanth's Dream

AMDVLK GPUOpenドライバーが Navi22/Navy Flounder に対応

AMD が公式に提供しているオープンソース Vulkanドライバー、AMDVLK、それを構成する LLPC (LLVM-Based Pipeline Compiler)PAL (Platform Abstraction Library)XGL (Vulkan API Layer) が、Radeon RX 6700 XT のベースとなる Navi22/Navy Flounder に対応した。

Navi22/Navy Flounder の内部構成は以下から読み取れ、全体の SE (ShaderEngine) 数は 2基、SE あたりの SH (ShaderArray) は 2基、SH あたりの WGP (CU) 数は 5 (10) 基となっている。RB (RenderBackend) は SE あたり 4基。
SE 1基分の規模は、Radeon RX 6700 XT よりも上位の Radeon RX 6800/6900シリーズ のベースとなる Navi21/Sienna Cichlid と同じ。
GPU 全体的には、SE数を Navi21/Sienna Cichlid からざっくり半分にしたのが Navi22/Navy Flounder となる。
ただメモリバス幅は半分ではなく 3/4 の 192-bit で、L2キャッシュブロックもそれに合わせて 12基 (16-bit x 12ch分) 搭載している。

           else if (AMDGPU_IS_NAVI22(pInfo->familyId, pInfo->eRevId))
           {
               pInfo->gpuType                       = GpuType::Discrete;
               pInfo->revision                      = AsicRevision::Navi22;
               pInfo->gfxStepping                   = Abi::GfxIpSteppingNavi22;
               pInfo->gfx9.numShaderEngines         = 2;
               pInfo->gfx9.rbPlus                   = 1;
               pInfo->gfx9.numSdpInterfaces         = 16;
               pInfo->gfx9.maxNumCuPerSh            = 10;
               pInfo->gfx9.maxNumRbPerSe            = 4;
               pInfo->gfx9.numWavesPerSimd          = 16;
               pInfo->gfx9.supportFp16Dot2          = 1;
               pInfo->gfx9.gfx10.numGl2a            = 2;
               pInfo->gfx9.gfx10.numGl2c            = 12;
               pInfo->gfx9.gfx10.numWgpAboveSpi     = 5; // GPU__GC__NUM_WGP0_PER_SA
               pInfo->gfx9.gfx10.numWgpBelowSpi     = 0; // GPU__GC__NUM_WGP1_PER_SA
           }
## Navi22/Navy Flounder Diagram

 +- ShaderEngine(00) -----------------+  +- ShaderEngine(01) -----------------+
 | +- ShaderArray(00) --------------+ |  | +- ShaderArray(00) --------------+ |
 | |  ==== ====  WGP(00) ==== ====  | |  | |  ==== ====  WGP(00) ==== ====  | |
 | |  ==== ====  WGP(01) ==== ====  | |  | |  ==== ====  WGP(01) ==== ====  | |
 | |  ==== ====  WGP(02) ==== ====  | |  | |  ==== ====  WGP(02) ==== ====  | |
 | |  ==== ====  WGP(03) ==== ====  | |  | |  ==== ====  WGP(03) ==== ====  | |
 | |  ==== ====  WGP(04) ==== ====  | |  | |  ==== ====  WGP(04) ==== ====  | |
 | |  [ RB+ ][ RB+ ]                | |  | |  [ RB+ ][ RB+ ]                | |
 | |        [- L1$ 128KB -]         | |  | |        [- L1$ 128KB -]         | |
 | |  [ Rasterizer/Primitive Unit ] | |  | |  [ Rasterizer/Primitive Unit ] | |
 | +--------------------------------+ |  | +--------------------------------+ |
 | +- ShaderArray(01) --------------+ |  | +- ShaderArray(01) --------------+ |
 | |  ==== ====  WGP(00) ==== ====  | |  | |  ==== ====  WGP(00) ==== ====  | |
 | |  ==== ====  WGP(01) ==== ====  | |  | |  ==== ====  WGP(01) ==== ====  | |
 | |  ==== ====  WGP(02) ==== ====  | |  | |  ==== ====  WGP(02) ==== ====  | |
 | |  ==== ====  WGP(03) ==== ====  | |  | |  ==== ====  WGP(03) ==== ====  | |
 | |  ==== ====  WGP(04) ==== ====  | |  | |  ==== ====  WGP(04) ==== ====  | |
 | |  [ RB+ ][ RB+ ]                | |  | |  [ RB+ ][ RB+ ]                | |
 | |        [- L1$ 128KB -]         | |  | |        [- L1$ 128KB -]         | |
 | |  [ Rasterizer/Primitive Unit ] | |  | |  [ Rasterizer/Primitive Unit ] | |
 | +--------------------------------+ |  | +--------------------------------+ |
 |      [- Geometry Processor -]      |  |      [- Geometry Processor -]      |
 +------------------------------------+  +------------------------------------+

    [L2$ 256K]    [L2$ 256K]    [L2$ 256K]    [L2$ 256K]
    [L2$ 256K]    [L2$ 256K]    [L2$ 256K]    [L2$ 256K]
    [L2$ 256K]    [L2$ 256K]    [L2$ 256K]    [L2$ 256K]

また、ワークアラウンド (一時的な回避策) の設定から、Navi21/Sienna Cichlid に存在した一部のハードウェア的な問題が修正されていると思われる。 (waDisableFmaskNofetchOpOnFmaskCompressionDisable, waVgtFlushNggToLegacy) 1