为什么要预测分支,而不是同时执行两个分支?

7
我相信在创建CPU时,分支预测是当选择错误的分支时的主要减速因素。为什么CPU设计人员选择一个分支而不是简单地执行这两个分支,然后一旦确定哪个被选择了,就切掉其中一个呢?
我意识到这只能在短时间内进行2或3个分支深度内的操作,否则并行阶段的数量将变得非常大,所以在某些时候,您仍然需要一些分支预测,因为您肯定会遇到更大的分支,但是像这样的几个阶段是否有意义呢?对我来说,这似乎可以显着加快速度,并且值得增加一些复杂性。
即使只有单个分支深度,也会减少近一半由错误分支消耗的时间,是吗?
或者可能已经部分地像这样完成了吗?当你转到汇编语言时,分支通常只选择两个选项,对吗?

1
即使只有一个级别,您会发现需要两倍的管道硬件(至少),当其处于活动状态时会燃烧两倍的能量。现代CPU旨在最小化能源消耗(因为散热通常是瓶颈)。 - Oliver Charlesworth
很好的观点..所以也许这立即切断了多于一个级别的可能性,这绝对是一个问题。但是英特尔i7的热设计功耗为88W,而AMD最新的5GHz处理器目前运行在220W TPD。因此,显然可以散发那么多热并拥有能够处理它的芯片。我可以看到一步是巨大的。而且我认为我关于一个级别双倍加速的想法是错误的。如果分支预测正确99%的时间,那么即使出现错误,下一个级别也很可能是正确的。因此,速度提升可能会远远超过两倍。 - mczarnek
1
常见的学术术语是“急切执行”。(Google Scholar搜索将提供一些学术研究。)一种更有限的技术是动态吊床预测,它使用预测器置信度信息来选择是否预测或使用预测。 - user2467198
1个回答

8

你对指数级填充机器感到害怕是正确的,但你低估了它的威力。一个常见的经验法则是你可以期望在动态代码中平均有 ~20% 的分支。这意味着每 5 条指令中有一个分支。大多数 CPU 今天都有深度的乱序核心,可以提前获取和执行数百条指令 - 以英特尔的 Haswell 为例,它有 192 个 ROB 条目,意味着你最多可以容纳 4 级分支(此时你将有 16 个“前端”和 31 个“块”,包括每个块一个分叉分支 - 假设每个块有 5 条指令,你几乎填满了你的 ROB,再增加一级就会超过它)。此时,你只能有效地深入 ~20 条指令,使任何指令级并行无用。

如果你想要在3个层次的分支上分散,这意味着你将有8个并行上下文,每个上下文只能运行24个条目。即使你忽略了回滚7/8工作的开销、需要复制所有保存状态的硬件(如寄存器,你有几十个),以及需要像ROB一样将其他资源分成8部分,这也只是当你忽略了内存管理的情况下。此外,这还没有计算出内存管理需要处理复杂的版本控制、转发、一致性等问题。

别考虑功耗,即使你能支持那种浪费的并行性,把你的资源分散得那么薄弱,你在每个路径上前进几个指令之前就会被卡住。

现在,让我们来考虑一下更合理的选择,即在单个分支上进行拆分 - 这开始看起来像是超线程 - 你将核心资源分配给2个上下文。这个功能确实有一些性能优势,但只有在两个上下文都是非推测性的情况下才有用。目前普遍的估计是,相对于一个接一个地运行这两个上下文,性能提升大约为10-30%,具体取决于工作负载组合(数据来自AnandTech的一篇评论here) - 如果你确实打算一个接一个地运行这两个任务,那么这很好,但如果你要丢弃其中一个任务的结果,那么就没有意义了。即使你忽略这里的模式切换开销,你也只能获得30%的增益,而失去50% - 这毫无意义。
另一方面,您可以选择预测分支(现代预测器平均成功率可达95%以上),并支付误判的惩罚,这已经部分隐藏在乱序引擎中(一些指令在分支清除后执行,大多数乱序机器都支持此功能)。这使得任何深度乱序引擎都可以自由地向前漫游,推测其全部潜力,并且大多数情况下都是正确的。在这里冲掉一些工作的几率呈几何级数下降(第一个分支后为95%,第二个后约为90%等),但清除惩罚也会减少。它仍然比n个分岔级别的全局效率1/n要好得多。

值得注意的是,预测是一种软件机制,用于消除预测分支的需要。(即使只有条件移动也足以有效地预测永远不会生成异常的代码。)IBM最近在POWER7中实现了单指令动态、有限(和选择性)预测。 - user2467198
@PaulA.Clayton,没错,但我猜测谓词对通用CPU的适应性不是很好。这更适用于数据流体系结构,而这种体系结构又往往非常专业化(或者说-非常糟糕)。 - Leeor
预测在乱序处理器的问题队列中添加了一个额外的源操作数,对于就绪检查有着预期的影响。这也引入了数据流依赖性;使用分支预测操作时,仅具有控制流依赖性但尚不可用的值可以被推测性地执行。(当然,那么就可以进行谓词预测...)。 - user2467198

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