首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >避免管道阻塞的MIPS语言

避免管道阻塞的MIPS语言
EN

Stack Overflow用户
提问于 2015-11-26 10:01:09
回答 1查看 1.3K关注 0票数 2

关于MIPS汇编语言,这是在模式森的书,我有一个问题,插入NOP之间的指令,以避免管道档。

考虑以下代码

代码语言:javascript
代码运行次数:0
运行
复制
lw   $s5, -16($s5)
sw   $s5, -16($s5)
add  $s5, $s5, $s5

我们看到,$s5在lwsw之间存在着原始的危险。$s5在swadd之间也存在WAW危险。因此,我们必须插入两个NOPs,以避免摊位。换句话说,管道图是

代码语言:javascript
代码运行次数:0
运行
复制
lw      IF     ID     EX     MEM     WB
sw             IF     ID     ---     EX     MEM     WB
add                   IF     ID      EX     MEM     --     WB

当执行sw时,它一直在等待lw将数据放入寄存器中。因此,有一个泡泡。而且,当add想要写入最终结果时,它必须等待上一条指令(sw)的完成。这是另一个泡沫。

所以修改后的代码是

代码语言:javascript
代码运行次数:0
运行
复制
lw
NOP
sw
NOP
add

但该解决方案提出了以下代码

代码语言:javascript
代码运行次数:0
运行
复制
lw
NOP
NOP
sw
add

哪一个是对的?我想是我的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-26 12:54:57

假设一个相当标准的管道,WAW危险不存在,它在程序代码中可能看起来有点危险(在同一寄存器上有多个写操作),但没有任何机制可以在(或在) LW之前(或在)LW期间完成添加(这意味着它在输入可用之前计算结果)。SW没有写到寄存器,所以这并不重要,但是添加也不能在它之前完成。实际上,标准管道中根本不存在WAW危险,因为指令只是按顺序写回。

您对于原始危险的解决方案假定存在WB->EX转发,根据它们的解决方案判断没有。没有转发器,您最快可以使用的结果是读取指令的ID与写指令的WB成直线。

为什么(WB)和(EX)不在一个周期内执行?

因为它不管用。它也不起作用,a,所以我不知道那里发生了什么。这个问题的前提是没有转发给EX,所以和以前一样,产生后你能尽快使用一个值是当你把阅读指令的ID和写指令的WB连起来的时候。EX只是从ID/EX管道寄存器读取它的输入。

另外,对于(a)项,我没有看到从I1到I3的6美元的战争。是吗??

不,因为I1和I3都不修改$6,所以不可能有任何危险。RAR不是一种危险。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33935604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档