动态转移预测

本文深入探讨了动态转移预测技术在现代处理器设计中的应用,详细介绍了包括Smith预测器、两级预测器、GAg预测器、GShare、Bi-Mode、Agree、YAGS等在内的多种预测器工作原理,以及分支过滤、选择性分支反转等优化策略。动态转移预测通过利用运行时信息,有效提高了分支指令预测的准确率,减少处理器性能损失。
摘要由CSDN通过智能技术生成

现代处理器设计——动态转移预测

1. 动态转移预测技术介绍
  • 1997年,Calder在论文中表明静态转移预测技术对于分支指令的准确率能够达到70%-80%。但是如果剖视得到的信息不能够代表出运行时的行为特点,那么准确率将会更低。动态转移预测则能够利用运行时信息对不同的分支模式进行预测。
  • 静态技术无法应对某些分支,但是他们仍旧是非常可预测的
    • 一条分支在程序的前一半时间内发生跳转,而剩余的时间内不跳转。(静态预测只能够的达到50%的准确率)
    • 一条使用了程序输入的分支,在输入确定后,分支的结果也是确定的(例如是判断数组长度)。但是在静态预测中,无法确定输入数据,因此也无法判断出不同输入的情况下如何跳转
  • 动态转移预测需要硬件资源的支持,对于一些资源紧缺的用于嵌入式系统的处理器中可能不太合适,但是对于一些性能要求较高的处理器,则这些硬件资源将更值得考虑使用动态转移预测
  • 动态技术不需要在编译时剖视分析所有程序,也不需要重新编译程序就可以减少转移指令的损失
2. 大部分转移预测技术背后的思想:处理器每次发现分支指令的执行结果后,都会记录某种形式的上下文,以便在下次遇到相同的上下文时,对该分支做出相同的预测。
3. Smith预测器(1981年):
  • 包括一个2^m个计数器的表,计数器的位数为k位

  • 使用转移指令地址的低m位索引,使用计数器的最高位给出预测结果

  • 主要思想:记录每条分支在上一次执行时是否发生了跳转。

  • k=1时,意味着仅记录该分支的上次执行结果,本次执行预测使用一样的结果

  • 分支的异常决定:循环的分支指令大多数情况发生跳转,除了退出情况。退出情况就是一次异常的决定。

    • 当k=1时,该异常决定将会导致下一次的预测结果发生变化,很可能导致新的预测错误
    • 当k>1时,计数器中记录的该分支的最近几次的执行结果,因此计数器不会因为一次异常的决定而导致出现重大的变化。相对于1位的情况,额外的位给预测器的状态增加了一下滞后性,Smith称为惯性。
  • 从两位增加到更多位带来的性能提升和硬件开销比不是很划算

4. 在GAg的两级预测器设计中,PC和BHR的部分内容会组合在一起索引PHT预测表,和gselect策略一样。这种设计中,存在着一种权衡,即考虑在固定的索引位数情况下,PC和BHR占据位数的不同。使用更多的PC内容能够减少冲突问题,而使用更多的BHR内容能够预测更复杂的分支历史模式

在这里插入图片描述

5. 使用全局分支历史的原因:一条分支指令的行为应该和之前其它不同的分支之间有相关.(branch B对于Branch C而言就是不相关分支,会增加预测器的训练时间来忽略BHR中不相关的历史位)

在这里插入图片描述

6. 局部历史预测器:通过单独跟踪每个分支的行为,预测器能够检测到特定分支的局部模式。例如一个具有较短循环次数的闭环(loop-closing)分支,并且跳转模式位111011101110,那么局部历史预测器能够很快的学习到该分支的模式,并给出正确的预测。(对于这种模式固定的分支来说,PHT的资源浪费很大)

在这里插入图片描述

7. Per-set branch history, per-set branch history table (SBHT):使用任意的哈希函数将分支指令划分到不同的集合,每个集合内的分支指令共享同一个BHR和PHT
8. Gshare:使用亦或的方式组合PC和分支历史信息,以包括更多的信息,因为两者的分布并不均匀,这种设计就称为 index sharing.

在这里插入图片描述

9. 发生转移预测错误的原因
  • 根本无法预测的分支:
    • 第一次遇到
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值