【问题标题】:branch prediction分支预测
【发布时间】:2011-02-01 20:48:51
【问题描述】:

考虑单个静态分支的以下实际结果序列。 T 表示已采用分支。 N 表示不采用分支。对于这个问题,假设这是程序中唯一的分支。

T T T N T N T T T N T N T T T N T N

假设使用一位分支历史的两级分支预测器,即一位 BHR。由于程序中只有一个分支,因此如何将 BHR 与分支 PC 连接以索引 BHT 并不重要。假设 BHT 使用一位计数器,并且再次将所有条目初始化为 N。此序列中的哪些分支会被错误预测?使用下表。

现在我不是在问这个问题的答案,而是在这个问题上提供指南和指示。两级分支预测器是什么意思,它是如何工作的? BHR 和 BHT 代表什么?

【问题讨论】:

  • 我在分支预测器上的survey paper 可能是一个有用的指南。它还解释了两级分支预测器的设计和工作。

标签: assembly cpu-architecture branch-prediction


【解决方案1】:

在阅读 Agner Fog 在http://www.agner.org/optimize/#manuals 上关于现代 CPU 微架构的文章后,我才真正得到分支预测,具体来说,第三个:http://www.agner.org/optimize/microarchitecture.pdf

如果您想擅长低级编程,您可能应该阅读所有内容。如果您只想知道分支预测器是如何工作的,只需阅读微架构手册中关于分支预测的章节即可。它使用来自过去处理器的真实分支预测器来解释事物的工作原理,从概念上简单的预测器(例如 P1 中的预测器)开始,逐渐添加更多功能,直到您了解当今处理器中的怪物。

【讨论】:

  • 您文章中的哪个分支类型是上面的问题?
  • 这是一个自适应的两级预测器,具有一位本地分支历史记录,就像在 PMMX 及更高版本中一样。
  • 更新:现代英特尔至少从 Haswell(和 AMD Ryzen 2)开始使用 TAGE / ITTAGE 预测器(TAgged GEometric history length predictor),它使用过去的分支历史作为索引的一部分进入预测器表。 danluu.com/branch-prediction 在底部有一个部分。 TAGE 可以“学习”涉及多个分支的非常长的模式,例如重复使用相同数据的 12 元素冒泡排序的所有分支,或解释器中的间接分支。这是一种不同的策略,而不仅仅是对旧策略的进一步扩展,例如拥有本地/全球历史。
【解决方案2】:
【解决方案3】:

来自维基百科:Branch predictor

两级自适应预测器 记得最后 n 的历史 分支的出现并使用一个 每个的饱和计数器 可能的 2n 个历史模式。

BHR:分支历史寄存器
BHT:分支历史表

在上面链接的文章部分中,对这两个术语进行了简要的解释,没有提及它们的首字母缩略词。

【讨论】:

    猜你喜欢
    • 2014-04-25
    • 2014-03-03
    • 2016-07-01
    • 2015-11-24
    • 2012-07-02
    • 2015-09-20
    • 2012-12-10
    • 2017-03-12
    • 2018-07-06
    相关资源
    最近更新 更多