首页 > 解决方案 > Thinlto 的并发性在并行构建系统中有用吗?

问题描述

-flto我有一个构建系统,它通过标志在 clang 中使用长期存在的 LTO 支持。

添加到 LLVM ( https://clang.llvm.org/docs/ThinLTO.html )的 ThinLTO 支持看起来很有趣,但我对在std::thread::hardware_concurrency已经构建系统的上下文中启动并行处理线程的决定感到有些困惑运行并发作业。

如果您的构建系统已经为每个内核启动一个线程并运行编译和链接作业的混合,那么链接器假设它应该使用所有内核甚至多个内核是否仍然有意义?

或者使用https://clang.llvm.org/docs/ThinLTO.html#controlling-backend-parallelism中记录的标志将 ThinLTO 后台并发减少到 1 是否有意义?删除并行性后,ThinLTO 与普通的普通旧 LTO 相比有什么优势吗?

标签: buildlinkerllvmlto

解决方案


除了其他好处之外,ThinLTO 实际上可以大大缩短大型项目的构建时间。缓存不仅是为增量构建而设计的——它是多线程链接阶段如何工作的重要组成部分,旨在加速符号查找。ThinLTO 在缩短构建时间方面对您有多大帮助取决于您的项目和构建系统。

我找到了一个非常好的视频,其中介绍了 ThinLTO 设计的一些细节、它的用例以及一些成功实施的方法:

https://www.youtube.com/watch?v=p9nH2vZ2mNo&list=WL&index=51&t=2812s

相应的谷歌研究论文也是一个非常有趣(如果很重)的阅读:

https://research.google/pubs/pub47584/

对于更轻松、更随意的拍摄,这篇博文也很有帮助:

http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html


推荐阅读