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

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

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

#include <immintrin.h>


組込み関数名

演算

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

_mm512_i32gather_pd_mm512_mask_i32gather_pd

32 ビットの整数インデックスを使用して、メモリーから倍精度 (64 ビット) 浮動小数点要素を集約 (Gather) します。

VGATHERDPD

_mm512_i32gather_ps_mm512_mask_i32gather_ps

32 ビットの整数インデックスを使用して、メモリーから単精度 (32 ビット) 浮動小数点要素を集約 (Gather) します。

VGATHERDPS

_mm512_i32extgather_ps_mm512_mask_i32extgather_ps

32 ビットの整数インデックスを使用して、メモリーからの単精度 (32 ビット) 浮動小数点要素を順方向変換します。

VGATHERDPS

_mm512_i64gather_pd_mm512_mask_i64gather_pd

64 ビットの整数インデックスを使用して、メモリーから倍精度 (64 ビット) 浮動小数点要素を集約 (Gather) します。

VGATHERQPD

_mm512_i64gather_ps_mm512_mask_i64gather_ps

64 ビットの整数インデックスを使用して、メモリーから単精度 (32 ビット) 浮動小数点要素を集約 (Gather) します。

VGATHERQPS

_mm512_prefetch_i32gather_pd_mm512_mask_prefetch_i32gather_pd

32 ビットの整数インデックスを使用して、倍精度 (64 ビット) 浮動小数点要素のプリフェッチを集約 (Gather) します。

VGATHERPF0DPDVGATHERPF1DPD

_mm512_prefetch_i32gather_ps_mm512_mask_prefetch_i32gather_ps

32 ビットの整数インデックスを使用して、倍精度 (64 ビット) 浮動小数点要素のプリフェッチを集約 (Gather) します。

VGATHERPF0DPSVGATHERPF1DPS

_mm512_prefetch_i64gather_pd_mm512_mask_prefetch_i64gather_pd

64 ビットの整数インデックスを使用して、倍精度 (64 ビット) 浮動小数点要素のプリフェッチを集約 (Gather) します。

VGATHERPF0QPDVGATHERPF1QPD

_mm512_prefetch_i64gather_ps_mm512_mask_prefetch_i64gather_ps

64 ビットの整数インデックスを使用して、倍精度 (64 ビット) 浮動小数点要素のプリフェッチを集約 (Gather) します。

VGATHERPF0QPSVGATHERPF1QPS

_mm512_i32scatter_pd_mm512_mask_i32scatter_pd

32 ビットの整数インデックスを使用して、メモリーから倍精度 (64 ビット) 浮動小数点要素を分散 (Scatter) します。

VSCATTERDPD

_mm512_i32scatter_ps_mm512_mask_i32scatter_ps

32 ビットの整数インデックスを使用して、メモリーから単精度 (32 ビット) 浮動小数点要素を分散 (Scatter) します。

VSCATTERDPD

_mm512_i32extscatter_ps_mm512_mask_i32extscatter_ps

32 ビットの整数インデックスを使用して、メモリーからの単精度 (32 ビット) 浮動小数点要素を逆方向変換します。

VSCATTERDPS

_mm512_i64scatter_pd_mm512_mask_i64scatter_pd

64 ビットの整数インデックスを使用して、メモリーから倍精度 (64 ビット) 浮動小数点要素を分散 (Scatter) します。

VSCATTERQPD

_mm512_i64scatter_ps_mm512_mask_i64scatter_ps

64 ビットの整数インデックスを使用して、メモリーから単精度 (32 ビット) 浮動小数点要素を分散 (Scatter) します。

VSCATTERQPS

_mm512_prefetch_i32scatter_pd_mm512_mask_prefetch_i32scatter_pd

32 ビットの整数インデックスを使用して、倍精度 (64 ビット) 浮動小数点要素のプリフェッチを分散 (Scatter) します。

VSCATTERPF0DPDVSCATTERPF1DPD

_mm512_prefetch_i32scatter_ps_mm512_mask_prefetch_i32scatter_ps

32 ビットの整数インデックスを使用して、倍精度 (64 ビット) 浮動小数点要素のプリフェッチを分散 (Scatter) します。

VSCATTERPF0DPSVSCATTERPF1DPS

_mm512_prefetch_i64scatter_pd_mm512_mask_prefetch_i64scatter_pd

