为什么人们在平均计时结果时会忽略最低时间?

计算科学 基准测试
2021-12-23 02:41:52

大多数时候,当我看到有人在计算数学论文中报告计算机上某个算法的平均时间时,他们会这样做:

  1. 运行操作次(例如,次);nn=100
  2. 丢弃最低和最高次(例如,异常值);mm=10
  3. 计算剩余次的平均值。n2m

我可以理解为什么放弃最高结果是有意义的:这些很可能是计算机将线程切换到做其他事情的情况。我不明白为什么放弃最低结果是有道理的。

为什么我要防止异常值比其他迭代更快?如果有的话,直觉上我会说它是结果中的最小值它告诉我我的计算机真正需要多少时间来运行该算法。所有其他实例都是计算机切换到其他东西,或者管道和多线程没有得到最佳使用的情况。n

我可以想象这有意义的唯一情况是报告的结果非常接近时钟的精度,但在这种情况下,我会说正确的方法是重复测量运行的时间同时(例如,),然后丢弃这些数字上的异常值。但是在主要关注多任务处理引起的异常值的情况下,我看不到这个过程的优势。kk=100

1个回答

我不知道为什么 Chris Rackaukas 隐藏了他的答案,因为它实际上非常好。在下文中,我将假设被测试的程序每次都执行相同的指令。

我相信那些在两个方向都使用平均值或忽略异常值的人并没有完全理解他们期望从运行时间中得到什么样的统计数据。他们的假设似乎是运行时的统计噪声可以是正的也可以是负的,但当然这实际上不是真的:噪声总是正的。因此,计算平均值或忽略两个方向的异常值是没有意义的。运行时间的唯一合理的统计估计是采用最小的运行时间。