分支预测在当前cpu上有多普遍



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

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

有分支预测的cpu的截止是什么?几十年前的手持计算器显然没有,而我的台式电脑有。但是,谁能更清楚地概述一下,在哪里可以期望动态分支预测?

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

任何有超过几个阶段的管道的CPU都至少需要一些基本的分支预测,否则它可能会等待计算结果以决定走哪条路。英特尔凌动是一个有序核心,但有一个相当深的管道,因此它需要一个相当不错的分支预测器。

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

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

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

现在具有长管道的现代高端超标量cpu(这意味着几乎所有台式机和服务器中常见的cpu)具有相当复杂的分支预测。

大多数ARM cpu没有分支预测,这节省了硅和功耗,但ARM cpu通常具有相对较短的管道。此外,在ARM ISA中对大多数指令的条件执行的支持有助于减少所需分支的数量(从而减轻分支错误预测停滞的成本)。

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

例如,新的64位ARM架构ARMv8减少了大部分条件执行(主要是由于指令编码空间限制和寄存器数量的增加),并依赖于分支预测来保持性能在可接受的水平。

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

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

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

你可以期待任何服务器都有动态分支预测,桌面也一样,在过去的嵌入式系统中,像现在智能手机中的ARM芯片没有分支预测,因为它们有更小的管道,他们没有无序执行,但随着摩尔定律给我们更多的晶体管,你将开始看到越来越多的处理器增加他们的架构。所以回答你的问题,除了明显寻找CPU规格外,你可以期待在32位芯片上进行分支预测,更大的管道,无序执行。ARM最新的芯片在某种程度上正朝着这个方向发展。

相关内容

  • 没有找到相关文章

最新更新