当前位置: 首页 > 知识库问答 >
问题:

MIPS管道失速:SW后LW

慕容宇
2023-03-14

我很困惑,在使用相同的$rt的LW之后出现的存储字指令如何导致MIPS中的管道暂停。考虑以下代码块:

  lw $s0,  0($t0)
  sw $s0, 12($t0)
  lw $s1,  4($t0)
  sw $s1, 16($t0)
  lw $s2,  8($t0)
  sw $s2, 20($t0)

这里有三个单词在记忆中来回移动。例如,在前两行中,$s0被加载到中,然后其内容被保存回内存中。我不确定软件指令在EX阶段或MEM阶段是否需要s0美元。如果在MEM阶段需要它,那么不需要暂停管道就可以通过转发来解决吗?

共有1个答案

黄俊智
2023-03-14

假设是的。直接转发到MEM阶段可以背靠背执行从属的LW和SW。只要加载的字至少由软件存储。如果没有管道冒泡,就不可能让SW使用加载的字作为地址的基,否则它将需要及时转发回去。

但通常您会看到如下所示的管道(来源:SIM-PL中的5级流水线MIPS模型),只有一个转发器输入EX。有了这样的设置,就没有办法从LW转发到SW,它所需的硬件不存在。

 类似资料:
  • 我想确认以下时序图是否适用于MIPS 5级管道(*=暂停): 评论: 1)ADDI:ID停滞2个周期,因此之前的WB可以完成 2)SW:2个档位,因为ID无法开始,另外2个档位用于ID以完成之前的WB 3) SUB:如果直到周期#7才能启动,ID必须等到周期10,因为之前的指令 4)BNEZ:IF直到周期#10才能开始,ID有2个档位,因此之前的WB可以完成

  • 我不确定以下属性如何影响5阶段MIPS设计(IF、ID、EX、MEM、WB)的管道执行。我只需要一些清理。 只有1个内存端口 没有数据备份。 分支摊位直到*阶段结束 1个内存端口是否意味着我们在读/写mem时无法提取或写入(即lw上的mem阶段,您无法输入IF或其他mem的软件)?如果没有转发,这是否意味着一条指令要在它所依赖的前一条指令的WB阶段之后或之后才能进入ID阶段?Idk分支失速的含义

  • 关于pattersson书中提到的MIPS汇编语言,我有一个问题,就是在指令之间插入NOP以避免管道暂停。 考虑以下代码 我们看到在和之间存在$s5的RAW危险。在和之间还有$s5的WAW危险。所以我们必须插入两个NOP以避免停顿。换句话说,流水线图是 当要执行sw时,必须等待lw将数据放入寄存器。因此,存在一个泡沫。此外,当添加想要写入最终结果时,它必须等待上一条指令的完成()。这是另一个泡沫。

  • 在以下MIPS指令序列中(整个程序未显示): 我想确认两条指令之间所需的暂停次数(在5阶段MIPS管道的上下文中-IF、ID/Reg、EX、MEM、WB),有无转发。 我的理解: (a)如无转发: 在这种情况下,需要2个暂停(在周期5中,可以使用寄存器的分相访问在第二条指令的ID阶段读取R1) (b) 如果有转发: 在这种情况下,不需要暂停(周期4中第二条指令的EX-stage可以从周期3中第一条

  • 我正在学习MIPS procesor体系结构。 根据本教程,它指出:没有互锁管道级的微处理器http://en.wikipedia.org/wiki/MIPS_architecture 流水线的一个主要障碍是,某些指令(如除法)需要更长的时间才能完成,因此CPU必须等待下一条指令进入流水线 该问题的一个解决方案是使用一系列联锁装置,允许各阶段指示它们正忙,从而暂停上游的其他阶段<轩尼诗的团队将这些

  • 问题内容: 我已经使用Jenkins为我的node js应用程序创建了CI管道。我的管道包括诸如构建,单元测试,集成测试,代码分析等工作。我知道默认情况下,即使一个测试用例失败,构建也会失败。 问题答案: 您的单元测试脚本将需要处理数学和逻辑,以确定失败的测试百分比足以使整个工作失败。然后,您的单元测试脚本可以返回通过(零)或失败(其他任何结果),詹金斯将相应地标记构建。