コンテンツにスキップ

ストリーミングSIMD拡張命令

出典: フリー百科事典『ウィキペディア(Wikipedia)』
SSE3から転送)

ストリーミングSIMD拡張命令: Streaming SIMD Extensions、略称:SSE)は、インテルが開発したCPUSIMD拡張命令セット、およびその拡張版の総称である。後継の Advanced Vector Extensions (AVX) と Advanced Matrix Extensions (AMX) についても本項で記載する。

概要

[編集]

SSEは、x86アーキテクチャに8本の128ビットレジスタを新設し、浮動小数点演算のSIMD処理を実現したものである。AMDK6-2に実装されたSIMD拡張命令3DNow!に対抗する形でPentium IIIから実装された。4個の32ビット単精度浮動小数点データを一本のレジスタに格納し、同一の命令を一括処理することができる。拡張命令であるため、その機能を使用するためにはSSEに対応したソースコードを作成し、プログラムコンパイルする必要がある。伝統的なベクトル型CPUと比較したときにいくつかの仕様が欠落(例えば可変長ベクトルが扱えない,疎行列に弱いなど)しているものの、ベクトル計算をサポートする機能ではある。

Core Duoまでのインテル製CPU、K8までのAMD製CPUでは、64ビット幅の演算器を用いて128ビット演算命令を2クロックかけて実行するという実装であったため、128ビット演算命令を用いても実質的なスループットクロックあたり64ビットであった[注 1]。そのため従来から存在するMMX命令やAMDの3DNow!命令に対する性能面でのアドバンテージは128ビット幅のレジスタを使えるという点以外では小さく、むしろ並列度が上がった分だけ最適化も煩雑になるという欠点が目立った。また当時のRISC系CPUに搭載されているSIMD命令では128ビット演算命令を1クロックで実行できるものがあり、これらに対する性能的なディスアドバンテージは小さくなかった。最終的にはCoreマイクロアーキテクチャ/AMD K10より128ビット演算命令も1クロック処理が可能な形態へと改良され、SSE命令の実用性は大幅に向上した。

元々はインターネット・ストリーミングSIMD拡張命令: Internet Streaming SIMD Extensions、ISSE)と呼ばれていたが [1]、命令内容そのものはインターネットとは直接関係が無くマーケティング的な要素が強かったため、現在ではインターネットの文言が外され単にSSEと呼ばれるようになっている。

SSEの機能を強化したものにSSE2やSSE3、SSSE3(Supplemental/補足的なSSE3)、SSE4がある。また、SSEは他社製品にも採用されている。SSEの後継はAVXである。

アセンブラを手書きして性能を引き出すためには高度な(トップクラスのプログラマですら習得が困難な)プログラミング技術が要求されるため、一般的にはコンパイラの自動最適化機能を介して利用することになる。あくまでもCPUに付属するベクトル計算機能に過ぎないため、並列度を大幅に上げたい場合はGPGPUに移行する必要がある。

沿革

[編集]
  • 1999年 2月: インテルがSSE搭載のPentium IIIプロセッサを発表。
    • 2000年 3月: インテルがSSE搭載のCeleronプロセッサを発表。
  • 2000年 11月: インテルがSSE2搭載のPentium 4プロセッサを発表。
    • 2002年 5月: インテルがSSE2搭載のCeleronプロセッサを発表。
    • 2003年 3月: インテルがSSE2搭載のPentium Mプロセッサを発表。
    • 2004年 1月: インテルがSSE2搭載のCeleron Mプロセッサを発表。
  • 2004年 2月: インテルがSSE3搭載のPentium 4プロセッサを発表。
    • 2004年 6月: インテルがSSE3搭載のCeleron Dプロセッサを発表。
    • 2006年 1月: インテルがSSE3搭載のIntel Coreプロセッサを発表。
  • 2006年 6月: インテルがSSSE3搭載のXeon 5100プロセッサを発表。
    • 2006年 7月: インテルがSSSE3搭載のIntel Core 2プロセッサを発表。
  • 2007年 8月: AMDがSSE5を発表。
  • 2007年 11月: インテルがSSE4.1搭載のIntel Core 2プロセッサを発表。
  • 2007年 11月: AMDがSSE4a搭載のPhenomを発表。
  • 2008年 11月: インテルがSSE4.2搭載の第一世代Intel Core i7プロセッサを発表。
  • 2011年 1月: インテルがAVX搭載の第二世代Intel Core i7プロセッサを発表。
  • 2011年 10月: AMDがFMA搭載のAMD FXプロセッサを発表。
  • 2013年 6月: インテルがAVX2搭載の第四世代Intel Core i7プロセッサを発表。
  • 2016年 6月: インテルがAVX-512搭載の第二世代Intel Xeon Phiコプロセッサを発表。
  • 2023年 1月: インテルがAMX搭載の第四世代Intel Xeon SPを発表。

SSE

[編集]

Pentium IIIにはじめて実装された。追加された命令数は70[2]。Pentium IIIの開発コードネームKatmaiであったことから、KNI (Katmai New Instructions) [3]MMX2 [4]とも呼ばれていた。廉価製品のCeleronにおいても、その第三世代製品 Coppermine-128k よりSSEに対応している[5][6]

AMDによるSIMD拡張命令セット3DNow! Professionalは、SSEと互換性がある[7][8]

SSE2

[編集]

SSE2は従来のSSEに144個の新たな命令が加えられた[2]。具体的には64ビットの倍精度浮動小数点演算のサポートおよびMMXを128ビット幅に拡張する整数演算命令の追加、キャッシュの制御機能の強化がなされた。

SSE2はPentium 4で初めて実装された[9]。AMDのAMD64アーキテクチャでは、浮動小数点演算に従来のx87命令ではなくSSE/SSE2のスカラ演算命令を用いることを標準としたため、拡張命令ではなく基本命令としてSSE、SSE2が取り込まれている。

