【问题标题】:How to draw data dependency waits when drawing a 5 stage pipeline diagram?绘制5阶段流水线图时如何绘制数据依赖等待?
【发布时间】:2017-05-16 08:26:42
【问题描述】:

绘制5阶段流水线图时如何绘制数据依赖等待?我的回答正确吗?

说明

1. ADD X, Y, Y
2. ADD Z, Y, X
3. SUB V, X, W
4. ADD Z, Z, V

这是流水线图

我的管道图正确吗?

【问题讨论】:

  • 我们需要更多信息:1) 是否存在转发?即 WR 阶段写入的结果是否可以立即被 EX 阶段读取? 2)架构可以在访问内存时获取吗?硬件架构或具有两个内存端口的架构可以。最后,第三条指令的 ID 阶段无法在第 5 周期启动是否有原因?此外,这样的指令取决于在第 7 周期准备好的 XW。告诉我们你的推理,以便我们判断它是对还是错,否则我们只能猜测
  • 您好 Bloom 女士,问题只有这些信息。 假设我们使用具有 5 阶段指令的流水线:IF、ID、EX、MEM 和 WR。假设管道不使用操作数转发,并且管道停顿的唯一来源是数据危害。画出多周期流水线图,显示(a)中列出的 5 条指令的执行情况。指令序列完成需要多长时间?

标签: pipeline cpu-architecture


【解决方案1】:

我假设指令格式是op <dest>, <src1>, <src2>

我们可以显式地跟踪依赖关系

1. ADD X, Y, Y    Depends on: Y     Produces: X
2. ADD Z, Y, X    Depends on: Y, X  Produces: Z
3. SUB V, X, W    Depends on: X, W  Produces: V
4. ADD Z, Z, V    Depends on: Z, V  Produces: Z

知道没有操作数转发,指令i只能在jj的结果/em> 完成 WR 阶段。

ADD X, Y, Y 依赖于 Y 但没有指令产生它,它已经准备好了。因此,它可以在获取和解码后立即开始执行。
所以它从第 1 周期开始,在第 5 周期结束

ADD Z, Y, X 会在获取单元空闲时立即获取,这发生在周期 2。然后在解码单元空闲后立即解码,在周期 3。
它不能在第 4 周期之后立即执行,因为它依赖于 YX,后者由指令 1 生成,因此仅在第 6 周期可用。
注意这里停止的阶段不是IF而是ID。正是这一阶段被阻止在下一个阶段移动数据。想象一下每个阶段之间都有一个锁存器。
IF 可以在下一个周期开始获取新指令,但直到 ID 才能完成(即也必须停止)允许写入它的输出(否则 ID 的输入会改变,它的输出也会改变)。

SUB V, X, W 可以在周期 3 获取,因为指令 2 的获取在周期 3 结束,因此获取单元是空闲的。
然而,获取单元不能将结果写入它自己和解码单元之间的锁存器中,因为解码单元被停止并且必须保持其当前输入值(否则解码会改变)。
所以读取也必须停止,直到解码单元在周期 6 写入其输出锁存器。
因此,解码可以从第 6 周期开始。
指令依赖于XW,前者在第6周期可用,后者从第1周期开始;因此 EX 可以在 ID 之后开始,即在第 7 个周期。

ADD Z, Z, V 可以在第 6 周期开始获取,此时获取单元已将其结果写入到解码单元的锁存器。
执行只能在周期 10 开始,因为该指令依赖于指令 3 在周期 10 产生的 V
Z 的依赖不是问题,因为该数据在第 9 周期可用。

【讨论】:

  • 谢谢Bloom女士,感谢上帝,我想我已经明白了。 (您是否看到我在您的答案之前发布的修改后的答案?)。您的回答帮助我确认我确实正确地学习了这一点。其实我没有老师,都是自学的。我正在阅读 Stallings、Tanenbaum、Schneider 等书籍。 Bookshear 以及 Youtube 和其他网站)。我遇到的最大问题是确保我已经正确地学习了它们。感谢您的支持。
  • @Trang 欢迎您。网上好像有solutions of the exercises of Stalling。不过,不确定它们实际上是什么。也许这可以帮助你检查你的答案。
猜你喜欢
  • 2022-06-14
  • 1970-01-01
  • 2015-04-23
  • 2013-11-07
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多