インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

FP の集約 (Gather) と分散 (Scatter) 操作の組込み関数

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


組込み関数名

演算

対応するインテル® AVX-512 命令

_mm512_i32gather_pd_mm512_mask_i32gather_pd

int32 インデックスを使用して、メモリーから float64 ベクトル要素を集約 (Gather) します。

VGATHERDPD

_mm512_i32gather_ps_mm512_mask_i32gather_ps

int32 インデックスを使用して、メモリーから float32 ベクトル要素を集約 (Gather) します。

VGATHERDPS

_mm512_i64gather_pd_mm512_mask_i64gather_pd

int64 インデックスを使用して、メモリーから float64 ベクトル要素を集約 (Gather) します。

VGATHERQPD

_mm512_i64gather_ps_mm512_mask_i64gather_ps

int64 インデックスを使用して、メモリーから float32 ベクトル要素を集約 (Gather) します。

VGATHERQPS

_mm512_prefetch_i32gather_pd_mm512_mask_prefetch_i32gather_pd

int32 インデックスを使用して、float64 ベクトルを集約 (Gather) プリフェッチします。

VGATHERPF0DPDVGATHERPF1DPD

_mm512_prefetch_i64gather_pd_mm512_mask_prefetch_i64gather_pd

int64 インデックスを使用して、float64 ベクトルを集約 (Gather) プリフェッチします。

VGATHERPF0QPDVGATHERPF1QPD

_mm512_prefetch_i64gather_ps_mm512_mask_prefetch_i64gather_ps

int64 インデックスを使用して、float64 ベクトルを集約 (Gather) プリフェッチします。

VGATHERPF0QPSVGATHERPF1QPS

_mm512_i32scatter_pd_mm512_mask_i32scatter_pd

int32 インデックスを使用して、メモリーから float64 ベクトル要素を分散 (Scatter) します。

VSCATTERDPD

_mm512_i32scatter_ps_mm512_mask_i32scatter_ps

int32 インデックスを使用して、メモリーから float32 ベクトル要素を分散 (Scatter) します。

VSCATTERDPD

_mm512_i64scatter_pd_mm512_mask_i64scatter_pd

int64 インデックスを使用して、メモリーから float64 ベクトル要素を分散 (Scatter) します。

VSCATTERQPD

_mm512_i64scatter_ps_mm512_mask_i64scatter_ps

int64 インデックスを使用して、メモリーから float32 ベクトル要素を分散 (Scatter) します。

VSCATTERQPS

_mm512_prefetch_i32scatter_pd_mm512_mask_prefetch_i32scatter_pd

int32 インデックスを使用して、float64 ベクトルを分散 (Scatter) プリフェッチします。

VSCATTERPF0DPDVSCATTERPF1DPD

_mm512_prefetch_i64scatter_pd_mm512_mask_prefetch_i64scatter_pd

int64 インデックスを使用して、float64 ベクトルを分散 (Scatter) プリフェッチします。

VSCATTERPF0QPDVSCATTERPF1QPD

_mm512_prefetch_i64scatter_ps_mm512_mask_prefetch_i64scatter_ps

int64 インデックスを使用して、float64 ベクトルを分散 (Scatter) プリフェッチします。

VSCATTERPF0QPSVSCATTERPF1QPS


変数 定義
k

セレクターとして使用される書き込みマスク

a

1 つ目のソースベクトルの要素

src

書き込みマスクの結果に応じて使用されるソース要素

hint

値を書き込むキャッシュレベル。_MM_HINT_ENUM には、次の値を指定できます。

_MM_HINT_NONE 0x0 - オフ

scale

_MM_INDEX_SCALE_ENUM には、次のいずれかの値を指定できます。

  • _MM_SCALE_1 - 1
  • _MM_SCALE_2 - 2
  • _MM_SCALE_4 - 4
  • _MM_SCALE_8 - 8

round

丸め制御値。次のいずれかになります (sae によりすべての例外フラグが抑止されます)。

  • _MM_FROUND_TO_NEAREST_INT - 最も近い偶数に丸めます。
  • _MM_FROUND_TO_NEG_INF - 負の無限大に丸めます。
  • _MM_FROUND_TO_POS_INF -正の無限大に丸めます。
  • _MM_FROUND_TO_ZERO - ゼロに丸めます。
  • _MM_FROUND_CUR_DIRECTION - MXCSR レジスターのデフォルトを使用して丸めます。


