DG2/Alchemist (Xe-HPG) や Ponte Vecchio (Xe-HPC) に関するメモ書き。
Index
DG2-G12
Linux Kernel に DG2-G12 バリアント (サブプラットフォーム) 関連のパッチが投稿された。
以前から IGC (intel-graphics-compiler)、compute-runtime に取り込まれた変更から、DG2 には G10/G11 に加え、G12 バリアント (サブプラットフォーム) も存在することが示唆されていた。
3種類存在するかも知れない Intel Alchemist/DG2 と 2種類存在する Ponte Vecchio | Coelacanth’s Dream
今回のパッチで、ひとまず G12 バリアントの存在が確定したと言える。
パッチの内容は初期的なサポートを追加するもので、現時点で G12 はハードウェアに存在するバグへの回避策や機能面において、G10/G11 と共通していると推察される。
DG2 L3 banks
最近の Mesa3D へのパッチの中に、DG2 の L3キャッシュバンク数に関するものがあった。
補足すると、Intel はこれまで GPU が持つキャッシュについて、サンプラーごとに持つリードオンリーキャッシュを L2、GPU全体で共有するプログラマブルなキャッシュを L3 としていた。
それが Xe-Core、Vector Engine、Matrix Engine といった用語を打ち出すとともに、キャッシュ階層の呼称が整理され、従来の L3キャッシュを L2キャッシュとするようになった。Xe-Core が Sub-Slice、Vector Engine + Matirx Engine が EU に相当する。
しかし、ドライバ等のシェーダコンパイラ、GPU に最適化されたソフトウェアでは従来の用語を使い続けている。
Intel Architecture Day 2021 個人的まとめ ―― 用語が整理された Xe GPU | Coelacanth’s Dream
以下引用部によれば、DG2 では Sub-Slice (Xe-Core) の有効数が L3キャッシュバンク数と結びついている。
DG2 (Xe-HPG) では Sub-Slice あたり EU 16基 (SP 128基) を持ち、また最近 Intel(R) Media Driver に追加された記述から、L3キャッシュバンクあたりのキャッシュサイズは 512KB とされる。
Intel Alchemist/DG2 は AV1エンコードをサポートか | Coelacanth’s Dream
以上の情報を合わせると、Sub-Slice 17-32基 (EU 272-512基) は L3キャッシュバンク 32基 (16MB)、Sub-Slice 9-16基 (EU 144-256基) は L3キャッシュバンク 16基 (8MB)、Sub-Slice 8基以下 (EU 128基以下) は L3キャッシュバンク 8基 (4MB) を持つという構成が考えられる。
DG2 Sub-Slice |
16< (<=32) | 8< (<=16) | <=8 |
---|---|---|---|
EU | 272-512 | 144-256 | <=128 |
L3cache | 32 Banks (16MB?) |
16 Banks (8MB?) |
8 Banks (4MB?) |
+static void +update_l3_banks(struct intel_device_info *devinfo) +{ + if (devinfo->ver != 12 || devinfo->num_slices != 1) + return; + + if (devinfo->verx10 >= 125) { + if (devinfo->subslice_total > 16) { + assert(devinfo->subslice_total <= 32); + devinfo->l3_banks = 32; + } else if (devinfo->subslice_total > 8) { + devinfo->l3_banks = 16; + } else { + devinfo->l3_banks = 8; + } + } else {
L3キャッシュバンク数の構成が 3種類あり、バリアント (サブプラットフォーム) 数と一致するが、ダイ自体のスペックが実際そのようになっているかはまだ不明。
上位ダイの一部 Sub-Slice と L3キャッシュバンクを無効化し、製品化するというパターンも考えられる。
SIMD width
Xe-LP では EU内に、8-wide FP32/Int32 ALU と 2-wide Extened Math (EM) ALU を持つことが Intel Architecture Day 2020 ですでに発表されている。
Intel Architecture Day 2020 個人的まとめ ―― XeHP は 1-Tile 512EU、XeLPアーキテクチャ詳細 | Coelacanth’s Dream
Xe-HPG 、Xe-HPC はまだ EU (Vector Engine) の詳細な構成は明かされていないが、SIMD幅 (要素数) については OSS のコードから読み取ることができる。
OneDNN、IGC に記述されている情報によると、Xe-HPG は 8-wide、Xe-HPC は 16-wide だとされている。
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::XeHPC: return 16; default: ir_error_not_expected(); } return -1; }
これは Xe-HPC とそれ以外 (Xe-LP/HP/HPG) で異なる特性、方向性を示している。
Xe-HPC は 16-wide化とともに、倍精度 (FP64/Int64) にネイティブで対応しており (早期ステッピングでは部分的に非対応)、EU あたりの演算性能は倍以上になっている。GRF (General Register File) も、従来の 32 Bytes から 64 Bytes の増やされている。1
Xe-HP も倍精度演算にネイティブで対応しているが、SIMD幅は 8-wide に留めている。GRF も 32 Bytes のままだ。
しかし、Xe-Core、ドライバ中では従来通り Sub-Slice(s) と呼ぶユニットあたりの EU数では、Xe-HPC は 8基、Xe-LP/HP/HPG では 16基となっており、Sub-Slice あたりで見たときのスループットはそう変わらない。
また、Xe-LP/HP/HPG では、EU 2基をペアとし、スレッドコントロールを共通化する Fused EU (EU fusion とも) が実装されている。だが Xe-HPC は Fused EU が実装されておらず、EU が単体で扱われる。
オタクの戯言であるから、確かな考えではないだろうが、SIMD幅を広げることでスレッドあたりの性能を上げたのが Xe-HPC 、スレッドコントロールを共通化することで効率を上げたのが Xe-LP/HP/HPG と見られるのだろうか?
EU | Xe-LP/HP/HPG | Xe-HPC |
---|---|---|
SIMD ALU width | 8-wide | 16-wide |
GRF size per entry | 32 Bytes | 64 Bytes |
EU per Sub-Slice | 16 EU | 8 EU |
Fused EU | Y | N |
DPAS/DPASW
Xe-HP から行列演算のための命令として、DPAS/DPASW (Dot Product Accumulate Systolic /Wide) が用意されている。
Xe-HP/HPG では DPAS/DPASW をサポートするが、Xe-HPC は DPAS のみをサポートする。
これは DPASW が Fused EU を想定した命令であるため、その関係で Xe-HPC ではサポートされてない。
bool supportDpaswInstruction() const { return hasFusedEU() && supportDpasInstruction(); }
oneDNN 内のコメントから、DPASW では内部的に行列ブロックを 2つに分解し、それを Fused EU によってペアとなる EU 2基でそれぞれ実行するものと推察される。
スレッドコントロールを共通化した Fused EU において、行列演算の性能を向上させるための命令が DPASW だと言えるだろう。
// C is arranged in 8x8 column major blocks organized in a 4x6 row major array (allowing a tile size of up to 32x48). // Each 8x8 block is split in two 8x4 blocks (due to dpasw). // Rearrange into contiguous columns and use hword x4 stores, taking 4 columns at a time. // (effectively a 4x4 whole-register transpose) // This burns through icache -- consider rewriting with indirect accesses.
参考リンク
- GRF Size: intel-graphics-compiler/Platform.hpp at aee335103dd48a7451f36e3b711c649660ec6dc5 · intel/intel-graphics-compiler
- Gen12 FusedEU description: intel/ir/gen12+: Work around FS performance regressions due to SIMD32 discard divergence. (!5910) · Merge requests · Mesa / mesa · GitLab
- HC33 PVC: Intel’s Ponte Vecchio GPU Architecture - hc2021_pvc_final.pdf
- DPASW FusedEU: oneDNN/xe_hp_systolic_gemm_kernel.cpp at 72e9993236c10bd2d676896b600fac05bdcfa2e1 · oneapi-src/oneDNN
- Gen12 PDF: Develop for Intel Graphics—Today and into the Future Presentation - july-gdc-2021-developing-for-intel-graphics-today-and-into-the-future.pdf
- the-compute-architecture-of-intel-processor-graphics-gen9-v1d0.pdf