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 性能分析

Download history 716/week @ 2024-03-15 830/week @ 2024-03-22 651/week @ 2024-03-29 1344/week @ 2024-04-05 1036/week @ 2024-04-12 852/week @ 2024-04-19 1098/week @ 2024-04-26 1129/week @ 2024-05-03 1035/week @ 2024-05-10 969/week @ 2024-05-17 1184/week @ 2024-05-24 1050/week @ 2024-05-31 757/week @ 2024-06-07 751/week @ 2024-06-14 1010/week @ 2024-06-21 625/week @ 2024-06-28

每月下载量 3,347
18 个 Crates 使用 (16 个直接使用)

Apache-2.0

23KB
293

microbench

crates.io docs.rs Travis CI

一个微基准测试库(灵感来自 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²)

无运行时依赖

功能