AVX-512とは、Intelが開発するx86向けSIMD拡張命令である。
この記事は書きかけです。
x86のプロセッサには、今までにもMMXや3DNow!, SSEなどのSIMD拡張命令が存在したが、AVX-512はSandy Bridge世代から存在したAVXをベースに、512-bit幅へ拡張した拡張命令セットである。
Skylake/Knights Landingから、主にエンスージアスト、サーバーグレードのSKUに実装されている。
またCascade LakeではAVX-512VNNIが実装されるなど、マイクロアーキテクチャによってサポートしている命令が若干異なることに注意。
AMDではZen 4マイクロアーキテクチャ以降から実装されている。
SIMDについては、[[SIMD#こちら]]を参照されたい。
IntelはAVXをSandy Bridgeから実装している。それとは別に、Xeon PhiのKnights Cornerまでは独自の512-bit SIMD演算命令を持っていた。
Xeon PhiがKnights LandingからコアのベースをSilvermontに切り替えるにあたり、このときの命令セットをAVX-512として正式に制定した。
XeonではSkylakeからAVX-512を実装しており、これはXeon Phiよりも少し後になる。
この項目は書きかけです。
AVX-512Fはもっとも基本的な実装で、512ビット長レジスタ、オペレーションマスク、例外制御などを備える。
Skylake/Knights Landingから実装。
AVX-512CDはレジスタ内の値が重複しているかを即座に判定する命令を実装している。工夫のないSIMD処理では複数レーンでのアドレスの衝突などが起こり得るが、判定命令を用いると重複しているレーンを1命令で判定しマスクレジスタにそのまま代入する。このため、多くの処理を安全にベクトル化できるようになる。 Skylake/Knights Landingから実装。
AVX-512ERは指数関数と逆数の高速な計算を実装している。テイラー展開に代表されるような超越関数の近似は指数関数と逆数演算の高速化が有効。 Knights Landingから実装。
AVX-512PFは間接参照などによる不連続なメモリアクセスを補助する命令を実装している。メモリアクセスを必要とするループ処理L1とL2があるとして、L1を実行する段階でL2に必要なデータをプリフェッチすることでメインメモリに対する不連続なアクセスを事前に行い、キャッシュへ持ってきておくことで待機時間を隠蔽できる。 Knights Landingから実装。
AVX-5124VNNIW/4FMAPSは4個のレジスタを同時に処理する命令を実装している。4VNNIWは4個の連続するレジスタの値を読み込み、それらの内積を加算する。4FMAPSも同様に4個の連続するレジスタの値を読み込み積和演算する。どちらもレジスタ4個単位で計算を行うが、4つ同じ命令を書くとメニーコア環境ではデコード帯域が不足してしまう可能性があるため。 Knights Millでのみ実装。
AVX-512VLはAVX-512Fで実装されるマスクや例外制御の恩恵を128-bit/256-bit幅レジスタでも享受できるようにした。512-bit幅レジスタのみを使う場合では電力効率や帯域が足を引っ張るなどの問題があるが、より小さいレジスタを利用することによって小回りが利くようになる。 Skylakeから実装。
AVX-512DQは32-bit/64-bit浮動小数点数に対する演算命令が強化されている。数値のクランプ、NaN/Infなどの判定命令が追加されている。 Skylakeから実装。
AVX-512BWはベクトルマスクをbyte単位で行える命令や、16-bit単位での要素並び替えを行う命令が実装されている。 Skylakeから実装。
現在(GCC-15)では、AVX-512は標準的にサポートされている。対応CPUなら-march=nativeでよい。また-march=cascadelakeのように対応のマイクロアーキテクチャをかけばGCCはAVX-512を使って良いものとみなす。
明示的に指定したい場合は-mavx512fなどを渡す。
また当然ではあるが、Intelコンパイラによってもサポートされている。