SUSE的MichalJires在周五发布了一组新的补丁,用于实现对GNU编译器集合的增量LTO支持。增量LTO的目标是减少编译时间,同时使用链接时间优化进行快速编辑编译周期。
Jires总结
补丁系列
作为:
这些补丁实现了增量LTO,特别是通过缓存ltrans阶段的结果。其次,这些补丁包含一些更改,以减少ltrans分区的差异,从而可以缓存它们。
其目的是在使用LTO时减少快速编辑编译周期的编译时间。即使对GCC的其余部分进行了这些最小的更改,它的工作效果也出奇地好。目前通过自编译cc1进行测试,将单个提交用作增量更改,平均只有约1/3的分区需要用“-O2-g0”重新编译,约1/2需要用“-O2-g”重新编译。这直接减少了LTO在ltrans阶段花费的时间。
不幸的是,更大的收益有点脆弱。你可能还记得,在我的Cauldron演讲中,我声称可以减少到大约1/6和大约1/3的重新编译。分支机构从三月份开始实现了这一目标。从那时起,至少有两次提交引入了新的分区分歧,尽管它们在未来似乎是可以修复的。
考虑到时间安排,这种增量LTO支持似乎不太可能在即将发布的GCC 14中合并。在任何情况下,这种增量LTO支持对于那些经常编译代码同时希望使用LTO并将构建时间保持在最低限度的人来说都应该是有趣的。他的GNU工具大锅2023幻灯片还没有上传给那些对背景材料感兴趣的人。
This is certainly a great feature and akin to the work going on in the LLVM camp with ThinLTO for having link-time optimizations that are scalable and incremental. Hopefully GCC's Incremental LTO support will be worked into good enough shape for upstreaming in the near future.