Coelacanth's Dream

Intel Sierra Forest, Grand Ridge, Granite Rapids でサポートされる新命令

Intel より、Intel® Architecture Instruction Set Extensions Programming Reference Revision -046 が公開された。
今回のアップデートでは、Atom系コア (E-Core) のみの構成となる Xeon プロセッサ Sierra Forest、Core系コア (P-Core) のみの構成の Granite Rapids、それから Intel 公式からは初めて出てきたコードネームである Grand Ridge の CPUID Model とそれぞれでサポートする新命令の情報が追加されている。
Grand Ridge は対応する新命令が Sierra Forest と近いことから、Atom系と思われる。
Sierra Forest, Grand Ridge, Granite Rapids で共通してサポートする新命令はなく、また Sierra Forest, Grand Ridge でも命令範囲が完全には一致していない。

Sierra ForestGranite Rapids については Intel 3 プロセスが採用し、ロードマップ上では 2024年に位置することが発表されている。

また、命令とそれをサポートするプロセッサを集めたテーブルの AVX512_VP2INTERSECT 命令の行に、Tiger Lake 以外ではサポートされていないとする記述が追加された。
AVX512_VP2INTERSECT 命令は Tiger Lake (Willow Cove) からサポートされているはずだが、GCC と LLVM では Intel ISE の記述に沿う方向を見せている。1 2
今後の Intel プロセッサでは AVX512_VP2INTERSECT のサポートを廃止、あるいは実装しない方針なのだろうか。

AVX-[IFMA, NE-CONVERT, VNNI-INT8]

Golden Cove (P-Core), Gracemont (E-Core) では AVX512_VNNI 命令の 128/256-bit 版とも言える AVX_VNNI 命令を新たにサポートした。
そして Sierra Forest, Grand Ridge では AVX_IFMA, AVX_NE_CONVERT, AVX_VNNI_INT8 命令をサポートする。

AVX_IFMA (Integer Fused Multiply Add Instructions) 命令は AVX_VNNI 命令と同様、AVX512_IFMA 命令の 128/256-bit 版だとされる。

AVX_NE_CONVERT 命令は FP16/BF16 - FP32 の変換命令となる。
AVX512 では AVX512_BF16 で BF16 フォーマットに、AVX512-FP16 で FP16 フォーマットに対応している。
AVX512_BF16AVX512-FP16 には変換命令に加え、各種演算命令も含まれているが、AVX_NE_CONVERT はその中から FP16/BF16 - FP32 との変換命令の 128/256-bit 版のみに対応したものとなる。

AVX_VNNI_INT8 命令は Multiply and Add Unsigned and Signed Bytes With and Without Saturation と説明されているが、AVX_VNNI 命令 (VPDPBUSD[S]) との違いは VPDPB[SU,UU,SS]D[,S] 命令があること、ソースオペランドのデータフォーマットの組み合わせが増やされていることなのだろうか? 正直自信がない。
x86, AMD64, x86-64 向けの C++ JITアセンブリ Xbyak の開発者である herumi 氏の記事と、Intel の Srinivas Putta 氏 (nivas-x86) のコメントでは、AVX_VNNI では <uint8_t>x<int8_t> の組み合わせのみをサポートするが、AVX_VNNI_INT8 は他の組み合わせ (<uint8_t/int8_t>x<uint8_t/int8_t>) もサポートするのが違いだとしている。3

これらの命令は Sierra Forest, Grand Ridge でサポートされている。
AVX (128/256) 系命令の拡張を Atom系で行っていることから、まだ Atom系が AVX512 系命令をサポートするつもりがないとも捉えられる。
また、サポートするプロセッサに Meteor Lake が入っていないが、Meteor Lake に採用される Crestmont (E-Core)Sierra Forest, Grand Ridge はマイクロアーキテクチャが異なるか、Meteor Lake では Redwood Cove (P-Core) 側が AVX_IFMA, AVX_NE_CONVERT, AVX_VNNI_INT8 命令に対応しないため無効化していることが考えられる。

RAO-INT

RAO-INT (AADD, AAND, AOR, AXOR) 命令セットは ADD, AND, OR, XOR 命令といった基本的な命令に Atomic 操作を追加した命令となる。
RAO-INT 命令の Memory Ordering は、LFENCE, SFENCE, MFENCE 命令と組み合わせた場合よりも弱いものだとしている。

RAO-INT 命令は Grand Ridge でサポートされるとしており、Sierra Forest, Granite Rapids は含まれていない。
このことから Sierra ForestGrand Ridge は近くはあるが、異なるマイクロアーキテクチャであることが考えられる。

RAO-INT 命令では、プロセッサが特定のキャッシュレベルのみに結果を書き込むことでキャッシュ可用性 (キャッシュヒット率?) を最適化することがあるとしており、L2キャッシュを複数のコアで共有する構成を取る Atom系プロセッサをある程度想定した命令ではないかと思われる。

PREFETCHIT0/1

PREFETCHIT0/1 命令はデータではなくコード (命令) のプリフェッチを行い、命令キャッシュの最適化を目的とした命令となる。
PREFETCHIT0/1Granite Rapids でサポートされる。

AMX-FP16

Sapphire Rapids では AMX 系命令に AMX-BF16, AMX-TILE, AMX-INT8 命令をサポートしていた。Granite Rapids ではそこに FP16 データフォーマット向けの AMX-FP16 命令が追加される。

今回のアップデートでは Emerald Rapids には触れられていないが、Emerald RapidsSapphire Rapids と同じ Intel 7 プロセスが採用することが発表されており、マイクロアーキテクチャの拡張は行われないのかもしれない。
しかし、Raptor Lake では Alder Lake から改良された Intel 7 プロセスが採用されており、Emerald Rapids でも同様に改良版の Intel 7 プロセスで製造されることが考えられる。

Family 0x6 CPUID Model
Alder Lake-S 0x97
Alder Lake-M/P 0x9A
Alder Lake-N 0xBE
Raptor Lake-S 0xB7
Raptor Lake-P 0xBA
Raptor Lake-S (Alder Lake-R?) 0xBF
Meteor Lake-? 0xB5
Meteor Lake-S 0xAC
Meteor Lake-M/P 0xAA
Sapphire Rapids 0x8F
Emerald Rapids 0xCF4
Granite Rapids 0xAD, 0xAE
Sierra Forest 0xAF
Grand Ridge 0xB6

参考リンク