gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:06:05 25 4
gpt4 key购买 nike

我在理解管道危险,尤其是数据危险以及我们如何使用停顿周期和数据转发来解决这些危险时遇到了一些困难。下面是一个带有数据和加载使用危险的 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.

在图中您可以看到,从 BO 中,我们从 EX 转发到 B1 中的 EX,但是为什么?由于我们不需要 B1B2 中的 B0 中的任何两个寄存器,因此不存在关于 $ 的数据危险t2$a0,因此不需要转发数据。

此外,我如何知道是否必须从 EXMEM 转发,因为有时我不确定是否必须从 转发EXEXEXMEMMEMEX或从 MEMEX。我想对此进行一些澄清。

最佳答案

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

<小时/>

在指令解码期间,会查阅寄存器文件以获取正在执行的指令的操作数 - 在单周期(非流水线)处理器中,这些值在架构上始终 100% 正确,即使它们最近由紧邻的前一个更新说明。

类似地,在流水线处理器中,会在寄存器文件中查询正在执行的指令的操作数:这特别发生在 ID 阶段。

但是,对于任意两条连续指令,第一条指令的 WB 阶段将发生在第二条指令的 ID 阶段 - 这就是源的危险。

当背靠背指令具有寄存器依赖性时,就会存在危险(ID 阶段已经读取了过时的值,因为最新的值实际上尚未准备好。不过,当背靠背指令没有依赖性时,不会有任何危险,因为 ID 阶段已经读取了正确且最新的值。

前向(又名旁路)用于获取正确的、最新的值,通常不会停止处理器(如果我们要等待第一条指令的 WB 阶段完成,则需要这样做)执行第二条指令的 ID 阶段——这将是两个周期的延迟)。

重点是我们有三个选择:

  • 放弃重叠执行——这不是提高性能的选项
  • 存在依赖性时会出现延迟,这对性能也不利
  • 使用转发或旁路

前向/旁路的工作原理是观察到正确值可用的最早时间是在 EX 阶段结束时(对于 ALU 危险),并且我们可以提供最新值的最晚时间值是在 EX 阶段开始时。因此,如果我们能够在周期之间获取从 ALU 输出到 ALU 输入的值,我们就可以在不引入停顿的情况下避免危险。

转发(又名旁路)有两种机制:

  • 决定何时需要参与
  • 如何参与

最复杂的是确定两个背靠背指令之间是否存在依赖性。无论是进行停顿还是旁路,我们都需要这种复杂性,因此最好选择后者,因为停顿会影响性能。

粗略地说,确定何时参与的逻辑是识别一条指令的目标与下一条指令的源之间何时存在寄存器/操作数依赖性,因此硬件不断地在任意两个指令之间寻找这种依赖性。从后到后的指示。

当发现这样的依赖关系时,ID 阶段读取的陈旧值将被正确的值覆盖 - 在 ALU 危险的情况下,然后从 ALU(输出)中出来。因此,旁路机制在启动时会忽略 ID 级提供的操作数值,并用 ALU 输出值覆盖其中一个(或另一个或两者)。

关于c - 在管道图中,数据危险的数据转发如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60065175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com