【问题标题】:Does the order of if-conditions inside a loop influence execution speed?循环中 if 条件的顺序会影响执行速度吗?
【发布时间】:2020-11-14 13:09:17
【问题描述】:

为了优化执行速度,建议避免在循环中使用 if 条件。想象有一种情况,loop unswitching不可能可能,但有关条件频率的信息(或估计)是可用的。

if-else-statement 中的条件顺序会影响执行速度吗?

假设我现在(或估计)条件 A 出现 80%,B 出现 15% 和 C 仅 5%,并且计算条件的时间是相等的。这样写循环会更好还是顺序对执行时间没有影响?

for (i in N){
    if (A(i))
        foo(i)
    else if (B(i))
        bar(i)
    else
        foobar(i)
}

是否有关于条件顺序的最佳做法?它依赖于语言吗?如果评估条件的时间不相等怎么办?在这种情况下,最好从最便宜到最贵的顺序排列条件吗?

【问题讨论】:

    标签: performance loops if-statement optimization


    【解决方案1】:

    理论上,将最有可能的分支放在最前面应该是最快的,因为需要检查的条件更少。要交换检查顺序,重要的是对于所有输入 i,恰好满足其中一个可能的条件。

    在实践中,如果您使用的是编译语言,由于分支预测,您可能无法分辨性能差异。 A great explanation was provided here。对于解释型语言,这方面可能没有影响,因为解释器无论如何都需要完整的指令来读取文本行,因此流水线无论如何都无法启动。

    如果你的语言有一个 switch 语句,你可能应该使用它,因为编译器更清楚它得到了什么,所以它可以提取更多的技巧

    【讨论】:

    • 你认为分支预测与解释语言一样有效吗?
    • 不,在解释型语言中,分支预测不应该有很大的影响(因为无论如何它们都很慢并且需要先解析输入)。但如果你问的是这种小调整的性能,我认为他不太可能使用解释性语言。但好点,我将它添加到答案中。
    猜你喜欢
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2015-05-31
    相关资源
    最近更新 更多