用于数据危险的数据转发如何工作,在管道图中

问题描述 投票:0回答:1

我在理解管道危害(尤其是数据危害以及如何使用停顿周期和数据转发来解决这些危害方面遇到一些困难)。这是带有数据和负载使用危险(指出)的MIPS汇编代码示例:]

B0: sll $t2, $a0, 2                        
B1: add $t1, $a0, $a1
B2: lw $t0, 4($t1)                           #data hazard $t1
B3: slt $v0, $t1, $a1                        #data hazard $t1
B4: sub $v1, $v0, $t3                        #data hazard $v0
B5: addi $t0, $t0, 4
B6: lw $t1,8($t0)                            #data hazard $t0
B7: sll $t1, $a1, 1
B8: add $t2, $t1, $v0                        #data hazard $t1
B9: lw $v0, 0($t2)                           #data hazard $t2
B10: lw $t3, 0($v0)                          #load-use hazard $v0
B11: and $v0, $t3, $a2                       #data hazard $t3
B12: sll $a1, $t3, 1                         #data hazard $t3

对于此代码,我们获得了一个管道“图表”,我们必须在其中填写停顿周期和数据转发。由于该图具有20个周期,因此我将仅显示前5个周期,并且在这些5个周期中转发数据。Pipeline Cycle - First 5 cycles with data forwarding.

在图中,您可以看到我们从BOEX转发到EX中的B1,但是为什么呢?由于我们不需要B0B1中来自B2的两个寄存器中的任何一个,因此没有关于$t2$a0的数据危险,因此不需要数据转发。

另外,我如何知道是否必须从EXMEM转发,因为有时我不确定是否必须从EXEX,从EX到[C0 ],MEMMEMEXMEM。我想对此进行澄清。

我在理解管道危害(尤其是数据危害以及如何使用停顿周期和数据转发来解决这些危害方面遇到一些困难)。这是一个MIPS的示例...

c architecture mips pipeline
1个回答
0
投票

这些流水线危害的性质是,管道是否会尝试使用过时的值。流水线式将单个指令的执行分散到各个阶段(每个阶段在随后的周期中发生),从而使每个阶段的周期时间更短。为了不影响性能,流水线处理器会覆盖连续指令的执行。正是这种重叠既提高了性能,又带来了潜在的危害。

© www.soinside.com 2019 - 2024. All rights reserved.