我知道何时可以轻松预测分支更好地使用IF语句,因为该分支是完全免费的。我了解到,如果不容易预测分支,那么CMOV会更好。但是,我不太了解如何实现?
当然问题域仍然相同-我们不知道要执行的下一条指令的地址吗?因此,我不明白在执行CMOV时如何一直沿管道向下移动,这如何能帮助指令提取程序(过去返回10个CPU周期)选择正确的路径并防止管道停顿?
有人可以帮我了解CMOV如何改善分支吗?
最佳答案
CMOV指令不指导控制流的路径。它们是被执行以基于条件代码来计算结果的指令,即谓词指令。某些体系结构(如ARM)可以基于条件代码来确定多种形式的指令,但是x86只能执行“移动”,即条件移动(CMOV)。它们被解码,并以等待时间执行以确定指令的结果。
另一方面,分支是可以预测的,实际上可以指导指令的执行。分支预测器“寻找”指令“取指令”的前面,特别是寻找分支指令,并通过控制流程来预测路径。想像一下一个铁轨,前方的人向左或向右移动铁轨以告知火车去向。现在,如果该人选择了错误的方向,则火车必须停下来备用,然后再朝正确的方向移动。很多时间浪费了。
另一方面,CMOV不会引导流程。它们只是简单的指令,需要花费更多时间(并创建其他依赖项),以根据条件代码找出正确的移动结果。想一想火车,而不是决定左走还是右走,走一条不需要转弯的直线路径,但是速度稍慢(显然方式更复杂,但这是我现在能想到的最好的方法)。
CMOV过去确实很糟糕(非常高的延迟),但后来又提高了相当快的速度,从而使它们更加有用且更有价值。
希望这可以帮助..
关于assembly - CMOV有什么用,它可以提高CPU管道性能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27136961/