【问题标题】:Why does MIPS use one delay slot instead of two?为什么 MIPS 使用一个延迟槽而不是两个?
【发布时间】:2020-02-13 18:19:04
【问题描述】:

在许多 RISC 架构中似乎都是这种情况。既然填充一个延迟槽可以为我们节省 50% 的其他浪费周期,为什么不让程序员有机会同时使用这两个槽呢?

【问题讨论】:

  • 有趣的是,MIPS-X 确实有双分支延迟槽
  • 很高兴知道。我希望有人深入研究使用单个延迟槽的拱门的设计决策

标签: mips cpu-architecture instruction-set


【解决方案1】:

在 MIPS R2000(ISA 围绕其设计的经典 MIPS I)上,1 个分支延迟槽足以隐藏分支延迟:How does MIPS I forward from EX to ID for branches without stalling?。 能够以低延迟(半个时钟周期)检查分支条件是为什么 MIPS 条件分支仅限于 eq/ne 和/或检查 x<0 的符号位,而不是任意的 x<y

Is that true if we can always fill the delay slot there is no need for branch prediction? Paul Clayton 回答说是的,填充 asm 中的分支延迟槽会使分支预测在早期 MIPS 上无用。所以这更多地证明了真正的商业 MIPS R2000 是这样工作的。如果您延长管道,您只需要分支预测,就像他们为下一代 MIPS R4000 所做的那样。然后你有分支预测而不是期望编译器静态填充分支延迟。


但无论如何,一个分支延迟槽足以让编译器可靠地填充,事后看来,对于使用分支预测而不是依赖延迟槽来隐藏分支延迟的未来实现来说,这是一个包袱.尤其是超标量实现。

如果它们想要二进制兼容,那么让它成为架构负担所有未来的 CPU。因此,即使早期的 MIPS CPU 确实有 2 个周期的分支延迟,在架构上仅公开 1 个周期是相当合理的。

【讨论】:

  • 一些 DSP 有/有多个分支延迟槽。由于目标工作负载通常具有较高的 ILP,因此查找填充插槽的指令通常更容易。代码膨胀也不是问题。 (这也是 VLIW 对 DSP 具有吸引力的原因。)此外,在超标量设计中,两条指令不是两个周期。
猜你喜欢
  • 2019-10-10
  • 2011-06-03
  • 2017-01-04
  • 2018-07-16
  • 2011-10-17
  • 2019-07-10
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
相关资源
最近更新 更多