Coelacanth's Dream

Intel Graphics Compiler で Meteor Lake のサポートが進み始める ―― Xe-HPG、XMXユニットは非搭載か、再度 FP64 に対応

Intel の Pete Chou 氏より、Intel Graphics Compiler (IGC) のサポートターゲット、vISA (virtual ISA) に Meteor Lake を追加するコミットが投稿されている。

Xe-HPG

Meteor Lake GPU は IGC の内部的なアーキテクチャ、プラットフォームとしては Xe-HPG となる。
他の部分を読むに現行の DG2/Alchemist (Xe-HPG) をそのまま iGPU 化したのではなく、そこからいくつかの変更が施されている。

      case Xe_DG2:
 +    case Xe_MTL:
          platform = Platform::XE_HPG;

DPAS 命令には非対応、XMXユニット非搭載か

EU あたり 8スレッド、EU あたり 4スレッドにも設定可能であり、その場合スレッドあたりの利用可能レジスタファイルが 256エントリ (8KiB) になるという点は Meteor LakeXe-HP/HPG と共通する。
EU のネイティブでの実行サイズが SIMD8 という点も変わらない。
従来から大幅に設計が見直されたデータポート、LSC (Load Store Cache) も Xe-HPG/HPC と同様に採用している。
Intel Xe-HP EU に追加されるパイプラインと増加するスレッド/レジスタファイル | Coelacanth’s Dream

だが行列積和演算を行う DPAS (Dot Product Accumulate Systolic) 命令、XMX (Xe Matrix eXtension) とも呼ばれるユニットの有無を判定する hasDPAS() において getPlatform() != Xe_MTL が追加されている。
このことから Meteor Lake GPU では XMXユニットが搭載されていないことが考えられる。
XMXユニットは主に推論処理の高速化を目的としており、用途の一つに Intel はアップスケーリング技術 XeSS (Super Sampling) を挙げている。
XeSS は DP4a (INT8) にも対応しているため、タイルアーキテクチャを採用するとはいえ iGPU としてダイ面積、面積あたりの性能を Meteor Lake GPU で重視した結果、XMXユニットを搭載しなかったのではないかと考えられる。
Meteor Lake は VPU (Vision Processing Unit) を搭載するとされているため、GPU との連携が重要な推論処理以外は VPU で実行することができる。
Intel Movidius VPU に関するメモ ―― Keem Bay, Thunder Bay, Meteor Lake | Coelacanth’s Dream

      bool hasDPAS() const
      {
 -        return getPlatform() >= Xe_XeHPSDV;
 +        return getPlatform() >= Xe_XeHPSDV && getPlatform() != Xe_MTL;
      }

FP64 に部分的に対応

Intel GPU では Gen11 アーキテクチャ から Int64/FP64 の対応がハードウェア的には外され、ソフトウェアエミュレータでの対応となり、これは DG2/Alchemist にも引き継がれているが、Meteor Lake GPU では FP64 に部分的ではあるが再度ハードウェアが対応する様子を見せている。
visa/HWCaps.inc において、noInt64() の判定部に Xe_MTL が追加されているが、noFP64() には追加されていない。FP64 にのみ対応し、Int64 には対応しないものと思われる。

     bool noInt64() const
     {
         return getPlatform() == GENX_ICLLP || isXeLP() || getPlatform() == Xe_DG2 ||
                getPlatform() == Xe_MTL;
     }
	
     bool noFP64() const
     {
         return getPlatform() == GENX_ICLLP || isXeLP() || getPlatform() == Xe_DG2;
     }

実行パイプは複雑な関数を実行する EM (Extend Math) パイプとされ、Xe-HP/HPC のように専用の Longパイプは持たない。
また、Gen9 アーキテクチャ においても FP64 演算は EMパイプで実行する方式だった。1そのため、FP64 演算に関して、Meteor Lake GPUGen9 と同様の方式に戻したとも見られる。
グラフィクス性能の最適化から Gen11 アーキテクチャ でハードウェアから対応を外したが、互換性の問題などからハードウェアの対応はやはり必要と判断したのだろうか。
同様の変更が dGPU においても、DG2/Alchemist の次世代で適用される可能性が考えられる。

FP64 演算性能について、Gen9 では使用可能な FPパイプ (SIMD4) が片方 1基であり、スループットが半分ということから、FP32 演算性能に対して 1/4 のピーク性能となっていた。
Xe-LP では FP/INTパイプ が SIMD8 なのに対し、EMパイプは SIMD2 となっており、この構成を引き継いでいるとすると、Meteor Lake GPU では FP32 演算性能に対して 1/8 の FP64演算性能になるのではないかと思われる。
なおスループットに関しては 1/2 以外である可能性もある。

          ThreeDistPipe         = 2, // XeHP/XeHPG: 3 distance pipe
          FourDistPipe          = 3, // XeHPC (early variant): 4 distance pipes
          FourDistPipeReduction = 6, // XeHPC variation: 4 distance pipes with Long pipe reduction
 +        ThreeDistPipeDPMath   = 7, // MTL: 3 distance pipe with DP operations in Math pipe

GPU の FP32:FP64 演算性能レートは、AMD GPU では FP64演算性能を高めたサーバー向けを除けば RDNA 2/GFX10.3 アーキテクチャ までの長い間 16:1 を保っていたが、RDNA 3/GFX11 では 32:1 になることが明らかにされている。
GFX11 では FP64 演算性能が FP32 の 1/32 に | Coelacanth’s Dream

参考リンク