AMD が公式に提供しているオープンソースな Vulkan ドライバー AMDVLK、それを構成する LLPC (LLVM-Based Pipeline Compiler)、PAL (Platform Abstraction Library)、XGL (Vulkan API Layer) が、Radeon RX 6800シリーズ のベースとなる Navi21/Sienna Cichlid に対応した。
Navi21/Sienna Cichlid の構成
AMDGPU ASIC の構成情報等が記述されている pal/ndDevice.cpp に Navi21/Sienna Cichlid の情報が追加された。
else if (AMDGPU_IS_NAVI21(m_nullIdLookup.familyId, m_nullIdLookup.eRevId)) { pChipInfo->supportSpiPrefPriority = 1; pChipInfo->doubleOffchipLdsBuffers = 1; pChipInfo->gbAddrConfig = 0x345; // GB_ADDR_CONFIG_DEFAULT; pChipInfo->numShaderEngines = 4; // GPU__GC__NUM_SE; pChipInfo->numShaderArrays = 2; // GPU__GC__NUM_SA_PER_SE pChipInfo->maxNumRbPerSe = 4; // GPU__GC__NUM_RB_PER_SE; pChipInfo->nativeWavefrontSize = 32; // GPU__GC__SQ_WAVE_SIZE; pChipInfo->minWavefrontSize = 32; pChipInfo->maxWavefrontSize = 64; pChipInfo->numPhysicalVgprsPerSimd = 1024; // GPU__GC__NUM_GPRS; pChipInfo->maxNumCuPerSh = 10; // GPU__GC__NUM_WGP_PER_SA * 2; pChipInfo->numTccBlocks = 20; // GPU__GC__NUM_GL2C; pChipInfo->gsVgtTableDepth = 32; // GPU__VGT__GS_TABLE_DEPTH; pChipInfo->gsPrimBufferDepth = 1792; // GPU__GC__GSPRIM_BUFF_DEPTH; pChipInfo->maxGsWavesPerVgt = 32; // GPU__GC__NUM_MAX_GS_THDS; }
else if (AMDGPU_IS_NAVI21(pInfo->familyId, pInfo->eRevId)) { pInfo->gpuType = GpuType::Discrete; pInfo->revision = AsicRevision::Navi21; pInfo->gfxStepping = Abi::GfxIpSteppingNavi21; pInfo->gfx9.numShaderEngines = 4; 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.numWgpAboveSpi = 5; // GPU__GC__NUM_WGP0_PER_SA pInfo->gfx9.gfx10.numWgpBelowSpi = 0; // GPU__GC__NUM_WGP1_PER_SA }
ShaderEngine (SE) 4基、SE あたりの ShaderArray (SA) 2基、SA あたりの CU 10基、
SE あたりの RB (Render Backend) 数は 4基となり、RB+ に対応しているため、相当 ROP数は 128基となる。 ( 4 [SE] * 4 [RB] * 8 [pixel] )
Waveあたりのスレッド数はネイティブで Wave32 (32スレッド)、Wave64 (64スレッド) にも対応する。資料がまだ AMD より公開されていないため不明だが、Wave64 の場合は RDNA / GFX10 世代同様 Wave32x2 に分解して実行するのではないかと思う。
SIMDユニットあたりで保持される Wave数は 16エントリとなり、これは事前に出てきていた情報と一致する。
AMD Sienna Cichlid をサポートするパッチが OpenGL、Vulkanドライバーに投稿される | Coelacanth’s Dream
ただ不自然なのは TCC/L2キャッシュブロック (numTccBlocks
) が 20基とされている点で、Navi21/Sienna Cichlid は GDDR6 256-bit (16ch) であるから 16基な十分なはずだ。
誤字、間違いである可能性もあるため、やはり AMD による資料公開が待たれる。
また、MALL (Memory Access at Last Level) の対応も追加されている。
マーケティング上では Infinity Cache と呼ばれるそれは、コード中においては MALL となるようだ。
RadeonSI (OpenGL) ドライバーでは既に NGGカリング/プリミティブシェーダー を、RDNA 2 / GFX10.3 世代の dGPU ではデフォルトに有効とするようになっているが、AMDVLK (Vulkan) ドライバーでも同様となる。1
RadeonSIドライバー + RDNA 2 では NGGカリング/プリミティブシェーダー がデフォルトで有効に | Coelacanth’s Dream