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

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

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


組込み関数名

演算

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

_mm512_i32gather_epi32_mm512_mask_i32gather_epi32

32 ビットのインデックスを使用して、メモリーから int32 を集約 (Gather) します。

VPGATHERDD

_mm512_i32gather_epi64_mm512_mask_i32gather_epi64

32 ビットのインデックスを使用して、メモリーから int64 を集約 (Gather) します。

VPGATHERDQ

_mm512_i64gather_epi32_mm512_mask_i64gather_epi32

64 ビットのインデックスを使用して、メモリーから int32 を集約 (Gather) します。

VPGATHERQD

_mm512_i64gather_epi64_mm512_mask_i64gather_epi64

64 ビットのインデックスを使用して、メモリーから int64 を集約 (Gather) します。

VPGATHERQQ

_mm512_i32scatter_epi32_mm512_mask_i32scatter_epi32

32 ビットのインデックスを使用して、int32 をメモリーに分散 (Scatter) します。

VPSCATTERDD

_mm512_i32scatter_epi64_mm512_mask_i32scatter_epi64

32 ビットのインデックスを使用して、int64 をメモリーに分散 (Scatter) します。

VPSCATTERDQ

_mm512_i64scatter_epi32_mm512_mask_i64scatter_epi32

64 ビットのインデックスを使用して、int32 をメモリーに分散 (Scatter) します。

VPSCATTERQD

_mm512_i64scatter_epi64_mm512_mask_i64scatter_epi64

64 ビットのインデックスを使用して、int64 をメモリーに分散 (Scatter) します。

VPSCATTERQQ


変数 定義
k

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

a

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

src

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

downconv

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

  • _MM_DOWNCONV_EPI32_NONE - 変換なし
  • _MM_DOWNCONV_EPI32_UINT8 - uint32 => uint8
  • _MM_DOWNCONV_EPI32_SINT8 - sint32 => sint8
  • _MM_DOWNCONV_EPI32_UINT16 - uint32 => uint16
  • _MM_DOWNCONV_EPI32_SINT16 - sint32 => sint16

downconv

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

  • _MM_DOWNCONV_EPI64_NONE - 変換なし

upconv

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

  • _MM_UPCONV_EPI32_NONE - 変換なし
  • _MM_UPCONV_EPI32_FLOAT16 - float16 => float32
  • _MM_UPCONV_EPI32_UINT8 - uint8 => uint32
  • _MM_UPCONV_EPI32_SINT8 - sint8 => sint32
  • _MM_UPCONV_EPI32_UINT16 - uint16 => uint32
  • _MM_UPCONV_EPI32_SINT16 - sint16 => sint32

upconv

_MM_UPCONV_EPI64_ENUM には、次の値を指定できます。

  • _MM_UPCONV_EPI64_NONE - 変換なし

scale

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

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

hint

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

_MM_HINT_NONE 0x0 - オフ


_mm512_i32gather_epi32

extern __m512i __cdecl _mm512_i32gather_epi32(__m512i vindex, void const* base_addr, _MM_UPCONV_EPI32_ENUM upconv, int scale, int hint);

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



_mm512_mask_i32gather_epi32

extern __m512i __cdecl _mm512_mask_i32gather_epi32(__m512i src, __mmask16 k, __m512i vindex, void const* base_addr, _MM_UPCONV_EPI32_ENUM upconv, int scale, int hint);

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



_mm512_i32gather_epi64

extern __m512i __cdecl _mm512_i32gather_epi64(__m512i vindex, void const* base_addr, _MM_UPCONV_EPI64_ENUM upconv, int scale, int hint);

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


_mm512_mask_i32gather_epi64

extern __m512i __cdecl _mm512_mask_i32gather_epi64(__m512i vindex, __mmask16k, void const* base_addr, _MM_UPCONV_EPI64_ENUM upconv, int scale, int hint);

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



_mm512_i64gather_epi32

extern __m512i __cdecl _mm512_i64gather_epi32(__m512i vindex, void const* base_addr, _MM_UPCONV_EPI32_ENUM upconv, int scale, int hint);

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


_mm512_mask_i64gather_epi32

extern __m512i __cdecl _mm512_mask_i64gather_epi32(__m512i src, __mmask8 k, __m512i vindex, void const* base_addr, _MM_UPCONV_EPI32_ENUM upconv, int scale, int hint);

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



_mm512_i64gather_epi64

extern __m512i __cdecl _mm512_i64gather_epi64(__m512i vindex, void const* base_addr, _MM_UPCONV_EPI64_ENUM upconv, int scale, int hint);

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


_mm512_mask_i64gather_epi64

extern __m512i __cdecl _mm512_mask_i64gather_epi64(__m512i src, __mmask8 k, __m512i vindex, void const* base_addr, _MM_UPCONV_EPI64_ENUM upconv, int scale, int hint);

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



_mm512_i32scatter_epi32

extern void __cdecl _mm512_i32scatter_epi32(void* base_addr, __m512i a, __m512i vindex, _MM_DOWNCONV_EPI32_ENUM downconv, int scale, int hint);

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



_mm512_mask_i32scatter_epi32

extern void __cdecl _mm512_mask_i32scatter_epi32(void* base_addr, __mmask16 k, __m512i a, __m512i vindex, _MM_DOWNCONV_EPI32_ENUM downconv, int scale, int hint);

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



_mm512_i32scatter_epi64

extern void __cdecl _mm512_i32scatter_epi64(void* base_addr, __m512i a, __m512i vindex, _MM_DOWNCONV_EPI64_ENUM downconv, int scale, int hint);

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



_mm512_mask_i32scatter_epi64

extern void __cdecl _mm512_mask_i32scatter_epi64(void* base_addr, __mmask8 k, __m512i a, __m512i vindex, _MM_DOWNCONV_EPI64_ENUM downconv, int scale, int hint);

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



_mm512_i64scatter_epi32

extern void __cdecl _mm512_i64scatter_epi32(void* base_addr, __m512i a, __m512i vindex, _MM_DOWNCONV_EPI32_ENUM downconv, int scale, int hint);

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



_mm512_mask_i64scatter_epi32

extern void __cdecl _mm512_mask_i64scatter_epi32(void* base_addr, __mmask8 k, __m512i a, __m512i vindex, _MM_DOWNCONV_EPI32_ENUM downconv, int scale, int hint);

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



_mm512_i64scatter_epi64

extern void __cdecl _mm512_i64scatter_epi64(void* base_addr, __m512i a, __m512i vindex, _MM_DOWNCONV_EPI64_ENUM downconv, int scale, int hint);

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


_mm512_mask_i64scatter_epi64

extern void __cdecl _mm512_mask_i64scatter_epi64(void* base_addr, __mmask8 k, __m512i a, __m512i vindex, _MM_DOWNCONV_EPI64_ENUM downconv, int scale, int hint);

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