我如何解释`cargo bench`的输出?

Ser*_*gey 3 testing measurement rust

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

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)
Run Code Online (Sandbox Code Playgroud)

例如test bench_few_core,我看到:

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

它们都是什么意思?

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

She*_*ter 5

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

对于您的示例:

  • 中位数:26249920 ns/iter
  • 最大-最小:2836381 纳秒/迭代
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, ',')
)
Run Code Online (Sandbox Code Playgroud)

源代码

请注意,基准测试背后有各种统计工作,最明显的事实是截断了上下 5% 的样本以减少异常值的影响。