我正在编写一个程序来解析文件。它由一个主循环组成,该循环逐个字符地解析并处理它们。这是主循环:
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 cache miss) 时__builtin_prefetch
未设置。不过奇怪的是,无论我设置的参数如何,这个值都不会改变__builtin_prefetch
。
对此有何解释?