【问题标题】:MIPS Pipeline forwarding: How to forward to the second succeeding instruction?MIPS管道转发:如何转发到第二条后续指令?
【发布时间】:2022-01-02 11:02:43
【问题描述】:

比如说,我有 3 条指令:1、2 和 3。

我想将指令1的数据转发到指令3。问题是,我只能从指令1的EX/MEM寄存器转发。

所以我们有:

1:    IF ID EX MEM WB
2:       IF ID EX  MEM WB
3:          IF ID  EX  MEM WB

我想从 1 的 EX/MEM 转发到 3 的 ID/EX。

这是作业问题的一部分,显然我需要暂停一条指令。我看不出这有什么帮助,因为及时转发数据对我来说已经没有意义了。

有问题的问题:

答案:

感谢您的帮助

【问题讨论】:

  • 您的实际问题是什么?在不知道你没有得到什么的情况下,我们充其量可以提供关于流水线危害的冗长描述,但可能仍然无法解决你遇到的问题。

标签: mips pipeline forwarding cpu-hazard


【解决方案1】:

...因为及时转发数据对我来说已经没有意义了。

数据只能在时间上向前转发,不能向后转发,因为到 2021 年,我们仍然没有时间机器。

因此,转发必然会将处理器中刚刚生成的可用信息提供给处理器中的其他位置,因此它可以在未来(即下一个周期)使用。

转发和停顿都是减轻 RAW 危害的两种方法——其想法只是从生成的地方到需要的地方获取值。

如果“需要的地方”在时间上早于“生成的地方”,则需要停顿。但是,如果“需要的地方”在时间上比“生成的地方”晚,那么前锋可以减轻危险。危险是由于管道假设“需要”是寄存器文件,这在背靠背操作中是不正确的。

有些危险需要前锋和失速,这是可以做到的最好的。

但是所有的危险都可以通过足够的停顿和不转发来减轻,尽管这会降低性能。有了足够的停顿,“需要的地方”和“产生的地方”都可以是寄存器文件。


问题是,我只能从指令 1 的 EX/MEM 寄存器转发。我想从 1 的 EX/MEM 转发到 3 的 ID/EX。

我们不能从 1 的 EX/MEM 直接转发到 3 的 ID/EX。为什么?因为,ID/EX 为 3 是两个循环,所以我们想要从那里转发的数据(EX/MEM 为 1)不再存在:它已经沿着管道向下移动到下一个阶段。到 3 的 ID/EX 想要该数据时,该数据现在位于 MEM/WB 中(例如 1)- 当时的 EX/MEM 正在执行指令 2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 2017-03-30
    相关资源
    最近更新 更多