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

_mm512_loadunpacklo_pd/_mm512_mask_loadunpacklo_pd

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

構文

マスクなし

extern __m512d __cdecl _mm512_loadunpacklo_pd(__m512d v1_old, __mmask8 k1, void const *mt, _MM_UPCONV_PD_ENUM conv, int hint);

マスク付き

extern __m512d __cdecl _mm512_mask_loadunpacklo_pd(__m512d v1_old, __mmask8 k1, void const *mt, _MM_UPCONV_PD_ENUM conv, int hint);

引数

v1_old

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

k1

書き込みマスク

mt

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

conv

順方向変換の種類。次のいずれかになります。

  • _MM_UPCONV_PD_NONE - 変換なし

hint

プロセッサーにデータが非テンポラルでないことを示すヒント。0 または 1 を使用できます。それぞれの値の意味は次のとおりです。

  • _MM_HINT_NONE = 0
  • _MM_HINT_NT = 1 (ロードは非テンポラル)

説明

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

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

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

v1 = _mm512_loadunpacklo_pd(v1, mt);
v1 = _mm512_loadunpackhi_pd(v1, mt+64);

戻り値

ロード操作の結果。