qdi*_*dii 7 c++ optimization performance gcc
我正在编写一个解析文件的程序.它由一个主循环组成,逐个字符地解析并处理它们.这是主循环:
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
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我添加了一条builtin_prefetch
指令,希望在我的循环的下一次迭代中放入缓存.我试着用不同的值:ptr+i+1
,ptr+i+2
,ptr+i+10
但似乎没有任何改变.
为了测量性能,我使用valgrind的工具cachegrind,它给出了缓存未命中数的指示.在线上c = *ptr
,cachegrind在__builtin_prefetch
未设置时记录632,378 DLmr(L3缓存未命中).但奇怪的是,无论我设置的参数如何,这个值都不会改变__builtin_prefetch
.
对此有何解释?