【发布时间】:2017-10-11 20:51:07
【问题描述】:
我感兴趣的是比较两个不同函数的速度,两个函数使用相同的输入数据 (BMP)。
当我们测量函数的执行时间(始终使用相同的输入)时,即使我们应该得到相同的结果(时间),我们也不会得到相同的结果(时间),因为程序在多任务环境中运行。即使我们以“高优先级”运行我们的程序,来自其他程序的一些干扰也会减慢我们的程序(为了简化,让我们考虑单核计算机)。
因此,大多数人会多次对该函数计时并取平均值。我的问题是为什么我们不记录最小的执行时间而不是平均时间?最小执行时间应该比平均执行时间更接近真实情况。
【问题讨论】:
-
只有在没有不同的执行路径可以走的情况下才反映真正的执行时间。一个执行路径可能比另一个执行路径更长/更慢。例如,如果不满足某些条件,最短的(及时)可能只是提前返回。这并不反映典型的执行时间,这是大多数人想知道的。以我的 BigInteger.divide() 为例。如果传入的除数为零,则执行时间很短。但如果不是这种情况,它也可以非常长。
-
更长的执行时间的存在证明该函数可能需要比最小测量时间更长的时间。大多数人都对任意时间任意负载下的性能感兴趣。
-
对不起。我还没有很好地定义问题。我添加了这个:“测量函数的执行时间(使用始终相同的输入)” - 所以,现在没有不同的执行路径。再次抱歉。
-
这仍然不能为您提供太多信息,除非您使用许多不同的输入进行测试。
-
@SertacAkyuz - “更长的执行时间的存在证明该函数可能需要比最小值更长的时间” - 是的。自然。如果计算机忙于其他任务,人们可能会期待这一点。我同意。但是当我们测量一个函数的速度时,我们通常希望看到一些代码优化前后的速度。我们必须排除这种随机条件/测试环境。因此,我认为如果环境给出了相当大的差异,它就不能用于测试。
标签: c++ delphi profiling execution timing