_mm512_i32gather_pd

extern __m512 __cdecl _mm512_i32gather_pd(__m512i vindex, void const* base_addr,  int scale, int hint);

32 ビットのインデックスを使用して、メモリーから float64 要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 32 ビット要素をオフセットとして 64 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。集約した要素は、デスティネーションにマージします。


_mm512_mask_i32gather_pd

extern __m512 __cdecl _mm512_mask_i32gather_pd(__m512 src, __mmask16 k, __m512i vindex, void const* base_addr, int scale, int hint);

32 ビットのインデックスを使用して、メモリーから float64 要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 32 ビット要素をオフセットとして 64 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。集約した要素は、書き込みマスク k を使用してデスティネーションにマージします (マスクの対応するビットが設定されていない場合は src の要素がコピーされます)。


_mm512_i32gather_ps

extern __m512 __cdecl _mm512_i32gather_ps(__m512i vindex, void const* base_addr,  int scale, int hint);

32 ビットのインデックスを使用して、メモリーから float32 要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 32 ビット要素をオフセットとして 32 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。集約した要素は、デスティネーションにマージします。


_mm512_mask_i32gather_ps

extern __m512 __cdecl _mm512_mask_i32gather_ps(__m512 src, __mmask16 k, __m512i vindex, void const* base_addr,  int scale, int hint);

32 ビットのインデックスを使用して、メモリーから float32 要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 32 ビット要素をオフセットとして 32 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。集約した要素は、書き込みマスク k を使用してデスティネーションにマージします (マスクの対応するビットが設定されていない場合は src の要素がコピーされます)。


_mm512_i64gather_pd

extern __m512d __cdecl _mm512_i64gather_pd(__m512i vindex, void const* base_addr,  int scale, int hint);

64 ビットのインデックスを使用して、メモリーから float64 要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 64 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。集約した要素は、デスティネーションにマージします。


_mm512_mask_i64gather_pd

extern __m512d __cdecl _mm512_mask_i64gather_pd(__m512d a, __mmask8 k, __m512i vindex, void const* base_addr,  int scale, int hint);

64 ビットのインデックスを使用して、メモリーから float64 要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 64 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。集約した要素は、書き込みマスク k を使用してデスティネーションにマージします (マスクの対応するビットが設定されていない場合は src の要素がコピーされます)。


_mm512_i64gather_ps

extern __m512 __cdecl _mm512_i64gather_ps(__m512i vindex, void const* base_addr,  int scale, int hint);

64 ビットのインデックスを使用して、メモリーから float32 要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 32 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。集約した要素は、デスティネーションにマージします。


_mm512_mask_i64gather_ps

extern __m512 __cdecl _mm512_mask_i64gather_ps(__m512 src, __mmask8 k, __m512i vindex, void const*,  int scale, int hint);

64 ビットのインデックスを使用して、メモリーから float32 要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 32 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。集約した要素は、書き込みマスク k を使用してデスティネーションにマージします (マスクの対応するビットが設定されていない場合は src の要素がコピーされます)。


_mm512_prefetch_i64gather_ps

extern void __cdecl _mm512_prefetch_i64gather_ps(__m512i vindex, void const* base_addr, int scale, int hint);

64 ビットのインデックスを使用して、メモリーから float32 要素をプリフェッチします。開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 32 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。集約した要素は、キャッシュにマージします。scalehint は 0 または 1 のいずれかで、値を書き込むキャッシュレベルを示します。


_mm512_mask_prefetch_i64gather_ps

extern void __cdecl _mm512_mask_prefetch_i64gather_ps(__m512i vindex, __mmask8 k, void const* base_addr, int scale, int hint);

64 ビットのインデックスを使用して、メモリーから float32 要素をプリフェッチします。開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 32 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。集約した要素は、書き込みマスク k を使用してキャッシュにマージします (マスクの対応するビットが設定されている場合のみ要素がキャッシュに書き込まれます)。scalehint は 0 または 1 のいずれかで、値を書き込むキャッシュレベルを示します。


_mm512_prefetch_i32gather_pd

extern void __cdecl _mm512_prefetch_i32scatter_pd(void* base_addr, __m256i vindex, int scale, int hint);

32 ビットのインデックスを使用して、メモリーから float64 要素をプリフェッチします。開始アドレス base_addr から、vindex の各 32 ビット要素をオフセットとして 64 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。