SSE3

[編集]

SSE3はSSE2に13個の新たな命令が加えられた[2]。具体的にはメモリアクセスおよび複素数計算の高速化、仮想CPUのスレッドの動作制御などの機能が搭載され、主に動画圧縮の処理が向上した。

SSE3の名称が発表される前はPNI (Prescott New Instructions) と呼ばれていた[2]Pentium 4のPrescottコア(2004年 -)で初めて実装された。

SSSE3

[編集]

SSSE3 (Supplemental SSE3) はSSE3に32個の新たな命令が加えられた[2]CoreマイクロアーキテクチャベースのマイクロプロセッサIntel Core 2 (Conroe) / Intel Xeon (Woodcrest) で初めて実装された。

SSSE3と名付けられる前はMNI (Merom New Instructions; 旧称Tejas New Instructions) という名称があった[2]。登場当初はSSE4と呼ばれると一般的には思われていた。

SSE4

[編集]

SSE4.1

[編集]

45nm世代のCore 2のPenrynで搭載。47個の命令が追加になる。

SSE4.2

[編集]

Nehalemマイクロアーキテクチャの第1世代Intel Core iで初めて実装された。7個の命令を追加。SSE 4.2の追加命令は以下の通り。

  • String & Text New Instructions (STTNI)
    • PCMPESTRI
    • PCMPESTRM
    • PCMPISTRI
    • PCMPISTRM
    • PCMPGTQ
  • Application Targeted Accelerators (ATA)

SSE4a

[編集]

AMD Phenomで搭載。 キャッシュ関連や挿入、展開の4命令が追加。インテルのSSE4とは名前は似ているが互換性は無い。

FMA

[編集]

x86プロセッサにおいて融合積和演算を実現するための拡張命令[10]がFused Multiply-Add (FMA)である。2007年にAMDがSSE5命令の一部として、2008年にインテルがAVX命令のサブセットとして採用を発表したが、両者の仕様は異なるものであった[11]。その後、インテルは2009年初頭にFMA命令の仕様を変更し、4オペランド (FMA4) をやめ3オペランド形式 (FMA3) とした[11]。2009年5月にはAMDがSSE5命令の採用を取りやめ、AVXのサポートを表明したため、仕様の統一が図られたかと思われたが、FMA命令に関してはインテルが仕様を変更する前の4オペランド版FMAを採用したため、FMA4とFMA3という二系統のFMA命令が混在していた。その後、AMDがZenマイクロアーキテクチャでFMA4の削除およびサポートの打ち切りを表明したことで、FMA命令についても仕様の統一が図られた[12]

FMA命令では±(A×B)±Cの形で表現される単精度/倍精度の浮動小数点演算を1命令で実行できる。乗算結果の符号を反転するか、乗算後に加算を行うか減算を行うかによって以下の4つのバリエーションがある。

MADD
A×B+C
MSUB
A×B-C
NMADD
-(A×B)+C
NMSUB
-(A×B)-C

いずれの命令も単精度/倍精度、スカラ/ベクタを問わず全てのタイプの演算に適用可能である。他にもベクタ専用のMADDSUB命令が存在し、1,3,5...番目の要素にMADDを、0,2,4...番目の要素にMSUBを行うという命令になっている。

FMA命令に対応した演算器においては、上記の浮動小数点演算を1クロックサイクルのスループットで実行可能で、加算のみ、乗算のみを実行できる演算器と比較すると理論FLOPSを倍にすることができる。また、乗算の結果に対しては丸めを行わず、加算を行った後に一度だけ丸めを行うため、乗算と加算を独立して実行するのと比較して丸め誤差を小さくできるという利点もある。実装としてはAMDではBulldozerマイクロアーキテクチャでサポートされたのが最初で、モジュールあたり2つの128ビットFMA演算器を搭載している。インテルはHaswellマイクロアーキテクチャで初めてサポートしており、コアあたり2つの256ビットFMA演算器を搭載している[13]

FMA4

[編集]

インテルが2008年に発表した時点でのFMA命令セット[11]。完全な4オペランドを実現しており、3つのソースオペランドとディスティネーションオペランドを独立に指定できる。その後インテルは仕様を変更したために採用を取りやめたが、AMDはBulldozerマイクロアーキテクチャにおいてこの命令セットをサポートし続けていた。その後AMDが発表したZenマイクロアーキテクチャで削除されることとなった[12]

FMA3

[編集]

インテルが2009年に仕様を変更し、現在使われているFMA命令セット(FMA instruction set[14])。4オペランド方式をやめ、3つのソースオペランドのうち任意の1つを破壊することにより3オペランドでFMAを実現している。インテルはHaswellマイクロアーキテクチャ以降で、AMDはBulldozerマイクロアーキテクチャのPiledriverコア以降でサポートしている。なお、AMDが当初SSE5において採用したFMA命令も同じ3オペランド方式であった[15]

