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

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

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

#include <immintrin.h>


組込み関数名

演算

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

_mm512_i32gather_epi32_mm512_mask_i32gather_epi32

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

VPGATHERDD

_mm512_i32gather_epi64_mm512_mask_i32gather_epi64

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

VPGATHERDQ

_mm512_i64gather_epi32_mm512_mask_i64gather_epi32

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

VPGATHERQD

_mm512_i64gather_epi64_mm512_mask_i64gather_epi64

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

VPGATHERQQ

_mm512_i32scatter_epi32_mm512_mask_i32scatter_epi32

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

VPSCATTERDD

_mm512_i32scatter_epi64_mm512_mask_i32scatter_epi64

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

VPSCATTERDQ

_mm512_i64scatter_epi32_mm512_mask_i64scatter_epi32

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

VPSCATTERQD

_mm512_i64scatter_epi64_mm512_mask_i64scatter_epi64

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

VPSCATTERQQ


変数 定義
vindex

インデックスのベクトル

base_addr

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

scale

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

k

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

a

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

src

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


_mm512_i32gather_epi32

__m512i _mm512_i32gather_epi32(__m512i vindex, void const* base_addr, int scale)

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


_mm512_mask_i32gather_epi32

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

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


_mm512_i32gather_epi64

__m512i _mm512_mask_i32gather_epi64 (__m512i src, __mmask8 k, __m256i vindex, void const* base_addr, int scale)

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


_mm512_mask_i32gather_epi64

__m512i _mm512_mask_i32gather_epi64 (__m512i src, __mmask8 k, __m256i vindex, void const* base_addr, int scale)

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


_mm512_i64gather_epi32

__m256i _mm512_i64gather_epi32 (__m512i vindex, void const* base_addr, int scale)

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


_mm512_mask_i64gather_epi32

__m256i _mm512_mask_i64gather_epi32 (__m256i src, __mmask8 k, __m512i vindex, void const* base_addr, int scale)

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


_mm512_i64gather_epi64

__m512i _mm512_i64gather_epi64 (__m512i vindex, void const* base_addr, int scale)

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


_mm512_mask_i64gather_epi64

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

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


_mm512_i32scatter_epi32

void mm512_i32scatter_epi32(void* base_addr, __m512i vindex, __m512i a, int scale)

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


_mm512_mask_i32scatter_epi32

void _mm512_mask_i32scatter_epi32(void* base_addr, __mmask16 k, __m512i vindex, __m512i a, int scale

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


_mm512_i32scatter_epi64

void _mm512_i32scatter_epi64 (void* base_addr, __m256i vindex, __m512i a, int scale)

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


_mm512_mask_i32scatter_epi64

void _mm512_mask_i32scatter_epi64 (void* base_addr, __mmask8 k, __m256i vindex, __m512i a, int scale)

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


_mm512_i64scatter_epi32

void _mm512_i64scatter_epi32 (void* base_addr, __m512i vindex, __m256i a, int scale)

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


_mm512_mask_i64scatter_epi32

void _mm512_mask_i64scatter_epi32 (void* base_addr, __mmask8 k, __m512i vindex, __m256i a, int scale)

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


_mm512_i64scatter_epi64

void _mm512_i64scatter_epi64 (void* base_addr, __m512i vindex, __m512i a, int scale)

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


_mm512_mask_i64scatter_epi64

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

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