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

MIPS中是否存在执行存储数据危险?

鱼安然
2023-03-14

在具有管道和转发功能的MIPS体系结构上:

add $s0, $t1, $t2
sw $s0, 0($sp)

add指令将在步骤3(执行操作)准备好结果,但我假设sw指令希望在步骤2(指令解码)得到结果

David A. Patterson的《计算机组织与设计》一书中有一个已解决的练习:在以下代码段中找到危险并重新排序指令以避免任何管道停滞:

lw  $t1, 0($t0)
lw  $t2, 4($t0)
add $t3, $t1,$t2
sw  $t3, 12($t0)
lw  $t4, 8($01)
add $t5, $t1,$t4
sw  $t5, 16($t0)

解决方案:

lw  $t1, 0($t0)
lw  $t2, 4($t1)
lw  $t4, 8($01)
add $t3, $t1,$t2
sw  $t3, 12($t0)
add $t5, $t1,$t4
sw  $t5, 16($t0)

在解决方案中,它正确识别加载使用危险并相应地重新排列代码,但是否也存在执行存储危险?

共有1个答案

裴良弼
2023-03-14

让我们考虑一个MIPS,其中转发被激活。我认为在这种情况下不会发生危险:事实上,ADD指令是一个整数操作,在MIPS体系结构中只需要一个时钟周期。查看此图:

ADD $t3,$t1,$t2    IF   ID   EX   MEM   WB
SW  $t3,12($t0)         IF   ID   EX    MEM  WB

正如您所看到的,没有危险发生,因为SW指令在两个时钟周期后存储数据,因为ADD将结果放入$t3。

实际上,在类似的情况下,危险可能会发生,但只有当该单元是多周期单元时(如果它需要一个以上的时钟周期来计算数据)。看看这个例子,其中的ADD。D指令使用需要4个时钟周期才能执行计算的浮点加法器:

ADD.D F2,F4,F5      IF   ID   A0   A1   A2   A3   MEM   WB
S.D   F2,somewhere       IF   ID   EX   X0   X1   X2    MEM    WB

X0和X1是原始暂停,而X2是结构暂停:在前一种情况下,S.D必须等待ADD。D完成;在后者中,MIPS无法在同一时钟周期内两次访问内存,因此会发生结构性暂停。

 类似资料:
  • 我使用一个java jdbc应用程序从DB中获取大约500,000条记录。使用的数据库是Oracle。当每一行被取出时,我就将数据写入文件。由于获取整个数据需要大约一个小时,所以我尝试增加结果集的获取大小。我在多个链接中看到,在增加读取大小的同时,应该小心内存消耗。增加读取大小实际上会增加jvm使用的堆内存吗?< br >假设提取大小为10,程序查询总共返回100行。在第一次提取期间,结果集包含1

  • 问题内容: 我正在使用Java JDBC应用程序从数据库中获取约500,000条记录。使用的数据库是Oracle。取出每一行后,我立即将数据写入文件。由于完成整个数据的获取大约需要一个小时,因此我试图增加结果集的获取大小。我已经在多个链接中看到,在增加访存大小的同时,应该注意内存消耗。增加获取大小实际上是否会增加jvm使用的堆内存? 假设获取大小为10,并且程序查询总共返回100行。在第一次读取期

  • 问题内容: 在MySQL中,我试图找到一种有效的方法来执行更新(如果表中已经存在一行),或者执行INSERT(如果该行不存在)。 到目前为止,我发现了两种可能的方法: 一个明显的例子:打开一个事务,选择以查找该行是否存在,如果不存在则进行INSERT,如果存在则进行UPDATE,提交事务 首先将IGNORE插入表中(如果该行已存在,则不会引发错误),然后进行更新 第二种方法避免了交易。 您认为哪一

  • 问题内容: 我有定期被推送到数据库中的Java代码(很难解释为什么它存在于数据库中,而这只会使焦点从主要问题上移开)。 在运行时,我查询数据库。我可以执行从数据库中获得的代码吗?我只在代码中存储main方法的内容。运行数据库的服务器是HTTP服务器。 数据库中的示例代码(仅供参考): 预期产量: 问题答案: 任何Java程序都是正确的Groovy程序。因此,您可以将Groovy依赖项添加到项目中,

  • 问题内容: 检查google-app-engine数据存储区中是否存在实体的最佳/最快方法是什么?现在,我正在尝试通过键获取实体,并检查get()是否返回错误。 我不知道在数据存储区上获取实体的过程。有没有更快速的方法来仅执行此检查? 问题答案: 已不推荐使用App Engine GCS客户端。 您是否考虑过使用查询?猜测并检查不是一种可伸缩的方法来找出数据存储中是否存在实体。可以创建查询以从数据

  • 问题内容: 我正在尝试编写一个页面,该页面调用存储在MySQL数据库中的PHP。存储在MySQL数据库中的页面包含要在页面加载时运行的PHP(和HTML)代码。 我该怎么做呢? 问题答案: 您可以为此使用eval命令。 不过,我还是建议不要这样做,因为使用这种方法存在很多陷阱。 调试比较困难,这意味着一些安全隐患(执行数据库中的不良内容,呵呵)。 请参阅何时在php中使用eval邪恶?例如。Goo