考虑下面给出的机器指令序列:
MUL R5, R0, R1
DIV R6, R2, R3
ADD R7, R5, R6
SUB R8, R7, R4
在上述序列中,R0
toR8
是通用寄存器。在所示指令中,第一个寄存器存储对第二个和第三个寄存器执行的操作的结果。该指令序列将在具有以下 4 个阶段的流水线指令处理器中执行:
- 指令获取和解码(IF),
- 操作数获取 (OF),
- 执行操作 (PO) 和
- 写回结果 (WB)。
对于任何指令IF
,OF
和WB
阶段每个都需要 1 个时钟周期。该PO
阶段需要 1 个时钟周期用于ADD
或SUB
指令,3 个时钟周期用于MUL
指令,5 个时钟周期用于DIV
指令。流水线处理器使用从 PO 阶段到 OF 阶段的操作数转发。执行上述指令序列所用的时钟周期数为
由于它明确给出了从 PO 到 OF 阶段应该使用操作数转发,所以上面的答案应该是 15 个时钟周期。
但在许多地方,答案是 13 个时钟周期。当我们使用从 PO 到 PO 的操作数转发时,将会有 13 个答案。
我的答案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
IF OF PO PO PO WB
IF OF PO PO PO PO PO WB
IF OF PO WB
IF OF PO WB
很多地方给出的答案:
1 2 3 4 5 6 7 8 9 10 11 12 13
IF OF PO PO PO WB
IF OF PO PO PO PO PO WB
IF OF PO WB
IF OF PO WB
谁能告诉哪个答案是正确的?