22 个版本 (稳定)
1.0.15 | 2023 年 12 月 20 日 |
---|---|
1.0.14 | 2023 年 10 月 25 日 |
1.0.11 | 2023 年 8 月 5 日 |
1.0.10 | 2023 年 3 月 13 日 |
0.1.6 | 2022 年 7 月 16 日 |
#491 in 算法
每月 76 次下载
用于 3 crate
27KB
412 行
Times
作者:Libor Spacek
用于在 Rust 中计时和比较算法的基准测试。
完全使用 100% 安全的 Rust 编写。
用法
use times::*;
简介
此 crate 通常添加到 Cargo.toml
下的 [dev-dependecies]
中,然后在 tests
或 benches
目录下的源文件中使用。只要需要运行时速度比较,就可以使用它,这在实际中几乎总是需要的。
Times
适用于测试对整个 Vec
数据集工作的算法,例如排序。甚至可以测试整个数据集的矩阵 &[Vec<T>]
。
应该单独测试结果的正确性。在这里,算法产生的结果被丢弃,只记录执行时间(纳秒)。
使用 ran
crate 自动生成随机数据,然后反复执行给定数组中的闭包,并收集它们的统计数据(执行时间的中间值和它们的扩散(mad
)。Mad 代表从中间值到绝对差异的中间值;它是数据扩散的最稳定度量。重复运行减少了由于机器负载变化、缓存利用率等不可避免的临时效应。通过使用 mad
而不是标准差来最小化异常值的影响。
所有算法都在相同的数据上运行以进行精确比较,但每次重复运行时数据都会更改。
偏差表示对重复测量的可靠性的怀疑。高值表示可靠性差。通过增加重复次数,相对测量误差(以百分比表示的偏差)通常可以降低。随着数据向量的长度增加,机器负载的干扰也会减少。
我们对每次重复运行生成新的随机数据。算法之间的偏差差异告诉我们它们在数据变化下的相对稳定性。一些算法存在数据敏感性(最坏情况性能较差)的问题,这可能会通过相对较高的偏差来表示,例如对于 rust-sort
(标准的Rust排序)。
测试还会自动在不同的输入数据向量长度上进行重复,在指定的范围和步长内。这使得可以在问题难度增加时比较算法。具有较低的计算复杂度和/或更快实现的算法将在更长的长度上开始更有说服力地获胜。
当数据长度变得太大时,则可能必须外部终止进程。当然,这取决于算法和机器的速度。建议最初使用适度的值。
主要功能
-
Mad,作为更稳定的偏差(测量误差)度量。
-
易于使用 - 只需指定
- 数据向量长度的范围和步长
- 在不同随机数据上的重复次数
- 一些用于识别算法的名称
- 调用算法的闭包(按其标签的顺序排列)。
-
排序输出。
算法将在每个数据类别的执行时间内自动排序,即每个数据类别的最快算法将首先列出,最慢的算法将最后列出。
提供的测试函数
完全支持四种不同类型的四种数据: u8,u16,u64,f64
。以后可能还会添加其他端类型。请参阅 tests/tests.rs
。
-
用于计时不带或带常量参数的闭包的简单函数
bench
。 -
用于在输入切片上测试算法的 Bench 函数,例如在输入数据类型
&[f64]
上:benchu8, benchu16, benchu64 和 benchf64
。 -
用于测试修改其输入的算法的 Bench 函数,例如数据类型:
&mut [f64]
。当测试的任何算法修改其输入时,必须使用可变版本:mutbenchu8, mutbenchu16, mutbenchu64 和 mutbenchf64
。 -
用于接受 nd 数据(矩阵)的算法的 Bench 函数,例如
&[Vec<f64>]
:benchvvu8, benchvvu16, benchvvu64 和 benchvvf64
。
结论
请参阅 tests/test.rs
以获取指定闭包和在这些函数上调用它们的示例。
附录 - 最近发布
版本 1.0.15 升级到 Ran v 2.0.0
版本 1.0.14 升级到 Medians v 3.0.0,启用对 Nans 的检查,改进报告。
版本 1.0.13 修复了测试中的一些依赖问题。
版本 1.0.12 移除了对 devtimer
的依赖。
版本 1.0.11 将依赖项 indxvec
升级到 1.8,medians
升级到 2.3。
版本 1.0.10 将依赖项 medians
升级到 2.2。
版本 1.0.9 添加了 mutbenchu16
和 benchvvu16
。简化了打印输出。
版本 1.0.8 添加了 benchu16
。更新了依赖项 medians
到 ^2.1 和 indxvec
到 ^1.4。
版本 1.0.7 将依赖项 medians
升级到 v.2.0.0 和 indxvec
。
版本 1.0.6 更新了依赖项 medians
和 github actions。
版本 1.0.5 将依赖项 ran
升级到 1.0
。
版本 1.0.4 不再使用数值的幅度,现在采用数据长度的实际范围和步长。更灵活。
依赖项
~165KB