三向超标量管道中的危险

时间:2013-10-26 23:52:02

标签: pipeline cpu-registers computer-architecture

我正在通过与超标量体系结构相关的练习来工作。我需要一些帮助来概念化这个问题的答案:

  

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

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

如果R1的值从5开始,那么当该序列执行时它的值应该是什么?“

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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