AVX-512

AVX-512は、2013年7月にIntelが提案したx86命令セットアーキテクチャ(ISA)用の256ビットAdvanced Vector Extensions SIMD命令の512ビット拡張であり、2016年のIntel Xeon Phi x200(Knights Landing)で最初に実装され、[ 1 ]その後、AMDおよびその他のIntel CPU(以下のリストを参照)に多数実装されました。AVX-512は、独立して実装できる複数の拡張機能で構成されています。[ 2 ]このポリシーは、命令ブロック全体を実装するという歴史的要件からの逸脱です。すべてのAVX-512実装では、コア拡張機能であるAVX-512F(AVX-512 Foundation)のみが必要です。

これらの拡張により、ほとんどの256ビット命令が拡張されるだけでなく、新しいデータ変換、スキャッター演算、順列演算など、様々な新しい演算が導入されます。[ 2 ] AVXレジスタの数は16個から32個に増加し、8つの新しい「マスクレジスタ」が追加されました。これにより、変数の選択と命令結果のブレンディングが可能になります。ほとんどのAVX-512対応プロセッサに搭載されているベクトル長(VL)拡張を備えたCPU(「AVX-512対応CPU」の項を参照)では、これらの命令は128ビットおよび256ビットのベクトルサイズでも使用できます。

AVX-512は、Intelがプロセッサに導入した最初の512ビットSIMD命令セットではありません。IntelのLarrabeeプロジェクトから派生した第1世代Xeon Phiコプロセッサで使用されていた以前の512ビットSIMD命令セットは類似していますが、バイナリ互換性がなく、ソース互換性は部分的にしかありませんでした。[ 1 ]

AVX-512の後継は2023年7月に発表されたAVX10である。 [ 3 ] AVX10は命令セットのバージョンを導入することでサポートされている命令の検出を簡素化し、各後続バージョンには前のバージョンのすべての命令が含まれるようになる。AVX10仕様の最初の改訂では、512ビットベクターのサポートはオプションで、IntelはEコアでサポートできるようになった。その後の改訂で、Intelは512ビットベクターを必須にし、PコアとEコアの両方で512ビットベクターをサポートするつもりだ。AVX10の最初のバージョン1では、AVX-512と比べて新しい命令は追加されておらず、512ビットベクターをサポートするプロセッサでは、AVX-512(Intel Sapphire Rapidsプロセッサでサポートされているセット内)と同等である。以降のAVX10バージョンでは新機能が導入される予定である。

命令セット

AVX-512命令セットは、それぞれ固有のCPUID機能ビットを持つ複数の独立したセットで構成されています。ただし、通常は、それらを実装するプロセッサの世代ごとにグループ化されます。

F、CD、ER、PF: Xeon Phi x200 (Knights Landing)および Xeon Scalable ( Skylake SP "Purley")  で導入され、最後の 2 つ (ER と PF) は Knights Landing および Knights Mill に固有です。

  • AVX-512 Foundation (F) – EVEXコーディングスキームを使用して 、ほとんどの32ビットおよび64ビットベースのAVX命令を拡張し、512ビットレジスタ、演算マスク、パラメータブロードキャスト、組み込み丸めおよび例外制御をサポートします。Knights LandingおよびSkylake Xeonで実装されています。
  • AVX-512 競合検出命令 (CD) – より多くのループをベクトル化 できるようにするための効率的な競合検出。Knights Landing [ 1 ]と Skylake Xによって実装されている。
  • AVX-512指数および逆数命令 (ER) -指数および逆数演算は超越演算の実装を支援するために設計され、Knights Landingによって実装されました[ 1 ]
  • AVX-512 プリフェッチ命令 (PF)  - Knights Landing によって実装された新しいプリフェッチ機能[ 1 ]

4VNNIW, 4FMAPS:ナイツミル  で導入され、ナイツミルに特有のものです。[ 4 ] [ 5 ]

  • AVX-512 ベクトル ニューラル ネットワーク命令ワード可変精度 (4VNNIW) - ディープラーニング、拡張ワード、可変精度用ベクトル命令。
  • AVX-512 融合乗算累積パック単精度 (4FMAPS) – ディープラーニング、浮動小数点、単精度のベクトル命令。

VL、DQ、BW:   Skylake-X/SP およびCannon Lakeで導入されました。

  • AVX-512 ベクトル長拡張(VL)  - ほとんどのAVX-512演算を拡張し、XMM(128ビット)およびYMM(256ビット)レジスタでも演算できるようにします[ 6 ]
  • AVX-512 ダブルワードおよびクワッドワード命令 (DQ)  – 新しい32ビットおよび64ビットのAVX-512命令を追加[ 6 ]
  • AVX-512 バイトおよびワード命令 (BW)  – AVX-512 を拡張して 8 ビットおよび 16 ビットの整数演算をカバーする[ 6 ]

IFMA、VBMI:キャノンレイク  で導入されました。[ 7 ]

  • AVX-512 整数融合乗算加算(IFMA) – 52 ビット精度を使用した整数の融合乗算加算。
  • AVX-512 ベクトル ビット操作命令 (VBMI)は、AVX-512BW には存在しなかったベクトル バイト置換命令を追加します。

VNNI:   Cascade Lake で導入されました。

  • AVX-512 ベクトル ニューラル ネットワーク命令 (VNNI) – ディープラーニング用のベクトル命令。

VPOPCNTDQ:  ベクトルポピュレーションカウント命令。Knights MillとIce Lakeで導入された。[ 8 ]

VBMI2、BITALG:   Ice Lakeで導入されました。[ 8 ]

  • AVX-512 ベクトル ビット操作命令 2 (VBMI2) – バイト/ワードのロード、ストア、およびシフトによる連結。
  • AVX-512 ビット アルゴリズム (BITALG) – VPOPCNTDQ を拡張するバイト/ワードビット操作命令。

VP2INTERSECT:   Tiger Lake で導入されました。

  • AVX-512 ベクトルペア交差とマスクレジスタペア (VP2INTERSECT)

GFNI、VPCLMULQDQ、VAES:   Ice Lakeで導入されました。[ 8 ]

  • これらはAVX-512の機能そのものではありません。AVX-512と組み合わせることで、GFNI、PCLMULQDQ、AES命令のEVEXエンコード版が可能になります。

BMM: AMD Zen 6  で導入されました。

  • AVX-512 ビット操作命令 (BMM) – ビット行列乗算とビット反転演算を含む。[ 9 ]

エンコーディングと機能

AVXとAVX2で使用されるVEXプレフィックスは柔軟性が高いものの、IntelがAVX-512に追加したい機能に対応できる余裕がありませんでした。そのため、EVEXと呼ばれる新しいプレフィックスが定義されました。

VEXと比較して、EVEXには以下の利点があります。[ 5 ]

  • 32 個の 512 ビット レジスタを許可する拡張レジスタ エンコーディング。
  • ほとんどの AVX-512 命令をマスクするための 8 つの新しい opmask レジスタを追加します。
  • ブロードキャストを自動的に実行する新しいスカラー メモリ モードを追加します。
  • 各命令に明示的な丸め制御の余地を追加します。
  • 新しい圧縮変位メモリアドレス指定モードを追加します。

AVX-512 の拡張レジスタ、SIMD 幅ビット、および opmask レジスタは必須であり、すべて OS からのサポートが必要です。

SIMDモード

AVX-512命令は、128/256ビットのAVX/AVX2命令と性能を損なうことなく混在させることができるように設計されています。しかし、AVX-512VL拡張により、128/256ビットレジスタXMM/YMMでAVX-512命令を使用できるようになったため、ほとんどのSSEおよびAVX/AVX2命令には、オプマスクや追加レジスタなどの新機能にアクセスできるEVEXプレフィックスでエンコードされた新しいAVX-512バージョンがあります。AVX-256とは異なり、新しい命令には新しいニーモニックはありませんが、AVXと名前空間を共有しているため、ソースコードではVEXとEVEXでエンコードされた命令のバージョンを区別することが曖昧になっています。AVX-512Fは32ビットと64ビットの値でのみ動作するため、バイトまたはワードで動作するSSEおよびAVX/AVX2命令は、AVX-512BW拡張(バイトとワードのサポート)でのみ使用できます。[ 5 ]

名前 拡張セット レジスター 種類
レガシーSSE SSE–SSE4.2 xmm0~xmm15 SSE2 からの単精度浮動小数点数:バイト、ワード、ダブルワード、クワッドワード、および倍精度浮動小数点数
AVX-128(ベックス) AVX、AVX2 xmm0~xmm15 バイト、ワード、ダブルワード、クワッドワード、シングルフロート、ダブルフロート
AVX-256(ベックス) AVX、AVX2 ymm0~ymm15 AVX2 の単精度浮動小数点数と倍精度浮動小数点数:バイト、ワード、ダブルワード、クワッドワード
AVX-128(エベックス) AVX-512VL xmm0~xmm31 (k0~k7) AVX512BWではダブルワード、クワッドワード、シングルフロート、ダブルフロート:バイトとワード。AVX512 -FP16ではハーフフロート
AVX-256 (エベックス) AVX10/256 AVX-512VL ymm0~ymm31 (k0~k7) AVX512BWではダブルワード、クワッドワード、シングルフロート、ダブルフロート:バイトとワード。AVX512 -FP16ではハーフフロート
AVX-512 (エベックス) AVX10/512 AVX-512F zmm0~zmm31 (k0~k7) AVX512BW ではダブルワード、クワッドワード、シングルフロート、ダブルフロート: AVX512-FP16 ではバイト、ワード:ハーフフロート

