インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
アライメントされていないダブルワード・ストリームの 64 バイトでアライメントされた上位の部分をロードし、マスクがセットされている要素をアンパックして、int32 ベクトルにストアします。対応する命令は VLOADUNPACKHD です。 この組込み関数は、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーにのみ適用されます。
マスクなし extern __m512i __cdecl _mm512_loadunpackhi_epi32(__m512i v1_old, void const* mt); |
マスク付き extern __m512i __cdecl _mm512_loadunpackhi_epi32(__m512i v1_old, __mask16 k1, void const* mt); |
v1_old |
デスティネーション・ベクトルの初期値を含むソースベクトル |
k1 |
書き込みマスク |
mt |
ロード元のメモリーアドレス |
要素がアライメントされたアドレス (mt - 64) で始まる、ダブルワード・ストリームの 64 バイトでアライメントされた上位の部分がロード、拡張され、書き込みマスクがセットされている要素がダブルワードの結果ベクトルに格納されます。ダブルワード・ベクトルの初期値は v1_old ベクトルからコピーされます。 各ダブルワードは、結果ベクトルの対応するダブルワードにのみマップされ、結果ベクトルの書き込みマスクがセットされている要素はスキップされるため、書き込みマスクでセットされているビットの数がダブルワード・ストリームの長さになります。
この関数は、(mt - 64) 以降の 64 バイトでアライメントされた最初のアドレスまたはその後にある (つまり、現在の実装では、メモリーストリームの上位のキャッシュラインにある) ストリームのダブルワードを転送します (存在する場合)。 ストリームのダブルワードにマップしない結果ベクトルの要素は変更されません (v1_old から取得されます)。 mt よりも前にある 64 バイトでアライメントされた最初のアドレスの前のストリーム部分をロードするのに _mm512_loadunpacklo_epi32 関数が使用されます。
_mm512_loadunpacklo_epi32 とともに、この関数はキューにパックされたデータを再拡張するのに役立ちます。 また、_mm512_loadunpacklo_epi32 とともに、アライメントされていないベクトルのロードが可能です (つまり、ベクトルのロードは、要素単位でのみアライメントされ、ベクトル単位ではアライメントされません)。 アライメントされていないベクトルのロードは、一般に次の順で実行されます。
v1 = _mm512_loadunpacklo_epi32(v1, mt); v1 = _mm512_loadunpackhi_epi32(v1, mt+64);
ロード操作の結果。