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

_mm512_loadunpacklo_epi32/_mm512_mask_loadunpacklo_epi32

アライメントされていないダブルワード・ストリームの 64 バイトでアライメントされた下位の部分をロードし、マスクがセットされている要素をアンパックして、int32 ベクトルにストアします。対応する命令は VLOADUNPACKLD です。 この組込み関数は、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーにのみ適用されます。

構文

マスクなし

extern __m512i __cdecl _mm512_loadunpacklo_epi32(__m512i v1_old, void const* mt);

マスク付き

extern __m512i __cdecl _mm512_mask_loadunpacklo_epi32(__m512i v1_old, __mmask16 k1, void const* mt);

引数

v1_old

デスティネーション・ベクトルの初期値を含むソースベクトル

k1

書き込みマスク

mt

ロード元のメモリーアドレス

説明

要素がアライメントされたアドレス mt で始まる、ダブルワード・ストリームの 64 バイトでアライメントされた下位の部分がロード、拡張され、書き込みマスクがセットされている要素がダブルワードの結果ベクトルに格納されます。ダブルワード・ベクトルの初期値は v1_old ベクトルからコピーされます。 各ダブルワードは、結果ベクトルの対応するダブルワードにのみマップされ、結果ベクトルの書き込みマスクがセットされている要素はスキップされるため、書き込みマスクでセットされているビットの数がダブルワード・ストリームの長さになります。

この関数は、mt 以降の 64 バイトでアライメントされた最初のアドレスまたはその後にある (つまり、現在の実装では、メモリーストリームの下位のキャッシュラインにある) ストリームのダブルワードを転送します (存在する場合)。 ストリームのダブルワードにマップしない結果ベクトルの要素は変更されません (v1_old から取得されます)。 mt よりも前にある 64 バイトでアライメントされた最初のアドレス、またはその後のストリーム部分をロードするには/_mm512_loadunpackhi_epi32 関数を使用します。

_mm512_loadunpackhi_epi32 とともに、この関数はキューにパックされたデータを再拡張するのに役立ちます。 また、_mm512_loadunpackhi_epi32 とともに、アライメントされていないベクトルのロードが可能です (つまり、ベクトルのロードは、要素単位でのみアライメントされ、ベクトル単位ではアライメントされません)。 アライメントされていないベクトルのロードは、一般に次の順で実行されます。

v1 = _mm512_loadunpacklo_epi32(v1, mt);
v1 = _mm512_loadunpackhi_epi32(v1, mt+64);

戻り値

ロード操作の結果。