ベーシックなmm256_fmadd_ps命令の場合、Intel CPUで1サイクルあたり16個の単精度FMA演算を実行する[16][17] (256 [bit/inst.] ÷ 32 [bit/fp32FMA] ÷ 0.5 [CPI=cycle/inst.][18])。例えば3GHzで動作するプロセッサであれば1コア当たり 48 GMAC/s (=96 GFLOPS) のピーク性能を可能にする(参考: FLOPS#代表的なハードウェアの浮動小数点数演算能力)。

FMA4と比べるとレジスタの退避を行う必要がある場合に不利であるが、命令長を1バイト短くすることができるため、デコーダの実装や命令キャッシュのフットプリントでは有利である。インテルのIvy Bridgeマイクロアーキテクチャ以降やAMDのBulldozerマイクロアーキテクチャでは、レジスタ・リネーミングによってレジスタ間のmov命令をゼロレイテンシで実行できるため、これと組み合わせればレジスタ退避のペナルティは軽減できる。

インテルのマイクロプロセッサにおいてはAVX2命令と同時に採用されたため、AVX2命令の一部であると誤解されることがある。しかし、両者のCPUIDフラグは独立に設けられており[19]、必ずしも両者が同時にサポートされているとは限らない(例えば、FMA3をサポートするAMDのPiledriverコアではAVX2命令はサポートしていない)。

Intel AVX

[編集]

MMX/SSE後継のSIMD拡張命令セットで、呼称がIntel Advanced Vector Extensionsとなった。Sandy Bridgeマイクロアーキテクチャ2011年 -)で初めて搭載された[20][21]。浮動小数点演算の演算幅がSSEの2倍の256ビットとなり、1命令で8つの単精度浮動小数点演算もしくは4つの倍精度浮動小数点演算を実行することができる。また、命令デコード性能向上のため、新しい命令フォーマット(VEXエンコーディング)が採用されている。3 or 4オペランドの非破壊型命令もサポートするため、レジスタ退避・復元処理の記述を省くことができる。この非破壊型の命令フォーマットに関しては従来の128ビット幅のSSE命令にも使うことができるため、AVXに対応したプロセッサでは新規に導入された256ビット命令を使わなくてもSIMD演算の性能が向上する可能性がある。

SSEが導入された際には専用の128ビットレジスタが新設されたが、AVXの256ビットレジスタは下位の128ビットを既存のSSEレジスタと共有している[21]。そのためSSE命令とAVX命令の間でのデータ交換は容易である。ただし、256ビットのAVX命令と既存のSSE命令を混在させると、SSE命令を実行する際にAVXレジスタの上位128ビットを退避するというペナルティが発生するため、パフォーマンスが落ちる。これを避けるためには、256ビット命令の実行後にVZEROUPPER/VZEROALL命令を実行して明示的にAVXレジスタの上位128ビットをクリアするか、SSE命令をVEXエンコーディングを使ったものに置き換える必要がある。VEXエンコーディングの128ビット命令はAVXレジスタの上位128ビットを保持せずにゼロクリアするという挙動になっており、AVXレジスタの部分的な書き換えが発生しないためである。

Sandy Bridgeでは当初のSSEの実装のように既存の128ビットの演算器を使って2サイクルで実行するようなことはせず、素直に乗算器や加算器などの演算器が256ビット幅に拡張されている[20]。これによって、実質的なピーク浮動小数点演算性能がNehalem世代の2倍となっている。

AMDはBulldozer世代向けに当初予定していたSSE5拡張命令をキャンセルし、AMD FXではAVXがサポートされることになった[11]。ただし、256ビット命令に関しては128ビット幅の演算器を2つ使って実行しており[22][23]、スループットは従来のSSE命令と変わらない。

Intel AVX2

[編集]

AVX2はAVXの後続となる256ビットレジスタ対象の拡張命令セットである。

命令

[編集]

256ビットレジスタ上の整数ベクトルに対する算術 (add, sub, mul, madd, abs, sad, sign)、比較(eq, gt)、統計 (ave, min, max)、論理 (and, or, xor, andnot) 、シフト (sll, sra, srl, alignr)、変換 (convert)、要素操作/swizzle (permute, shuffle, broadcast, insert, blend, unpack, pack, extract) をサポートする。また整数ベクトルの入出力 (stream load, masked load/store)、マスク生成 (movemask) も追加されている。シフト命令は要素ごとに独立したシフト量を設定できる。

浮動小数点ベクトルにも影響する命令としてはgather命令(非連続なデータを並べ替えながらロード)が導入されている。

対応

[編集]

インテルはHaswellマイクロアーキテクチャから搭載している[24]。AMDはExcavatorアーキテクチャからAVX2を実装している[25]。ただし、SIMD演算ユニット自体はZen+まで128bit幅に留まっていたため、AVX2命令を多用する処理はあまり高速化されていなかった。Zen2世代からは256bit幅になり処理速度が改善されている。

実装としてIntel CPUではベクトルレジスタとベクトル用実行ユニットを用いて計算される。例としてint8積和演算(VNNI等価)では"Vec Mul"および"Vec ALU"実行ユニットが典型的に利用される(下表)。

表. Intel CPU AVX2におけるint8積和演算 (pseudo VNNI) 実装
μarch 実行ユニット
VPMADDUBSW, VPMADDWD VPADDD
Haswell "SIMD Misc" x1[26] "SIMD ALU" x2[27] (Port 1, 5)
Skylake "Vec Mul" x2[28] (Port 0, 1) "Vec ALU" x3[29] (Port 0, 1, 5)
Sunny Cove "Vec Mul" x2[30] "Vec ALU" x3[31] (Port 0, 1, 5)
Golden Cove英語版 "Vec Mul/FMA" x2[32] (Port 0, 1) "Vec ALU" x3[33] (Port 0, 1, 5)
Gracemont英語版

AVX2 VNNI

[編集]

Intel AVX2 Vector Neural Network Instructions (AVX2 VNNI) は整数積和演算の効率化を目的とした拡張命令セットである[34]AVX-512のサブセットとして導入されたAVX-512 VNNIをAVX2 (整数ベクトルレジスタ) へバックポートしている。[int8 | int16]・[非飽和 | 飽和] の組み合わせに対応した4種の整数積和演算vpdp[bu|ws]sd[|s])からなり、組み込み関数/intrinsicsとしては[XMM (_mm_) | YMM (_mm256_) ] およびAVX512 VNNIとの区別(_avx)をさらに組み合わせた計16個が定義されている。

