thinlto 的并发性在并行构建系统中有用吗?



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

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

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

或者,将ThinLTO 后台并发性降低到 1 并记录在 https://clang.llvm.org/docs/ThinLTO.html#controlling-backend-parallelism 处是否有意义?当并行性被移除时,ThinLTO 与常规的普通旧 LTO 相比有什么优势吗?

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

相关内容

  • 没有找到相关文章

最新更新