管道摊位中的决策
Decision making in Pipeline stalls
加载字指令后紧跟分支指令(32 个 mips)。
lw r2, (0)r1;-- I swap registers here as opposed to my previous question
Beq r2, r3, target;
生成执行图,IF ID EX MEM WB
。现在 BEQ
的摊位应该在哪里
IF ID EX MEM WB
IF * * ID EX
or
IF ID EX MEM WB
* * IF ID EX
我只是想了解这两种方式是否都可行。此外,此类停顿涉及哪些硬件操作?
在您展示的简单管道中,lw
在获取下一个 insn 时仍在解码。在它们都被解码之前,管道无法判断它们是否冲突。
仔细想想你的第二个摊位在做什么:CPU 在当前指令被解码之前延迟获取下一条指令。此时它不知道这两条指令是什么。
IF ID EX MEM WB lw
* IF ID EX beq // lw isn't even decoded yet, and neither is this one, so no way to tell if they conflict.
回复:您的更新:IF
不是指令,而是管道阶段。
顺便说一句,在您删除管线图之前,问题 很多 更清楚了。您应该将它们放回原处,并设置代码格式(select 文本并单击 {} 图标,或按 ctrl-k。)
加载字指令后紧跟分支指令(32 个 mips)。
lw r2, (0)r1;-- I swap registers here as opposed to my previous question
Beq r2, r3, target;
生成执行图,IF ID EX MEM WB
。现在 BEQ
IF ID EX MEM WB
IF * * ID EX
or
IF ID EX MEM WB
* * IF ID EX
我只是想了解这两种方式是否都可行。此外,此类停顿涉及哪些硬件操作?
在您展示的简单管道中,lw
在获取下一个 insn 时仍在解码。在它们都被解码之前,管道无法判断它们是否冲突。
仔细想想你的第二个摊位在做什么:CPU 在当前指令被解码之前延迟获取下一条指令。此时它不知道这两条指令是什么。
IF ID EX MEM WB lw
* IF ID EX beq // lw isn't even decoded yet, and neither is this one, so no way to tell if they conflict.
回复:您的更新:IF
不是指令,而是管道阶段。
顺便说一句,在您删除管线图之前,问题 很多 更清楚了。您应该将它们放回原处,并设置代码格式(select 文本并单击 {} 图标,或按 ctrl-k。)