ファイルを解析するプログラムを書いています。これは、文字ごとに解析して処理するメイン ループで構成されます。メインループは次のとおりです。
char c;
char * ptr;
for( size_t i = 0; i < size ; ++i )
{
ptr = ( static_cast<char*>(sentenceMap) + i );
c = *ptr;
__builtin_prefetch( ptr + i + 1 );
// some treatment on ptr and c
}
ご覧のとおりbuiltin_prefetch
、ループの次の繰り返しをキャッシュに入れることを期待して、命令を追加しました。さまざまな値を試してみました : ptr+i+1
, ptr+i+2
,ptr+i+10
しかし、何も変わらないようです。
パフォーマンスを測定するために、valgrind のツール cachegrind を使用します。キャッシュ ミスの数がわかります。行c = *ptr
で、 が設定されていない場合、cachegrind は 632,378 DLmr (L3 キャッシュ ミス) を記録し__builtin_prefetch
ます。ただし、奇妙なのは、設定したパラメーターに関係なく、この値が変化しないこと__builtin_prefetch
です。
それに対する説明はありますか?