64 ビットの整数インデックスを使用して、倍精度 (64 ビット) 浮動小数点要素のプリフェッチを分散 (Scatter) します。

VSCATTERPF0QPDVSCATTERPF1QPD

_mm512_prefetch_i64scatter_ps_mm512_mask_prefetch_i64scatter_ps

64 ビットの整数インデックスを使用して、倍精度 (64 ビット) 浮動小数点要素のプリフェッチを分散 (Scatter) します。

VSCATTERPF0QPSVSCATTERPF1QPS


変数 定義
vindex

インデックスのベクトル

base_addr

メモリーのベースアドレスへのポインター

scale

ベクトル・インデックスのスケーリングに使用されるコンパイル時のリテラル定数。設定可能な値は、1、2、4、または 8 です。

k

セレクターとして使用されるマスク

a

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

src

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

upconv

_MM_UPCONV_PS_ENUM は次の値を指定できます。

  • _MM_UPCONV_PS_NONE - 変換なし

index

メモリー mv にあるインデクスを含むベクトル

downconv

_MM_DOWNCONV_PS_ENUM は次の値を指定できます。

  • _MM_DOWNCONV_PS_NONE - 変換なし

hint

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

  • _MM_HINT_NONE 0x0 - オフ

インテル® Xeon Phi™ x200 製品ファミリー (開発コード名 Knights Landing) をターゲットとするインテル® 64 アーキテクチャーでは、_mm512_prefetch* および _mm512_mask_prefetch* 組込み関数の hint パラメーターに次のいずれかの値を指定できます。

  • 1 (_MM_HINT_T0) - L1 キャッシュへプリフェッチ

  • 2 (_MM_HINT_T1) - L2 キャッシュへプリフェッチ


_mm512_i32gather_pd

__m512d _mm512_i32gather_pd (__m256i vindex, void const* base_addr, int scale)

32 ビットのインデックスを使用して、メモリーから倍精度 (64 ビット) 浮動小数点要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 32 ビット要素をオフセットとして 64 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。


_mm512_mask_i32gather_pd

__m512d _mm512_mask_i32gather_pd (__m512d src, __mmask8 k, __m256i vindex, void const* base_addr, int scale)

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


_mm512_i32gather_ps

__m512 _mm512_i32gather_ps (__m512i vindex, void const* base_addr, int scale)

32 ビットのインデックスを使用して、メモリーから単精度 (32 ビット) 浮動小数点要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 32 ビット要素をオフセットとして 32 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。


_mm512_mask_i32gather_ps

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

32 ビットのインデックスを使用して、メモリーから単精度 (32 ビット) 浮動小数点要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 32 ビット要素をオフセットとして 32 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。集約した要素は、マスク k を使用して src とマージされます。マスクの対応するビットが設定されていない場合は src から要素がコピーされます。


_mm512_i32extgather_ps

__m512 _mm512_i32extgather_ps (__m512i index, void const * mv, _MM_UPCONV_PS_ENUM upconv, int scale, int hint)

scale でスケーリングされたパックド 32 ビット整数インデックス index を使用して、upconv で 開始位置 mv から 16 のメモリー位置を単精度 (32 ビット) 浮動小数点要素に順方向変換して dst に格納します。


_mm512_mask_i32extgather_ps

__m512 _mm512_mask_i32extgather_ps (__m512 src, __mmask16 k, __m512i index, void const * mv, _MM_UPCONV_PS_ENUM upconv, int scale, int hint)

scale でスケーリングされたパックド 32 ビット整数インデックス index を使用して、upconv で開始位置 mv から 16 の単精度のメモリー位置を単精度 (32 ビット) 浮動小数点要素に順方向変換し、マスク k を使用して src とマージします。マスクの対応するビットが設定されていない場合は src から要素がコピーされます。


_mm512_i64gather_pd

__m512d _mm512_i64gather_pd (__m512i vindex, void const* base_addr, int scale)

64 ビットのインデックスを使用して、メモリーから倍精度 (64 ビット) 浮動小数点要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 64 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。


_mm512_mask_i64gather_pd

__m512d _mm512_mask_i64gather_pd (__m512d src, __mmask8 k, __m512i vindex, void const* base_addr, int scale)

64 ビットのインデックスを使用して、メモリーから倍精度 (64 ビット) 浮動小数点要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 64 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。集約した要素は、マスク k を使用して src とマージされます。マスクの対応するビットが設定されていない場合は src から要素がコピーされます。


