与数学函数相比,条件指令的执行速度

Max*_*one 5 c c++ assembly computer-science computation

我会尽我所能地回答我的问题(不容易......对我来说也不是那么清楚).例如,假设您有一组带有多个操作数的IF ... THEN指令

IF ((a==0) && (b==1) && (c==1)) THEN x=1
ELSE IF ((a==0) && (b==0) && (c==1)) THEN x=2-
Run Code Online (Sandbox Code Playgroud)

等等

假设我可以用一个单独的数学函数替换所有这些IF x = a * n1 + b * n2 + c * n3(这只是为了给你一个想法,实际上它更复杂,但IF和操作数还有更多)

该功能来自先前训练的人工神经网络.

我的直觉是,当涉及到执行时,函数应该比IF更少的时间,但它只是一种直觉来自我在装配中的旧背景,他们告诉我们条件指令比花费更多的时间算术的.

你能证实这一点吗?甚至可以给我一些链接,我可以找到解释?

提前谢谢你们!

Sal*_*gar 4

你的直觉是正确的。

问题是现代处理器有一个管道,并且在管道中,下一个x指令被顺序加载以准备执行。如果你有一个分支,一个 if 语句,那么处理器不知道你接下来要采用哪个代码路径,因此它会使用分支预测器进行猜测,但如果它出错了,它必须扔掉所有代码管道并再次沿着正确的分支开始。

现代处理器中的分支预测器非常好,但是如果您有 50/50 的机会向某一方向或另一方向发展的东西,您将会遇到很多管道停顿。

这就是为什么消除 if 语句是好的,尤其是在紧密循环中。

这似乎有一些很好的解释:http://igoro.com/archive/fast-and-slow-if-statements-branch-prediction-in-modern-processors/