流水线失速相关BNE执行和标签指令获取(Pipeline Stall Related to BNE

2019-11-04 23:38发布

下面是相关的管道问题的解决方案。

阅读解决方案之后,我有个问题。

为什么第一行bne $7, $0, L1 EX是在对最后一行的IF相同周期L1:sw $8, 0($3) 对于我的理解,指令之前的最后行提取,应该等到bne执行完毕的条件,并知道它是否需要取指令与否。

任何提示赞赏。 非常感谢您的时间和帮助。

Answer 1:

据https://en.wikipedia.org/wiki/Classic_RISC_pipeline#Control_hazards , 经典MIPS可解决在ID级的分支 ,分支延迟槽完全隐藏前端气泡。 (假设编译器可以具有比其他NOP东西填满它)。


即使这是不正确的,在分行也需要等待EX得到解决 ,CPU可以推测读取并解码后的指令; 他们没有正确的转移方向之前达到MEM或WB检测,使他们对建筑的状态没有永久的效果。 (事实上​​没有人甚至达到EX,所以没有推测执行所有,只是投机解码)。

如果EX检测到分支应该已经采取,那么管道将要重启的获取sw没有指令jr在管。 (该add保持,因为它是在分支延迟槽:这是一个在这两种情况下执行的。)

进一步阅读: 投机和预测之间的差异 ,并且还这个不清楚的措辞问题乱序执行对推测性执行 。 哈迪真好回答涵盖了一系列的事情,他们是肯定的分支去哪种方式之前的CPU可以做。

只需根据转移预测的获取和解码的指令,但不执行它们,是比较容易的人之一,和许多人不认为这是投机性执行的。 它仍然是炒作,需要一个管道冲洗/重新转向,不像拖延直至正确获取地址肯定知道。 (如果没有一个分支延迟槽,你甚至无法检测到分支(在解码),直到你已经从获取潜在错误的路径的指令。在更深/更宽的管道,分支预测来预测下一个取块重要甚至在解码已想出如果当前块中的任何分支地址,这是从其中特定分支指令进入的详细预测分开。)


本图中的奇怪的是,它显示了jrsw在同一周期同一阶段 。 这是没有意义的,而sw前取甚至达到了它不能拖延。

这是一所分支的情况下? 这是没有意义或者,因为那时候jr不应该在管道的。 而sw在不能在同一个周期的暂停add在获取阶段。



文章来源: Pipeline Stall Related to BNE Execution and Label Instruction Fetch