_mm512_i64gather_ps

__m256 _mm512_i64gather_ps (__m512i vindex, void const* base_addr, int scale)

64 ビットのインデックスを使用して、メモリーから単精度 (32 ビット) 浮動小数点要素を集約 (Gather) します。開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 32 ビット要素をロードします (各インデックスは scale の係数でスケーリングされます)。


_mm512_mask_i64gather_ps

__m256 _mm512_mask_i64gather_ps (__m256 src, __mmask8 k, __m512i vindex, void const* base_addr, int scale)

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


_mm512_prefetch_i32gather_pd

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

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


_mm512_mask_prefetch_i32gather_pd

void _mm512_mask_prefetch_i32gather_pd (__m256i vindex, __mmask8 mask, void const* base_addr, int scale, int hint)

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


_mm512_prefetch_i32gather_ps

void _mm512_prefetch_i32gather_ps (__m512i index, void const* mv, int scale, int hint)

パックド 32 ビット整数インデックス index を使用して、開始位置 mv から 16 の単精度 (32 ビット) 浮動小数点要素をプリフェッチします (各インデックスは、scale の係数でスケーリングされます)。


_mm512_mask_prefetch_i32gather_ps

void _mm512_mask_prefetch_i32gather_ps (__m512i vindex, __mmask16 mask, void const* base_addr, int scale, int hint)

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


_mm512_prefetch_i64gather_pd

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

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


_mm512_mask_prefetch_i64gather_pd

void _mm512_mask_prefetch_i64gather_pd (__m512i vindex, __mmask8 mask, void const* base_addr, int scale, int hint)

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


_mm512_prefetch_i64gather_ps

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

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


_mm512_mask_prefetch_i64gather_ps

void _mm512_mask_prefetch_i64gather_ps (__m512i vindex, __mmask8 mask, void const* base_addr, int scale, int hint)

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


_mm512_i32scatter_pd

void _mm512_i32scatter_pd (void* base_addr, __m256i vindex, __m512d a, int scale)

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


_mm512_mask_i32scatter_pd

void _mm512_mask_i32scatter_pd (void* base_addr, __mmask8 k, __m256i vindex, __m512d a, int scale)

32 ビットのインデックスを使用して、a の倍精度 (64 ビット) 浮動小数点要素をメモリーに分散 (Scatter) します。開始アドレス base_addr に、vindex の各 32 ビット要素をオフセットとして、マスク k に応じて 64 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます)。要素は、マスクの対応するビットが設定されている場合のみキャッシュに書き込まれます。


_mm512_i32scatter_ps

void _mm512_i32scatter_ps (void* base_addr, __m512i vindex, __m512 a, int scale)

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


_mm512_mask_i32scatter_ps

void _mm512_mask_i32scatter_ps (void* base_addr, __mmask16 k, __m512i vindex, __m512 a, int scale)

32 ビットのインデックスを使用して、a の単精度 (32 ビット) 浮動小数点要素をメモリーに分散 (Scatter) します。開始アドレス base_addr に、vindex の各 32 ビット要素をオフセットとして、マスク k に応じて 32 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます)。要素は、マスクの対応するビットが設定されている場合のみキャッシュに書き込まれます。


_mm512_i32extscatter_ps

void _mm512_i32extscatter_ps (void * mv, __m512i index, __m512 v1, _MM_DOWNCONV_PS_ENUM downconv, int scale, int hint)

downconv で 16 のパックド単精度 (32 ビット) 浮動小数点要素 v1 を逆方向変換して、scale でスケーリングされたパックド 32 ビット整数インデックス index を使用して、開始位置 mv に格納します。


_mm512_mask_i32extscatter_ps

void _mm512_mask_i32extscatter_ps (void * mv, __mmask16 k, __m512i index, __m512 v1, _MM_DOWNCONV_PS_ENUM downconv, int scale, int hint)

downconv で 16 のパックド単精度 (32 ビット) 浮動小数点要素 v1 を逆方向変換して、scale でスケーリングされたパックド 32 ビット整数インデックス index を使用して、開始位置 mv にマスク k に応じて格納します。要素は、マスクの対応するビットが設定されている場合のみキャッシュに書き込まれます。


_mm512_i64scatter_pd

