【问题标题】:How do I interpret the output of `cargo bench`?如何解释“cargo bench”的输出?
【发布时间】:2018-01-18 14:23:09
【问题描述】:

我用 cargo bench 对我的 Rust 项目进行了基准测试,并在结果中看到了很多数字......它们是什么意思?

2 tests
test bench_few_core ... bench:  26,249,920 ns/iter (+/- 2,836,381)
test bench_one_core ... bench:   6,087,923 ns/iter (+/- 752,064)

例如test bench_few_core,我明白了:

  • 数字 1 = 26
  • 数字 2 = 249
  • 数字 3 = 920
  • 数字 4 = 2
  • 数字 5 = 836
  • 数字 6 = 381

它们都是什么意思?

我认为每个测试应该有 2 个数字:数学期望(或平均值)和标准差。

【问题讨论】:

  • “我认为每个测试应该有 2 个数字” 事实上,正如您所料,每个基准函数都有两个数字。你能说得更具体点吗?
  • 我将问题编辑为更具体的数字。

标签: testing rust measurement


【解决方案1】:

数字是median最大值和最小值之间的差,使用以美国为中心的数字样式(使用逗号作为千位分隔符)表示。

你的例子:

  • 中位数:26249920 ns/iter
  • 最大-最小:2836381 ns/iter
let median = bs.ns_iter_summ.median as usize;
let deviation = (bs.ns_iter_summ.max - bs.ns_iter_summ.min) as usize;

write!(
    output,
    "{:>11} ns/iter (+/- {})",
    fmt_thousands_sep(median, ','),
    fmt_thousands_sep(deviation, ',')
)

source code

请注意,有各种统计工作underlying the benchmarking,最明显的是截断了上下 5% 的样本以减少异常值的影响。

【讨论】:

  • @Alec 呃,不知道那里出了什么问题!我的大脑一定是卡在了一种模式!
【解决方案2】:

您的示例确实显示了您每次测试所期望的两个数字:每次迭代的中位数和总偏差(即max-min),以纳秒为单位。

请注意,对于大数字,美国英语的标准做法是以逗号分隔的 3 组数字写入。例如,26249920 通常写成 26,249,920。

【讨论】:

  • @Shepmaster 你有那个链接吗?这些数字对于方差来说看起来非常小,但对于标准偏差来说它们看起来是正确的……
  • 看来我们都错了。根据the source code,这些数字实际上是中位数总偏差(即max-min)。
  • 是的,正在做同样的搜索。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 2014-08-09
  • 2021-06-01
  • 2014-02-03
  • 2018-09-16
  • 2018-09-09
相关资源
最近更新 更多