scalehint は 0 または 1 のいずれかで、値を書き込むキャッシュレベルを示します。集約した要素は、キャッシュにマージします。


_mm512_mask_prefetch_i32gather_pd

extern void __cdecl _mm512_mask_prefetch_i32scatter_pd(void* base_addr, __mmask8 k, __m256i vindex, int scale, int hint);

32 ビットのインデックスを使用して、メモリーから float64 要素をプリフェッチします。開始アドレス base_addr から、vindex の各 32 ビット要素をオフセットとして 64 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。集約した要素は、書き込みマスク k を使用してキャッシュにマージします (マスクの対応するビットが設定されている場合のみ要素がキャッシュに書き込まれます)。scalehint は 0 または 1 のいずれかで、値を書き込むキャッシュレベルを示します。


_mm512_prefetch_i64gather_pd

extern void __cdecl _mm512_prefetch_i64gather_pd(__m512i vindex, void const* base_addr, int scale, int hint);

64 ビットのインデックスを使用して、メモリーから hint で指定されたキャッシュレベルに float64 要素をプリフェッチします。開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 64 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。scalehint は 0 または 1 のいずれかです。


_mm512_mask_prefetch_i64gather_pd

extern void __cdecl _mm512_mask_prefetch_i64gather_pd(__m512i vindex, __mmask8 k, void const* base_addr, int scale, int hint);

64 ビットのインデックスを使用して、メモリーから hint で指定されたキャッシュレベルに float64 要素をプリフェッチします。開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 64 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。プリフェッチした要素は、書き込みマスク k を使用してキャッシュにマージされます (マスクの対応するビットが設定されている場合はメモリーから要素がコピーされます)。scalehint は 0 または 1 のいずれかです。


_mm512_i32scatter_pd

extern void __cdecl _mm512_i32scatter_pd(void* base_addr, __m512i vindex, __m512d a,  int scale, int hint);

32 ビットのインデックスを使用して、a の float64 要素をメモリーに分散 (Scatter) します。開始アドレス base_addr に、vindex の各 32 ビット要素をオフセットとして 64 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます)。


_mm512_mask_i32scatter_pd

extern void __cdecl _mm512_mask_i32scatter_pd(void* base_addr, __mmask8 k, __m512i vindex, __m512d a,  int scale, int hint);

32 ビットのインデックスを使用して、a の float64 要素をメモリーに分散 (Scatter) します。マスク k を使用して、開始アドレス base_addrvindex の各 32 ビット要素をオフセットとして 64 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます。マスクの対応するビットが設定されていない場合、要素はストアされません)。


_mm512_i32scatter_ps

extern void __cdecl _mm512_i32scatter_ps(void* base_addr, __m512i vindex, __m512 a,  int scale, int hint);

32 ビットのインデックスを使用して、a の float32 要素をメモリーに分散 (Scatter) します。開始アドレス base_addr に、vindex の各 32 ビット要素をオフセットとして 32 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます)。


_mm512_mask_i32scatter_ps

extern void __cdecl _mm512_mask_i32scatter_ps(void* base_addr, __mmask16 k, __m512i vindex, __m512 a,  int scale, int hint);

32 ビットのインデックスを使用して、a の float32 要素をメモリーに分散 (Scatter) します。マスク k を使用して、開始アドレス base_addrvindex の各 32 ビット要素をオフセットとして 32 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます。マスクの対応するビットが設定されていない場合、要素はストアされません)。


_mm512_i64scatter_pd

extern void __cdecl _mm512_i64scatter_pd(void* base_addr, __m512i vindex, __m512d a,  int scale, int hint);

64 ビットのインデックスを使用して、a の float64 要素をメモリーに分散 (Scatter) します。開始アドレス base_addr に、vindex の各 64 ビット要素をオフセットとして 64 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます)。


_mm512_mask_i64scatter_pd

extern void __cdecl _mm512_mask_i64scatter_pd(void* base_addr, __mmask8 k, __m512i vindex, __m512d a,  int scale, int hint);

64 ビットのインデックスを使用して、a の float64 要素をメモリーに分散 (Scatter) します。マスク k を使用して、開始アドレス base_addrvindex の各 64 ビット要素をオフセットとして 64 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます。マスクの対応するビットが設定されていない場合、要素はストアされません)。


_mm512_i64scatter_ps

