AMDGPU におけるコンパイラバックエンドとしても採用されている LLVM に、新たな Target/GPU/GFX ID、gfx940 を追加するパッチが投稿されている。
ISA として gfx90a は gfx90a/CDNA 2/Aldebaran とほぼ一致し、その特徴である 行列演算命令 MFMA (Matrix-Fused-Multiply-Add)
やフルレートFP64演算 (FullRate64Ops
)、パックドFP32演算 (FeaturePackedFP32Ops
) をサポートしている。
そのことから、gfx940 は CDNA系列の GPU を示す Target/GPU/GFX ID と考えられる。
CPU+GPU のメモリ空間統合に関係する XNACK
機能も同様にサポートされている。
今回 gfx940 のサポート追加にあたって新しい命令、機能は現時点で追加されておらず、またコードコメントでも gfx940 は gfx90a の派生 (derivation) と語られている。
GPU としては、コア部やメモリの規模、I/O部の改良がメインになるのではないかと思われる。
// GFX940 is a derivation to GFX90A. hasGFX940Insts() being true implies that // hasGFX90AInsts is also true. bool hasGFX940Insts() const { return GFX940Insts; }
それ以外では、gfx940 は dGPU とし、Vega20/gfx906 からサポートされている SRAMECC 機能、Aldebaran/gfx90a からの TgSplit 機能もサポートしている。
+ ``gfx940`` ``amdgcn`` dGPU - sramecc - Architected *TBA* + - tgsplit flat + - xnack scratch .. TODO:: + - Packed + work-item Add product + IDs names. +
gfx90a と gfx940 がサポートする機能の差分が以下。
主要な命令、機能としては FeatureMadMacF32Insts
が削除され、FeatureArchitectedFlatScratch
が追加されている。
FeatureMadMacF32Insts
は V_MAD_F32/V_MAC_F32/V_MADAK_F32/V_MADMK_F32
命令をサポートすることを示す機能フラグとなる。1 それら命令は RDNA 2/GFX10.3 世代ではサポートされておらず、より丸め誤差、ULP (Unit of Last Place) が小さい V_FMA_F32
命令に置き換えられた。
RadeonSIドライバーに FMA32命令を強制するオプションが追加 | Coelacanth’s Dream
gfx90a ではまだサポートが残されていたが、FeatureMadMacF32Insts
が削除されたことから gfx940 では RDNA 2/GFX10.3 に揃えたと見られる。
他にも gfx940 は、RDNA系アーキテクチャ では RDNA 1/GFX10.1 から対応していた、ソースオペランドの 1つに定数を用いる V_FMAMK_F32/V_FMAAK_F32
に対応する。2
def FeatureISAVersion9_0_A : FeatureSe | def FeatureISAVersion9_4_0 : FeatureSe [FeatureGFX9, [FeatureGFX9, FeatureGFX90AInsts, FeatureGFX90AInsts, > FeatureGFX940Insts, FeatureFmaMixInsts, FeatureFmaMixInsts, FeatureLDSBankCount32, FeatureLDSBankCount32, FeatureDLInsts, FeatureDLInsts, FeatureDot1Insts, FeatureDot1Insts, FeatureDot2Insts, FeatureDot2Insts, FeatureDot3Insts, FeatureDot3Insts, FeatureDot4Insts, FeatureDot4Insts, FeatureDot5Insts, FeatureDot5Insts, FeatureDot6Insts, FeatureDot6Insts, FeatureDot7Insts, FeatureDot7Insts, Feature64BitDPP, Feature64BitDPP, FeaturePackedFP32Ops, FeaturePackedFP32Ops, FeatureMAIInsts, FeatureMAIInsts, FeaturePkFmacF16Inst, FeaturePkFmacF16Inst, FeatureAtomicFaddInsts, FeatureAtomicFaddInsts, FeatureMadMacF32Insts, < FeatureSupportsSRAMECC, FeatureSupportsSRAMECC, FeaturePackedTID, FeaturePackedTID, > FeatureArchitectedFlatScratch, FullRate64Ops]>; FullRate64Ops]>;
ほとんど余談だが、これまで GFX9/Vega 世代では Target/GPU/GFX ID ({Major}.{Minor}.{Stepping}
) を、Stepping ver を刻む形で更新し割り当ててきたが、今回で初めて Minor ver が更新された。
RDNA/GFX10 世代では Minor ver に、RDNA 1 では 1 (GFX10.1.x)、RDNA 2 では 3 (GFX10.3.x) を割り当てる形で活用しているため、そうした面も RDNA/GFX10 世代に合わせたのだろうか。