【问题标题】:WAR hazard causes bubbles in the pipeline (MIPS)?WAR 危险导致管道中的气泡 (MIPS)?
【发布时间】:2016-05-13 18:38:23
【问题描述】:

如果我有 2 行汇编,例如:

add $s1, $s3, $s5 
sub $s3, $s6, $s8

这应该会导致 WAR(读后写)危险,对吗?

问题是我不明白它是否会导致管道中插入气泡,因为我必须绘制管道表。

这是否会导致危险是否有任何不同的情况?

【问题讨论】:

  • 您的管道中有多少阶段?如果有 5 个阶段,这不是危险。
  • 是的,这是一个 5 阶段的管道(获取、解码、读取、执行、写入)。所以不需要气泡?
  • 这确实是一种反依赖,但在经典管道中不会造成危害。读取发生得很早,写入发生得很晚,这没有问题。
  • @GiacomoBenso 顺便说一句,欢迎来到 Stack Overflow。如果我没有解决您的问题,请告诉我,否则您可以投票和/或接受我的回答。
  • @IRTFM:[cpu-architecture] 标签涵盖了管道中的数据危害等内容。如果您正在修复其他问题中滥用 [hazard] 标签的问题,请在该标签尚未出现时添加。

标签: assembly mips cpu-architecture


【解决方案1】:

在合理(有序)的情况下,WAR 危险是不常见的/不可能的 管道

Pipeline Hazards, Page 2

下表说明了原因,在 5 级流水线 CPU 中。让我们将它们标记为指令 1 和 2。

 IF | ID | EX | MEM | WB
-------------------------
 1  |    |    |     |
-------------------------
 2  |(1) |    |     |     Instruction 1 is obtaining $s3
-------------------------
    | 2  | 1  |     |    
-------------------------
    |    | 2  |  1  |
-------------------------
    |    |    |  2  | 1
-------------------------
    |    |    |     |(2)  Instruction 2 is writing $s3 back

指令在 ID(指令解码)阶段从寄存器文件中获取操作数,但结果直到 WB(回写)阶段才会写回寄存器文件。指令 1 处于 ID 阶段,比指令 2 早 4 个时钟周期进入 WB 阶段,因此在使用之前,$s3 不可能被覆盖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2021-08-24
    • 1970-01-01
    • 2013-03-04
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多