0

我正在阅读Hamacher 等人的Computer Organization [5e]文本中的流水线部分。人。. 在那里,我遇到了作者声称会导致数据危害的情况。

情况如下图所示:

在此处输入图像描述 例如,E图 8.2b 的四级流水线中的 stage 负责算术和逻辑运算,并为此任务分配一个时钟周期。尽管这对于大多数操作可能已经足够,但某些操作(例如除法)可能需要更多时间才能完成。图 8.3 显示了一个示例,其中指令中指定的操作I2需要三个周期才能完成,从周期4到周期6。因此,在周期56中,写入阶段必须被告知什么都不做,因为它没有数据可以使用。†:同时,缓冲区中的信息B2必须保持完整,直到执行阶段完成其操作。这意味着舞台2,反过来,舞台1被阻止接受新指令,因为其中的信息B1不能被覆盖。因此,步骤D4F5必须推迟,如图所示。

在此处输入图像描述 ...任何导致管道停止的情况都称为危险。我们刚刚看到了一个数据危害的例子数据危险是指指令的源操作数或目标操作数在流水线中预期的时间不可用的任何情况。

在上面的示例中,作者假设发生了数据危险,并且在管道中引入了两个停顿周期。他们给出这种数据危险的主要原因是,由于执行阶段需要2比通常需要的指令更多的周期2,因此回写阶段应该工作的数据必须等待2周期......

但我有点难以接受这种分析。通常,这些书籍会在存在数据依赖性(通常的 RAW、WAR 等)的情况下给出数据危害的示例。但是这里没有这样的事情。我认为这是一个结构性危险,假设 I2 不能使用 EX 阶段,因为 I1 正在使用它。

此外,文本假定缓冲区中没有阶段的结果排队。从标有 †, , 的语句中清除Meanwhile, the information in the buffer...(这里也有一点缺陷,因为如果没有排队,那么D3in cycle的输出4将覆盖B2EX 阶段正在其上工作的缓冲区中的值,这与他们自己的假设)。

我认为引入摊位是因为没有排队的情况……和结构性危险,如果事情如下图所示管理得当,就不会有摊位了。

这就是我的假设:

  1. 我假设执行阶段有多个单独的功能单元(例如,一个用于1执行指令计算的功能单元。[基本 ALU 需要 1 个周期持续时间],一个用于整数除法,另一个用于整数乘法等)[所以结构风险已消除现在的方式。]
  2. 我还假设管道缓冲区可以将阶段中产生的结果存储在队列中。[因此,标有 † 的语句中的问题不再存在。]

话虽如此,现在的情况如下:

在此处输入图像描述

无论我多么努力地尝试这些假设,我都无法消除以蓝色显示的气泡。[即使假设在缓冲区中排队,缓冲区也不能给出乱序的结果,所以这些停顿仍然存在]。

通过我的这个练习,我觉得文中显示的示例确实是一个危险,而且也有数据危险(即使没有数据依赖关系?),因为在我的练习中没有结构危险的机会......

我对么?

4

1 回答 1

0

我认为这是一个结构性危险,假设 I2 不能使用 EX 阶段,因为 I1 正在使用它。

是的,这就是我使用的术语,基于维基百科:https://en.wikipedia.org/wiki/Hazard_(computer_architecture)

那篇文章将数据危害限制为仅 RAW、WAR 和 WAW。因此,它们仅在您考虑使用哪些操作数时才可见。

例如,在单独的多周期或流水线乘法器单元中执行之后,可以允许独立的乘法(结果不被接下来的几个 insns 读取)乱序完成。

如果慢速 ALU 指令需要在相同的周期中写入 GPR,那么回写冲突将是一个问题add。还有像 WAW 这样的数据危害,因为//mul r3, r2, r1应该离开= not 。sw r3, (r4)add r3, r2, r1r3r2+r1r2*r1

MIPS 使用 mult/div 的特殊 reg 对解决了所有这些问题hi:lo,允许 mul 和 div 单元松散地耦合到 5 级管道。并且 ISA 对这些寄存器允许发生的事情有相当宽松的规则,例如,写入一个mthi r3会破坏另一个的先前值,因此mflo r2会在 之后给出不可预测的结果mthi雷蒙德陈的文章

“有序流水线”是指指令按程序顺序开始执行,不一定按程序顺序完成。现代有序流水线允许内存操作无序完成、允许内存级并行和允许指令调度隐藏 L1d 缓存命中的加载使用延迟是很常见的。只要以某种方式检测和处理危害,也可以流水线化更高延迟的 ALU 操作。


这些作者是否完全使用“结构风险”一词,或者他们是否认为所有(非控制?)风险都是数据风险?

在这一点上,这似乎主要是一个术语问题。IDK 如果他们以这种方式自行使用术语,或者是否存在其他流行的约定,而不是维基百科描述的约定。


与您的主要问题不同,在时钟周期 4 和 5 中,您同时在 E 阶段有两条指令。如果某物在 E 阶段停止,则在后面的说明中,停止气泡需要出现在 E 阶段之前,就像您从书中链接的图 8.3 图像一样。

是的,他们谈论需要保持不变的阶段之间的管道寄存器很奇怪。如果多周期非流水线执行单元需要保留值,它可以对它们进行快照。

除非停止信号使解码阶段不断重复生成该输出,直到停止信号被取消断言,并且流水线寄存器最终将锁存前一级的输出而不是忽略它。有些锁存器/触发器具有与时钟分开的控制信号,这使它们忽略其输入并继续输出它们已经输出的内容。

于 2021-11-12T15:33:50.780 回答