0

我在准备考试时遇到了一个问题。问题是

在回答以下有关在课堂上介绍的 5 阶段管道中实现条件跳转的问题时,请考虑以下 y86 代码片段,阶段为 F、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

一个。当 jne 指令完成 F 阶段时,下一条指令的地址在处理器中可用吗?圈一个

                     YES                 NO

湾。如果处理器假设条件跳转为 TAKEN,那么当 jne 指令完成 F 阶段时,下一条指令的地址在哪个流水线内部寄存器(变量)中?圈出一个 icode ifun rA rB valC valP valM valE

C。如果处理器假设条件跳转是 NOT TAKEN,那么当 jne 指令完成 F 阶段时,下一条指令的地址在哪个流水线内部寄存器(变量)中?圈一个

            icode  ifun  rA  rB  valC  valP  valM  valE

d。在哪个阶段之后管道会知道是否应该进行条件跳转?圈出正确的阶段

                      F D E M WB

我有没有解释的答案这里是答案:

1) 是的

2) valC

3) valP

4) E

有人可以请,请解释这个过程。我有考试,我真的需要帮助

4

1 回答 1

1

在哪个阶段之后管道会知道是否应该进行条件跳转?圈出正确的阶段

一些按顺序流水线 CPU 在解码阶段处理分支采用/未采用,使其在管道中只有 1 个周期的气泡。(例如 MIPS 会这样做,这就是为什么 1 个分支延迟槽足以让经典的 5 阶段 MIPS 管道完全隐藏控制依赖/危害 。https://en.wikipedia.org/wiki/Classic_RISC_pipeline#Control_hazards)。

在分支到达 Execute 之前停止或推测的设计也是可行的,但性能较低。

所以这个问题似乎无法回答,除非您对 y86 经典 5 级管道的设计方式有其他线索。

在 Decode 中解析分支方向需要标志更快地准备好,因此 cmp 或 sub 后跟 jcc 总是会导致数据依赖关系停止。检查标志甚至比解码需要检查哪个寄存器并从寄存器文件中读取它之后检查寄存器更容易。(MIPS 没有标志;它有类似beq $t1, $t2, target在相等上分支的指令(这可以用比减法更少的延迟来完成),或者bltz $t1, target检查一个 reg 的符号位。

于 2019-03-14T02:20:26.917 回答