正确统计以报告加速结果


12

假设我有一些代码的慢速版本和快速版本,并想报告比较两者的加速值。我运行慢速版本次,快速版本m次,产生时间s 1s nf 1f m。产生加速的最简单方法是平均的手段: ˉ 小号nm(s1,,sn)(f1,,fm) 然而,这并未考虑离群值。

s¯f¯=mi<nsinj<mfj

问题:报告加速数字时使用的最佳统计数据是什么?


3
标准偏差与平均值相比有多大?无论您做什么,都应该报告所做的事情,并且如果错误条很大,则可能要放置错误条。如果它们确实很大,则应调查源。除非程序本身包含随机组件,或者您正在与其他人共享计算机资源(这可能是网络或磁盘,而不仅仅是群集节点),否则大多数计算机代码应在时间上确定性地运行。如果存在争用磁盘资源的问题,则可以考虑在禁用I / O(非常常见)的情况下报告性能-请务必注意。
比尔·巴特

在爱迪生(Cray超级计算机)上,两个样本之间有2%的差异。在我的笔记本电脑上,我看到10个样品测得的标准偏差为6-8%。两者都仅用于计算内核,没有I / O。
2014年

为了弄清楚为什么在方差已经相当低的情况下为什么要提及离群值:这是一个足够基本的统计量,我想知道理想的报告方法,即使在这种情况下我也可以采用非理想的方法。
Geoffrey Irving

2
问题是,您在尝试交流什么,而公式可以最好地交流?我认为我从来没有看过一篇报道加速运行间差异的论文,除非原因是论文的核心。假设我们在运行时间和处理器/任务/线程数之间建立了线性关系,那么使用均值的比率可能很好,但是在误差范围内使用最大值/最小值和最小值/最大值的比率如果您认为显示范围很重要。另外,您可能应该查看频率缩放比例和任务固定选项,以减少可变性。:)
Bill Barth

消除IO可能有很多技巧。在编译器优化与“写时复制”技巧之间,可能存在真正的非显而易见的联系。我通常遵循d1 = loadData()的原型;d2 =复制(d1); r1 =算法(d2); r2 = algo(d1),并且仅考虑第二次运行的时间。
meawoppl 2014年

Answers:


9

除了上文中Bill Barth所说的以外,我还想说人们经常报告几次跑步中最快的一次。理由是实际运行时间是理想的运行时间,再加上其他进程运行,操作系统延迟,网络延迟等导致的任何数量的减慢。由于这些都是我们不感兴趣的噪音,因此使用最快的运行时间最接近我们真正想知道的那个。


不幸的是,当报告两种算法之间的加速时,该原理无济于事。
Geoffrey Irving

3
@GeoffreyIrving,为什么不呢?两种算法都具有理论上的性能期望值与问题大小(或处理器数量或其他非统计参数)的关系,而忽略了低阶和与参数无关的术语。使用最快的时间(并注意这一事实)只是在帮助您忽略这些附加条款。这似乎是个不错的策略。除非您以不同的方式告诉我们,否则您似乎正在尝试找出如何最有效地传达算法之间的区别,并且Wolfgang的建议是传统的且可预期的,因此可能会最好地传达该信息。
比尔·巴特

1
糟糕,是的,您是对的。我很高兴撤回声明。
Geoffrey Irving

(+1)一个附带的问题:我完整地看到了您关于非对称噪声分布等的观点。让我们说,尽管我制作了一个实现A,一个实现B和我对其进行了基准测试,并经过合理的运行, A的第25个分位数以及中位数和均值比B快约4.5倍,而0%的分位数是〜3倍。在将实现A与B进行比较时,尽管存在以下事实:yes A is theoretically only ~3x faster在使用实现A而不是B时,不是〜3倍的加速代表了加速吗?(这是一个真实的例子的方式)
usεr11852

1
@usεr11852:这完全取决于您所使用的系统。如果您的中位数或第25分位数相距甚远,以至于按照您在此处假设的方式使统计数据失真,那么您很可能在一个噪声很大的系统上。例如,它可能同时被其他人使用,等等。这可能并不代表其他人进行重复实验的系统,在我看来,您在这种情况下的销售超额。因此,我仍然建议报告最佳运行。无论您做什么,都应该在文件中报告使用的统计数据。
Wolfgang Bangerth,2015年

1

我建议您使用中位数进行统计估算。与均值不同,中位数不会被异常值破坏。


1
对于所有噪声均为正(即具有非对称噪声分布)的数据,中位数与任何其他统计数据一样差。对于运行时,确实如此,请参阅上面的答案。
Wolfgang Bangerth,2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.