查阅维基百科和互联网告诉我,统计显著性意味着通过p值阈值使测量或一组测量与零假设不同。这在这里如何应用?函数A比函数B更快的零假设是什么?
一旦我定义好了整个设置,我该如何确定何时停止测量?通常会看到基准测试运行三次,然后报告平均值;为什么不是五次或七次?根据this page on Statistical Significance(我承认我没有完全理解),费舍尔使用8作为他需要用98%的置信度来测量某些东西的样本数量;为什么是8?
95% CI = mean +/- 1.96 * sqrt(sigma2/N))
其中sigma2是函数A速度的方差,N
是您用于计算平均值和方差的运行次数。
您的第二个问题涉及统计功效分析和实验设计。您描述了一个连续的设置,要询问是否继续采样。顺序实验的设计实际上是统计学中非常棘手的问题,因为通常情况下,您不允许计算置信区间或P值,然后在未达到所需显着性水平的前提下进行附加采样。如果您希望这样做,最好设置一个贝叶斯模型,并计算速度A大于速度B的后验概率。然而,这是非常过度的。
在计算环境中,通常很容易实现非常小的置信区间,因为绘制大N很容易,并且方差通常很小--一个函数显然获胜。
考虑到维基百科和大多数在线资源在统计方面仍然很糟糕,我建议购买 Introductory Statistics with R。您将学习统计学和应用所学工具。
你真的关心统计显著性还是普通显著性?最终,你可能需要在可读性与性能之间做出判断 - 统计显著性并不能真正帮助你。
我使用的一些经验法则:
在可能的情况下,测试足够长的时间,使你有信心小的波动(比如其他事情短暂地中断了你的测试)不会产生太大影响。通常我认为30秒就足够了,但这取决于你的应用程序。测试时间越长,测试结果就越可靠 - 但显然你的结果会延迟 :)
多次运行测试可能是有用的,但如果你计时足够长的话,那么它就不像我认为的那么重要了。它可以减轻其他形式的错误,使得一个整个测试花费的时间比应该花费的时间更长。如果测试结果看起来可疑,当然要再运行一次。如果你看到不同运行的结果明显不同,那就运行几次,并尝试发现规律。
你引用的研究听起来更像是一个高度控制的环境。这只是一个纯实用的答案,已经一次又一次地证明其在性能测试中的有效性。
如果你正在对现代、多任务、多核计算环境中的代码进行基准测试,那么为了获得有用的基准测试结果,所需迭代次数随着要测量的操作时间的缩短而增加。
因此,如果你有一个需要 ~5 秒钟的操作,通常需要 10 到 20 次迭代。只要迭代之间的偏差保持相当恒定,那么你的数据就足够可靠,可以得出结论。通常你需要丢弃前两个迭代,因为系统通常会预热缓存等等。
如果你正在测试毫秒级别的东西,你需要成千上万次的迭代。这将消除其他进程等产生的噪音。
一旦你达到亚毫秒级别——10 纳秒级别——你需要数百万次的迭代。
虽然不完全科学,但在现代计算系统上进行“真实世界”的测试也是如此。
在比较结果时,考虑执行速度的差异百分比,而不是绝对值。小于 5% 的差异几乎可以忽略不计。
维基百科说:
除了表达人口的变异性外,标准差通常用于衡量统计结论的置信度。例如,民意调查数据中的误差范围是通过计算如果进行多次相同的调查结果的预期标准偏差来确定的。报告的误差范围通常约为标准差的两倍。
因此,如果您的目标是确保一个函数比另一个函数更快,您可以运行每个函数的多个测试,计算平均值和标准差。我预计,如果您在任何一个测试中的迭代次数很高,则标准差将很低。
如果我们接受误差范围的定义,您可以看到两个平均值是否比它们的总误差范围更远。