拡張レジスタ

x64 AVX (YMM0–YMM15) および x64 SSE (XMM0–XMM15) レジスタからの拡張としての x64 AVX-512 レジスタ スキーム
5112562551281270
  ZMM0     YMM0     XMM0  
ZMM1 YMM1 XMM1
ZMM2 YMM2 XMM2
ZMM3 YMM3 XMM3
ZMM4 YMM4 XMM4
ZMM5 YMM5 XMM5
ZMM6 YMM6 XMM6
ZMM7 YMM7 XMM7
ZMM8 YMM8 XMM8
ZMM9 YMM9 XMM9
ZMM10 YMM10 XMM10
ZMM11 YMM11 XMM11
ZMM12 YMM12 XMM12
ZMM13 YMM13 XMM13
ZMM14 YMM14 XMM14
ZMM15 YMM15 XMM15
ZMM16 YMM16 XMM16
ZMM17 YMM17 XMM17
ZMM18 YMM18 XMM18
ZMM19 YMM19 XMM19
ZMM20 YMM20 XMM20
ZMM21 YMM21 XMM21
ZMM22 YMM22 XMM22
ZMM23 YMM23 XMM23
ZMM24 YMM24 XMM24
ZMM25 YMM25 XMM25
ZMM26 YMM26 XMM26
ZMM27 YMM27 XMM27
ZMM28 YMM28 XMM28
ZMM29 YMM29 XMM29
ZMM30 YMM30 XMM30
ZMM31 YMM31 XMM31

SIMDレジスタファイルの幅は256ビットから512ビットに拡張され、レジスタZMM0~ZMM31は16個から合計32個に拡張されました。これらのレジスタは、AVX拡張命令では256ビットYMMレジスタとして、ストリーミングSIMD拡張命令では128ビットXMMレジスタとしてアドレス指定できます。また、EVEXエンコード形式を使用する場合、従来のAVX命令とSSE命令は、16個の追加レジスタXMM16~XMM31およびYMM16~YMM31を操作できるように拡張できます。

Opmaskレジスタ

AVX-512ベクター命令は、どの値をデスティネーションに書き込むかを制御するために、オペマスクレジスタを指定することができます。命令エンコーディングはこのフィールドに0~7の値をサポートします。ただし、値1~7に対応するマスクとして使用できるのは、オペマスクレジスタk1~k7(k0~k7のうち)のみです。一方、値0はオペマスクレジスタが使用されていないことを示すために予約されています。つまり、マスクされていない操作を示すために、ハードコードされた定数(「k0」の代わりに)が使用されます。特殊なオペマスクレジスタ「k0」は依然として機能する有効なレジスタであり、オペマスクレジスタ操作命令で使用したり、デスティネーションオペマスクレジスタとして使用したりできます。[ 10 ]フラグはオペマスクの動作を制御します。「ゼロ」(マスクで選択されていないすべての値をゼロにする)または「マージ」(選択されていないすべての値をそのままにする)のいずれかになります。マージ動作はブレンド命令と同じです。

opmaskレジスタは通常16ビット幅ですが、AVX-512BW拡張により最大64ビットまで拡張できます。[ 5 ]ただし、実際に使用されるビット数は、マスクされる命令のベクター型によって異なります。32ビットの単精度浮動小数点または倍精度ワードの場合、512ビットレジスタの16個の要素をマスクするために16ビットが使用されます。倍精度浮動小数点および4倍精度ワードの場合、最大8ビットのマスクビットが使用されます。

opmaskレジスタは、本来要素幅を持たないビット単位命令がAVX-512で追加された理由です。例えば、ビット単位のAND、OR、または128ビットシャッフルは、ダブルワードとクアッドワードの両方のバリエーションで存在し、唯一の違いは最終的なマスク処理にあります。

新しいopmask命令

opmaskレジスタには、レジスタを直接操作する新しいミニ拡張命令が追加されました。AVX-512の他の命令とは異なり、これらの命令はすべてVEXエンコードされています。初期のopmask命令はすべて16ビット(ワード)バージョンです。AVX-512DQでは、8つの64ビット値をマスクするニーズに対応するため、8ビット(バイト)バージョンが追加されました。また、AVX-512BWでは、最大64個の8ビット値をマスクできるように、32ビット(ダブル)および64ビット(クアッド)バージョンが追加されました。KORTEST命令とKTEST命令は、マスクレジスタに基づいてx86フラグを設定するために使用できます。これにより、SIMD非対応のx86分岐命令や条件付き命令と併用できます。

命令 拡張セット 説明
KANDF ビット論理積マスク
KANDNF ビット論理積NOTマスク
KMOVF マスクレジスタまたは汎用レジスタ間の移動
KUNPCKF マスクレジスタのアンパック
KNOTF NOTマスクレジスタ
KORF ビット論理和マスク
KORTESTF ORマスクとフラグの設定
KSHIFTLF シフトレフトマスクレジスタ
KSHIFTRF シフトライトマスクレジスタ
KXNORF ビット論理XNORマスク
KXORF ビット単位の論理XORマスク
KADD体重/失格 マスクを2つ追加
KTEST体重/失格 ビット単位の比較とフラグの設定

AVX-512基盤の新しい指示

AVX-512命令の多くは、古いSSEまたはAVX命令のEVEX版です。ただし、いくつかの新しい命令と、新しいAVX-512バージョンに置き換えられた古い命令もあります。新しい命令、または大幅に変更された命令を以下に示します。これらの基本命令には、AVX-512VLおよびAVX-512BWからの拡張も含まれます。これらの拡張は、新しい命令ではなく、これらの命令の新しいバージョンを追加するだけだからです。

マスクを使用してブレンドする

SSE4のブレンド命令にはEVEXプレフィックス版はありません。代わりに、AVX-512には、マスクレジスタをセレクタとして使用する新しいブレンディング命令セットがあります。これらの命令は、後述する一般的なマスク比較命令と組み合わせることで、XOPのVPCMOVに類似した汎用三項演算、つまりCMOVを実装するために使用できます。

ブレンディングはEVEXエンコーディングの不可欠な要素であるため、これらの命令は基本的な移動命令とも考えられます。ゼロイングブレンドモードを使用することで、これらの命令はマスク命令としても使用できます。

命令 拡張セット 説明
VBLENDMPDF opmask制御を使用してfloat64ベクトルをブレンドする
VBLENDMPSF opmask制御を使用してfloat32ベクトルをブレンドする
VPBLENDMDF opmask制御を使用してint32ベクトルをブレンドする
VPBLENDMQF opmask制御を使用してint64ベクトルをブレンドする
VPBLENDMB白黒 opmask制御を使用してバイト整数ベクトルをブレンドする
VPBLENDMW白黒 opmask制御を使用して単語整数ベクトルをブレンドする

マスクと比較

AVX-512Fには4つの新しい比較命令があります。XOPの同等命令と同様に、即値フィールドを用いて8種類の比較方法から選択します。ただし、XOPから派生した命令とは異なり、結果はマスクレジスタに保存され、初期状態ではダブルワードとクワッドワードの比較のみをサポートします。AVX-512BW拡張では、バイト版とワード版が提供されます。これらの命令には2つのマスクレジスタを指定できることに注意してください。1つは書き込み用、もう1つは通常のマスク処理を宣言するためのものです。[ 5 ]

すぐに 比較​ 説明
0 イコライザー 等しい
1 LT 未満
2 以下
3 間違い ゼロに設定
4 NEQ 等しくない
5 新改訳聖書 より大きいか等しい
6 NLE より大きい
7 真実 1に設定
命令 拡張セット 説明
VPCMPDVPCMPUDF 符号付き/符号なしダブルワードをマスクと比較する
VPCMPQVPCMPUQF 符号付き/符号なしクワッドワードをマスクと比較する
VPCMPBVPCMPUB白黒 符号付き/符号なしバイトをマスクと比較する
VPCMPWVPCMPUW白黒 符号付き/符号なしの単語をマスクと比較する

論理セットマスク

マスクを設定する最後の方法は、論理セットマスクを使用することです。これらの命令はANDまたはNAND演算を実行し、結果値がゼロか非ゼロかに基づいてデスティネーションオペマスクを設定します。比較命令と同様に、これらの命令も2つのオペマスクレジスタを使用します。1つはデスティネーションオペマスクレジスタ、もう1つは通常のオペマスクレジスタです。

命令 拡張セット 説明
VPTESTMDVPTESTMQF 32 ビットまたは 64 ビットの整数の論理 AND とマスクの設定。
VPTESTNMDVPTESTNMQF 32 ビットまたは 64 ビットの整数の論理 NAND とマスクの設定。
VPTESTMBVPTESTMW白黒 8 ビットまたは 16 ビットの整数の論理 AND とマスクの設定。
VPTESTNMBVPTESTNMW白黒 8 ビットまたは 16 ビットの整数の論理 NAND とマスクを設定します。

