Mesa3D, Intel Graphics Compiler (IGC), oneDNN では Xe2 アーキテクチャ、Lunar Lake のサポートが現在進められており、Xe2 アーキテクチャ が詳細が徐々に公開されてきている。
SIMD16
Xe2 アーキテクチャ では Xe-HPC と同様に EU (Xe Vector Engine) 内の計算ユニットが SIMD16 となる。
Xe-LP, Xe-HP, Xe-HPG, Xe-LPG は 2基の EU で Thread Control を共有し、それらをペアとすることで SIMD16 を実行可能としていた。
コンパイラ内では EU 2基をペアとすることを EU Fusion または FusedEU、ペアとなる EU 8基 (EU 16基) を持つ Subslice を Dual Subslice と呼んでいた。
それが Xe-HPC の EU と Subslice ではその構成を引き継がず、EU 内の計算ユニットを SIMD16 とし、Subslice あたりの EU は 8基の構成を採った。
IGC 内の hasFusedEU
の条件に Xe2
がないため、Xe2 も Xe-HPC と同様に EU 2基をペアとする機能を持たない構成と思われる。
bool hasFusedEU() const { return (getPlatform() == GENX_TGLLP || getPlatform() == Xe_XeHPSDV || getPlatform() == Xe_DG2 || getPlatform() == Xe_MTL || getPlatform() == Xe_ARL); }
Xe2 アーキテクチャ は EU 内の実行ポートも Xe-HPC にかなり近いものになっていると思われ、開発にあたって Xe-HPG ではなく Xe-HPC をベースにしたと考えられる。1
int hw_simd() const { switch (hw) { case ngen::HW::Gen9: case ngen::HW::Gen10: case ngen::HW::Gen11: case ngen::HW::XeLP: case ngen::HW::XeHP: case ngen::HW::XeHPG: return 8; case ngen::HW::Xe2: case ngen::HW::XeHPC: return 16; default: ir_error_not_expected(); } return -1; }
// EU native execution size for 32-bit types G4_ExecSize getNativeExecSize() const { return getPlatform() >= Xe_PVC ? g4::SIMD16 : g4::SIMD8; }
前述したように Xe-LP, Xe-HP, Xe-HPG, Xe-LPG はペアとなる EU 2基で SIMD16 が実行可能であることから、Xe2 での SIMD16 化による性能の影響は自分では測れない。
Xe2 ではレジスタエントリ数も従来の倍となる 256エントリとなるため、SIMD幅に対するレジスタファイル数が減るということもない。
Xe-LPG EU における FP32 演算性能に対する FP64 演算性能は 1/16 とされている。2
EU (FP+INT/EM/FP64) 2基でその性能であったため、ペア構成をやめて SIMD16 化した Xe2 では、FP64 演算をサポートしつつ、さらに FP64 演算性能を減らすことが可能になるとは思われる。
ちなみに最近の GPU アーキテクチャにおける FP64 演算性能は以下のようになっている。
FP64 peak perf per FP32 peak perf | |
---|---|
AMD RDNA 2 | 1/16 |
AMD RDNA 3 | 1/323 |
AMD CDNA 2 | 1 (Vector) |
Intel Xe-HPG | N/A |
Intel Xe-LPG | 1/16 |
Intel Xe-HPC | 14 |
NVIDIA AD102 | 1/645 |
NVIDIA H100/H200 | 1/2 (Vector)6 |