Intel CPUでは第12世代Intel Core(Alder Lake)から対応している[35]。int8の場合FMAと同じ256bitレジスタを用いて4倍の要素を積和できるため、命令スループットが同等なら[36][37]FMA比4倍の演算スループットを得られる。

Intel AVX-512

[編集]

ZMMレジスタを512ビット長とし[38]、レジスタ数も16から32に増やした。

発表されている命令群には、扱うデータや処理の差によって、AVX512F, AVX512CD, AVX512DQ, AVX512PF, AVX512ER, AVX512VL, AVX512BW, AVX512IFMA, AVX512VBMI, AVX512VBMI2, AVX512VAES, AVX512BITALG, AVX5124FMAPS, AVX512VPCLMULQDQ, AVX512GFNI, AVX512_VNNI, AVX5124VNNIW, AVX512VPOPCNTDQ, AVX512_BF16といった分類がされる命令群があり、どれをどこまで実装しているかは、製品によって異なる。一部は命令の仕様だけ公開されていてまだ製品に実装されていないものもある。このように実装レベルが異なるものが複数存在していることもあり、AVX-512に対応しているといっても、何をどこまで実装されているのか確認が必要な状況になっている(詳細は下記のAVX-512を実装したCPUを参照のこと)。こういった仕様の差異は対象とするCPUに合わせてコードの書き分けが必要になるなどするため、利用者においては混乱の元となっている。膨大な命令が存在することから、アセンブラを手書きして性能を引き出すためには非常に高度な知識が必要となる。

アプリケーションにおける有用性の低さについて

[編集]

AVX-512については有用性について批判が提出されており、高性能計算(HPC)を除いて殆ど役に立たないとも言われている。インテル自身も2022年以降に出荷されるコンシューマー向けのCPUでAVX-512の無効化に踏み切るなど、様々な意味で難しい立場に置かれている命令セットである。

トップクラスのプログラマでさえ扱いに困るような命令セットで、努力に対する見返りは少ない。当然のことながら、習得難易度は一般的なプログラマにとっては手の届かないほど高い水準にある。現状では、AVX2を利用したアプリケーションと比較して劇的な性能向上が達成されているわけではない。膨大な命令群を使いこなす必要があることからアセンブラを手書きする方法は難易度が極端に高いため、全てをコンパイラに任せ、程々の性能向上を達成することが殆どではあるが、僅かながら手書きのアセンブラで劇的な性能向上を達成した事例もあり、目下研究開発が続けられている状況にある。

2022年の時点では、SIMD命令を活用する代表的なアプリケーションである動画エンコードでは、x265をAVX-512を利用してエンコードを行ってもエンコード時間は7%しか短縮できず、一方で消費電力は29%も増大するという、非効率極まりない状況にあった[39]。しかし、2024年11月2日に、FFmpeg開発者が手書きのAVX-512コードで最大94倍の性能向上を達成したとの報告を行っており、今後の開発が望まれるアプリケーションにもなっている[40]

最も効果を発揮するアプリケーションの1つにRPCS3と呼ばれるPlayStation3エミュレータがあり、AVX2では190FPSで動作するゲームが、AVX-512を有効化すると235FPSで動作するようになり、約23%高いパフォーマンスを発揮するようになったとの報告がある[39]

上記のように、AVX-512の利用方法の発見はそれ自体が研究テーマになりうる程に難解である。

従って、AVX-512は特殊な条件下でのみ有効に機能すると結論付けられる。次世代の命令セットであるAVX10ではAVX-512の有用性に関わる様々な問題が部分的に解決される見通しである。

AVX-512を実装したCPU

[編集]
  • Intel
    • Knights Landing (Xeon Phi x200):[41][42] AVX-512 F, CD, ER, PF
    • Knights Mill (Xeon Phi x205):[43] AVX-512 F, CD, ER, PF, 4FMAPS, 4VNNIW, VPOPCNTDQ
    • Skylake-SP, Skylake-X:[44][45][46] AVX-512 F, CD, VL, DQ, BW
    • Cannon Lake:[43] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI
    • Cascade Lake: AVX-512 F, CD, VL, DQ, BW, VNNI
    • Cooper Lake: AVX-512 F, CD, VL, DQ, BW, VNNI, BF16
    • Ice Lake,[43] Rocket Lake:[47][48] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES
    • Tiger Lake (except Pentium and Celeron but some reviewer have the CPU-Z Screenshot of Celeron 6305 with AVX-512 support[49][50]):[51] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, VP2INTERSECT
    • Alder Lake (never officially supported by Intel, completely removed in newer CPUsNote 1):[52][53] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16, VP2INTERSECT, FP16
    • Sapphire Rapids[54] and later P-core-only Xeon processors: AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16, FP16
  • Centaur Technology
    • "CNS" core (8c/8t):[55][56] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI
  • AMD
    • Zen 4:[57][58][59][60][61] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16
    • Zen 5:[62] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16, VP2INTERSECT
Subset
F
CD
ER
PF
4FMAPS
4VNNIW
VPOPCNTDQ
VL
DQ
BW
IFMA
VBMI
VNNI
BF16
VBMI2
BITALG
VPCLMULQDQ
GFNI
VAES
VP2INTERSECT
FP16
Knights Landing (Xeon Phi x200, 2016) Yes Yes No
Knights Mill (Xeon Phi x205, 2017) Yes No
Skylake-SP, Skylake-X (2017) No No Yes No
Cannon Lake (2018) Yes No
Cascade Lake (2019) No Yes No
Cooper Lake (2020) Yes No
Ice Lake (2019) Yes No Yes No
Tiger Lake (2020) Yes No
Rocket Lake (2021) No
Alder Lake (2021) PartialNote 1 PartialNote 1
Zen 4 (2022) Yes Yes No
Sapphire Rapids (2023) No Yes
Zen 5 (2024) Yes No

