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) 和提供配置文件数据缓存。
内容质量低不看此公众号
赞 (0)