c – 为什么__builtin_prefetch在这里没有任何影响?

前端之家收集整理的这篇文章主要介绍了c – 为什么__builtin_prefetch在这里没有任何影响?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个解析文件的程序.它由一个主循环组成,逐个字符地解析并处理它们.这是主循环:
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上,当未设置__builtin_prefetch时,cachegrind记录632,378 DLmr(L3缓存未命中).但奇怪的是,无论我设置为__builtin_prefetch的参数如何,此值都不会更改.

对此有何解释?

解决方法

那是因为硬件比您早多年.

猜你在找的C&C++相关文章