【问题标题】:How to find an instruction in a pipe line in while implementing conditional jump实现条件跳转时如何在管道中查找指令
【发布时间】:2019-03-14 01:31:27
【问题描述】:

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

在回答以下关于在课堂上展示的 5 阶段管道中实现条件跳转的问题时,请考虑以下 y86 代码 sn-p,阶段 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

b.如果处理器假设条件跳转为 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

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

【问题讨论】:

  • 好吧,至少你已经承认这是一个家庭作业问题。
  • @thb 这不是作业问题。这个问题来自评论论文

标签: assembly pipeline y86


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-12
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    相关资源
    最近更新 更多