我会尽我所能地回答我的问题(不容易......对我来说也不是那么清楚)。 假设您有一组带有多个操作数的IF ... THEN指令,例如
IF ((a==0) && (b==1) && (c==1)) THEN x=1
ELSE IF ((a==0) && (b==0) && (c==1)) THEN x=2-
等等
假设我可以使用单个数学函数替换所有这些IF
x = a * n1 + b * n2 + c * n3
(这只是为了给你一个想法,实际上它更复杂,但IF和操作数还有更多)
该功能来自以前训练过的人工神经网络。
我的直觉是,当涉及执行时,该功能应该比IF更少的时间,但它只是一种直觉来自我在装配中的旧背景,他们告诉我们有条件指令比算术指令花费更多时间。
你能证实吗?甚至可以给我一些链接,我可以找到解释?
先谢谢你们!
答案 0 :(得分:4)
你的直觉是正确的。
问题是现代处理器有一个流水线,在流水线中,下一个 x 指令按顺序加载,准备执行。如果你有一个分支,一个if语句,那么处理器不知道你接下来要采用哪个代码路径,所以它使用分支预测器进行猜测,但是如果它得到了它错了它必须扔掉所有的管道并重新开始正确的分支。
现代处理器中的分支预测器非常好,但是如果你有一个50/50的机会以某种方式运行,那么你将会有很多管道停滞。
这就是为什么消除if语句是好的,特别是在紧密循环中。
这似乎有一些很好的解释:http://igoro.com/archive/fast-and-slow-if-statements-branch-prediction-in-modern-processors/