gpt4 book ai didi

assembly - assembly 流水线

转载 作者:行者123 更新时间:2023-12-04 15:46:04 29 4
gpt4 key购买 nike

我需要多少档才能正确执行以下指令。我对我所做的事情有些困惑,所以我在这里看到专家的答案。

lw $1,0($2);

beq $1,$2,Label;

请注意,检查是否会发生分支将在解码阶段完成。但是在这种情况下,beq 的源寄存器 rs 为 $1,将在 lw 指令的写回阶段后更新。那么我们是否需要将内存阶段的新数据从内存转发到 beq 指令的解码阶段。

阶段是这样的:

enter image description here

IF:取指令;
ID:指令解码
例如:执行/ALU 阶段
MEM:从内存中读取数据
WB:在目标寄存器中存储数据

这是我迄今为止所做的。

当 lw 处于 exec 阶段而 beq 处于解码阶段时,停止条件变为真并产生气泡。现在 lw 处于 Mem 阶段,由于冒泡,beq 仍处于解码阶段,停顿条件再次变为真,第二次停顿已经发生。 现在 lw 处于 WB(回写)并且 beq 处于解码阶段但仍然是值1 美元将在 WB 阶段结束时更新,这最终意味着 beq 仍将使用错误的 1 美元值。

最佳答案

看起来您将需要第三个停顿以允许在解码之前将寄存器写回寄存器文件,或者将数据从写回阶段转发到解码阶段。无论哪种方式,如果要写入的寄存器等于 rs,都应该执行此操作。 .

您似乎需要太多的停顿,因为在解码阶段的早期检测到分支,这很好,因为它节省了获取无论如何都会刷新的不必要的指令,但是您必须有适当的危险检测来进行。

关于assembly - assembly 流水线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14093201/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com