体系结构14_控制相关的动态解决技术

分支预测缓冲、分支目标缓冲两种解决方法

动态分支预测的两个理由

1.n流出的处理器加速上限为n倍

2.Amdahl定律提示:在较低CPI机器上,控制相关导致的空转对机器性能影响大

前面解决控制相关的静态策略

需要编译器将一条或多条指令移动到流水线产生的分支延迟槽中

关于分支预测策略的两部分工作

1.预测的分支是否成功

2.执行分支目标指令

分支预测的效率

1.预测的准确率

2.分支的开销

    预测正确的开销

    预测错误的开销

分支预测缓冲(BPB):原理

1.最简单的分支预测策略

2.分支预测缓冲是一个小的存储器阵列

     a.每个单元只有一位,记录最近一次分支是否成功的信息

     b.预测位为1则预测分支成功,并从目标位置开始取指令

     c.单元由分支指令地址的低位索引进行寻址

     d.BPB的预测位会被具有相同低位地址的分支设置

BPB也被称为BHP(branch history buffer分支历史缓冲)

3.这种单位预测策略有大约80%左右的准确率

     a.当分支不成功时,单位预测会失败两次

     b. 2位预测策略能够改善这种情况

2位BPB工作原理

1.在2位预测策略中,一个预测必须错误两次才会改变。

2.对于一个4096条记录的BPB,利用2位预测策略,用SPEC89测试,命中率为82%到99%

   准确率最高的测试程序一般包含大量循环

   线性代码一般准确率最差

n位BPB

1.1位或2位BPB是n位BPB的特殊情况

2.n位策略使用计数器,表示0~2的n次方的值

3.与2位策略类似,对于n位BPB,每次分支成功,计数器+1,反之则-1

4.如果计数器值大于其最大值的一半,则做成功预测,反之则做失败预测

BPB实现

1.BPB的实现方案

  实现一个小而特殊的“cache”,利用指令地址进行索引,在IF流水段访问

  或者,为指令cache中每一块增加附加位,与指令一起取出

2.若一个指令在ID段被译码为分支指令,且对应的BPB标志位预测其成功,则

  一旦PC已知,立刻从分支目标位置开始取指

  或者,继续顺序取指

分支目标缓冲(BTB)

1.另一个动态分支预测方法:分支目标缓冲

 Branch Target Buffer,BTB

 为了减少或消除流水线的分支开销,我们需要在IF段结束前知道从哪个地址开始取下一条指令

 换句话说,我们在IF段就需要知道这条未译码的指令是否为分支指令,并且如果他是分支指令,要尽快知道NPC值应当为多少

BTB实现

1.分支目标缓存BTB每个单元应该包括

 分支指令的地址、分支目标的地址、分支预测标识

2.取指阶段,所有指令地址都与BTB中保存的分支指令的地址做比较,一旦相同,就认为本指令是分支指令,并且分支成功

3.它的目标地址就是保存在缓冲区中的分支目标地址

 取出后直接送入NPC

BTB Vs BPB

1.分支预测技术受限于预测精度,以及预测失效后产生的开销

2.根据不同程序特点以及缓冲区的大小,典型的BTB可以实现80%到95%的预测精度

3.降低失效开销技术:在一个时钟周期内同时取出不同分支路径的指令

 会引入其它开销,比如存储系统的端口加倍

 降低失效开销的唯一办法,比如 AS/400 PowerPC处理器(多分支预测)

分支预测局限性

1.预测准确性:80%-90%

2.预测性能依赖于

 程序类型

 缓冲区大小

3.预测失效开销的优化

 预取不同分支路径指令

  存储端口数目加倍,交叉存取缓冲

 在目标缓冲中缓冲多个路径的指令

猜你喜欢

转载自blog.csdn.net/weixin_42596333/article/details/104232028