下面是相关的管道问题的解决方案。
阅读解决方案之后,我有个问题。
为什么第一行bne $7, $0, L1
EX是在对最后一行的IF相同周期L1:sw $8, 0($3)
对于我的理解,指令之前的最后行提取,应该等到bne
执行完毕的条件,并知道它是否需要取指令与否。
任何提示赞赏。 非常感谢您的时间和帮助。
下面是相关的管道问题的解决方案。
阅读解决方案之后,我有个问题。
为什么第一行bne $7, $0, L1
EX是在对最后一行的IF相同周期L1:sw $8, 0($3)
对于我的理解,指令之前的最后行提取,应该等到bne
执行完毕的条件,并知道它是否需要取指令与否。
任何提示赞赏。 非常感谢您的时间和帮助。
据https://en.wikipedia.org/wiki/Classic_RISC_pipeline#Control_hazards , 经典MIPS可解决在ID级的分支 ,分支延迟槽完全隐藏前端气泡。 (假设编译器可以具有比其他NOP东西填满它)。
即使这是不正确的,在分行也需要等待EX得到解决 ,CPU可以推测读取并解码后的指令; 他们没有正确的转移方向之前达到MEM或WB检测,使他们对建筑的状态没有永久的效果。 (事实上没有人甚至达到EX,所以没有推测执行所有,只是投机解码)。
如果EX检测到分支应该已经采取,那么管道将要重启的获取sw
没有指令jr
在管。 (该add
保持,因为它是在分支延迟槽:这是一个在这两种情况下执行的。)
进一步阅读: 投机和预测之间的差异 ,并且还这个不清楚的措辞问题乱序执行对推测性执行 。 哈迪真好回答涵盖了一系列的事情,他们是肯定的分支去哪种方式之前的CPU可以做。
只需根据转移预测的获取和解码的指令,但不执行它们,是比较容易的人之一,和许多人不认为这是投机性执行的。 它仍然是炒作,需要一个管道冲洗/重新转向,不像拖延直至正确获取地址肯定知道。 (如果没有一个分支延迟槽,你甚至无法检测到分支(在解码),直到你已经从获取潜在错误的路径的指令。在更深/更宽的管道,分支预测来预测下一个取块重要甚至在解码已想出如果在当前块中的任何分支地址,这是从其中特定分支指令进入的详细预测分开。)
本图中的奇怪的是,它显示了jr
和sw
在同一周期同一阶段 。 这是没有意义的,而sw
前取甚至达到了它不能拖延。
这是一所分支的情况下? 这是没有意义或者,因为那时候jr
不应该在管道的。 而sw
在不能在同一个周期的暂停add
在获取阶段。