0

通过与超标量架构相关的练习,我正在按照自己的方式工作。我需要一些帮助来概念化这个问题的答案:

“如果您对寄存器重命名器必须做什么感到困惑,请返回您正在执行的汇编代码,并问自己必须发生什么才能获得正确的结果。例如,考虑一个三路超标量机器同时重命名这三个指令:

ADDI R1, R1, R1
ADDI R1, R1, R1
ADDI R1, R1, R1

如果 R1 的值一开始是 5,那么这个序列执行完后它的值应该是多少?”</p>

我可以看一下,好吧,R1 的最终值应该是 40。但是,三路超标量机如何达到这个答案?如果我理解正确的话,在这个三路超标量流水线中,这三个指令将被并行获取。意思是,你从一开始就会有危险,对吧?我应该如何概念化这个问题的答案?

编辑 1:在解码这些指令时,三路超标量机必须执行寄存器重命名以获得以下指令集,正确:

  ADDI R1, R2, R3
  ADDI R4, R5, R6
  ADDI R1, R2, R3
4

1 回答 1

3

简而言之 - 您将无法一起执行这些指令。但是,此示例的目标似乎与冒险无关(即 - 检测这些指令是相互依赖的,并且必须以足够的停顿顺序执行),而是关于重命名- 它用于表明单个逻辑寄存器 (R1)将在管道中同时进行多个物理“版本”。原来的值为 5(我们称之为“p1”),但您还需要为第一个 ADD(“p2”)的结果分配一个,用作第二个的源,然后再一次对于第二条和第三条 ADD 指令(“p3”和“p4”)的结果。

由于该处理器解码并尝试同时发出这 3 条指令,您可以看到您不能只将 R1 作为所有指令的源 - 这将阻止它们中的每一个使用正确的计算中间值,因此您需要重命名他们。重要的部分是我们称之为 p1..p4 的它们可以同时分配,并且在发布时就会知道依赖关系 - 早在它们中的每一个都被结果填充之前。这实质上将前端与执行后端分离,这对于现代 CPU 的性能灵活性很重要,因为您可能在任何地方都有瓶颈。

于 2013-10-27T09:40:54.770 回答