调试条件语句有多昂贵?
How expensive are debug conditional statements?
我正在 MATLAB 中开发组合优化算法,我有一堆条件语句,基本上只是检查标志,当设置为 true 时,将打印某个变量的值或显示当前进度或状态的数字系统,这样我可以在出现问题或需要检查时看到发生了什么。
我只是想知道这些条件语句在事物的方案中实际上有多昂贵?
我通常不会担心它,但代码中有很多这样的问题,对于大型问题实例,整个过程每个 运行 执行大约 20-50,000 次,所以这可能是每个 运行 至少有一百万个额外的 "if" 语句,在评估为 false 时,必须有一些开销。
或者它们只是速度太快以至于无关紧要? 运行 有时可能需要长达 40 秒到一分钟的时间。所以我想这只是其中的一小部分。
我应该将它们注释掉而不是使用标志变量吗?
您提到该程序运行此代码 20-50000 次,因此您可能有 100 万个额外的 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 语句 returns 为假,它所花的时间也是简单加法的两倍。但显然,这并不是人类尺度时间感的全部影响。您可以尝试分析您的代码并查看检查的影响。更好的是,您可以创建重复代码,但无需检查以真正查看影响。最后,代码的整体运行时间在宏伟的计划中可能并不过分重要。如果这是时间敏感的,我认为 matlab 可能不是最佳选择。如果您只是想改进现有代码。我经常发现注释掉调试检查(对于知识渊博的用户)并且只在函数崩溃时取消注释它们,才能找到错误。
请 post 提供示例或一些配置文件代码,以便我们了解以上是否适用于您的情况。
我正在 MATLAB 中开发组合优化算法,我有一堆条件语句,基本上只是检查标志,当设置为 true 时,将打印某个变量的值或显示当前进度或状态的数字系统,这样我可以在出现问题或需要检查时看到发生了什么。
我只是想知道这些条件语句在事物的方案中实际上有多昂贵?
我通常不会担心它,但代码中有很多这样的问题,对于大型问题实例,整个过程每个 运行 执行大约 20-50,000 次,所以这可能是每个 运行 至少有一百万个额外的 "if" 语句,在评估为 false 时,必须有一些开销。
或者它们只是速度太快以至于无关紧要? 运行 有时可能需要长达 40 秒到一分钟的时间。所以我想这只是其中的一小部分。
我应该将它们注释掉而不是使用标志变量吗?
您提到该程序运行此代码 20-50000 次,因此您可能有 100 万个额外的 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 语句 returns 为假,它所花的时间也是简单加法的两倍。但显然,这并不是人类尺度时间感的全部影响。您可以尝试分析您的代码并查看检查的影响。更好的是,您可以创建重复代码,但无需检查以真正查看影响。最后,代码的整体运行时间在宏伟的计划中可能并不过分重要。如果这是时间敏感的,我认为 matlab 可能不是最佳选择。如果您只是想改进现有代码。我经常发现注释掉调试检查(对于知识渊博的用户)并且只在函数崩溃时取消注释它们,才能找到错误。
请 post 提供示例或一些配置文件代码,以便我们了解以上是否适用于您的情况。