沿革

[編集]
  • 2016年、第2世代Xeon Phiに初めて搭載(第1世代Xeon PhiはAVX-512と互換性のない拡張命令セット、Intel IMCIを採用[63])。
  • 2017年、第1世代Xeon SPプロセッサ(Skylakeマイクロアーキテクチャ)から一部の命令を搭載した[64]
  • 2018年、AVX-512 VNNI(AVX-512 Vector Neural Network Instructions)が機能拡張としてIntel, IEEE Hot Chips 30 Symposium (HCS) 2018で発表した。第2世代Xeon SP(Cascade Lakeマイクロアーキテクチャ)にて実装。
  • 2019年、Intelの10nm世代CPUの第10世代Intel Core(Ice Lakeマイクロアーキテクチャ)にて AVX-512 を標準搭載とした。
  • 2020年、第3世代Xeon SP(Cooper Lakeマイクロアーキテクチャ)にて、bfloat16(AVX512_BF16)に対応した。
  • 2021年、IntelのCPUでは、AVX-512はサーバー向けのIntel Xeon SPのみのサポートとなり、パソコン用では第12世代Intel Core(Alder Lakeマイクロプロセッサ)以降は非対応になり、次はAVX10.2での対応となった。パソコン用がAVX2に後退したため、AVX2にVNNIなどの機能追加が行われるようになる。
  • 2022年、Intelとは逆にAMDはZen 4コアでのAVX-512対応を表明した[65]

Alder Lake以降での無効化

[編集]

第12世代Intel Core(Alder Lakeマイクロプロセッサ)以降のパソコン向けでは基本的にAVX-512が利用不可になった。Alder Lakeでは2種類のコアを搭載している。PコアのみAVX-512命令セットが実行可能となっており、Gracemontアーキテクチャに基づくEコアでは非対応である。一部のマザーボードではBIOSバージョンとリビジョンの組み合わせにより、Eコアを無効化することでAVX-512を有効化できる。[66][67]Intelは最新リビジョンのAlder LakeではAVX-512命令のサポートをシリコンレベルで打ち切っている。[68]

AVX-512 VNNI

[編集]

AVX-512 Vector Neural Network instructions (AVX-512 VNNI) は畳み込みニューラルネットワークの整数演算(int8, int16)の効率を目的としたAVX-512のサブセットである[69]。AVXでは高効率のINT8積和演算として VPMADDUBSW/VPMADDWD/VPADDD の3連続命令が利用されている(AVX2なら4要素積和演算を8レーン同時に実行可能)。VNNIはこれを VPDPBUSD 命令のみでおこなうものである[70]

批判

[編集]

Linux開発者のリーナス・トーバルズは下記のように批判している[71]

AVX512が苦しんで死ぬことを望んでいる。そして、Intelは、魔法のような命令セットを作り、よく見えるベンチマークを出そうと試みるのではなく、実際の問題を修正すべきだ
Intelは基本に帰って、自社のプロセスがちゃんと機能するようにすべきだ。そして、HPC(高性能コンピュータ)など意味のない特別なケースではなく、通常のコードにもっと集中すべきだ
通常の整数コードでパワーの限界に到達したい。動作周波数(memcpyを使うことになる)やコア(使えないゴミはスペースを占有する)を取り除いてしまうAVX-512のようなパワーウイルスではなく

Intel AVX10

[編集]

2023年7月に AVX-512 の後継の AVX10 をインテルは発表した。AVX10 は AVX2 と AVX-512 の統合ベクトル命令セットアーキテクチャ(converged vector ISA)[72]である。また、AVX-512は様々なサポート状況のフラグで管理するのが複雑だったため、AVX10はAVX10.1、AVX10.2とバージョン番号で管理する相対的にシンプルな仕組みとなった。

AVX10.1

[編集]

AVX10.1はPコアのみのIntel Xeon 6(Granite Rapids マイクロアーキテクチャ)から対応。XeonのPコアのみ対応する。概ねAVX-512をそのまま引き継いだものである。[73][74]

AVX10.2

[編集]

AVX10.2からは、ARM64のScalable Vector Extensionと似た手法を採用し、128, 256, 512ビットレジスタどれであっても動作するようにして、パソコン用を含め、PコアでもEコアでも動作するようになる。インテルのパソコン向けCPUはかつてはAVX-512に対応していたが、Eコアを導入してから、Eコアで512ビットレジスタに対応できないため、AVX2に後退していた。[75]

Intel AMX

[編集]

Intel Advanced Matrix Extensions (AMX) はインテルが2020年にAVX-512 VNNIの拡張として発表した(2次元)行列を計算するために設計された拡張命令。今までのは(1次元)ベクトル計算だった。

2023年1月10日発売の第4世代Intel Xeon SP(Sapphire Rapidsマイクロアーキテクチャ)から搭載されている。基礎となるAMX-TILEの命令群と、8bit整数の行列を扱うAMX-INT8の命令群と、bfloat16の行列を扱うAMX-BF16の命令群から構成されている。Sapphire RapidsマイクロアーキテクチャではTMUL(Tile Matrix Multiply、タイル行列積)が実装されている。

タイル行列積の1コアあたりの命令数/サイクル[76]

  • Intel AMX-INT8: 2048 (=16 * 64 * 2)
  • Intel AMX-BF16: 1024 (=16 * 32 * 2)

AVX-512はINT8で256op/cycleだったため、8倍高速化した。

Intel Xeon 6(Granite Rapids マイクロアーキテクチャ)からAMX-FP16を実装[77]

未だ開発が継続されている命令群であり、さらなる拡張が予定されている。

