2016-01-24 88 views
0

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

我只是想知道这些条件语句实际上是多么昂贵的东西的计划?

我通常不会担心它,但是代码中有不少它们,整个事件对于大型问题实例每次运行执行大约20-50,000次,因此可能至少有一百万次额外每次运行的“if”语句在评估为false时都必须有一些开销。

还是他们只是如此之快,它并不重要?有时运行可能需要40秒到1分钟的时间。所以我认为这只是其中的一小部分。

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

+2

为什么不[profile你的代码](http://www.mathworks.com/help/matlab/matlab_prog/profiling-for-improving-performance.html)并发布你的结论?在我的_opinion_中,在大多数情况下,假设你检查的条件不是计算量大的(在这种情况下,你可以使用'||'和''' &&'运营商的短路行为,以检查一些更容易计算的条件,以避免“主要”)。还要考虑MATLAB的条件(黄色)断点。 –

回答

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可能不是最好的选择。如果你只是想改善现有的代码。我经常发现注释掉调试检查(对于有知识的用户),并且只在函数崩溃时才对它们进行注释,以查找错误。

请张贴一个示例或一些配置文件代码,以便我们可以看到上述任何情况是否适用于您的情况。

+0

感谢您提供的信息,我不知道matlab的profiler功能!我运行了剖析器,if语句在代码中甚至没有注册为值得一提的内容,即使我深入了解最深层次的儿童函数,所以我认为我会好起来的。它确实抛出了我曾经错过的一些冗余,所以再次感谢! – guskenny83