微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mips 在 mips 代码中查找结构危害数据危害

如何解决Mips 在 mips 代码中查找结构危害数据危害

(i1)  lw $1,40($2) 
(i2) add $2,$3,$3 
(i3) add $1,$1,$2 
(i4) sw $1,20($2)

鉴于不支持转发,我发现 $2 中会有数据风险(在线 i2 i3) 这个mips代码有什么危害吗?

如果支持转发,还有什么危害吗?

解决方法

首先,让我们声明这个问题适用于流水线处理器,而不是单周期处理器。

其次,让我们假设 WB(回写)在循环开始时立即执行——这是现实的 b/c WB 不需要计算任何东西并且它的值存储到寄存器文件在周期开始时可用。

然后来自较晚指令的 ID 可以通过同一周期中的重叠捕获来自较早指令的 WB 写入的值。

cycle-> 1   2   3   4   5
  (i1) IF  ID  EX  MEM WB
  (i2)     IF  ID  EX  MEM WB
  (i3)         IF  ID  EX  MEM WB
  (i4)             IF  ID  EX  MEM WB
  (i5)                 IF  ID  EX  MEM WB

在循环 5 中,当 (i1) 执行 WB 时,(i4) 可以读取 ID 中的正确值,因为它们是重叠的——并且按照上述,这足以让 (i4)读取 (i1) 写入的值。

然而,(i2) 和 (i3) 都看不到 (i1) 写入的值,因为它们的 ID 阶段读取值发生在 (i1) 的 WB 阶段之前。 (i2) 的 ID 阶段在周期 3 中,(i3) 的 ID 阶段在周期 4 中,而 (i1) 的 WB 阶段在周期 5 中.

(如果在同一个循环中重叠读/写不起作用,那么根据上图,只有ID中的(i5)会看到(i1)的{{1 }}.)

因此,我们可以扩展此图(或将其应用于序列中的每条指令,就像 i1 一样)以查看示例中存在多少危险。


这意味着在您的序列中,(i1) 的 WBWB 不可供任何 $1 读取,直到 (i4),然后 (i3) 将需要转发/绕过 (MEM->EX) 才能获得正确的值。

为了让 (i3) 获得 (i2) 对 ID 的更新,转发/绕过 (EX->EX) 是必要的。

为了让 (i4) 获得 (i2) 对 $2 的更新,转发/绕过 (MEM->EX) 是必要的。

为了让 (i4) 获得 (i3) 对 $2 的更新,转发/绕过 (EX->EX) 是必要的。


有一种情况(未在您的示例中显示)需要转发/旁路(MEM->EX)和停顿,当下一条指令获取紧接在前一个加载指令的目标值时,就会发生这种情况,因为负载的正确值只能从 MEM 中获得(而对于计算指令,正确的值可以从 EX 中获得)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。