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

キャッシュ制御組込み関数

インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) の組込み関数のプロトタイプは、ヘッダーファイル emmintrin.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

_mm_stream_pd

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

_mm256_stream_pd

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

_mm_stream_si128

void _mm_stream_si128(__m128i *p, __m128i a);

a のデータを、キャッシュを介さずに、アドレス p にストアします。アドレス p を含むキャッシュラインがすでにキャッシュ内にある場合、キャッシュは更新されます。アドレス p は、16 バイト (128 ビット版) にアライメントが合っていなければなりません。

*p

a

_mm256_stream_si256

void _mm256_stream_si256(__m256i *p, __m256i a);

a のデータを、キャッシュを介さずに、アドレス p にストアします。アドレス p を含むキャッシュラインがすでにキャッシュ内にある場合、キャッシュは更新されます。アドレス p は、32 バイト (VEX.256 エンコード版) にアライメントが合っていなければなりません。

*p

a

_mm_stream_si32

void _mm_stream_si32(int *p, int a);

a の 32 ビットの整数型データを、キャッシュを介さずに、アドレス p にストアします。アドレス p を含むキャッシュラインがすでにキャッシュ内にある場合、キャッシュは更新されます。

*p

a

_mm_stream_si64

void _mm_stream_si64(__int64 *p, __int64 a);

a の 64 ビットの整数型データを、キャッシュを介さずに、アドレス p にストアします。アドレス p を含むキャッシュラインがすでにキャッシュ内にある場合、キャッシュは更新されます。

*p

a

_mm_clflush

void _mm_clflush(void const*p);

コヒーレンシー・ドメイン内のすべてのキャッシュから、p を含むキャッシュラインをフラッシュし、無効化します。

*p

a

_mm_clflushopt

void _mm_clflushopt(void const *p);

コヒーレンシー・ドメイン内のすべてのキャッシュから、p を含むキャッシュラインをフラッシュし、無効化します。この _mm_clflush の最適化されたバージョンは、CPUID 機能フラグ CLFLUSHOPT で示されている場合に利用できます。

*p

a

_mm_lfence

void _mm_lfence(void);

プログラムの順序でロードフェンス命令に先行するすべてのロード命令が、フェンスに続くロード命令より前に、グローバルにアクセス可能になるのを保証します。

_mm_mfence

void _mm_mfence(void);

プログラムの順序でメモリーフェンス命令に先行するすべてのメモリーアクセス命令が、フェンスに続くメモリーアクセス命令より前に、グローバルにアクセス可能になるのを保証します。