1

研究流水线处理器,他们提到预测分支被采用或不被采用,在我们决定是否采用分支之前在“临时”中插入显着指令,但如果我们猜错了,然后“挤压”它们。

我们如何压扁它们?我们只是不回信吗?在确定它是一个分支和确定是否被采用之间,我们可以插入多少条指令。我猜只有一个,对吧——因为我们发现它是 ID 中的一个分支,然后确定是否在 EX 中被采用?所以只有一个可压扁的指令。?

IF->ID->EX->MEM->WB

4

2 回答 2

4

错误预测分支阴影中的指令是虚假的 - 不正确,用户永远不会看到(流水线有点欺骗,对于外部世界,我们假装 CPU 一次执行一条指令,在完美的顺序)。因此,应该清除这些推测性指令,而不会产生任何架构影响,例如写入内存或更改寄存器的值。

由于执行是按顺序完成的,并且在 EX 中知道最终的分支解析,因此您应该有足够的时间告诉管道中的以下指令取消它们自己(有效地用气泡替换它们,机器不为它们做任何事情在以下任何管道阶段)。您对机器产生影响的阶段更进一步,因此任何错误指令都不会过早到达它们。这在无序机器上会变得更加复杂,但这是另一回事。唯一浪费的工作存在于前面的阶段,您在这里有 2 个(IF + ID),并且可能(取决于您的设计)在下一个周期中将要提取到 IF 的下一条指令(以防万一)没有时间在分支之后更正您的程序计数器。

清除错误预测分支后的错误指令的行为通常称为刷新、清除或挤压(请注意,这些术语在计算机体系结构中也可能有不同的含义,因此它不是一个技术术语,而是一个图形描述)

于 2014-10-26T18:27:15.337 回答
1

我将通过说分支预测在大量流水线化的超标量处理器的情况下更具影响力来补充Leeor的答案。尽管动态(来自 OoO)和推测(来自分支预测)是两个独立的概念,但它们的相互作用很复杂。此外,由于它们通常同时出现在现代架构中,因此有时会感到困惑。

在您考虑的简单 5 级流水线中,ID 和 EX 之间需要一个时钟周期来确定是否采用了分支。在更复杂的架构上,错误预测的惩罚是数十个时钟周期,如果架构是超标量的,这可能对应于更多的获取指令。

当考虑到如此大的一组获取指令时,即使压缩也会变得复杂,例如,如果存储了一个我们不确定是否正确的值会发生什么?如果我们遇到另一个分支等怎么办?

此外,错误预测对应于性能方面的重大打击,因此使用选择性重放价值预测等更先进的技术来改善这种惩罚。

于 2014-10-30T03:49:08.370 回答