【问题标题】:sequence of branch taken or not-taken that reduces the branch misprediction rate采用或未采用的分支序列,可降低分支误预测率
【发布时间】:2012-10-14 03:45:09
【问题描述】:

增加分支预测表的大小意味着程序中的两个分支不太可能共享一个共同的预测器。预测单个分支指令的单个预测器通常比服务多个分支指令的相同预测器更准确。

列出已采取和未采取的一系列分支操作,以展示一个简单的 2 位预测器共享示例(多个不同的分支指令映射到预测表的同一条目中),该示例可降低分支预测错误率,比较对于每个分支使用单独的预测器条目的情况。 (注意:一定要展示两个不同分支指令的结果,并具体标明这些结果的顺序和对应的分支)

有人可以向我解释这个问题的具体要求吗?另外,“2位预测器共享(几个不同的分支指令映射到预测表的同一条目)”和“每个分支使用单独的预测器条目”是什么意思?我一直在阅读和重读我的笔记,但我无法弄清楚。我试图在网上找到一些分支预测示例,但没有找到。

【问题讨论】:

  • CS 320 有机会吗? :D

标签: mips pipeline cpu-architecture branch-prediction


【解决方案1】:

“2 位预测器”可能指的是两个事物中的任何一个,但更可能是一个而不是另一个。

不太可能的情况是它们意味着一个只有四个条目的分支表,因此使用两位将特定分支与表中的条目相关联。这不太可能,因为 4 条目表非常小,很多 个分支将共享相同的表条目,因此分支预测器不会比静态分支预测更准确(例如,总是向后预测分支,因为它们通常用于形成循环)。

更相似的可能性是使用两位来指示是否可能采用分支。一些包含分支预测的最早的微处理器(例如 Pentium、PowerPC 604)大致以这种方式工作。基本思想是您保留一个两位饱和计数器,并根据其当前状态进行预测。英特尔称这些状态为强不采用、弱不采用、弱采用、强烈采用。这些将被编号为(例如)0、1、2 和 3,因此您可以使用两位计数器来跟踪状态。每次采用分支时,都会增加数字(除非它已经是 3),每次不采用分支时,都会减少它(再次,除非它已经是 0)。如果计数器是 0 或 1,则需要预测分支时,您预测未采用的分支,如果是 2 或 3,您预测它已采用1

用于每个分支的单独预测器条目意味着程序中的每个分支指令在分支预测表中都有自己的条目。另一种方法是从分支指令到表条目的某种映射。例如,如果您有一个包含 220 个条目的表,则可以使用分支指令地址中的 20 位,并将这些位用作表的索引。假设一台具有 32 位寻址和 32 位指令的机器,您将有多达 1024 个分支指令可以映射到表中的任何一个条目 (32-20-2 = 10, 210支持> = 1024)。实际上,您希望只有一小部分指令是分支、一些用于数据的地址空间等,因此可能只有少数分支会映射到表中的一个条目。

就它所要求的基本问题而言:他们想要一个分支指令序列,当两个分支映射到分支预测器表比何时/如果每个都映射到表中的单独插槽。为了稍微详细一点(但希望不会泄露整个谜题),从分支预测器通常会出错的分支模式开始。预测器的基本作用是假设如果分支是最后一次被采用,这表明它更有可能被采用(相反,如果它上次没有被采用,那么这次也可能不会被采用)。

所以,你从一个完全相反的分支模式开始。然后,您想要将第二个分支映射添加到分支预测表中的同一点,该分支将遵循分支模式,该模式将调整分支预测器表中的数据,以便更准确地反映即将到来的 分支而不是前一个分支。


1从技术上讲,Pentium 实际上并不是这样工作的,但它是这样工作的,而且可能是打算工作的;它实际工作方式的差异似乎是一个错误。

【讨论】:

  • 这称为建设性别名(对比破坏性别名,其中多个分支映射到同一预测器条目会增加误预测率)。 2 位预测器增加了一点滞后,减少了破坏性混叠(一个不太常见的反方向偏置分支不太可能翻转预测)并使建设性混叠更有帮助(可以更快地克服滞后)。
猜你喜欢
  • 2020-01-13
  • 1970-01-01
  • 2019-05-22
  • 2015-09-20
  • 2019-08-19
  • 2014-04-25
  • 2014-03-03
  • 2013-10-09
  • 1970-01-01
相关资源
最近更新 更多