圧縮と拡張

圧縮命令と展開命令は、同名のAPL命令に相当します。これらの命令は、他のAVX-512命令とは少し異なる方法でオペマスクを使用します。圧縮命令は、マスクでマークされた値のみを保存しますが、マークされていない値をスキップし、スペースを確保しないことで、圧縮された状態で保存します。展開命令は逆の動作をし、マスクで指定された数の値をロードし、選択された位置に展開します。

命令 説明
VCOMPRESSPDVCOMPRESSPS疎なパックされた倍精度/単精度浮動小数点値を高密度メモリに格納する
VPCOMPRESSDVPCOMPRESSQ疎なパックされたダブルワード/クワッドワード整数値を密なメモリ/レジスタに格納する
VEXPANDPDVEXPANDPS高密度メモリからスパースパックされた倍精度/単精度浮動小数点値をロードします。
VPEXPANDDVPEXPANDQ高密度メモリ/レジスタからスパースパックされたダブルワード/クワッドワード整数値をロードします。

並べ替え

2入力の完全な順列処理を可能にする、新しい順列命令セットが追加されました。これらの命令はすべて3つの引数、2つのソースレジスタ、1つのインデックスを受け取ります。結果は最初のソースレジスタまたはインデックスレジスタのいずれかを上書きすることで出力されます。AVX-512BWは命令を拡張し、16ビット(ワード)バージョンもサポートします。また、AVX-512_VBMI拡張は命令のバイトバージョンを定義します。

命令 拡張セット 説明
VPERMBVBMI パックされたバイト要素を並べ替えます。
VPERMW白黒 パックされた単語要素を並べ替えます。
VPERMT2BVBMI 最初のソースを上書きして完全なバイト順序を変更します。
VPERMT2W白黒 最初のソースを上書きして完全な単語を並べ替えます。
VPERMI2PDVPERMI2PSF インデックスを上書きする完全な単精度/倍精度浮動小数点数の並べ替え。
VPERMI2DVPERMI2QF インデックスを上書きして、完全なダブルワード/クワッドワードを並べ替えます。
VPERMI2BVBMI インデックスを上書きする完全なバイト並べ替え。
VPERMI2W白黒 インデックスを上書きして完全な単語を並べ替えます。
VPERMT2PSVPERMT2PDF 最初のソースを上書きして、完全な単精度/倍精度浮動小数点の並べ替えを実行します。
VPERMT2DVPERMT2QF 最初のソースを上書きして、完全なダブルワード/クワッドワードを並べ替えます。
VSHUFF32x4、、、、VSHUFF64x2VSHUFI32x4VSHUFI64x2F 4 つのパックされた 128 ビット ラインをシャッフルします。
VPMULTISHIFTQBVBMI クワッドワード ソースからパックされた非整列バイトを選択します。

ビット単位の3値論理

追加された2つの新しい命令は、3つの入力間のあらゆる可能なビット演算を論理的に実装できます。これらの命令は、3つのレジスタと8ビットの即値フィールドを入力として受け取ります。出力の各ビットは、入力の対応する3つのビットを参照し、8ビットの即値フィールドの8つの位置のいずれかを選択して生成されます。3ビットでは8通りの組み合わせしかできないため、これにより3入力のあらゆる可能なビット演算を実行できます。[ 5 ] これらはAVX-512Fにおける唯一のビットベクトル命令です。AVX-512DQでは、2つのソースSSEおよびAVXビットベクトル命令AND、ANDN、OR、XORのEVEX版が追加されました。

ダブルワード バージョンとクワッドワード バージョンの違いは、opmask の適用のみです。

命令 説明
VPTERNLOGDVPTERNLOGQビット単位の3値論理

コンバージョン

いくつかの変換命令または移動命令が追加されました。これにより、SSE2 から使用できる変換命令のセットが完成します。

命令 拡張セット 説明
VPMOVQD、、、、、、、、、、、、、、、、、、VPMOVSQDVPMOVUSQDVPMOVQWVPMOVSQWVPMOVUSQWVPMOVQBVPMOVSQBVPMOVUSQBVPMOVDWVPMOVSDWVPMOVUSDWVPMOVDBVPMOVSDBVPMOVUSDBF クワッドワードまたはダブルワードをダブルワード、ワード、またはバイト(非飽和、飽和、または飽和符号なし)にダウンコンバートします。SSE4.1の符号/ゼロ拡張命令の逆です。
VPMOVWB、、VPMOVSWBVPMOVUSWB白黒 ワードをバイトにダウンコンバートします。不飽和、飽和、または飽和符号なしです。
VCVTPS2UDQ、、、、VCVTPD2UDQVCVTTPS2UDQVCVTTPD2UDQF 切り捨てありまたは切り捨てなしで、パックされた単精度または倍精度浮動小数点数をパックされた符号なしダブルワード整数に変換します。
VCVTSS2USI、、、、VCVTSD2USIVCVTTSS2USIVCVTTSD2USIF 切り捨てありまたは切り捨てなしで、スカラーの単精度または倍精度浮動小数点数を符号なしダブルワード整数に変換します。
VCVTPS2QQ、、、、、、、、、VCVTPD2QQVCVTPS2UQQVCVTPD2UQQVCVTTPS2QQVCVTTPD2QQVCVTTPS2UQQVCVTTPD2UQQ失格 切り捨てありまたは切り捨てなしで、パックされた単精度または倍精度浮動小数点数を、パックされた符号付きまたは符号なしクワッドワード整数に変換します。
VCVTUDQ2PSVCVTUDQ2PDF パックされた符号なしダブルワード整数をパックされた単精度または倍精度浮動小数点数に変換します。
VCVTUSI2PSVCVTUSI2PDF スカラー符号なしダブルワード整数を単精度または倍精度浮動小数点に変換します。
VCVTUSI2SDVCVTUSI2SSF スカラー符号なし整数を単精度または倍精度浮動小数点に変換します。
VCVTUQQ2PSVCVTUQQ2PD失格 パックされた符号なしクワッドワード整数をパックされた単精度または倍精度浮動小数点に変換します。
VCVTQQ2PDVCVTQQ2PSF パックされたクワッドワード整数をパックされた単精度または倍精度浮動小数点に変換します。

浮動小数点分解

AVX-512F のユニークな新機能の一つに、浮動小数点値を分解する命令と特殊な浮動小数点値を処理する命令があります。これらのメソッドは全く新しいため、スカラーバージョンも存在します。

命令 説明
VGETEXPPDVGETEXPPSパックされたfp値の指数をfp値に変換する
VGETEXPSDVGETEXPSSスカラーfp値の 指数をfp値に変換する
VGETMANTPDVGETMANTPSfloat32/float64ベクトルから正規化された仮数のベクトルを抽出する
VGETMANTSDVGETMANTSSfloat32/float64スカラーから 正規化された仮数の float32/float64 を抽出します。
VFIXUPIMMPDVFIXUPIMMPS特殊なパックされた float32/float64 値を修正
VFIXUPIMMSDVFIXUPIMMSS特殊なスカラー float32/float64 値を修正

浮動小数点演算

これは新しい浮動小数点演算法の2番目のセットであり、逆数と平方根の逆数の新しいスケーリングと近似計算が含まれています。近似逆数命令は、相対誤差が最大で2 −14であることを保証します。[ 5 ]

命令 説明
VRCP14PDVRCP14PSパックされた float32/float64 値の近似逆数を計算します
VRCP14SDVRCP14SSスカラー float32/float64 値の近似逆数を計算する
VRNDSCALEPSVRNDSCALEPDパックされた float32/float64 値を、指定された数の小数ビットを含むように丸める
VRNDSCALESSVRNDSCALESDスカラー float32/float64 値を指定された数の小数ビットを含むように丸める
VRSQRT14PDVRSQRT14PSパックされた float32/float64 値の平方根の近似逆数を計算します。
VRSQRT14SDVRSQRT14SSスカラー float32/float64 値の平方根の近似逆数を計算します。
VSCALEFPSVSCALEFPDパックされた float32/float64 値を float32/float64 値でスケールする
VSCALEFSSVSCALEFSDスカラー float32/float64 値を float32/float64 値でスケールする

放送

命令 拡張セット 説明
VBROADCASTSSVBROADCASTSDF、VL 単精度浮動小数点値/倍精度浮動小数点値をブロードキャストする
VPBROADCASTB、、、、VPBROADCASTWVPBROADCASTDVPBROADCASTQF、VL、DQ、BW バイト/ワード/ダブルワード/クワッドワードの整数値をブロードキャストする
VBROADCASTI32X2、、、、、VBROADCASTI64X2VBROADCASTI32X4VBROADCASTI32X8VBROADCASTI64X4F、VL、DQ、BW 2つまたは4つのダブルワード/クワッドワード整数値をブロードキャストする

その他

