Rust的criterion:完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Rust的Criterion库:统计基准测试

\n\n

在系统编程的世界里,性能不仅仅是一种愿望,而常常是硬性要求。Rust作为一种让开发者能够控制内存和执行时间的语言,需要能够精确测量这种控制的工具。这时,Criterion应运而生——这是一个用于统计基准测试的库,它将性能测量过程从粗糙的“秒表”转变为科学实验。

\n\n

为什么需要这个库?Rust中的标准基准测试(通过#[bench])虽然有用,但它有一个根本性缺陷:它没有考虑统计离散性。现代处理器具有复杂的架构,包含缓存、分支预测器和睿频加速。同一段代码可能因操作系统“噪声”、CPU温度或缓存随机状态而在不同时间执行。Criterion通过多次运行每个测试、收集执行时间样本并应用统计方法(平均值、中位数、标准差、百分位数)来解决这个问题。结果不仅仅是“微秒级时间”,而是一个置信区间,它表明:“真实执行时间有95%的概率落在X到Y的范围内”。

\n\n

此外,Criterion还提供了强大的回归分析工具。您可以比较代码两个版本(例如,优化前后)的性能,并获得统计上显著的回答:“新版本是否更快,还是差异在误差范围内?”。该库会生成漂亮的HTML报告,包含图表、直方图和表格,使性能分析变得直观且有说服力。对于库开发者、游戏引擎、数据库、加密算法以及任何纳秒级性能至关重要的代码来说,这是一个不可或缺的工具。

\n\n

安装

\n\n

通过包管理器cargo将Criterion安装到Rust项目中。您需要将依赖项添加到项目的Cargo.toml文件中。建议将其添加为开发依赖项,因为基准测试不是最终应用程序的一部分。

\n\n
[dev-dependencies]\ncriterion = { version = "0.5", features = ["html_reports"] }\n\n[[bench]]\nname = "my_benchmark"\nharness = false
\n\n

说明:

\n
    \n
  • version = "0.5" — 指定库的版本。在撰写本文时,最新版本是0.5.x。
  • \n
  • features = ["html_reports"] — 启用生成包含图表的HTML报告。这是一个可选但非常有用的功能。
  • \n
  • [[bench]] — 告诉Cargo我们有一个名为my_benchmark的基准测试。
  • \n
  • harness = false — 禁用Cargo内置的基准测试运行器。这是为了让Criterion接管控制权所必需的。
  • \n
\n\n

之后,创建文件benches/my_benchmark.rs(路径应与[[bench]]中指定的名称一致)。

\n\n

快速入门:最小工作示例

\n\n

让我们编写一个最简单的基准测试,测量计算从1到1000的数字之和的速度。

\n\n
// benches/my_benchmark.rs\nuse criterion::{black_box, criterion_group, criterion_main, Criterion};\n\nfn sum_up_to(n: u64) -> u64 {\n    let mut sum = 0;\n    for i in 1..=n {\n        sum += i;\n    }\n    sum\n}\n\nfn bench_sum(c: &mut Criterion) {\n    // black_box防止编译器优化\n    c.bench_function("sum 1000", |b| b.iter(|| sum_up_to(black_box(1000))));\n}\n\ncriterion_group!(benches, bench_sum);\ncriterion_main!(benches);
\n\n

如何运行:

\n
cargo bench
\n\n

根

推荐