首页 > 解决方案 > 为什么分支延迟槽被弃用或过时?

问题描述

当我阅读 RISC-V 用户级 ISA 手册时,我注意到它说“OpenRISC 有条件代码和分支延迟槽,这会使更高性能的实现变得复杂”。所以 RISC-V 没有分支延迟槽RISC-V 用户级 ISA 手动链接。此外,维基百科说大多数较新的 RISC 设计都省略了分支延迟槽。为什么大多数较新的 RISC 架构逐渐省略分支延迟槽?

标签: cpucpu-architectureriscv

解决方案


引用 Henessy 和 Patterson(计算机体系结构和设计,第 5 版)

谬误:你可以设计一个完美的架构。
所有架构设计都涉及在一组硬件和软件技术的背景下进行的权衡。随着时间的推移,这些技术可能会发生变化,而在做出这些决定时可能是正确的决定看起来像是错误的。(...) RISC 阵营中的一个例子是延迟分支。用五级流水线控制流水线危害是一件简单的事情,但对于每个时钟周期发出多条指令的较长流水线的处理器来说,这是一个挑战。

实际上,就软件而言,延迟分支只有缺点,因为它使程序更难阅读并且效率更低,因为插槽经常被 nop 填充。

在硬件方面,这是一个在八十年代有一定意义的技术决策,当时流水线是 5 或 6 个阶段,无法避免单周期分支惩罚。

但目前,管道要复杂得多。在最近的 pentium μarchitectures 上,分支惩罚是 15-25 个周期。因此,一条指令延迟分支是无用的,尝试用 15 条指令延迟分支隐藏这个延迟槽是无稽之谈,显然不可能(这会破坏指令集的兼容性)。

我们开发了新技术。分支预测是一项非常成熟的技术。使用当前的分支预测器,错误预测远低于具有无用 ( nop) 延迟槽的分支数量,因此即使在 6 周期计算机(如 nios-f)上也更有效。

因此延迟分支在硬件和软件方面的效率较低。没有理由保留它们。


推荐阅读