9 个不稳定版本 (4 个破坏性更新)
0.5.0 | 2019 年 4 月 3 日 |
---|---|
0.4.0 | 2018 年 12 月 31 日 |
0.3.3 | 2018 年 8 月 18 日 |
0.3.2 | 2017 年 3 月 1 日 |
0.1.0 | 2016 年 12 月 25 日 |
#118 in 性能分析
每月下载量 3,347
被 18 个 Crates 使用 (16 个直接使用)
23KB
293 行
microbench
一个微基准测试库(灵感来自 core_bench)。
在 Apache License 2.0 许可下发布。
支持 Rust 1.31.0 及以上版本。
注意:用于防止优化器删除计算的 retain
函数可能在 Rust 的稳定和测试渠道上运行不正确或性能不佳。如果你使用的是 Rust 的每日构建版本,请启用 nightly
crate 功能,以启用此函数的更好实现。
概述
microbench
使用线性回归来估计代码段执行时间。例如,以下表格可能代表 microbench
收集的关于代码段的数据。
迭代次数 | 时间(纳秒) |
---|---|
1 | 19 |
2 | 25 |
3 | 37 |
4 | 47 |
5 | 56 |
microbench
当然会采集比 5 个更多的样本,并且迭代次数是按几何级数增长的,但基本思想是相同的。收集了这样的数据后,microbench
使用普通最小二乘法(OLS)线性回归来估计代码段的实际执行时间。使用 OLS 和以上数据将得到估计执行时间为 9.6
纳秒,拟合优度(R²)为 0.992
。
示例
use microbench::{self, Options};
fn fibonacci_iterative(n: u64) -> u64 {
let (mut x, mut y, mut z) = (0, 1, 1);
for _ in 0..n { x = y; y = z; z = x + y; }
x
}
fn fibonacci_recursive(n: u64) -> u64 {
if n < 2 {
n
} else {
fibonacci_recursive(n - 2) + fibonacci_recursive(n - 1)
}
}
let options = Options::default();
microbench::bench(&options, "iterative_16", || fibonacci_iterative(16));
microbench::bench(&options, "recursive_16", || fibonacci_recursive(16));
示例输出
iterative_16 (5.0s) ... 281.733 ns/iter (0.998 R²)
recursive_16 (5.0s) ... 9_407.020 ns/iter (0.997 R²)