分支预测

系统 1419 0

昨天看到伯乐在线的一篇文章 《为什么处理有序数组比无序数组快?》 提到了分支预测,然后放狗搜了一下。试着说说我的理解。

百科上解释分支预测是 解决处理分支指令(if-then-else)导致 流水线 失败的数据处理方法,由CPU来判断程序分支的进行方向,能够加快运算 速度

现在的CPU都是流水线型处理指令,比如执行指令顺序是A->B->C,在执行A指令的同时会译码B指令,同时读取C指令。这样可以加快指令执行速度。但是条件判断语句会破环流水线过程,CPU无法确定下一条指令。所以引入分支预测,一般来说有50%的正确率,其实就是瞎蒙。

不过有两种预测方法可以改进预测准确率:1.静态分支预测和动态分支预测。

1.静态分支预测:

简单的方法就是任选,和上面说的一样,准确率50%。更先进的方法是通过统计之前运行的指令结果来跳转指令。

2.动态分支预测:(还没理解)

最简单的动态分支预测策略是分支预测缓冲区(Branch Prediction Buff)或分支历史表(branch history table)。

 

用途:

知道分支预测有什么好处呢?

比如如下代码

  1 if (t1 == 0 && t2 == 0 && t3 == 0 )  

每个条件都单独预测,速度会慢很多。通过以下的代码可以提高分支预测能力

  1 if ((t1 | t2 | t3) == 0 )

更多的例子,需要以后多注意发掘

PS:在x64机器上的GCC 4.6.1 中使用-O3或者-ftree-vectorize参数可以生成条件转移指令。因此是没有区别的,他们都飞快的。

以上

分支预测


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论