处理器中使用的几种branch prediction技术

构成程序逻辑的一个必不可少的部分就是if-else,在处理器中就体现为跳转指令。 在执行指令的时候,处理器流水线中的第一个步骤通常就是IF (Instruction Fetch)。针对非跳转指令, IF比较简单,可以直接获取下一条指令。而条件跳转指令由于其特殊性,无法直接获取其下一条指令。如果等到处理器确认出下一条指令的时候,则流水线的功能将会大打折扣,造成性能上的损失。因此,一种跳转预测(branch prediction, 也有翻译为分支预测的)的技术就出现了。

目前知道的处理器中常用的分支预测技术有三种:
1。 通过branch history table。 针对每条跳转指令,brach history table中都会有一条记录与其对应(准确地说,应该是与指令的地址低位相对应,至于是低多少位,则取决于table的大小)。记录的内容就是一个跳转的状态。目前常用两位来表达这个状态。状态机的模型如下:

这种技术感觉对于某些经常跳转或者偶尔才跳转的指令的预测效果相当好。
这也大概是目前所有的计算机体系结构都会提到的一个图。

2。 Correlating Branch Predictors
在这种策略中,某条指令的跳转不是只由自己来决定的,而是由刚执行过的N条跳转指令的跳转情况来决定的。 这是由于在程序中某条指令跳转与否也与其他的跳转指令相关。所以会利用刚执行完的N条跳转指令来获取跳转信息。 这刚执行完的N条指令的跳转情况组成了一个查询的Key,这个Key值对应的内容就是跳转的状态。状态机同上。
个人感觉这种分支预测技术对于循环的预测效果应该是相当好的,尤其是多重循环,并且每重循环次数又不多的情况。

3。 Tournament Predictors
这种预测技术就是结合以上两种方法,根据跳转指令的低位地址,再加上刚执行完指令的跳转情况来决定下次的跳转情况。它的效果也最好,也是Power5 和 Pentium4使用的技术。

写本文的时候,sunpinyin还没有装好,try了一把web输入法。发现速度还是跟不上啊。。

posted @ 2012-04-05 22:25  dongliqian  阅读(2498)  评论(0编辑  收藏  举报