首先,抱歉我的英语不好。这个问题是我的计算机体系结构类(class)教科书中的一个问题。我在网上找到了答案,但仍然查不到详细信息。
以下是五阶段(获取、解码、执行、内存、写入)单流水线微架构无转发机制中的指令阶段。 除LW和SW为1+2、Branch为1+1外,所有操作均为一个周期。
Loop: C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 ...
LW R3, 0(R0) F D E M - - W
LW R1, 0(R3) F D - - - E M - - W
ADDI R1, R1, #1 F - - - D - - - E M W
SUB R4, R3, R2 F - - - D E M W
SW R1, 0(R3) F D W M ...
BNZ R4, Loop F D E ...
...
我有几个问题:
为什么第二条指令可以在C2中启动D?据我所知,D阶段包括“寄存器读取”,但之前的指令直到C7才写回R3。
和上一样,是什么原因导致第3首的D从C7开始,E从C11开始?
为什么第四个实例必须从 C7 而不是 C4 开始?
这个问题源自《Computer Architecture : A Quantitative Approach 5e》一书,例3.11。
最佳答案
看起来你的管道在执行内存相关操作(LW)时卡住了整个系统,除了我无法想到 ADDI 无法在 C4 中执行解码的有效原因之外。我并不是说加载操作卡住整个执行是有效的,但这似乎是“唯一”的逻辑解释。
指令 2 可以在 C3 中执行解码,但它必须等到指令 1 将其数据写回到 R1
。这就是为什么第二条指令的执行被延迟到C7
。
顺便说一句,当您说您在“网络”上找到答案时,它来自可靠的来源吗?
关于mips - 计算机体系结构管道停滞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40397993/