命令 拡張セット 説明
VALIGNDVALIGNQF、VL ダブルワードまたはクワッドワードベクトルを整列させる
VDBPSADBW白黒 符号なしバイトのダブルブロックパックされた合計絶対差(SAD)
VPABSQF パックされた絶対値クワッドワード
VPMAXSQVPMAXUQF パックされた符号付き/符号なしクワッドワードの最大値
VPMINSQVPMINUQF パックされた符号付き/符号なしクワッドワードの最小値
VPROLD、、、、、、、、、VPROLVDVPROLQVPROLVQVPRORDVPRORVDVPRORQVPRORVQF ビットを左または右に回転
VPSCATTERDD、、、、VPSCATTERDQVPSCATTERQDVPSCATTERQQF 符号付きダブルワードおよびクワッドワードのインデックス を持つスキャッタパックされたダブルワード/クワッドワード
VSCATTERDPS、、、、VSCATTERDPDVSCATTERQPSVSCATTERQPDF 符号付きダブルワードおよびクワッドワードインデックス を持つスキャッタパックされた float32/float64

セットごとの新しい指示

競合検出

AVX-512競合検出(AVX-512CD)の命令は、通常は安全にベクトル化できないループ内の要素の競合のないサブセットを効率的に計算できるように設計されています。[ 11 ]

命令 名前 説明
VPCONFLICTDVPCONFLICTQパックされたダブルワードまたはクワッドワード値のベクトル内の競合を検出する 最初のソースの各要素を、2番目のソースの同じ場所またはそれより前の場所にあるすべての要素と比較し、結果のビットベクトルを形成します。
VPLZCNTDVPLZCNTQパックされたダブルワードまたはクワッドワード値の先頭のゼロビットの数を数える ベクトル化されたLZCNT命令
VPBROADCASTMB2QVPBROADCASTMW2Dマスクをベクトルレジスタにブロードキャストする 8ビットマスクからクワッドワードベクトル、または16ビットマスクからダブルワードベクトル

指数関数と逆数

AVX-512指数関数および逆数関数(AVX-512ER)命令は、AVX-512ファンデーションの逆数関数よりも精度の高い近似逆数関数命令を含んでおり、相対誤差は最大2 −28です。また、相対誤差が最大2 −23である2つの新しい指数関数も含まれています。[ 5 ]

命令 説明
VEXP2PDVEXP2PSパックされた単精度または倍精度浮動小数点値の 近似指数2 xを計算します。
VRCP28PDVRCP28PSパックされた単精度または倍精度浮動小数点値の近似逆数を計算します
VRCP28SDVRCP28SSスカラー単精度または倍精度浮動小数点値の近似逆数を計算します
VRSQRT28PDVRSQRT28PSパックされた単精度または倍精度浮動小数点値の平方根の近似逆数を計算します。
VRSQRT28SDVRSQRT28SSスカラー単精度または倍精度浮動小数点値の平方根の近似逆数を計算します。

プリフェッチ

AVX-512 プリフェッチ (AVX-512PF) 命令には、 AVX2および AVX-512で導入された新しいスキャッターおよびギャザー機能用の新しいプリフェッチ操作が含まれています。T0プリフェッチはレベル 1 キャッシュへのプリフェッチを意味し、はT1レベル 2 キャッシュへのプリフェッチを意味します。

命令 説明
VGATHERPF0DPS、、、、VGATHERPF0QPSVGATHERPF0DPDVGATHERPF0QPD符号付き dword/qword インデックスを使用して、opmask k1 と T0 ヒントを使用して、単精度/倍精度データを含むスパース バイト メモリの場所をプリフェッチします。
VGATHERPF1DPS、、、、VGATHERPF1QPSVGATHERPF1DPDVGATHERPF1QPD符号付き dword/qword インデックスを使用して、opmask k1 と T1 ヒントを使用して、単精度/倍精度データを含むスパース バイト メモリの場所をプリフェッチします。
VSCATTERPF0DPS、、、、VSCATTERPF0QPSVSCATTERPF0DPDVSCATTERPF0QPD符号付き dword/qword インデックスを使用して、書き込みマスク k1 と書き込み意図のある T0 ヒントを使用して、単精度/倍精度データを含むスパース バイト メモリの場所をプリフェッチします。
VSCATTERPF1DPS、、、、 VSCATTERPF1QPSVSCATTERPF1DPDVSCATTERPF1QPD符号付き dword/qword インデックスを使用して、書き込みマスク k1 と T1 ヒントを使用して書き込み目的で単精度/倍精度データを含むスパース バイト メモリの場所をプリフェッチします。

4FMAPSと4VNNIW

これら2つの命令セットは、複数の反復処理を実行します。これらは通常、Xeon Phi製品にのみ搭載されています。

命令 拡張セット 説明
V4FMADDPSV4FMADDSS4FMAPS パック/スカラー単精度浮動小数点融合積和演算(4反復)
V4FNMADDPSV4FNMADDSS4FMAPS パック/スカラー単精度浮動小数点融合乗算加算および否定(4 回の反復)
VP4DPWSSD4VNNIW 符号付きワードのドット積とダブルワード累積(4回の反復)
VP4DPWSSDS4VNNIW 符号付きワードのドット積とダブルワードの累積および飽和(4回の反復)

BW、DQ、VBMI

AVX-512DQは、新しいダブルワードおよびクワッドワード命令を追加します。AVX-512BWは、同じ命令のバイト版およびワード版を追加し、AVX-512Fではダブルワード/クワッドワード命令のバイト版およびワード版を追加します。AVX-512BWではワード形式のみとなる一部の命令は、AVX-512_VBMI拡張(、、、)によりバイト形式にVPERMBなります。 VPERMI2BVPERMT2BVPMULTISHIFTQB

マスク命令セットに2つの新しい命令が追加されました:KADDおよびKTEST(AVX-512DQではBおよびW形式、AVX-512BWではDおよびQ形式)。ワード形式のみだった残りのマスク命令は、AVX-512DQではバイト形式、AVX-512BWではダブルワード/クワッドワード形式になりました。はAVX-512BWによっておよびKUNPCKBWに拡張されました。 KUNPCKWDKUNPCKDQ

AVX-512DQ によって追加された命令の中には、AVX-512F では AVX-512 バージョンが取得されなかったいくつかの SSE および AVX 命令があり、その中には 2 つの入力ビット単位命令と整数抽出/挿入命令がすべて含まれています。

完全に新しい手順については以下で説明します。

浮動小数点命令

3つの新しい浮動小数点演算が導入されました。これらはAVX-512に新しく追加されただけでなく、パック/SIMD版とスカラー版の両方が用意されています。

このVFPCLASS命令は、浮動小数点値が8つの特殊な浮動小数点値のいずれかであるかどうかをテストします。8つの値のうちどの値が出力マスクレジスタのビットをトリガーするかは、即値フィールドによって制御されます。VRANGE命令は、即値フィールドの値に応じて最小演算または最大演算を実行します。また、演算が絶対値で行われるかどうか、および符号の処理方法も個別に制御できます。命令はVREDUCE単一のソースを演算し、そのソース値の整数部と、その小数部の即値フィールドで指定されたビット数を減算します。

命令 拡張セット 説明
VFPCLASSPSVFPCLASSPD失格 パックされた単精度および倍精度浮動小数点値の型をテストします。
VFPCLASSSSVFPCLASSSD失格 スカラーの単精度および倍精度浮動小数点値の型をテストします。
VRANGEPSVRANGEPD失格 パックされた浮動小数点値の範囲制限の計算。
VRANGESSVRANGESD失格 スカラー浮動小数点値の範囲制限計算。
VREDUCEPSVREDUCEPD失格 パックされた浮動小数点値に対して縮約変換を実行します。
VREDUCESSVREDUCESD失格 スカラー浮動小数点値に対して縮約変換を実行します。

その他の指示

命令 拡張セット 説明
VPMOVM2DVPMOVM2Q失格 マスク レジスタをダブル ワードまたはクワッド ワードのベクター レジスタに変換します。
VPMOVM2BVPMOVM2W白黒 マスク レジスタをバイトまたはワード ベクター レジスタに変換します。
VPMOVD2MVPMOVQ2M失格 ダブルワードまたはクワッドワードのベクター レジスタをマスク レジスタに変換します。
VPMOVB2MVPMOVW2M白黒 バイトまたはワード ベクター レジスタをマスク レジスタに変換します。
VPMULLQ失格 乗算パックされたクワッドワードの下位結果を格納します。VPMULLD のクワッドワードバージョンです。

VBMI2

VPCOMPRESSとVPEXPANDをバイトおよびワードバリアントで拡張します。シフト命令が新しく追加されました。

命令 説明
VPCOMPRESSBVPCOMPRESSW疎なパックされたバイト/ワード整数値を高密度メモリ/レジスタに格納する
VPEXPANDBVPEXPANDW高密度メモリ/レジスタからスパースパックされたバイト/ワード整数値をロードする
VPSHLDパックされたデータを連結し、論理左シフトする
VPSHLDV連結し、可変長パックデータを左論理シフトする
VPSHRDパックされたデータを連結し、右に論理シフトする
VPSHRDV連結および可変シフトパックデータを右論理

VNNI

