基准测试:我什么时候可以停止测量?

mmr*_*mmr 9 language-agnostic statistics benchmarking

我有一系列功能,都是为了做同样的事情而设计的.相同的输入产生相同的输出,但执行它们所需的时间因功能而异.我想确定哪一个是"最快的",我想确信我的测量结果是"具有统计意义".

仔细阅读维基百科和互联网告诉我,统计显着性意味着测量或测量组与零假设的p值阈值不同.这将如何适用?函数A比函数B快的假设是什么?

一旦我定义了整个设置,我该如何确定何时停止测量?我通常会看到基准测试运行三次,然后报告平均值; 为什么三次而不是五次或七次?根据统计意义的这一页(我自己承认我并不完全理解),费舍尔使用8作为他需要以98%的置信度测量某些东西的样本数量; 为什么8?

Mus*_*sis 5

我不会费心将统计原理应用于基准测试结果。一般来说,术语“统计显着性”是指您的结果是意外获得的可能性,并不代表对真实值的准确评估。在统计学中,由于简单概率的原因,偶然获得结果的可能性随着测量次数的增加而降低。在计算机代码的基准测试中,增加试验次数(统计学中的“n”)是一件微不足道的事情,以便意外结果的可能性低于您想要定义的任意阈值(“alpha”或水平)具有统计学意义)。

简单来说: 通过大量运行代码来进行基准测试,并且不用担心统计测量

请注意此答案的潜在反对者:此答案在某种程度上简化了问题,旨在以易于理解的方式说明这些概念。诸如“你显然不懂统计数据”之类的评论将导致野蛮的打击。记住要有礼貌。


Tri*_*tan 4

你在问两个问题:

  1. 如何执行函数平均时间A大于函数平均时间的统计显着性检验B
  2. 如果您希望自己的答案有一定的可信度,您应该采集多少样本?

第一个问题最常见的答案是您想要计算置信区间或执行t 检验。它与任何其他具有随机变化的科学实验没有什么不同。要计算函数 A 平均响应时间的 95% 置信区间,只需取平均值并在两侧加上 1.96 倍的标准误差即可。标准误差是方差除以 N 的平方根。也就是说,

95% CI = mean +/- 1.96 * sqrt(sigma2/N))
Run Code Online (Sandbox Code Playgroud)

其中 sigma2 是函数 A 的速度方差,N是用于计算均值和方差的运行次数。

你的第二个问题涉及统计功效分析和实验设计。您描述了一个顺序设置,您询问是否继续采样。顺序实验的设计实际上是统计学中的一个非常棘手的问题,因为通常不允许您计算置信区间或 p 值,然后在未达到所需显着性的情况下抽取额外的样本。如果您想这样做,明智的做法是建立一个贝叶斯模型并计算速度 A 大于速度 B 的后验概率。然而,这是巨大的杀伤力。

在计算环境中,实现非常小的置信区间通常是相当简单的,因为绘制大的 N 很容易,而且方差通常很小——一个函数显然会获胜。

鉴于维基百科和大多数在线资源在统计方面仍然很糟糕,我建议购买R 统计入门。您将学习统计数据和应用所学知识的工具。