脚注

[編集]

注釈

[編集]
  1. ^ SIMD整数演算に関してはPentium M、Core DuoやK8では64ビット幅の演算器を2つ持つため、コア全体でのSIMD整数演算のスループットは128ビット/クロックであった。

出典

[編集]
  1. ^ 元麻布春男 (2005年3月4日). “デュアルコア+HTはゼニが取れる技術か”. PC Watch. 元麻布春男の週刊PCホットライン. 2019年12月22日閲覧。
  2. ^ a b c d e f 後藤弘茂 (2006年10月4日). “SSE4命令とアクセラレータから見えるIntel CPUの方向性”. PC Watch. 後藤弘茂のWeekly海外ニュース. 2019年12月22日閲覧。
  3. ^ 後藤弘茂 (1998年10月8日). “MPEG-2のエンコードまで実現できるKatmaiの新命令”. PC Watch. 後藤弘茂のWeekly海外ニュース. 2019年12月22日閲覧。
  4. ^ 後藤弘茂 (1997年9月8日). “SGIがWintelワークステーションを来年投入?”. PC Watch. 後藤弘茂のWeekly海外ニュース. 2019年12月22日閲覧。
  5. ^ 米Intel、Coppermine-128kことCeleron 600/566MHz”. PC Watch (2000年3月29日). 2019年12月22日閲覧。
  6. ^ 笠原一輝 (2000年3月31日). “Coppermine-128K 600/533A MHzをベンチマーク”. PC Watch. AKIBA PC Hotline. 2019年12月22日閲覧。
  7. ^ 鈴木直美 (2001年8月31日). “第179回:8月20日~8月24日”. PC Watch. 鈴木直美の「PC Watch先週のキーワード」. 2019年12月22日閲覧。
  8. ^ 笠原一輝 (2001年10月10日). “Pentium 4キラーとなりうるAMDの強力な新製品 Athlon XPプロセッサの実力を探る”. PC Watch. AKIBA PC Hotline. 2019年12月22日閲覧。
  9. ^ 後藤弘茂. “ソフト開発者にはSSE2命令への移行を推奨”. PC Watch. 2019年12月22日閲覧。
  10. ^ 乗算と加算あるいは減算を融合させた命令はAMDのBulldozer以前にも、HPのPA-RISCやIBMのPower、PowerPC、インテルのItaniumにも実装されていた。
  11. ^ a b c d 後藤弘茂. “AMDのAVXサポートとBulldozerのクラスタ型マイクロアーキテクチャ”. 後藤弘茂のWeekly海外ニュース. 2019年11月18日閲覧。
  12. ^ a b “[GDC 2017]AMDの技術者が語る,「Ryzenに向けた最適化のコツ」 - 4Gamer.net”. (2017年3月9日). https://www.4gamer.net/games/300/G030061/20170308070/ 2017年3月10日閲覧。 
  13. ^ Hisa Ando (2012年10月3日). “HPC性能が大幅に強化されたHaswell(前編) -各コアに256bit長のFMAを2個装備”. マイナビニュース. https://news.mynavi.jp/techplus/article/20121003-idf_haswell_hpc_01/ 2019年11月18日閲覧。 
  14. ^ "CHAPTER 6 INSTRUCTION SET REFERENCE - FMA ... FMA INSTRUCTION SET ... Performs a set of SIMD multiply-add computation on packed" Intel. Intel® Architecture Instruction Set Extensions Programming Reference. pp.6_1-6_2.
  15. ^ Junya Suzuki (2007年8月31日). “米AMD、3オペランド命令とFMAをサポートした「SSE5」を発表”. マイナビニュース. https://news.mynavi.jp/article/20070831-a002/ 2019年11月18日閲覧。 
  16. ^ "to sustain Haswell’s CPU peak (e.g., 16 multiply-adds per cycle)" 田浦. (2016). What You Must Know about Memory, Caches, and Shared Memory. 並列分散プログラミング, 東京大学.
  17. ^ "Intel® AVX 2.0 delivers 16 double precision and 32 single precision floating point operations per second per clock cycle within the 256-bit vectors, with up to two 256-bit fused-multiply add (FMA) units." Intel. Intel® Advanced Vector Extensions 512. 2022-04-04閲覧.
  18. ^ "__m256 _mm256_fmadd_ps ... Throughput (CPI) ... Haswell ... 0.5" Intel Intrinsics Guide. 2022-04-03閲覧.
  19. ^ "12 FMA ... 28 AVX" Intel. (2021). Intel® Architecture Instruction Set Extensions and Future Features. p.1_27.
  20. ^ a b 後藤弘茂 (2010年9月17日). “なぜSandy Bridgeはそんなにパフォーマンスが高いのか”. PC Watch. 後藤弘茂のWeekly海外ニュース. 2019年12月22日閲覧。
  21. ^ a b 2011-01-03 (米田聡). “Sandy Bridgeがやってきた!~プロセッサの基本性能は順当に向上”. 4Gamer.net. 2019年12月22日閲覧。
  22. ^ 本間文 (2010年10月12日). “AMD,Bulldozerアーキテクチャ採用の新世代CPU「FX」を正式発表。発売は10月下旬以降に”. 4Gamer.net. 2019年12月22日閲覧。
  23. ^ 後藤弘茂 (2011年3月2日). “8コアCPUを低コストに実現したBulldozer”. PC Watch. 後藤弘茂のWeekly海外ニュース. 2019年12月22日閲覧。
  24. ^ 大原雄介 (2012年9月24日). “インテルCPU進化論 Haswellで導入されるCPUの改良 後編”. ASCII.jp. ロードマップでわかる!当世プロセッサー事情. 2019年11月18日閲覧。
  25. ^ “【イベントレポート】AMD、Carrizoを「第6世代AMD Aシリーズ プロセッサ」として発表 - PC Watch”. (2015年6月3日). https://pc.watch.impress.co.jp/docs/news/event/705132.html 2015年12月15日閲覧。 
  26. ^ "Haswellマイクロアーキテクチャの実行ユニット ... Execution Unit ... SIMD Misc ... # of Ports ... 1 ... Instructions ... (v)pmadd*" p.32 of Intel. (2017). Intel® 64 and IA-32 Architectures Optimization Reference Manual. Order Number: 248966-037 July 2017. iSUS訳.
  27. ^ "Haswellマイクロアーキテクチャの実行ユニット ... Execution Unit ... SIMD ALU ... # of Ports ... 2 ... Instructions ... (v)padd*" p.32 of Intel. (2017). Intel® 64 and IA-32 Architectures Optimization Reference Manual. Order Number: 248966-037 July 2017. iSUS訳.
  28. ^ "Skylake Client Microarchitecture Execution Units ... Execution Unit ... Vec Mul ... # of Unit ... 2 ... Instructions ... (v)pmadd*" p.2_27 of Intel. (2022). Intel® 64 and IA-32 Architectures Optimization Reference Manual. Order Number: 248966-045 February 2022.
  29. ^ "Skylake Client Microarchitecture Execution Units ... Execution Unit ... Vec ALU ... # of Unit ... 3 ... Instructions ... (v)paddb/w/d/q" p.2_27 of Intel. (2022). Intel® 64 and IA-32 Architectures Optimization Reference Manual. Order Number: 248966-045 February 2022.
  30. ^ "Ice Lake Client Microarchitecture Execution Units ... Execution Unit ... Vec Mul ... # of Unit ... 2 ... Instructions ... (v)pmadd*" p.2_13 of Intel. (2022). Intel® 64 and IA-32 Architectures Optimization Reference Manual. Order Number: 248966-045 February 2022.
  31. ^ "Ice Lake Client Microarchitecture Execution Units ... Execution Unit ... Vec ALU ... # of Unit ... 3 ... Instructions ... (v)paddb/w/d/q" p.2_13 of Intel. (2022). Intel® 64 and IA-32 Architectures Optimization Reference Manual. Order Number: 248966-045 February 2022.
  32. ^ "Golden Cove Microarchitecture Execution Units ... Execution Unit ... Vec Mul/FMA ... # of Unit ... 2x256-bit (1 or 2)x512-bit ... Instructions ... (v)pmadd*" p.2_9 of Intel. (2022). Intel® 64 and IA-32 Architectures Optimization Reference Manual. Order Number: 248966-045 February 2022.
  33. ^ "Golden Cove Microarchitecture Execution Units ... Execution Unit ... Vec ALU ... # of Unit ... 3x256-bit ... Instructions ... (v)paddb/w/d/q" p.2_8 of Intel. (2022). Intel® 64 and IA-32 Architectures Optimization Reference Manual. Order Number: 248966-045 February 2022.
  34. ^ "Intel® AVX2 Vector Neural Network Instructions (AVX2 VNNI) Vector instructions for deep learning extension for AVX2." Intel. Core™ Processors Datasheet, Volume 1 of 2. 2022-04-04閲覧.
  35. ^ "Intel® SDP for Desktop Based on Alder Lake S ... Supported Technologies ... Intel® AVX2 VNNI" Intel. Core™ Processors Datasheet, Volume 1 of 2. 2022-04-04閲覧.
  36. ^ "VPDPBUSD_YMMi32_YMMu32_YMMu32 ... throughput ... 0.5 ... Latency ... 5" L.2266 of Intel. (2022). Intel® Processors and Processor Cores based on Golden Cove Microarchitecture. March 2022 Revision 2.0.
  37. ^ _mm_dpbusds_epi32(XMM128bit)では CPIが同等の0.5であることが明示されている。Intel Intrinsics Guide
  38. ^ 後藤弘茂 (2019年2月1日). “Intelの10nm世代CPUコア「Sunny Cove」のカギとなるAVX-512”. PC Watch. 後藤弘茂のWeekly海外ニュース. 2019年12月22日閲覧。
  39. ^ a b Kazuki (2022年7月2日). “Intelの無効化問題やAMD初対応で話題の『AVX-512』について簡単に解説”. ギャズログ|GAZLOG. 2025年2月23日閲覧。
  40. ^ FFmpeg開発者が手書きAVX-512コードで最大94倍の性能向上を達成 | XenoSpectrum”. xenospectrum.com (2024年11月5日). 2025年2月23日閲覧。
  41. ^ 引用エラー: 無効な <ref> タグです。「reinders512」という名前の注釈に対するテキストが指定されていません
  42. ^ Intel Xeon Phi Processor product brief”. Intel. 12 October 2016閲覧。
  43. ^ a b c Intel Architecture Instruction Set Extensions and Future Features Programming Reference”. Intel. 2017年10月16日閲覧。
  44. ^ “Intel unveils X-series platform: Up to 18 cores and 36 threads, from $242 to $2,000” (英語). Ars Technica. https://arstechnica.com/gadgets/2017/05/intels-new-high-end-desktop-platform-up-to-18-cores-36-threads-2000/ 2017年5月30日閲覧。 
  45. ^ Intel Advanced Vector Extensions 2015/2016: Support in GNU Compiler Collection”. Gcc.gnu.org. 2016年10月20日閲覧。
  46. ^ Patrizio, Andy (21 September 2015). “Intel's Xeon roadmap for 2016 leaks”. Itworld.org. 2016年10月21日時点のオリジナルよりアーカイブ。2016年10月20日閲覧。
  47. ^ Intel Core i9-11900K Review - World's Fastest Gaming Processor?”. www.techpowerup.com (30 March 2021). Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
  48. ^ "Add rocketlake to gcc" commit”. gcc.gnu.org. Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
  49. ^ Intel Celeron 6305 Processor (4M Cache, 1.80 GHz, with IPU) Product Specifications” (英語). ark.intel.com. 2020年10月18日時点のオリジナルよりアーカイブ2020年11月10日閲覧。
  50. ^ (英語) Laptop Murah Kinerja Boleh Diadu | HP 14S DQ2518TU, (18 June 2021), https://www.youtube.com/watch?v=q0HvFnvjyb0&t=119s 2021年8月8日閲覧。 
  51. ^ Using the GNU Compiler Collection (GCC): x86 Options”. GNU. 2019年10月14日閲覧。
  52. ^ The Intel 12th Gen Core i9-12900K Review: Hybrid Performance Brings Hybrid Complexity”. www.anandtech.com. 5 November 2021閲覧。
  53. ^ Intel Core i9 12900K "Alder Lake" AVX-512 On Linux”. www.phoronix.com. 2021年11月8日閲覧。
  54. ^ AVX-512 Performance Comparison: AMD Genoa vs. Intel Sapphire Rapids & Ice Lake”. www.phoronix.com. 2023年1月19日閲覧。
  55. ^ The industry's first high-performance x86 SOC with server-class CPUs and integrated AI coprocessor technology” (2 August 2022). 12 December 2019時点のオリジナルよりアーカイブ。 Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
  56. ^ x86, x64 Instruction Latency, Memory Latency and CPUID dumps (instlatx64)”. users.atw.hu. Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
  57. ^ AMD Zen 4 Based Ryzen CPUs May Feature Up to 24 Cores, Support for AVX512 Vectors” (英語). Hardware Times (2021年5月23日). 2021年9月2日閲覧。
  58. ^ Hagedoorn, Hilbert (18 May 2021). “AMD working on a prodigious 96-core EPYC processor” (英語). Guru3D.com. 2021年5月25日閲覧。
  59. ^ clamchowder (2021年8月23日). “Details on the Gigabyte Leak” (英語). Chips And Cheese. 2022年6月10日閲覧。
  60. ^ ((W1zzard)) (26 May 2022). “AMD Answers Our Zen 4 Tech Questions, with Robert Hallock” (英語). TechPowerUp. 2022年5月29日閲覧。
  61. ^ Larabel, Michael (2022年9月26日). “AMD Zen 4 AVX-512 Performance Analysis On The Ryzen 9 7950X”. www.phoronix.com. Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
  62. ^ Larabel, Michael (2024年2月10日). “AMD Zen 5 Compiler Support Posted For GCC - Confirms New AVX Features & More” (英語). www.phoronix.com. Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
  63. ^ インテル® Xeon Phi™ コプロセッサー 7120P (16GB、1.238 GHz、61 コア) - 製品仕様 | インテル”. Intel. 2024年3月12日閲覧。
  64. ^ Intel® Architecture Instruction Set Extensions Programming Reference” (pdf) (英語). p. 12(1-2). 2018年4月30日時点のオリジナルよりアーカイブ。2017年11月9日閲覧。 AVX512F, AVX512CDのみ搭載されている旨が判る。
  65. ^ 「Zen 4」コアでAVX-512対応を表明”. PC Watch (2019年2月1日). 2022年6月17日閲覧。
  66. ^ Intel Architecture Day 2021: Alder Lake, Golden Cove, and Gracemont Detailed” (英語). AnandTech (2021年8月19日). 2021年8月25日閲覧。
  67. ^ Alcorn, Paul (2021年8月19日). “Intel Architecture Day 2021: Alder Lake Chips, Golden Cove and Gracemont Cores” (英語). Tom's Hardware. 2021年8月21日閲覧。
  68. ^ Alcorn, Paul (2022年3月2日). “Intel Nukes Alder Lake's AVX-512 Support, Now Fuses It Off in Silicon” (英語). Tom's Hardware. 2022年3月7日閲覧。
  69. ^ "a new Intel AVX-512 extension called Intel DL Boost, which contains the Vector Neural Network instruction (VNNI). Designed to improve the throughput of integer linear algebra" Intel. Code Sample: Intel® AVX512-Deep Learning Boost: Intrinsic Functions.
  70. ^ "the new instruction in VNNI VPDPBUSD replaces the three separate FMA instructions VPMADDUBSW, VPMADDWD, and VPADDD." Intel. Code Sample: Intel® AVX512-Deep Learning Boost: Intrinsic Functions.
  71. ^ Torvalds氏がIntelのAVX-512に「苦死」を望む理由 | OSDN Magazine”. OSDN (2020年7月15日). 2025年2月23日閲覧。
  72. ^ The Converged Vector ISA: Intel® Advanced Vector Extensions 10 Technical Paper”. Intel. 8 May 2024閲覧。
  73. ^ Bonshor, Gavin. “Intel Unveils AVX10 and APX Instruction Sets: Unifying AVX-512 For Hybrid Architectures”. AnandTech. 4 May 2024閲覧。
  74. ^ 株式会社インプレス. “Intel、Pコア/Eコア両対応の新拡張命令セット「AVX10」”. PC Watch. 4 May 2024閲覧。
  75. ^ The Converged Vector ISA: Intel® Advanced Vector Extensions 10
  76. ^ Accelerate Artificial Intelligence (AI) Workloads with Intel Advanced Matrix Extensions (Intel AMX)”. Intel. 2023年4月13日閲覧。
  77. ^ インテル 強固なパフォーマンスと電力効率を特長とするアーキテクチャーに基づく 次世代インテル® Xeon® プラットフォームを公開”. Intel. 25 May 2024閲覧。

関連項目

[編集]