采取或不采取的分支序列,降低了分支误预测率

时间:2012-10-24 05:31:00

标签: branch mips pipeline prediction branch-prediction

增加分支预测表的大小意味着程序中的两个分支不太可能共享公共预测器。预测单个分支指令的单个预测器通常比服务多个分支指令的相同预测器更准确。 列出一系列分支采取和未采取的动作,以显示2位预测器共享的简单示例(几个不同的分支指令被映射到预测表的相同条目中​​),与情况相比,降低了分支误预测率其中单独的预测变量条目用于每个分支。 (注意:务必显示两个不同分支指令的结果,并明确指出这些结果的顺序以及它们对应的分支)

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

1 个答案:

答案 0 :(得分:5)

“2位预测器”可以指两种情况中的任何一种,但更可能是指另一种情况。

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

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

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

至于它要求的基本问题:他们想要一系列分支指令,当两个分支映射到同一个插槽时,将(通过什么重合)准确地预测 more 分支预测器表比当/每个映射到表中的单独插槽时。稍微详细一点(但希望不会泄露整个难题),从分支模式开始,分支预测器通常是错误的。预测器基本上做的是假设如果分支是最后一次,这表明这次更有可能被采取(相反,如果不是最后一次采取,那么可能不会是这次)。

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


1 从技术上讲,奔腾实际上并没有以这种方式工作,但它是如何记录下来的,并且可能是为了工作;它实际上如何工作的差异似乎是一个错误。