void _mm512_i64scatter_pd (void* base_addr, __m512i vindex, __m512d a, int scale)

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


_mm512_mask_i64scatter_pd

void _mm512_mask_i64scatter_pd (void* base_addr, __mmask8 k, __m512i vindex, __m512d a, int scale)

64 ビットのインデックスを使用して、a の倍精度 (64 ビット) 浮動小数点要素をメモリーに分散 (Scatter) します。開始アドレス base_addr に、vindex の各 64 ビット要素をオフセットとして、マスク k に応じて 64 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます)。要素は、マスクの対応するビットが設定されている場合のみキャッシュに書き込まれます。


_mm512_i64scatter_ps

void _mm512_i64scatter_ps (void* base_addr, __m512i vindex, __m256 a, int scale)

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


_mm512_mask_i64scatter_ps

void _mm512_mask_i64scatter_ps (void* base_addr, __mmask8 k, __m512i vindex, __m256 a, int scale)

64 ビットのインデックスを使用して、a の単精度 (32 ビット) 浮動小数点要素をメモリーに分散 (Scatter) します。開始アドレス base_addr に、vindex の各 64 ビット要素をオフセットとして、マスク k に応じて 32 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます)。要素は、マスクの対応するビットが設定されている場合のみキャッシュに書き込まれます。


_mm512_prefetch_i32scatter_pd

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

32 ビットのインデックスを使用して書き込むため、メモリーから倍精度 (64 ビット) 浮動小数点要素をプリフェッチします。開始アドレス 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 ビットのインデックスを使用して書き込むため、メモリーから倍精度 (64 ビット) 浮動小数点要素をプリフェッチします。開始アドレス base_addr から、vindex の各 32 ビット要素をオフセットとして 64 ビット要素をマスク k に応じてキャッシュに書き込みます (各インデックスは scale の係数でスケーリングされます)。要素は、マスクの対応するビットが設定されている場合のみキャッシュに書き込まれます。


_mm512_prefetch_i32scatter_ps

void _mm512_prefetch_i32scatter_ps (void* mv, __m512i index, int scale, int hint)

scale でスケーリングされたパックド 32 ビット整数インデックス index を使用して、開始位置 mv から 16 の単精度 (32 ビット) 浮動小数点要素をプリフェッチします。


_mm512_mask_prefetch_i32scatter_ps

void _mm512_mask_prefetch_i32scatter_ps (void* mv, __mmask16 k, __m512i index, int scale, int hint)

scale でスケーリングされたパックド 32 ビット整数インデックス index を使用して、開始位置 mv から 16 の単精度 (32 ビット) 浮動小数点要素をプリフェッチします。要素は、マスク k の対応するビットが設定されている場合のみキャッシュに書き込まれます。


_mm512_prefetch_i64scatter_pd

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

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


_mm512_mask_prefetch_i64scatter_pd

void _mm512_mask_prefetch_i64scatter_pd (void* base_addr, __mmask8 mask, __m512i vindex, int scale, int hint)

64 ビットのインデックスを使用してメモリーに書き込むため、倍精度 (64 ビット) 浮動小数点要素をプリフェッチします。開始アドレス base_addr から、vindex の各 64 ビット要素をオフセットとして 64 ビット要素をマスク k に応じてキャッシュに書き込みます (各インデックスは scale の係数でスケーリングされます)。要素は、マスクの対応するビットが設定されている場合のみキャッシュに書き込まれます。


_mm512_prefetch_i64scatter_ps

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

64 ビットのインデックスを使用してメモリーに書き込むため、単精度 (32 ビット) 浮動小数点要素をプリフェッチします。開始アドレス base_addr に、vindex の各 64 ビット要素をオフセットとして 32 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます)。


_mm512_mask_prefetch_i64scatter_ps

void _mm512_mask_prefetch_i64scatter_ps (void* base_addr, __mmask8 mask, __m512i vindex, int scale, int hint)

64 ビットのインデックスを使用してメモリーに書き込むため、単精度 (32 ビット) 浮動小数点要素をプリフェッチします。マスク k に応じて、開始アドレス base_addr に、vindex の各 64 ビット要素をオフセットとして 32 ビット要素をストアします (各インデックスは scale の係数でスケーリングされます)。要素は、マスクの対応するビットが設定されている場合のみキャッシュに書き込まれます。