当前CPU中分支预测技术的普及程度有多大?

28

由于对性能的巨大影响,我从未想过我当前的桌面CPU是否具有分支预测功能。当然它有。但是各种ARM产品呢?iPhone或Android手机有分支预测功能吗?旧款任天堂DS呢?基于PowerPC的Wii呢?PS3呢?

它们是否具有复杂的预测单元并不是那么重要,但如果它们至少拥有一些动态预测,并且它们是否执行了按预期分支的指令,则更为重要。

CPU分支预测的分水岭在哪里?几十年前的手持计算器显然没有分支预测,而我的台式机则有。但是有人能更清楚地概述可以期望哪些 CPU 具有动态分支预测吗?

如果不清楚,我所说的是条件正在变化,随着运行时期望路径的变化而进行的预测类型。


这是一个非常有趣的问题!我也想了解最流行的嵌入式处理器。 - hippietrail
5个回答

11

任何流水线程数超过几个阶段的CPU都需要至少一些原始分支预测,否则它可能会因为等待计算结果而处于停滞状态,以便决定前进的方向。Intel Atom是一种有序核心,但具有相当深的流水线,因此需要一个相当不错的分支预测器。

旧的ARM7设计仅有三个阶段。再加上类似分支延迟槽(在MIPS上必须使用,在SPARC上是可选的)的东西,分支预测就不太有用了。

顺便说一下,当MIPS决定通过超过4个流水线阶段来提高性能时,分支延迟槽变成了一个麻烦。在最初的设计中,它是必要的,因为没有分支预测器。因此,在分支之前必须对分支指令进行排序,以便在分支之前执行最后的指令。随着更长的流水线,他们需要一个分支预测器,从而取消了需要分支延迟槽的需要,但他们仍然需要模拟它,以便运行旧代码。

分支延迟槽的问题在于它只有大约50%的时间可以填充有用的指令。其余的时间,您要么用一个结果可能被丢弃的指令填充它,要么使用一个NO-OP。


1
信息丰富。让我更接近对大致“截止点”的感觉。 - porgarmingduod

10

现今高端超标量CPU具有较长的流水线(这意味着几乎所有常见于台式机和服务器的CPU),其分支预测机制非常复杂。

大多数ARM CPU没有分支预测,这样可节省硅和功耗,但ARM CPU通常具有相对较短的流水线。此外,ARM ISA中大多数指令的条件执行支持有助于减少所需分支的数量(从而缓解分支误判带来的代价)。


2
由于NEON管道落后于主ARM管道,如果您正在进行NEON计算,则会出现显着的分支失误惩罚。 - Anthony Blake
1
@Anthony Blake:说得好 - 因此,在混合使用NEON指令时,使用条件执行而不是分支可能是一个好主意。 - Paul R

4
分支预测在ARM变得更加复杂时变得越来越重要和强调。例如,新的64位ARM架构称为ARMv8减少了大部分条件执行(主要是由于指令编码空间限制与增加的寄存器数量),并依赖于分支预测来保持性能达到可接受的水平。即使对于更新的ARMv7-a设备,您也可以检查像unsorted data question on SO这样的糟糕情况,其中分支预测的改进约为3倍。

0
在任何乱序处理器中,您都可以期望有动态分支预测器,这些处理器不仅依赖于流水线技术,而且一次获取多个指令,并且它们具有多个执行单元(浮点单元、ALU)和更多的寄存器;为了增加指令执行,您可以在任何给定时刻同时执行多个指令,当然,如果您想保持所有机器利用率高,分支是一个问题,因此这种处理器依靠动态分支预测以保持吞吐量和利用率非常高。
您可以期望任何服务器都有动态分支预测,也包括台式机,在过去,像当前智能手机中的ARM芯片这样的嵌入式系统没有分支预测,因为它们具有较小的流水线,并且它们没有乱序执行,但随着摩尔定律为我们提供更多的晶体管面积,您将开始看到越来越多的处理器增加其架构。因此,回答您的问题,除了显而易见地查找CPU规格外,您可以期望32位芯片、更大的流水线、乱序执行具有分支预测。最近的ARM芯片正在某种程度上朝这个方向发展。

0

虽然ARM Cortex-A8有一些分支预测,但并不是很多。我相信Cortex-A9是乱序超标量的,具有复杂的分支预测。


谢谢,但我正在寻找一个更一般性的答案。说Cortex-A8有“不多,但有一些”也没有帮助。 - porgarmingduod
3
另外,我刚发现ARM Cortex-A8对于未命中分支有13个时钟周期的惩罚,因此我认为可以说它非常重视分支预测。 - porgarmingduod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接