Rust 编译器探索使用 PGO

Rust 编译器团队介绍了将 PGO 应用于 Rust 编译器 (rustc) 的实践。他们表示此举动主要是受 Mozilla 启发,Mozilla 作为 Rust 的深度使用者,在过去的几个月里一直在使用配置文件引导优化 (Profile-Guided Optimization, PGO) 来构建其自用的优化版本 Clang,并将使用此构建基础设施的 Firefox 编译时间减少了 9%。

因此,Rust 编译团队猜想是否可以将 PGO 应用到 rustc 本身以提升速度?

结论是 PGO 可以显著缩短编译时间,但要把这些改进提供给使用者不像在 dist builds 中添加编译器标志 (compiler flag) 那样简单。PGO 与大多数其他优化的不同之处在于:

  • 更多的检测和数据收集阶段,因此需要不同的扩展构建工作流

  • 产生持续的构建时间成本,这是自动化优化(如 LTO)共有的一个特征

上述两个问题给在编译器上应用 PGO 形成不小的阻碍,Rust 的 CI 构建时间比较长,团队也因此放弃了一些优化(例如由于 Mac 平台上的构建机器速度特别慢,macOS 至今仍无法通过使用 ThinLTOed LLVM 获得 10% 的性能提升)。

对于上述两个阻碍,Rust 编译器团队提出了权衡的建议,一是让计算机多花几个小时用于构建,这就可以在接下来的几个月减少 15% 的编译时间;另外就是为复杂的构建设置投入大量工程成本,例如引入带外检测 (out-of-band instrumentation) 和提供配置文件数据缓存。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!