ベクトルニューラルネットワーク命令: [ 12 ] AVX512-VNNIは、後述するEVEXコード命令を追加します。AVX-512Fでは、これらの命令は512ビットベクトルで動作でき、AVX-512VLではさらに128ビットおよび256ビットベクトルのサポートが追加されます。

後にAVX-VNNI拡張により、これらの命令のVEXエンコーディングが追加されましたが、これは128ビットまたは256ビットのベクターでのみ動作します。AVX-VNNIはAVX-512スイートの一部ではなく、AVX-512Fを必要とせず、独立して実装できます。

命令 説明
VPDPBUSDVPDPBUSDS2 番目の入力の 4 組の符号付きバイトのグループを、最初の入力の対応する符号なしバイトと乗算し、それらの積を合計して、出力のダブルワード結果に加算します。VPDPBUSDS結果の符号付き飽和を実行します。
VPDPWSSDVPDPWSSDS2 番目の入力の 2 組の符号付きワードのグループを最初の入力の対応する符号付きワードと乗算し、それらの積を合計して出力のダブルワード結果に加算します。VPDPWSSDS結果の符号付き飽和を実行します。

IFMA

整数融合乗算加算命令。AVX512-IFMA は、以下に説明するEVEXコード命令を追加します。

これらの命令のVEXエンコーディングは、別途AVX-IFMA命令セット拡張によって定義されています。この拡張はAVX-512スイートの一部ではなく、独立して実装できます。

命令 拡張セット 説明
VPMADD52LUQIFMA 符号なし52ビット整数のパックされた乗算と下位52ビットの積を64ビットのアキュムレータに加算する
VPMADD52HUQIFMA 符号なし 52 ビット整数のパックされた乗算と上位 52 ビットの積を 64 ビットのアキュムレータに加算します。

VPOPCNTDQ と BITALG

命令 拡張セット 説明
VPOPCNTDVPOPCNTQVPOPCNTDQ ダブルワード/クワッドワードで1に設定されているビットの数を返します。
VPOPCNTBVPOPCNTWビタルグ バイト/ワード内で1に設定されているビットの数を返す
VPSHUFBITQMBビタルグ バイトインデックスを使用してクワッドワード要素からビットをマスクにシャッフルする

VP2インターセクト

命令 拡張セット 説明
VP2INTERSECTDVP2INTERSECTQVP2インターセクト マスクレジスタのペアに対するダブルワード/クワッドワードの交差を計算する

GFNI

GFNIはスタンドアロンの命令セット拡張であり、AVXまたはAVX-512とは別に有効化できます。CPUがAVXおよびAVX-512Fのサポートを通知しているかどうかに応じて、GFNIサポートは128ビット、256ビット、または512ビットのベクター上で動作するレガシー(SSE)、VEX、またはEVEXコード命令を有効化します。

暗号学では、これらの命令はCamelliaARIAで使用されているようなRijndaelスタイルのSボックスを実装するために使用できます。[ 13 ] [ 14 ]これらの命令は、ネットワークや信号処理におけるビット操作にも使用できます。[ 15 ]

命令 説明
VGF2P8AFFINEINVQBガロア体の逆アフィン変換
VGF2P8AFFINEQBガロア体のアフィン変換
VGF2P8MULBガロア体乗算バイト

VPCLMULQDQ

AVX-512F 対応の VPCLMULQDQ 命令は、EVEX エンコードされた 512 ビット版の PCLMULQDQ 命令を追加します。AVX -512VL 対応の VPCLMULQDQ 命令は、EVEX エンコードされた 256 ビット版と 128 ビット版を追加します。VPCLMULQDQ のみ (つまり、AVX512 非対応の CPU) では、VEX エンコードされた 256 ビット版のみが追加されます (VEX エンコードされた 128 ビット版が利用可能かどうかは、異なる CPUID ビット (PCLMULQDQ と AVX) で示されます)。128 ビットより広い命令のバリエーションは、入力レジスタの各 128 ビット部分に対して同じ操作を実行しますが、異なる 128 ビットフィールドからクワッドワードを選択するように拡張しません (imm8 オペランドの意味は同じで、128 ビットフィールドの下位または上位クワッドワードが選択されます)。

命令 説明
VPCLMULQDQキャリーレス乗算クワッドワード

VAES

VEXおよびEVEXでエンコードされたAES命令。128ビットより広い命令のバリエーションは、入力レジスタの各128ビット部分に対して同じ演算を実行します。VEXバージョンはAVX-512をサポートしなくても使用できます。

命令 説明
VAESDECAES復号フローを1ラウンド実行する
VAESDECLASTAES復号フローの最終ラウンドを実行する
VAESENCAES暗号化フローを1ラウンド実行する
VAESENCLASTAES暗号化フローの最終ラウンドを実行する

BF16

Bfloat16数値を操作する AI アクセラレーション命令。

命令 説明
VCVTNE2PS2BF16パックされた単精度数値のベクトル 2 つを、パックされた Bfloat16 数値のベクトル 1 つに変換します。
VCVTNEPS2BF16パックされた単精度数値のベクトルを、パックされた Bfloat16 数値のベクトルに変換します。
VDPBF16PS2つのBfloat16ペアのドット積を計算し、結果を1つのパックされた単精度数に累積します。

FP16

従来のF16C命令セットを拡張したもので、 binary16浮動小数点数(FP16、float16、または半精度浮動小数点数とも呼ばれる)を包括的にサポートします。新しい命令は、単精度および倍精度浮動小数点数で従来利用可能だったほとんどの演算を実装するほか、新しい複素数命令と変換命令も導入しています。スカラー演算とパック演算がサポートされています。

単精度および倍精度形式の命令とは異なり、半精度オペランドは条件付きでゼロにフラッシュ(FTZ)されることも、設定に基づいて条件付きでゼロとして扱われること( DAZMXCSR )もありません。FP16数値のダイナミックレンジを最大限に活用するため、非正規値はハードウェアによってフルスピードで処理されます。FP32およびFP64数値を生成する命令は、依然としてビットを尊重しますMXCSR.FTZ[ 16 ]

算術命令

命令 説明
VADDPHVADDSHパック/スカラー FP16 数値を追加します。
VSUBPHVSUBSHパック/スカラー FP16 数値を減算します。
VMULPHVMULSHパック/スカラー FP16 数値を乗算します。
VDIVPHVDIVSHパック/スカラー FP16 数値を除算します。
VSQRTPHVSQRTSHパック/スカラー FP16 数値の平方根を計算します。
VFMADD{132, 213, 231}PHVFMADD{132, 213, 231}SHパック/スカラー FP16 数値を乗算およ​​び加算します。
VFNMADD{132, 213, 231}PHVFNMADD{132, 213, 231}SHパック/スカラー FP16 数値の否定乗算加算。
VFMSUB{132, 213, 231}PHVFMSUB{132, 213, 231}SHパック/スカラー FP16 数値の乗算と減算を行います。
VFNMSUB{132, 213, 231}PHVFNMSUB{132, 213, 231}SHパック/スカラー FP16 数値の乗算と減算を反転します。
VFMADDSUB{132, 213, 231}PHパックされた FP16 数値を乗算して加算 (奇数ベクトル要素) するか、乗算して減算 (偶数ベクトル要素) します。
VFMSUBADD{132, 213, 231}PHパックされた FP16 数値の乗算-減算 (奇数ベクトル要素) または乗算-加算 (偶数ベクトル要素) を行います。
VREDUCEPHVREDUCESHパック/スカラー FP16 数値の縮約変換を実行します。
VRNDSCALEPHVRNDSCALESHパック/スカラー FP16 数値を指定された小数ビット数に丸めます。
VSCALEFPHVSCALEFSHパック/スカラー FP16 数値を 2 の累乗で乗算してスケールします。

複雑な算術命令

命令 説明
VFMULCPHVFMULCSHパック/スカラー複素数 FP16 数を乗算します。
VFCMULCPHVFCMULCSHパック/スカラー複素数FP16を乗算します。演算は複素共役形式で行われます。
VFMADDCPHVFMADDCSHパック/スカラー複素数 FP16 数値を乗算およ​​び加算します。
VFCMADDCPHVFCMADDCSHパック/スカラー複素数FP16の乗算と加算。演算の複素共役形式。

おおよその相互指示

命令 説明
VRCPPHVRCPSHパック/スカラーFP16数の近似逆数を計算します。近似値の最大相対誤差は2 −11 + 2 −14未満です。
VRSQRTPH、 VRSQRTSHパック/スカラーFP16数の近似逆平方根を計算します。近似値の最大相対誤差は2 −14未満です。

比較手順

命令 説明
VCMPPHVCMPSHパック/スカラー FP16 数値を比較し、結果をマスク レジスタに格納します。
VCOMISHスカラーFP16数値を比較し、結果をフラグレジスタに格納します。ソースオペランドがQNaNまたはSNaNの場合、例外を通知します。
VUCOMISHスカラーFP16数値を比較し、結果をフラグレジスタに格納します。ソースオペランドがSNaNの場合にのみ例外を通知します。
VMAXPHVMAXSHソースのパック/スカラー FP16 数値の各垂直ペアの最大値を選択します。
VMINPHVMINSHソースのパック/スカラー FP16 数値の各垂直ペアの最小値を選択します。
VFPCLASSPH、 VFPCLASSSHパック/スカラー FP16 数値を特殊なカテゴリ (NaN、無限大、負のゼロなど) についてテストし、結果をマスク レジスタに格納します。

