1个不稳定发布
0.0.0-alpha0 | 2022年12月8日 |
---|
#884 in 嵌入式开发
56KB
1.5K SLoC
µbench
"微基准",即:微控制器
是什么
这是一个小巧的工具包,旨在帮助您在微控制器上测试程序。
这并不是一个非常好的工具包。它
- 没有尝试进行统计上严格的测试
- 不尝试减轻CPU缓存/频率缩放/操作系统上下文切换等对基准测试的影响
- 不真正提供主机端处理的机制
- 不尝试模仿
test::bench
模块的输出 - 不使用
defmt
生态系统 [^1](为了支持没有probe-rs
支持的板)
[^1]: 没有什么阻止你编写一个利用defmt
机制的Reporter
,但这个工具包并不附带一个。默认的reporter是简单的,使用core::fmt
,并且空间效率低下。
µbench
非常有意作为临时代替品;我真诚地希望这个工具包将在不久的将来被取代。
然而,截至本文写作之时,似乎缺乏针对只想:在其设备上运行一些代码并获取循环计数,而无需启动调试器的用户的解决方案。因此有了这个工具包。
我知道的与此用例最接近的东西(我知道的)是liar
,不幸的是,当禁用std
功能时,它只是一个非常简单的东西。
它是如何工作的?
(特质的概述
Benchmark
可以是:fn
、闭包实现FnMut
、带setup
+teardown
的自定义实现- 这些通过引用获取一些
Inp
数据 (引用)
- 这些通过引用获取一些
BenchmarkRunner
允许您实际运行基准测试;有两种类型- 单次(可以通过
single
构造)- 恰好一个
Benchmark
实现
- 恰好一个
- 套件(可以通过
suite
构造)- 零个或多个在相同输入数据上运行的
Benchmark
实现们
- 零个或多个在相同输入数据上运行的
- 这些中的每一个也都需要一些
impl IntoIterator<Item = T>
作为输入源,其中T: Debug
- 这可以是一些范围(
0..10
)、一个数组(["hey", "there"]
)、一个迭代器((0..10).map(|x| 2u32.pow(x))
),等等。
- 这可以是一些范围(
- 单次(可以通过
- 要实际运行基准测试,您需要
- 一个
Metric
- 某种方法来实际测量基准测试;即时间、周期计数
- 一个
Reporter
- 某种方式来报告基准测试的结果
- 一个
用法
依赖关系
~0.2–0.9MB
~11K SLoC