Hasty Briefsbeta

双语

Why my Rust benchmarks were wrong, or how to use std:hint:black_box? (2022)

4 months ago
  • #Optimization
  • #Rust
  • #Benchmarking
  • 这篇博客文章探讨了在Rust基准测试中正确使用`std::hint::black_box`的方法,以防止编译器优化扭曲测试结果。
  • 文章解释了`black_box`函数的工作原理:通过强制编译器将值视为易变的,从而避免对被测试代码进行优化。
  • 文中提供了错误基准测试的示例,展示编译器如何优化掉被测代码,导致虚假的快速结果。
  • 对比了不同实现方式的`black_box`,包括标准库的内置版本和更有效的基于汇编的版本。
  • 作者通过`char::to_digit`和`str::parse::<f64>`等实际基准测试案例,演示了缺少`black_box`会导致测量失准的情况。
  • 文章最后展示了正确应用`black_box`后的更新基准测试结果,这些数据反映了更准确的性能指标。
  • 尽管基准测试存在局限性,但作者认为它仍具价值,并推荐使用性能剖析工具和Compiler Explorer等辅助优化工作。