変換手順

命令 説明
VCVTW2PHパックされた符号付き 16 ビット整数を FP16 数値に変換します。
VCVTUW2PHパックされた符号なし 16 ビット整数を FP16 数値に変換します。
VCVTDQ2PHパックされた符号付き 32 ビット整数を FP16 数値に変換します。
VCVTUDQ2PHパックされた符号なし 32 ビット整数を FP16 数値に変換します。
VCVTQQ2PHパックされた符号付き 64 ビット整数を FP16 数値に変換します。
VCVTUQQ2PHパックされた符号なし 64 ビット整数を FP16 数値に変換します。
VCVTPS2PHXパックされたFP32数値をFP16数値に変換します。F16CVCVTPS2PHとは異なりVCVTPS2PHXブロードキャストもサポートする異なるエンコーディングを備えています。
VCVTPD2PHパックされた FP64 数値を FP16 数値に変換します。
VCVTSI2SHスカラー符号付き 32 ビットまたは 64 ビット整数を FP16 数値に変換します。
VCVTUSI2SHスカラーの符号なし 32 ビットまたは 64 ビットの整数を FP16 数値に変換します。
VCVTSS2SHスカラー FP32 数値を FP16 数値に変換します。
VCVTSD2SHスカラー FP64 数値を FP16 数値に変換します。
VCVTPH2WVCVTTPH2Wパックされた FP16 数値を符号付き 16 ビット整数に変換します。レジスタVCVTPH2Wに従って値を丸めますMXCSRVCVTTPH2Wゼロに向かって丸めます。
VCVTPH2UWVCVTTPH2UWパックされた FP16 数値を符号なし 16 ビット整数に変換します。レジスタVCVTPH2UWに従って値を丸めますMXCSRVCVTTPH2UWゼロに向かって丸めます。
VCVTPH2DQVCVTTPH2DQパックされた FP16 数値を符号付き 32 ビット整数に変換します。レジスタVCVTPH2DQに従って値を丸めますMXCSRVCVTTPH2DQゼロに向かって丸めます。
VCVTPH2UDQVCVTTPH2UDQパックされた FP16 数値を符号なし 32 ビット整数に変換します。レジスタVCVTPH2UDQに従って値を丸めますMXCSRVCVTTPH2UDQゼロに向かって丸めます。
VCVTPH2QQVCVTTPH2QQパックされた FP16 数値を符号付き 64 ビット整数に変換します。レジスタVCVTPH2QQに従って値を丸めますMXCSRVCVTTPH2QQゼロに向かって丸めます。
VCVTPH2UQQVCVTTPH2UQQパックされた FP16 数値を符号なし 64 ビット整数に変換します。レジスタVCVTPH2UQQに従って値を丸めますMXCSRVCVTTPH2UQQゼロに向かって丸めます。
VCVTPH2PSXパックされたFP16数値をFP32数値に変換します。F16CVCVTPH2PSとは異なりVCVTPH2PSXブロードキャストもサポートする異なるエンコーディングを備えています。
VCVTPH2PDパックされた FP16 数値を FP64 数値に変換します。
VCVTSH2SIVCVTTSH2SIスカラー FP16 数値を符号付き 32 ビットまたは 64 ビットの整数に変換します。レジスタVCVTSH2SIに従って値を丸めますMXCSRVCVTTSH2SIゼロに向かって丸めます。
VCVTSH2USIVCVTTSH2USIスカラー FP16 数値を符号なし 32 ビットまたは 64 ビットの整数に変換します。レジスタVCVTSH2USIに従って値を丸めますMXCSRVCVTTSH2USIゼロに向かって丸めます。
VCVTSH2SSスカラー FP16 数値を FP32 数値に変換します。
VCVTSH2SDスカラー FP16 数値を FP64 数値に変換します。

分解手順

命令 説明
VGETEXPPHVGETEXPSHパック/スカラー FP16 数値の 指数コンポーネントを FP16 数値として抽出します。
VGETMANTPHVGETMANTSHパック/スカラー FP16 数値の 仮数部を FP16 数値として抽出します。

移動指示

命令 説明
VMOVSHスカラー FP16 数値をメモリ間またはベクトル レジスタ間で移動します。
VMOVWスカラー FP16 数値をメモリまたは汎用レジスタに移動します。

BMM

ビット行列乗算およびビット反転命令。他のAVX-512サブセットとは異なり、AMDによって最初に導入されました。

ビット行列乗算命令は、256ビットおよび512ビットのベクターに対してのみ定義されています。256ビットの各レーンは16×16ビットの行列を表します。512ビット版では、各ベクターには2つの行列が含まれ、演算は並列に実行されます。

ビット反転命令は、128、256、および 512 ビットのベクトルに対して定義されています。

命令 説明
VBMACOR16x16x16OR 削減による 16x16 非転置融合 BMM 累積 (BMAC)。
VBMACXOR16x16x16XOR 削減機能を備えた 16x16 非転置融合 BMM 累積 (BMAC)。
VBITREVバイト境界内でのビット反転。

EVEXエンコード版のレガシー命令

