非一時的な書き込みと書き込み結合手法については、次のコードがあります
void setbytes(char *p, int c)
{
__m128i i = _mm_set_epi8(c, c, c, c,
c, c, c, c,
c, c, c, c,
c, c, c, c);
_mm_stream_si128((__m128i *)&p[0], i);
_mm_stream_si128((__m128i *)&p[16], i);
_mm_stream_si128((__m128i *)&p[32], i);
_mm_stream_si128((__m128i *)&p[48], i);
}
ここから撮影
と書かれています
要約すると、このコード シーケンスは、書き込まれる前にキャッシュ ラインを読み取ることを回避するだけでなく、すぐには必要とされない可能性のあるデータでキャッシュを汚染することも回避します。これは、特定の状況で大きなメリットをもたらす可能性があります。
私の質問は次のとおりです。どのキャッシュラインが書き込まれるのを避けていますか? i 変数の内容を格納するキャッシュ ライン、または p ポインターが指すキャッシュ ライン (後で変更される) は?