1个不稳定发布

0.0.0-alpha02022年12月8日

#884 in 嵌入式开发

MIT 许可证

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