グループ レガシーエンコーディング 説明書 AVX-512拡張
SSE SSE2 MMX AVX SSE3 SSE4 AVX2 FMAF VL 白黒 失格
VADD はい はい いいえ VADDPD、、、、VADDPSVADDSDVADDSSはいはい
ヴァンド VANDPD、、、、VANDPSVANDNPDVANDNPSはい
VCMP VCMPPD、、、、VCMPPSVCMPSDVCMPSSはい
VCOM VCOMISDVCOMISS
VDIV VDIVPD、、、、VDIVPSVDIVSDVDIVSSはい
VCVT VCVTDQ2PD、、、、、、、、、、、、、、、、、、、、、VCVTDQ2PSVCVTPD2DQVCVTPD2PSVCVTPH2PSVCVTPS2PHVCVTPS2DQVCVTPS2PDVCVTSD2SIVCVTSD2SSVCVTSI2SDVCVTSI2SSVCVTSS2SDVCVTSS2SIVCVTTPD2DQVCVTTPS2DQVCVTTSD2SIVCVTTSS2SI
Vマックス VMAXPD、、、、VMAXPSVMAXSDVMAXSS
VMIN VMINPD、、、、VMINPSVMINSDVMINSS
VMOV VMOVAPD、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、VMOVAPSVMOVDVMOVQVMOVDDUPVMOVHLPSVMOVHPDVMOVHPSVMOVLHPSVMOVLPDVMOVLPSVMOVNTDQAVMOVNTDQVMOVNTPDVMOVNTPSVMOVSDVMOVSHDUPVMOVSLDUPVMOVSSVMOVUPDVMOVUPSVMOVDQA32VMOVDQA64VMOVDQU8VMOVDQU16VMOVDQU32VMOVDQU64はいはい
VMUL VMULPD、、、、VMULPSVMULSDVMULSS
VOR VORPDVORPSはい
VSQRT VSQRTPD、、、、VSQRTPSVSQRTSDVSQRTSSはい
VSUB VSUBPD、、、、VSUBPSVSUBSDVSUBSS
ヴコミ VUCOMISDVUCOMISS
ヴンプック VUNPCKHPD、、、、VUNPCKHPSVUNPCKLPDVUNPCKLPSはい
VXOR VXORPDVXORPSはい
ベクトラクトプス いいえ はい いいえ VEXTRACTPSはい
ヴィンサーツプス VINSERTPS
VPEXTR VPEXTRB、、、、VPEXTRWVPEXTRDVPEXTRQはいはい
VPINSR VPINSRB、、、、VPINSRWVPINSRDVPINSRQ
VPACK はい はい はい VPACKSSWB、、、、VPACKSSDWVPACKUSDWVPACKUSWBはい
VPADD VPADDB、、、、、、、、、VPADDWVPADDDVPADDQVPADDSBVPADDSWVPADDUSBVPADDUSWはい
VPAND VPANDD、、、、VPANDQVPANDNDVPANDNQ
VPAVG VPAVGBVPAVGWはい
VPCMP VPCMPEQB、、、、、、、、、VPCMPEQWVPCMPEQDVPCMPEQQVPCMPGTBVPCMPGTWVPCMPGTDVPCMPGTQはい
VPMAX VPMAXSB、、、、、、、、、VPMAXSWVPMAXSDVPMAXSQVPMAXUBVPMAXUWVPMAXUDVPMAXUQ
VPMIN VPMINSB、、、、、、、、、VPMINSWVPMINSDVPMINSQVPMINUBVPMINUWVPMINUDVPMINUQ
VPMOV VPMOVSXBW、、、、、、、、、、、、、、VPMOVSXBDVPMOVSXBQVPMOVSXWDVPMOVSXWQVPMOVSXDQVPMOVZXBWVPMOVZXBDVPMOVZXBQVPMOVZXWDVPMOVZXWQVPMOVZXDQ
VPMUL VPMULDQ、、、、、、、、、VPMULUDQVPMULHRSWVPMULHUWVPMULHWVPMULLDVPMULLQVPMULLW
副大統領 VPORDVPORQ
VPSUB VPSUBB、、、、、、、、、VPSUBWVPSUBDVPSUBQVPSUBSBVPSUBSWVPSUBUSBVPSUBUSWはい
VPUNPCK VPUNPCKHBW、、、、、、、、、VPUNPCKHWDVPUNPCKHDQVPUNPCKHQDQVPUNPCKLBWVPUNPCKLWDVPUNPCKLDQVPUNPCKLQDQ
VPXOR VPXORDVPXORQ
VPSADBW VPSADBWはい
VPSHUF VPSHUFB、、、、、、、、、、、、、、、、、、、、、、、、、、、VPSHUFHWVPSHUFLWVPSHUFDVPSLLDQVPSLLWVPSLLDVPSLLQVPSRAWVPSRADVPSRAQVPSRLDQVPSRLWVPSRLDVPSRLQVPSLLVWVPSLLVDVPSLLVQVPSRLVWVPSRLVDVPSRLVQVPSHUFPDVPSHUFPSはい
ベクトラクト いいえ はい はい VEXTRACTF32X4、、、、、、、、、VEXTRACTF64X2VEXTRACTF32X8VEXTRACTF64X4VEXTRACTI32X4VEXTRACTI64X2VEXTRACTI32X8VEXTRACTI64X4はい
ヴィンサート VINSERTF32x4、、、、、、、、、VINSERTF64X2VINSERTF32X8 VINSERTF64x4VINSERTI32X4VINSERTI64X2VINSERTI32X8VINSERTI64X4
VPABS VPABSB、、、、VPABSWVPABSDVPABSQはい
VPALIGNR VPALIGNR
VPERM VPERMD、、、、、、VPERMILPDVPERMILPSVPERMPDVPERMPSVPERMQはい
VPMADD VPMADDUBSWVPMADDWDはい
VFMADD いいえ いいえ はい VFMADD132PD、、、、、、、、、、、、、、VFMADD213PDVFMADD231PDVFMADD132PSVFMADD213PSVFMADD231PSVFMADD132SDVFMADD213SDVFMADD231SDVFMADD132SSVFMADD213SSVFMADD231SSはい
VFMADDSUB VFMADDSUB132PD、、、、、、VFMADDSUB213PDVFMADDSUB231PDVFMADDSUB132PSVFMADDSUB213PSVFMADDSUB231PS
VFMSUBADD VFMSUBADD132PD、、、、、、VFMSUBADD213PDVFMSUBADD231PDVFMSUBADD132PSVFMSUBADD213PSVFMSUBADD231PS
VFMSUB VFMSUB132PD、、、、、、、、、、、、、、VFMSUB213PDVFMSUB231PDVFMSUB132PSVFMSUB213PSVFMSUB231PSVFMSUB132SDVFMSUB213SDVFMSUB231SDVFMSUB132SSVFMSUB213SSVFMSUB231SS
VFNMADD VFNMADD132PD、、、、、、、、、、、、、、VFNMADD213PDVFNMADD231PDVFNMADD132PSVFNMADD213PSVFNMADD231PSVFNMADD132SDVFNMADD213SDVFNMADD231SDVFNMADD132SSVFNMADD213SSVFNMADD231SS
VFNMSUB VFNMSUB132PD、、、、、、、、、、、、、、VFNMSUB213PDVFNMSUB231PDVFNMSUB132PSVFNMSUB213PSVFNMSUB231PSVFNMSUB132SDVFNMSUB213SDVFNMSUB231SDVFNMSUB132SSVFNMSUB213SSVFNMSUB231SS
VGATHER VGATHERDPS、、、、VGATHERDPDVGATHERQPSVGATHERQPD
VPGATHER VPGATHERDD、、、、VPGATHERDQVPGATHERQDVPGATHERQQ
VPSRAV VPSRAVW、、VPSRAVDVPSRAVQはい

AVX-512搭載CPU

サブセット
F
CD
救急外来
PF
4FMAPS
4VNNIW
VPOPCNTDQ
VL
失格
白黒
IFMA
VBMI
VNNI
BF16
VBMI2
ビタルグ
VPCLMULQDQ
GFNI
VAES
VP2インターセクト
FP16
BMM
ナイツランディング(Xeon Phi x200、2016) はい はい いいえ
ナイツミル(Xeon Phi x205、2017)はい いいえ
Skylake-SPSkylake-X(2017)いいえ いいえ はい いいえ
キャノン・レイク(2018) はい いいえ
カスケード湖(2019)いいえ はい いいえ
クーパー湖(2020) はい いいえ
アイスレイク(2019) はい いいえ はい いいえ
タイガーレイク(2020) はい いいえ
ロケットレイク(2021) いいえ
アルダー・レイク(2021) 部分注1部分注1いいえ
禅4(2022) はい はい いいえ
サファイア・ラピッズ (2023) いいえ はい いいえ
禅5(2024) はい いいえ
Zen 6(未定) はい

^注1 :IntelはAlder Lake 上でAVX-512ファミリーの命令を公式にはサポートしていません。2022年初頭、IntelはAlder Lakeマイクロプロセッサにおいて、顧客がAVX-512を有効にできないように、シリコン内でAVX-512を無効化(フューズオフ)し始めました。 [ 38 ] BIOSとマイクロコードリビジョンのレガシーな組み合わせを持つ古いAlder LakeファミリーCPUでは、AVX-512用のシリコンを含まないすべての効率コアを無効化した状態でも、AVX-512ファミリーの命令を実行することができました。 [ 39 ] [ 40 ] [ 26 ]

パフォーマンス

インテル® ベクトル化アドバイザー(バージョン2017以降)は、ネイティブAVX-512パフォーマンスおよびベクトルコード品質分析(「Core」、Xeon、およびインテル® Xeon Phi™プロセッサー向け)をサポートしています。従来のホットスポット・プロファイル、アドバイザーの推奨事項、そしてインテル® コンパイラーのベクトル化診断の「シームレスな」統合に加えて、アドバイザー・サーベイ分析では、AVX-512 ISAメトリックと、散布図、圧縮/展開、マスク使用率といった新しいAVX-512固有の「特性」も提供されます。[ 41 ] [ 42 ]

一部のプロセッサ(主にIce Lake以前のIntel)では、AVX-512命令は、以前のものよりもさらに大きな周波数スロットリングを引き起こす可能性があり、混合ワークロードではペナルティとなります。この追加のダウンクロックは、512ビットのベクター幅によって引き起こされ、実行される命令の性質に依存します。AVX-512の128ビット部分または256ビット部分(AVX-512VL)を使用する場合は、このダウンクロックは発生しません。そのため、gccclangは、Intelターゲットではデフォルトで256ビットベクターを優先して使用します。[ 43 ] [ 44 ] [ 45 ]

C/ C++コンパイラーは、AVX-512を最も効果的に使用するために、ループの展開パイプラインのストールの防止を自動的に処理します。つまり、言語の組み込み関数を使用してAVX-512の使用を強制しようとするプログラマーは、ソースコードに明示的に記述されたループに遭遇したときに、コンパイラーによって生成されたコードと比較してパフォーマンスが低下することがあります。[ 46 ]また、C/C++コードでAVX-512組み込み関数を使用すると、単純に記述されたC/C++と比較してパフォーマンスが向上する場合があります。[ 47 ]

受付

AVX-512の応用例は数多くあり、メディア処理、暗号化、ビデオゲーム[ 48 ]ニューラルネットワーク[ 49 ]さらにはソートにAVX-512を採用しているOpenJDKなどがある。[ 50 ]

2020年によく引用される発言で、リーナス・トーバルズは「AVX-512が苦痛の死を遂げ、インテルが魔法の命令を作ってベンチマークで良い結果を出すのではなく、実際の問題を修正し始めることを望む」と述べている[ 51 ]。彼はトランジスタ予算がコアの追加と整数性能の向上に費やされることを望み、浮動小数点ベンチマークを「嫌悪」している[ 52 ]

参照

