#median #data #statistics #vec #testing #repeated #length

times

计时基准,重复运行,带统计

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 算法

Download history 34/week @ 2024-04-02 246/week @ 2024-04-09 10/week @ 2024-04-16 23/week @ 2024-04-23 9/week @ 2024-04-30 11/week @ 2024-05-07 5/week @ 2024-05-14 1/week @ 2024-05-21 11/week @ 2024-05-28 21/week @ 2024-06-04 20/week @ 2024-06-11 1/week @ 2024-06-18 4/week @ 2024-06-25 60/week @ 2024-07-02 1/week @ 2024-07-09 10/week @ 2024-07-16

每月 76 次下载
用于 3 crate

BSD-3-Clause

27KB
412

Times crates.io crates.io GitHub 最后提交 Actions 状态

作者:Libor Spacek

用于在 Rust 中计时和比较算法的基准测试。
完全使用 100% 安全的 Rust 编写。

用法

use times::*;

简介

此 crate 通常添加到 Cargo.toml 下的 [dev-dependecies] 中,然后在 testsbenches 目录下的源文件中使用。只要需要运行时速度比较,就可以使用它,这在实际中几乎总是需要的。

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 添加了 mutbenchu16benchvvu16。简化了打印输出。

版本 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