gpt4 book ai didi

performance - 为什么条件移动不易受到分支预测失败的影响?

转载 作者:行者123 更新时间:2023-12-03 05:22:45 25 4
gpt4 key购买 nike

阅读后this post (answer on StackOverflow) (在优化部分),我想知道为什么条件移动不易受到分支预测失败的影响。我发现an article on cond moves here (PDF by AMD) 。此外,他们还声称 cond 具有性能优势。移动。但这是为什么呢?我没看到。在评估该 ASM 指令时,尚不知道前面的 CMP 指令的结果。

最佳答案

错误预测的分支代价高昂

如果一切顺利的话,现代处理器通常每个周期执行一到三个指令(如果它不会停止等待这些指令从先前指令或内存到达的数据依赖性)。

上面的语句对于紧密循环来说出人意料地适用,但这不应该让您忽视一个额外的依赖项,该依赖项可以阻止指令在其周期到来时执行:对于要执行的指令,处理器必须在 15-20 个周期之前开始获取和解码它。

处理器遇到分支时应该做什么?获取和解码两个目标不会扩展(如果有更多分支,则必须并行获取指数数量的路径)。因此,处理器仅推测地获取并解码两个分支之一。

这就是为什么错误预测的分支代价高昂:它们花费了 15-20 个周期,而这些周期由于高效的指令管道而通常是不可见的。

有条件迁移从来都不是很昂贵

条件移动不需要预测,因此它永远不会有这种惩罚。它与普通指令一样具有数据依赖性。事实上,条件移动比普通指令具有更多的数据依赖性,因为数据依赖性包括“条件真”和“条件假”两种情况。在有条件地将 r1 移动到 r2 的指令之后,r2 的内容似乎取决于 r2 的先前值code> 和 r1。良好预测的条件分支允许处理器推断出更准确的依赖关系。但是,如果数据依赖项需要时间才能到达,那么它们通常需要一到两个周期才能到达。

请注意,从内存到寄存器的条件移动有时会是一个危险的赌注:如果条件是从内存读取的值未分配给寄存器,那么您就白等了内存。但指令集中提供的条件移动指令通常是寄存器到寄存器,从而防止程序员出现这种错误。

关于performance - 为什么条件移动不易受到分支预测失败的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14131096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com