#timestamp #counter #stamp #measurement #tsc #time

nightly no-std tsc-timer

基于时间戳计数器(TSC)的定时器

6 个版本

0.1.5 2018年9月22日
0.1.4 2018年9月21日

#741硬件支持

每月 28 次下载

MIT/Apache

15KB
175

x86/x86_64 基于 time-stamp-counter (TSC) 的定时器

Travis-CI Status Appveyor Status Latest Version docs


tsc-timer crate master 分支的 API 文档


本库提供基于时间戳计数器(TSC)的定时器,用于微基准测试

// The function we want to time:
pub fn fibonacci(n: u64) -> u64 {
    match n {
        0 | 1 => 1,
        n => fibonacci(n - 1) + fibonacci(n - 2),
    }
}

// Non-invariant TSCs might produce unreliable results:
assert!(has_invariant_tsc(), "The TSC is not invariant!");

let (duration, result) 
    = Duration::span(|| black_box(fibonacci(black_box(8))));

assert_eq!(result, 34);

println!("Reference cycle count: {} cycles.", 
         duration.cycles());
// On my machine prints: 
// "Reference cycle count: 951 cycles."

注意

  • 由于 TSC 运行频率不同于 CPU 时钟频率,因此这里报告的周期是“参考周期”,而不是实际的 CPU 时钟周期。

  • 如果 TSC 不是 不变的(Nehalem及以后),由于超频、速度步进、电源管理等原因,测量可能不准确。

  • 将“参考周期”转换为时间(例如,纳秒)通常无法在用户空间中可靠地完成。

  • 在计时之前可能需要禁用抢占和硬中断,以进一步提高测量的准确性(参见 如何在 Intel® IA-32 和 IA-64 指令集架构上基准测试代码执行时间)。

参考资料

许可证

本项目根据您的选择受以下任一许可证的约束:

贡献

我们欢迎所有想要贡献的人。

本项目对任何形式的贡献(问题、pull 请求等)都必须遵守 Rust 的 行为准则

除非您明确表示,否则任何有意提交给 tsc-timer 的贡献,根据 Apache-2.0 许可证定义,应作为上述双重许可,不附加任何额外条款或条件。

无运行时依赖