参考文献

  • クッスワーム、ダニエル (2022). 『C++とアセンブリ言語による最新の並列プログラミング:AVX、AVX2、AVX-512を用いたX86 SIMD開発』ニューヨーク、ニューヨーク州: Apress Media LLC. ISBN 978-1-4842-7918-2. OCLC  1304243196 .
  1. ^ a b c d e f James Reinders (2013年7月23日). 「AVX-512命令」 . Intel . 2013年8月20日閲覧
  2. ^ a bクスヴルム 2022、p. 223。
  3. ^ Bonshor, Gavin (2023年7月25日). 「IntelがAVX10とAPX命令セットを発表:ハイブリッドアーキテクチャ向けにAVX-512を統合」 . AnandTech . 2023年7月25日時点のオリジナルよりアーカイブ。 2024年8月21日閲覧
  4. ^ 「Intelがプロセッサにディープラーニング命令を追加」 2016年10月14日。
  5. ^ a b c d e f g h「Intelアーキテクチャ命令セット拡張プログラミング・リファレンス」(PDF) . Intel . 2014年1月29日閲覧
  6. ^ a b c James Reinders (2014年7月17日). 「AVX-512の追加命令」 . Intel . 2014年8月3日閲覧
  7. ^ Anton Shilov. 「PC向けIntel『Skylake』プロセッサはAVX-512命令をサポートしない」 Kitguru.net . 2015年3月17日閲覧
  8. ^ a b c d e f「Intelアーキテクチャ命令セット拡張および将来の機能プログラミングリファレンス」 Intel 2017年10月16日閲覧
  9. ^ 「[PATCH] AMD znver6プロセッサのサポートを追加」。2025年11月19日。
  10. ^ 「インライン asm のドキュメントで、k0 (X86 AVX-512) がゼロにハードワイヤードされていると誤って記載されています · Issue #94977 · rust-lang/Rust」。GitHub
  11. ^ 「AVX-512アーキテクチャ/Demikhovskyポスター」(PDF) . Intel . 2014年2月25日閲覧
  12. ^ 「Intel® Deep Learning Boost」(PDF) . Intel . 2021年10月11日閲覧
  13. ^ Kivilinna, Jussi (2023年4月19日). "camellia-simd-aesni" . GitHub .新しいx86-64プロセッサは、Camellia s-boxをより簡単に実装し、さらに優れたパフォーマンスを実現するGalois Field New Instructions (GFNI)もサポートしています。
  14. ^ユ・テヒ;キヴィリンナ、ユッシ。チョ・チュンヒ (2023) 「AVX ベースの ARIA ブロック暗号アルゴリズムの高速化」IEEE アクセス11 : 77403–77415Bibcode : 2023IEEEA..1177403Y土井10.1109/ACCESS.2023.3298026
  15. ^ Towner, Daniel; Kinsella, Ray (2021年12月9日). 「Galois Field New Instructions (GFNI) テクノロジーガイド」 . Intel Corporation .
  16. ^ 「Intel® AVX512-FP16 アーキテクチャー仕様、2021年6月、リビジョン1.0、Ref. 347407-001US」(PDF) . Intel. 2021年6月30日. 2021年7月4日閲覧
  17. ^ 「Intel Xeon Phiプロセッサー製品概要」 Intel 2016年10月12日閲覧
  18. ^ 「IntelがXシリーズ・プラットフォームを発表:最大18コア、36スレッド、価格は242ドルから2,000ドル」 Ars Technica 2017年5月30日閲覧
  19. ^ 「Intel Advanced Vector Extensions 2015/2016: GNUコンパイラコレクションでのサポート」(PDF) . Gcc.gnu.org . 2016年10月20日閲覧
  20. ^ Patrizio, Andy (2015年9月21日). 「Intelの2016年Xeonロードマップがリーク」 . Itworld.org . 2016年10月21日時点のオリジナルよりアーカイブ。 2016年10月20日閲覧
  21. ^ 「Intel Core i9-11900K レビュー - 世界最速のゲーミングプロセッサー?」 www.techpowerup.com 2021年3月30日。
  22. ^ "「 gccに rocketlake を追加する」コミット。gcc.gnu.org 。
  23. ^ 「Intel Celeron 6305 プロセッサー(4M キャッシュ、1.80 GHz、IPU 搭載)製品仕様」ark.intel.com2020年10月18日時点のオリジナルよりアーカイブ2020年11月10日閲覧
  24. ^ラップトップ Murah Kinerja Boleh Diadu | HP 14S DQ2518TU、2021 年 6 月 18 日2021 年8 月 8 日に取得
  25. ^ 「GNUコンパイラコレクション(GCC)の使用:x86オプション」 . GNU . 2019年10月14日閲覧
  26. ^ a bイアン・カトレス、アンドレイ・フルムサヌ「Intel第12世代Core i9-12900Kレビュー:ハイブリッドパフォーマンスがハイブリッドの複雑さをもたらす」 www.anandtech.com 2021年11月4日時点のオリジナルよりアーカイブ。 2021年11月5日閲覧
  27. ^ Larabel, Michael. 「Linux上のIntel Core i9 12900K "Alder Lake" AVX-512」www.phoronix.com . 2021年11月8日閲覧
  28. ^ Larabel, Michael. 「AVX-512パフォーマンス比較:AMD Genoa vs. Intel Sapphire Rapids & Ice Lake」 www.phoronix.com . 2023年1月19日閲覧
  29. ^ 「サーバークラスのCPUと統合AIコプロセッサテクノロジーを搭載した業界初の高性能x86 SOC」。2022年8月2日。2019年12月12日時点のオリジナルよりアーカイブ。
  30. ^ 「x86、x64 命令レイテンシ、メモリレイテンシ、CPUID ダンプ (instlatx64)」users.atw.hu
  31. ^ 「AMD Zen 4ベースのRyzen CPUは最大24コア、AVX512ベクターのサポートを搭載する可能性」 Hardware Times、2021年5月23日。 2021年9月2日閲覧
  32. ^ Hagedoorn, Hilbert (2021年5月18日). 「AMD、驚異的な96コアのEPYCプロセッサを開発中」 . Guru3D.com . 2021年5月25日閲覧
  33. ^ clamchowder (2021年8月23日). 「Gigabyte Leakの詳細」 . Chips And Cheese . 2022年6月10日閲覧
  34. ^ W1zzard (2022年5月26日). 「AMDがZen 4の技術に関する質問にロバート・ハロック氏に回答」 . TechPowerUp . 2022年5月29日閲覧
  35. ^ Larabel, Michael (2022年9月26日). 「Ryzen 9 7950XにおけるAMD Zen 4 AVX-512パフォーマンス分析」 . www.phoronix.com .
  36. ^ Larabel, Michael (2024年2月10日). 「AMD Zen 5コンパイラーのサポートがGCCで開始 - 新しいAVX機能などを確認www.phoronix.com .
  37. ^ Larabel, Michael (2025年11月19日). 「AMD、AMD Zen 6向けGNU Binutilsパッチをリリース - AVX-512の新機能を確認www.phoronix.com .
  38. ^ Alcorn, Paul (2022年3月2日). 「Intel、Alder LakeのAVX-512サポートを廃止、シリコンで廃止」 . Tom's Hardware . 2022年3月7日閲覧
  39. ^ Cutress, Ian; Frumusanu, Andrei (2021年8月19日). 「Intel Architecture Day 2021: Alder Lake、Golden Cove、Gracemont の詳細」 . AnandTech . 2021年8月25日時点のオリジナルよりアーカイブ。 2021年8月25日閲覧
  40. ^ Alcorn, Paul (2021年8月19日). 「Intel Architecture Day 2021: Alder Lakeチップ、Golden Cove、Gracemontコア」 . Tom's Hardware . 2021年8月21日閲覧
  41. ^ 「Intel Advisor XE 2016 Update 3 の新機能 - Intel ソフトウェア」Software.intel.com2016年10月20日閲覧
  42. ^ 「Intel Advisor - Intel ソフトウェア」 . Software.intel.com . 2016年10月20日閲覧
  43. ^ Cordes, Peter. 「SIMD命令によるCPU周波数の低下」 . Stack Overflow .
  44. ^ Cordes, Peter. 「TigerlakeのGCC自動ベクトル化でZMMレジスタではなくYMMレジスタが使用されるのはなぜか」。Stack Overflow
  45. ^ 「LLVM 10.0.0 リリースノート」
  46. ^ Matthew Kolbe (2023年10月10日).ライトニングトーク: SIMD組み込み関数を活用して大幅な速度低下を実現する方法 - Matthew Kolbe - CppNow 2023. C++Now . 2023年10月15日閲覧– YouTube経由.
  47. ^ Clausecker, Robert (2023年8月5日). 「AVX-512命令によるUnicode文字のトランスコーディング」.ソフトウェア:実践と経験. 53 (12): 2430–2462 . arXiv : 2212.05098 . doi : 10.1002/spe.3261 .
  48. ^ Szewczyk, Chris (2021年11月24日). 「RPCS3 PS3エミュレーターは、AVX-512対応のIntel Alder Lake CPUで大幅なパフォーマンス向上を実現」 . PC Gamer . 2023年10月11日閲覧
  49. ^アンドレ、カルネイロ;セルパ、マテウス(2021年9月5日)。 「AVX-512 上の軽量ディープラーニング アプリケーション」。2021 IEEE コンピュータと通信シンポジウム (ISCC)アテネIEEE。 pp.  1–6 . doi : 10.1109/ISCC53001.2021.9631464
  50. ^ Parasa, Srinivas (2023年5月30日). 「JDK-8309130: x86_64 AVX512 intrinsics for Arrays.sort methods (int, long, float and double arrays)」 . OpenJDK . 2023年10月11日閲覧
  51. ^ Tung, Liam (2020年7月13日). 「Linus Torvalds: IntelのAVX-512が苦痛の死を迎えることを願う」 . ZDNet . 2023年10月11日閲覧
  52. ^ Torvalds, Linus (2020年7月11日). 「Alder LakeとAVX-512」 . realworldtech.com . 2023年10月11日閲覧