【问题标题】:How expensive are debug conditional statements?调试条件语句有多昂贵?
【发布时间】:2016-04-30 20:09:51
【问题描述】:

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

我只是想知道这些条件语句在事物方案中实际上有多昂贵?

我通常不会担心它,但是代码中有很多这样的问题,对于大型问题实例,整个事情每次运行大约执行 20-50,000 次,所以这可能至少要多出一百万“每次运行的 if" 语句,虽然评估为 false,但必须有一些开销。

或者他们只是太快了,这并不重要?有时,一次运行可能需要长达 40 秒到一分钟。所以我想这只是其中的一小部分。

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

【问题讨论】:

  • 为什么不profile your code 发表你的结论呢?在我的意见中,在大多数情况下,假设您检查的条件不是计算量很大(在这些情况下您可以使用||&& 运算符的短路行为,以检查一些更易于计算的条件,以可能避免“主要”条件)。还要考虑 MATLAB 的条件(黄色)断点。

标签: matlab conditional processing-efficiency


【解决方案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 可能不是最佳选择。如果您只是想改进现有代码。我经常发现注释掉调试检查(对于知识渊博的用户)并且只有在函数崩溃时才取消注释,才能找到错误。

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

【讨论】:

  • 感谢提供信息,我不知道matlab的profiler功能!我运行了分析器,if 语句甚至没有在代码中注册为值得一提,即使我深入到最深的子函数,所以我想我会没事的。它确实引发了一些我错过的冗余,所以再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2011-06-08
  • 1970-01-01
  • 2016-01-31
  • 2011-01-06
  • 1970-01-01
相关资源
最近更新 更多