由于对性能的巨大影响,我不知道我当前的桌面CPU是否有分支预测。当然可以。但各种ARM产品怎么样? iPhone或Android手机有分支预测吗?旧版的Nintendo DS?基于PowerPC的Wii怎么样? PS 3?
它们是否具有复杂的预测单元并不是那么重要,但是如果它们至少具有某些动态预测,以及它们是否按照预期执行某些指令执行分支。
具有分支预测的CPU的截止点是多少?几十年前的手持式计算器显然没有,而我的桌面则有。但是,任何人都可以更清楚地概述可以预期动态分支预测的位置吗?
如果不清楚,我说的是条件变化的预测类型,在运行期间改变预期的路径。
答案 0 :(得分:10)
具有长流水线的现代高端超标量CPU(这意味着桌面和服务器中常见的几乎所有CPU)目前都有相当复杂的分支预测。
大多数ARM CPU没有分支预测,这可以节省芯片和功耗,但ARM CPU通常具有相对较短的流水线。此外,对ARM ISA中大多数指令的条件执行的支持有助于减少所需的分支数量(从而降低分支错误预测停顿的成本)。
答案 1 :(得分:10)
任何具有超过几个阶段的管道的CPU都需要至少一些原始分支预测,否则它可能会停止等待计算结果以决定走哪条路。英特尔凌动是一个有序的核心,但有一个相当深的管道,因此它需要一个相当不错的分支预测器。
旧的ARM 7设计只有三个阶段。将它与分支延迟槽(MIPS上需要,SPARC上可选)以及分支预测等功能相结合并不是那么有用。
顺便说一句,当MIPS决定通过超越4个流水线阶段获得更多性能时,分支延迟槽变得烦人。在原始设计中,这是必要的,因为没有分支预测器。因此,您必须在分支之前执行最后一条指令之前对分支指令进行排序。使用更长的管道,他们需要一个分支预测器,不需要分支延迟槽,但他们不得不模拟它以便运行旧代码。
分支延迟时隙的问题在于它只能在大约50%的时间内填充有用的指令。其余的时间,你要么填写一条结果很可能被扔掉的指令,要么你使用NO-OP。
答案 2 :(得分:4)
当ARM变得越来越复杂时,分支预测变得越来越重要和强调。
例如,名为ARMv8的新64位ARM体系结构大部分使用条件执行(主要是由于指令编码空间限制增加了寄存器数量),并依赖于分支预测将性能保持在可接受的水平。
即使对于较新的ARMv7-a设备,您也可以查看unsorted data question on SO等可怕的情况,分支预测的改进大约为3倍。
答案 3 :(得分:0)
与ARM Cortex-A8不同(尽管它确实有一些分支预测),但我相信Cortex-A9是无序超标量,具有复杂的分支预测。
答案 4 :(得分:0)
您可以在任何乱序处理器中获得动态分支预测器,这些处理器不仅依赖于流水线操作而且还提取多个指令,并且它们具有多个执行单元(浮点单元,ALU),更多寄存器;为了增加指令执行,你在任何给定的时刻都有多个指令,当然如果你想保持所有的机械利用率很高,分支是一个问题所以这种处理器依靠动态分支预测来保持吞吐量并且利用率很高。
你可以期待任何服务器都有动态分支预测,也有台式机,在过去的嵌入式系统中,如当前智能手机中的ARM芯片没有分支预测,因为它们的管道较小,而且它们没有乱序执行,但随着摩尔定律为每个区域提供更多晶体管,您将开始看到越来越多的处理器增加其架构。所以要回答你的问题,除了明显寻找CPU规格之外,你可以期望在32位,更大的流水线,乱序执行的芯片上进行分支预测。来自ARM的最新芯片正朝着这个方向发展。