我正在编写一款用于解析文件的程序。它由一个主循环组成,逐个字符进行解析并对其进行处理。以下是主循环:
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
}
正如您所见,我添加了一个指令,希望将下一次循环迭代放入缓存中。我尝试使用不同的值:
ptr+i+1
、ptr+i+2
、ptr+i+10
,但似乎没有任何变化。为了衡量性能,我使用valgrind的工具cachegrind,它可以给我一个缓存未命中的数量指标。当没有设置时,在
c=*ptr
这一行,cachegrind记录了632,378个DLmr(L3缓存未命中)。然而奇怪的是,无论我将参数设置为什么,这个值都不会改变。有什么解释吗?