28

由于对性能的巨大影响,我从不怀疑我当前的桌面 CPU 是否有分支预测。当然可以。但是各种 ARM 产品呢?iPhone 或 android 手机有分支预测吗?旧的任天堂 DS?基于 PowerPC 的 Wii 怎么样?PS 3?

他们是否有一个复杂的预测单元并不那么重要,但他们是否至少有一些动态预测,以及他们是否在预期的分支之后执行一些指令。

具有分支预测的 CPU 的截止值是多少?几十年前的手持计算器显然没有,而我的台式机有。但是任何人都可以更清楚地概述可以期望动态分支预测的地方吗?

如果不清楚,我说的是条件变化的预测,在运行时改变预期的路径。

4

5 回答 5

11

任何具有超过几个阶段的管道的 CPU 至少需要一些原始分支预测,否则它可能会停止等待计算结果以决定走哪条路。Intel Atom 是一个有序内核,但具有相当深的管道,因此它需要一个相当不错的分支预测器。

旧的 ARM 7 设计只有三个阶段。将其与分支延迟槽(MIPS 上必需,SPARC 上可选)之类的东西结合起来,分支预测就不那么有用了。

顺便说一句,当 MIPS 决定通过超过 4 个流水线阶段来获得更高的性能时,分支延迟槽就成了一个烦恼。在最初的设计中,这是必要的,因为没有分支预测器。因此,您必须在分支之前执行的最后一条指令之前对分支指令进行排序。对于更长的管道,他们需要一个分支预测器,从而避免了对分支延迟槽的需求,但他们无论如何都必须模拟它才能运行旧代码。

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

于 2012-02-19T03:35:53.580 回答
10

如今,具有长管道的现代高端超标量 CPU(这意味着桌面和服务器中常见的几乎所有 CPU)都具有相当复杂的分支预测。

大多数 ARM CPU 没有分支预测,这样可以节省硅片和功耗,但 ARM CPU 一般流水线相对较短。此外,对 ARM ISA 中大多数指令的条件执行的支持有助于减少所需的分支数量(并因此降低了分支错误预测停顿的成本)。

于 2011-11-23T11:35:27.150 回答
4

分支预测变得越来越重要和强调,而 ARM 变得越来越复杂。

例如,称为 ARMv8 的新 64 位 ARM 架构放弃了大多数条件执行的使用(主要是由于寄存器数量增加的指令编码空间限制),并依靠分支预测将性能保持在可接受的水平。

即使对于较新的 ARMv7-a 设备,您也可以检查诸如SO 上未排序数据问题之类的可怕情况,其中分支预测改进约为 3 倍。

于 2014-03-16T07:26:33.703 回答
0

您可以在任何乱序处理器中期望动态分支预测器,这些处理器不仅依赖流水线,而且同时获取多条指令,并且它们具有多个执行单元(浮点单元,ALU),更多的寄存器;为了增加指令执行,你在任何给定时刻都有多条指令,当然如果你想保持所有机器利用率很高,那么分支是一个问题,所以这种处理器依赖动态分支预测来保持吞吐量并且利用率非常高。

您可以期望任何服务器都具有动态分支预测,台式机也是如此,在过去的嵌入式系统(如当前智能手​​机中的 ARM 芯片)没有分支预测,因为它们具有较小的管道,并且它们没有乱序执行,但正如摩尔的法律给我们每个面积更多的晶体管,你会开始看到越来越多的处理器增加他们的架构。因此,要回答您的问题,除了明显寻找 CPU 规格外,您还可以期望在 32 位、更大的管道、乱序执行的芯片上进行分支预测。ARM 的最新芯片在某种程度上正朝着这个方向发展。

于 2014-05-19T10:12:39.257 回答
0

对于 ARM Cortex-A8 来说并没有那么多(尽管它确实有一些分支预测),但我相信 Cortex-A9 是乱序超标量,具有复杂的分支预测。

于 2011-11-23T11:34:10.450 回答