我在准备考试时遇到了一个问题。问题是
回答以下有关在类F的类中介绍的5级管道中条件跳转的实现的以下问题时,请考虑以下y86代码段: D,E,M,WB。
1: irmovq $8, %rsi
2: irmovq $1, %r9
3: jmp label1
4: label2: addq %rsi, %r10
5: label1: subq %r9, %rsi
6: jne label2
7: andq %rbx, %rdx
8: irmovq $10, %r10
9: halt
a。当jne指令完成F级时,处理器中下一条指令的地址是否可用?圈一个
YES NO
b。如果处理器假定条件跳转为TAKEN,那么当jne指令完成F级时,下一条指令的地址在哪个管道内部寄存器(变量)中?圈一个 icode ifun rA rB valC valP valM valE
c。如果处理器假定条件跳转未选中,那么当jne指令完成F级时,下一条指令的地址在哪个管道内部寄存器(变量)中?圈一个
icode ifun rA rB valC valP valM valE
d。在哪个阶段之后,管道会知道是否应该执行条件跳转?圈出正确的阶段
F D E M WB
我的答案没有解释。以下是答案:
1)是
2)valC
3)valP
4)E
请其他人解释一下该过程。我正在考试,我真的需要帮助。
答案 0 :(得分:1)
管道将在哪个阶段之后知道是否应该执行条件跳转?圈出正确的阶段
某些有序流水线CPU在解码阶段处理已采取/未采取的分支,以使其在管道中只有1个周期的气泡。 (例如,MIPS做到了这一点,这就是为什么1个分支延迟槽足以使经典的5级MIPS管道完全隐藏控制依赖项/危害。https://en.wikipedia.org/wiki/Classic_RISC_pipeline#Control_hazards)。
在分支到达Execute之前停滞或推测的设计也是可行的,但是性能较低。
因此,除非您对y86经典5级管道的设计有其他线索,否则这个问题似乎无法回答。
在“解码”中解析分支方向要求这些标志尽快准备好,因此,cmp或sub以及jcc始终会导致数据依赖性停滞。检查标志比在解码后检查一个寄存器 更容易,该寄存器需要检查并从寄存器文件中读取。 (MIPS没有标志;它具有beq $t1, $t2, target
之类的指令以相等性分支(可以用比减法更少的等待时间来完成),或者bltz $t1, target
来检查一个reg的符号位。 / p>