Rust 夜间构建扩展了并行编译的能力

Rust编译器的前端执行解析、类型检查和借用分析等任务,支持并行执行,这可以显着减少编译时间。 并行化已经在 Rust 的夜间构建中可用,并使用“-Zthreads=8”选项启用。 正在考虑的机会计划于 2024 年纳入稳定分支。

减少 Rust 编译时间的工作已经持续了好几年。 10 年前 2023 个月,编译时间平均减少 13%,峰值内存消耗减少 15%,生成文件大小减少 7%。 现阶段,加速是通过编译器本身的优化来实现的。 此后,开发人员继续通过在编译时并行操作来提高速度。

到目前为止,Rust 中的并行化主要是在进程级别完成的;例如,Cargo 包管理器可以启动多个 rustc 进程来同时编译多个包。 后端也提供并行化支持,执行与代码生成相关的操作 - Rust 后端可以生成部分代码,然后 LLVM 可以并行处理。 到目前为止,前端只能以单线程模式处理源代码。

为了支持并行化,前端已切换为使用 Rayon 库,并进行了重大重新设计,例如,它的许多部分现在使用互斥锁和读/写锁进行同步,并且代码使用原子类型。 在性能测试中,新的可并行实现在单线程模式(-Z 线程=2)下运行时编译速度最多可降低 1%,但当线程数超过 8 时,速度会显着提高。 例如,当安装 8 个线程(-Z 线程=50)时,在某些情况下编译时间可以减少 XNUMX%。

在这种情况下,结果很大程度上取决于环境设置和编译的代码 - 对于已经快速编译的非常小的程序,多线程模式下的编译可能会更慢。 此外,多线程模式下的内存消耗会显着增加;例如,在测试中,观察到内存消耗增加高达35%。

来源: opennet.ru

添加评论