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

有转发和无转发时MIPS管道暂停

魏书
2023-03-14

在以下MIPS指令序列中(整个程序未显示):

DADDUI R1, R1, #-8

BNE R1, R2, Loop

我想确认两条指令之间所需的暂停次数(在5阶段MIPS管道的上下文中-IF、ID/Reg、EX、MEM、WB),有无转发。

我的理解:

(a)如无转发:

在这种情况下,需要2个暂停(在周期5中,可以使用寄存器的分相访问在第二条指令的ID阶段读取R1)

(b) 如果有转发:

在这种情况下,不需要暂停(周期4中第二条指令的EX-stage可以从周期3中第一条指令的EX-stage的ALU结果中得到R1-8转发;这是假设分支正在EX-stage中检查相等性)。

有人能告诉我上面两个答案是否正确吗?

谢谢

共有1个答案

魏晨
2023-03-14

你是对的。有疑问时,总是制作显示各种管道阶段的时间轴图。在这种情况下,以图形方式,以下是发生的事情:

时间从左向右移动。在转发版本中,穿过表行的箭头显示转发发生的位置。

因此,对于情况(a),浪费了2个循环;对于情况(b),没有浪费循环并且管道没有停顿。

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

  • 我目前正在使用Glide库玩GIF,如下所示。 这很好,但我希望用户可以选择回放、暂停和转发GIF。我在想,只需要倒回/前进10秒的按钮和另一个暂停按钮。我不可能使用mp4视频,也不可能使用视频播放库,因为我使用的文件是GIF。在使用Glide时,我有什么方法可以做到这一点,或者我必须使用另一个库吗? 非常感谢您的帮助。

  • 我想确认以下时序图是否适用于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分支失速的含义

  • 我无法将状态从父组件转发到子组件,这两个组件是类组件。将状态从父组件转发到子组件时,我希望在子组件中使用状态showModal变量作为状态变量show as: 这个变量被用来激活模态。当我将其用作this.props.show时,状态已被转发到子组件并进行更新,但当我在子组件中this.state中使用道具时,状态尚未更新。有人知道问题出在哪里吗? 第一父组件: 第二子组件:

  • 我有一个azure构建管道和发布管道。我在发布构建工件中面临问题。在构建管道中,发布构建工件被正确地创建在默认的“drop”目录中。 当我在发布管道中下载该工件时,发布文件正在服务抛出错误的中下载 您没有查看此目录或页面的权限。 这意味着我的发布工件没有在“home/wwwroot”目录中下载。 构建管道 释放管道 我错过了什么?