extern void __cdecl _mm512_i64scatter_ps(void* base_addr, __m512i vindex, __m512 a,  int scale, int hint);

64 ビットのインデックスを使用して、a の float32 要素をメモリーに分散 (Scatter) します。マスク k を使用して、開始アドレス base_addrvindex の各 64 ビット要素をオフセットとして 32 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます。マスクの対応するビットが設定されていない場合、要素はストアされません)。


_mm512_mask_i64scatter_ps

extern void __cdecl _mm512_mask_i64scatter_ps(void* base_addr, __mmask8 k, __m512i vindex, __m512 a,  int scale, int hint);

64 ビットのインデックスを使用して、a の float32 要素をメモリーに分散 (Scatter) します。マスク k を使用して、開始アドレス base_addrvindex の各 64 ビット要素をオフセットとして 32 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます。マスクの対応するビットが設定されていない場合、要素はストアされません)。


_mm512_prefetch_i64scatter_ps

extern void __cdecl _mm512_prefetch_i64scatter_ps(void* base_addr, __m512i vindex, int scale, int hint);

64 ビットのインデックスを使用して、メモリーへ書き込む float32 要素をプリフェッチします。要素は、キャッシュレベル hint にプリフェッチされます。hint は 0 または 1 です。開始アドレス base_addr に、vindex の各 64 ビット要素をオフセットとして 32 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます)。


_mm512_mask_prefetch_i64scatter_ps

extern void __cdecl _mm512_mask_prefetch_i64scatter_ps(void* base_addr, __mmask8 k, __m512i vindex, int scale, int hint);

64 ビットのインデックスを使用して、メモリーへ書き込む float32 要素をプリフェッチします。要素は、キャッシュレベル hint にプリフェッチされます。hint は 0 または 1 です。マスク k を使用して、開始アドレス base_addrvindex の各 64 ビット要素をオフセットとして 32 ビット要素を格納します (各インデックスは scale の係数でスケーリングされます。マスクの対応するビットが設定されていない場合、要素はキャッシュに書き込まれません)。


_mm512_prefetch_i32scatter_pd

extern void __cdecl _mm512_prefetch_i32gather_pd(__m256i vindex, void const* base_addr, int scale, int hint);

32 ビットのインデックスを使用して、メモリーへ書き込む float64 要素をプリフェッチします。要素は、キャッシュレベル hint にプリフェッチされます。hint は 0 または 1 です。開始アドレス base_addr から、vindex の各 32 ビット要素をオフセットとして 64 ビット要素をキャッシュに書き込みます (各インデックスは scale の係数でスケーリングされます)。


_mm512_mask_prefetch_i32scatter_pd

extern void __cdecl _mm512_mask_prefetch_i32gather_pd(__m256i vindex, __mmask8 k, void const* base_addr, int scale, int hint);

32 ビットのインデックスを使用して、メモリーへ書き込む float64 要素をプリフェッチします。要素は、キャッシュレベル hint にプリフェッチされます。hint は 0 または 1 です。マスク k を使用して、開始アドレス base_addr から、vindex の各 32 ビット要素をオフセットとして 64 ビット要素をキャッシュに書き込みます (各インデックスは scale の係数でスケーリングされます。マスクの対応するビットが設定されていない場合、要素はキャッシュに書き込まれません)。


_mm512_prefetch_i64scatter_pd

extern void __cdecl _mm512_prefetch_i64scatter_pd(void* base_addr, __m512i vindex, int scale, int hint);

64 ビットのインデックスを使用して、メモリーへ書き込む float64 要素をプリフェッチします。要素は、キャッシュレベル hint にプリフェッチされます。hint は 0 または 1 です。開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 64 ビット要素をキャッシュに書き込みます (各インデックスは scale の係数でスケーリングされます)。


_mm512_mask_prefetch_i64scatter_pd

extern void __cdecl _mm512_mask_prefetch_i64scatter_pd(void* base_addr, __mmask8 k, __m512i vindex, int scale, int hint);

64 ビットのインデックスを使用して、メモリーへ書き込む float64 要素をプリフェッチします。要素は、キャッシュレベル hint にプリフェッチされます。hint は 0 または 1 です。マスク k を使用して、開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 64 ビット要素をキャッシュに書き込みます (各インデックスは scale の係数でスケーリングされます。マスクの対応するビットが設定されていない場合、要素はキャッシュに書き込まれません)。