调试条件语句有多贵?

时间:2016-01-24 14:31:19

标签: matlab conditional processing-efficiency

我正在MATLAB中开发一个组合优化算法,我有一堆条件语句基本上只检查标志,当设置为true时将打印某个变量的值或显示当前进度或系统状态的数字所以如果出现问题或者我需要检查它,我可以看到发生了什么。

我只是想知道这些条件陈述在事物计划中究竟有多贵?

我通常不会担心它,但代码中有相当多的内容,对于大型问题实例,每次运行整个事务执行大约20-50,000次,因此可能至少有一百万额外"如果"每次运行的语句,在评估为false时,必须有一些开销。

或者它们是如此之快以至于它真的不重要?有时候跑步可能需要40秒到一分钟。所以id想象它只是其中的一小部分。

我应该将它们注释掉而不是使用标志变量吗?

1 个答案:

答案 0 :(得分:1)

你提到该程序运行此代码20-50000次,因此你可能有一百万个额外的if语句。要记住的是相对开销。如果其余代码的开销有限,则if语句可能很重要。下面是一些脏的简单代码:

for aa=1:10000
    a=1+1;
    if a~=2
        pause
    end
end

分析时: 耗费时间最多的行

7 end     10000 0.043s  40.0%
4 if a~=2 10000 0.043s  40.0%
3 a=1+1;  10000 0.021s  20.0%

在这个非常简单的情况下,即使if语句返回false,它也需要两倍的简单加法。显然,它在人类规模的时间感上并不是一大堆影响。您可以尝试分析代码并查看检查的影响。更好的是,您可以创建一个重复的代码但没有检查才能真正看到影响。最后,代码的整体运行时间在宏观方案中可能并不过分重要。如果这是时间敏感的,我会提出matlab可能不是最好的选择。如果您只是想改进现有代码。我经常发现注释掉调试检查(对于知识渊博的用户)并且只在函数崩溃时取消注释它们才能找到错误。

请发布一个示例或一些个人资料代码,以便我们可以查看上述任何内容是否适用于您的情况。