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

How do I interpret the output of `cargo bench`?

我用 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,我看到:

它们都是什么意思?

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

数字是最大值和最小值之间的 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% 被截断以减少离群值的影响。

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

请注意,对于较大的数字,美国英语的标准做法是将数字以 3 为一组,以逗号分隔。比如26249920经常写成26249920。