系统优化之"大循环在内,小循环主外"为什么会效率高

    下面引自http://www.cnblogs.com/Sunwayking/articles/1803624.html。

    这个问题的主要原因是CPU内部的指令执行机制。现在,基本上CPU内部都有分支指令预测,就是当执行(现在大多将这一阶段提前到预取指令时执行)到转移指令时,都会直接从分支目标缓存(BTB)中取出目标指令的地址,然后将要执行的指令提前预取到CPU的指令预取指令队列中。这样,显然大大提高了效率。举个例子,一个10次的一层循环在执行时,除了在第一次和最后一次会预测错误外,其他8次都会预取成功,避免了执行转移指令时重新取出新指令造成的时间浪费。

    所以,当有两层循环,外层循环数为A,内层为B,A远大于B,那么最终造成的预测错误数为A*2+2,而如果外层数为B,内层数为A,预测错误数为B*2+2,显然后者要节省更多时间,而且这个时间是很可观的。A比B越大,这个时间差越明显

    另外,还有一篇博客是做的Demo:http://blog.csdn.net/xiemk2005/article/details/6267872

    关于这个发表一下自己的感觉

    有时候事情不是我们想的那么简单,如果不是碰到了这个问题,我还天真的认为谁在里谁在外对时间是没有影响的呢,因为他们的时间阶都是O(mn),这也让我深深的感觉到纸上得来终觉浅,绝知此事要躬行。

    做工程和研究算法是不一样的。

    


你可能感兴趣的:(系统优化之"大循环在内,小循环主外"为什么会效率高)