インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) の組込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。
これらの組込み関数を使用する場合、次のように immintrin.h ファイルをインクルードします。
#include <immintrin.h>
組込み関数名 |
演算 |
対応するインテル® SSE2 命令 |
---|---|---|
_mm_stream_pd |
ストア |
MOVNTPD |
_mm256_stream_pd |
ストア |
VMOVNTPD |
_mm_stream_si128 |
ストア |
MOVNTDQ |
_mm256_stream_si256 |
ストア |
VMOVNTDQ |
_mm_stream_si32 |
ストア |
MOVNTI |
_mm_stream_si64* |
ストア |
MOVNTI |
_mm_clflush |
フラッシュ |
CLFLUSH |
_mm_clflushopt |
フラッシュ |
CLFLUSHOPT |
_mm_lfence |
メモリーアクセスの保証 |
LFENCE |
_mm_mfence |
メモリーアクセスの保証 |
MFENCE |
void _mm_stream_pd(double *p, __m128d a);
a のデータを、キャッシュを介さずに、アドレス p にストアします。アドレス p は、16 バイト (128 ビット版) にアライメントが合っていなければなりません。アドレス p を含むキャッシュラインがすでにキャッシュ内にある場合、キャッシュは更新されます。 p[0] := a0 p[1] := a1
p[0] |
p[1] |
---|---|
a0 |
a1 |
void _mm256_stream_pd(double *p, __m256d a);
a のデータを、キャッシュを介さずに、アドレス p にストアします。アドレス p は、32 バイト (VEX.256 エンコード版) にアライメントが合っていなければなりません。アドレス p を含むキャッシュラインがすでにキャッシュ内にある場合、キャッシュは更新されます。 p[0] := a0 p[1] := a1
p[0] |
p[1] |
---|---|
a0 |
a1 |
void _mm_stream_si128(__m128i *p, __m128i a);
a のデータを、キャッシュを介さずに、アドレス p にストアします。アドレス p を含むキャッシュラインがすでにキャッシュ内にある場合、キャッシュは更新されます。アドレス p は、16 バイト (128 ビット版) にアライメントが合っていなければなりません。
*p |
---|
a |
void _mm256_stream_si256(__m256i *p, __m256i a);
a のデータを、キャッシュを介さずに、アドレス p にストアします。アドレス p を含むキャッシュラインがすでにキャッシュ内にある場合、キャッシュは更新されます。アドレス p は、32 バイト (VEX.256 エンコード版) にアライメントが合っていなければなりません。
*p |
---|
a |
void _mm_stream_si32(int *p, int a);
a の 32 ビットの整数型データを、キャッシュを介さずに、アドレス p にストアします。アドレス p を含むキャッシュラインがすでにキャッシュ内にある場合、キャッシュは更新されます。
*p |
---|
a |
void _mm_stream_si64(__int64 *p, __int64 a);
a の 64 ビットの整数型データを、キャッシュを介さずに、アドレス p にストアします。アドレス p を含むキャッシュラインがすでにキャッシュ内にある場合、キャッシュは更新されます。
*p |
---|
a |
void _mm_clflush(void const*p);
コヒーレンシー・ドメイン内のすべてのキャッシュから、p を含むキャッシュラインをフラッシュし、無効化します。
*p |
---|
a |
void _mm_clflushopt(void const *p);
コヒーレンシー・ドメイン内のすべてのキャッシュから、p を含むキャッシュラインをフラッシュし、無効化します。この _mm_clflush の最適化されたバージョンは、CPUID 機能フラグ CLFLUSHOPT で示されている場合に利用できます。
*p |
---|
a |
void _mm_lfence(void);
プログラムの順序でロードフェンス命令に先行するすべてのロード命令が、フェンスに続くロード命令より前に、グローバルにアクセス可能になるのを保証します。
void _mm_mfence(void);
プログラムの順序でメモリーフェンス命令に先行するすべてのメモリーアクセス命令が、フェンスに続くメモリーアクセス命令より前に、グローバルにアクセス可能になるのを保証します。