LLVM 的 Clang C/C++ 编译器传统上以提供了比 GCC 更快的编译速度而著称,不过在 GCC 的最近几个版本中。
其编译速度有所提升,并且在某些领域由于 LLVM/Clang 进一步优化工作的缺失和其他工作加入到不断增长的代码库中,导致其速度有所减慢,因此就目前而言,GCC 在编译 Linux 内核方面的速度比 LLVM/Clang 更快。
与会者在上周 Linux Plumbers 2020 大会上发表的演讲介绍了使用 LLVM/Clang 编译 Linux 内核的时间。
开发者 Nathan Chancellor 和 Nathan Huckleberry 发现,对于 64 位 ARM 和 x86_64 架构来说,即便 LLVM 在启用 LTO 和 PGO 的情况下进行编译,“GCC 编译速度始终击败 LLVM”。
只有当 LLVM 在编译时启用 PGO 来为 32 位 ARM 进行构建的情况下,其编译 Linux 内核的速度才比 GCC 快。
![57ae4f4055bb345065483bfbad5b3e72.png](https://i-blog.csdnimg.cn/blog_migrate/08574672524ab864b0bcbf8cbd2abc94.jpeg)
![09e700cb81a6ff0511be3d06dcfb6159.png](https://i-blog.csdnimg.cn/blog_migrate/43b29700913da1e0f4ee1b3c59ad4afd.jpeg)
![62a005d6d09f5e6a90e5f4c8facea597.png](https://i-blog.csdnimg.cn/blog_migrate/f2628d196e17113e246787fe76daf84a.jpeg)
从历史上看,这个数据是出乎意料的,但考虑到最新的编译器及其在编译器性能方面激烈而友好的竞争,似乎又不是过于令人感到震惊的事情。
不过这种被超越的案例也让 LLVM 的开发者们开始探索未来的改进途径。例如,冗余的内联内联汇编(Inline Assembly)语句消耗了大约 13% 的构建过程,而此问题已经在 Clang 11 中得到解决。另外,还有一些需要跟踪宏参数源位置的高开销计算。
随着上游 LLVM/Clang 编译器为 x86_64 和 AArch64(以及最近的 i686)构建上游内核编译器,LLVM 开发者将更密切关注未来的构建时间。