インテル® C++ コンパイラー 15.0 ユーザー・リファレンス・ガイド

概要: インテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) 命令の組込み関数


機能の概要

インテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) 命令の組込み関数は、インテル® AVX とインテル® AVX2 の 256 ビット SIMD 命令のほとんどを 512 ビットの数値処理に対応するように拡張します。

インテル® AVX-512 命令のプログラミング・モデルは、インテル® AVX2 命令と同じです。ブロードキャストの拡張、組込みマスクによる予測、組込みの浮動小数点丸め制御、組込みの浮動小数点フォルトの抑止、分散 (Scatter) 命令、高速な算術命令、大きな変位値の簡易表現を提供します。インテル® SSE とインテル® AVX の混在使用ではパフォーマンス・ペナルティーが発生しますが、インテル® AVX とインテル® AVX-512 命令を混在させてもペナルティーは発生しません。

インテル® AVX-512 組込み関数は、32nm テクノロジーの IA-32 およびインテル® 64 アーキテクチャーでサポートされ、インテル® AVX-512 の新しい命令およびその他の 128 ビット/256 ビットの SIMD 拡張命令に直接対応付けられます。


インテル® AVX-512 レジスター

512 ビットのレジスターステートは、45nm テクノロジーのインテル® 64 プロセッサーで追加された XSAVE/XRSTOR/XSAVEOPT 命令を使用してオペレーティング・システムにより管理されます (詳細は、『Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 2B』 (英語) と『Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A』 (英語) を参照してください)。

インテル® SSE レジスターからインテル® AVX レジスターへのマップと同様に、インテル® AVX レジスター YMM0YMM15 は、インテル® AVX-512 レジスター ZMM0ZMM15 にマップされます。 インテル® AVX-512 対応プロセッサーで、インテル® AVX およびインテル® AVX2 命令は、最初の 16 個の ZMM レジスターの下位 128 ビットまたは下位 256 ビットを操作します。


インテル® AVX-512 のプリフィクス命令エンコードのサポート

新しいエンコード・プリフィクス (EVEX) は、最大 512 ビットのベクトルをサポートします。EVEX プリフィクスは VEX プリフィクスをベースにしており、VEX エンコードで利用可能な機能を簡単かつ効率良くエンコードする一方で、ベクトル機能を拡張します。

インテル® AVX-512 組込み関数は、3 つの C データ型をオペランドとして使用します。3 つのデータ型は、組込み関数に対するオペランドとして使用される新しいレジスターを表しています。__m512__m512d__m512i のデータ型があります。 __m512 データ型は、インテル® AVX-512 組込み関数で使用される拡張 SSE レジスター (ZMM レジスター) の内容を表します。 __m512 データ型は、16 個の 32 ビット倍精度浮動小数点値を保持できます。 __m512d データ型は、8 個の 64 ビット倍精度浮動小数点値を保持できます。 __m512i データ型は、64 個の 8 ビット整数値、32 個の 16 ビット整数値、16 個の 32 ビット整数値、または 8 個の 64 ビット整数値を保持できます。

コンパイラーは、__m512__m512d、および __m512i 型のローカルデータとグローバルデータのアライメントを、スタック上の 64 バイト境界に合わせます。 integer 型、float 型、または double 型の配列のアライメントを合わせるには、__declspec(align) 文を使用します。


インテル® AVX-512 組込み関数のデータ型

インテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) 組込み関数のプロトタイプは、zmmintrin.h ヘッダーファイルで定義されていますが、 実際にヘッダーをコードにインクルードする場合は、immintrin.h を使用します。

インテル® AVX-512 組込み関数には、__m128__m128i__m128d__m256__m256i__m256d__m512__m512i、および __m512d データ型を使用するバージョンがあります。

命名と使用する構文

ほとんどのインテル® AVX-512 の組込み関数名は、次の表記規則に従います。

_mm512_<intrin_op>_<suffix>(<data type> <parameter1>, <data type> <parameter2>, <data type> <parameter3>) 

次の表は、構文の各項目について説明したものです。

_mm512 プリフィクスは結果のサイズを表します。通常はインテル® AVX-512 ベクトルレジスターのサイズである 512 ビットですが、一部の組込み関数では 512 ビットよりも小さくなります。
<intrin_op> 組込み関数の基本操作を示します。例えば、加算の場合は add、減算の場合は sub になります。
<suffix> 命令の操作対象となるデータの型を示します。各サフィックスの最初の 1 文字または 2 文字は、データがパックドデータ (p)、拡張パックドデータ (ep)、またはスカラーデータ (s) であることを示します。その他の文字は、次のデータ型を示します。
  • s: 単精度浮動小数点値

  • d: 倍精度浮動小数点値

  • i512: 符号付き 512 ビット整数

  • i128: 符号付き 128 ビット整数

  • i64: 符号付き 64 ビット整数

  • u64: 符号なし 64 ビット整数

  • i32: 符号付き 32 ビット整数

  • u32: 符号なし 32 ビット整数

  • i16: 符号付き 16 ビット整数

  • u16: 符号なし 16 ビット整数

  • i8: 符号付き 8 ビット整数

  • u8: 符号なし 8 ビット整数

<data type> パラメーターのデータ型 __m512__m512d__m512i__m256__m256d__m256i__m128__m128d__m128iconstint など。
<parameter1> 1 つ目のソース・ベクトル・レジスター: m1/s1/v1/a
<parameter2> 2 つ目のソース・ベクトル・レジスター: m2/s2/v2/b
<parameter3>

整数値: mask/select/offset

3 つ目のパラメーターのビットは、組込み関数が操作を実行する条件を示します。


プログラムは、512 ビットのベクトルに 8 個の倍精度浮動小数点値、16 個の単精度浮動小数点値、8 個の 64 ビット整数値、または 16 個の 32 ビット整数値をパックできます。そのため、1 つの命令でインテル® AVX やインテル® AVX2 の 2 倍、あるいはインテル® SSE の 4 倍のデータ要素を処理することができます。


関連情報


このヘルプトピックについてのフィードバックを送信