GCC 编译 Linux 内核速度比 LLVM 更快

2020年09月05日

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 快。

从历史上看,这个数据是出乎意料的,但考虑到最新的编译器及其在编译器性能方面激烈而友好的竞争,似乎又不是过于令人感到震惊的事情。不过这种被超越的案例也让 LLVM 的开发者们开始探索未来的改进途径。例如,冗余的内联内联汇编(Inline Assembly)语句消耗了大约 13% 的构建过程,而此问题已经在 Clang 11 中得到解决。另外,还有一些需要跟踪宏参数源位置的高开销计算。

随着上游 LLVM/Clang 编译器为 x86_64 和 AArch64(以及最近的 i686)构建上游内核编译器,LLVM 开发者将更密切关注未来的构建时间。

详细信息查看此幻灯片,如果对评估不同 CPU 内核编译时间的水平感兴趣,查看 OpenBenchmarking.org 结果概述页面

展开阅读全文
8 收藏
分享
加载中
精彩评论
完了完了,以后又是编译器的神和神的编译器之争了
2020-09-05 10:20
9
举报
https://www.laruence.com/2015/06/19/3063.html
少在我面前装,5年前PHP7发布时,鸟哥就已经就已经介绍过通过使用GCC的PGO来针对性优化PHP解释器.
并以WordPress首页作为profile,编译出经过GCC的PGO优化的PHP解释器,WordPress首页带来10%的性能提升.
第2次的PGO编译能够利用第1次编译和程序运行收集到的优化配置,速度比第1次编译快,你觉得很奇怪?
2020-09-06 16:05
4
举报
gcc gdb  gnu 这条路是对的
2020-09-08 14:39
3
举报
当然有必要,未来要是能几分钟就编译好内核,对工作进展会加速很多,要是编译两个小时,在1小时58分编译出错,你憋不憋屈
2020-09-05 17:25
3
举报
回复 @bastetwang : 反击不给力呀,看来还不是eechen对手😁,回复都是模糊不定的东西,只会人身攻击质疑对方,求着对方给数据,这场比赛判eechen获胜!
2020-09-14 15:52
2
举报
最新评论 (39)
真希望 LLVM 统一江湖。
2020-09-20 13:48
0
回复
举报
遗憾,偌大个osc,连e神都辩不过,药丸啊
2020-09-14 19:34
0
回复
举报
还要看编译出来的程序谁跑得快
2020-09-14 17:32
0
回复
举报
编译快慢有这么重要吗,还是看编译完了谁运行的快吧
2020-09-14 15:38
0
回复
举报
非常重要,编译速度的快慢决定了单位时间内你能迭代多少次代码测试。
2020-09-14 22:03
0
回复
举报
难道不是只会编译你改动的文件?
2020-09-15 09:27
0
回复
举报
这个需要看程序之间有没有依赖,比如你改了一个文件,有100个文件依赖它,通常来说,编译的工作量就会很大。需要看语言本身设计和编译器的优化,但通常来说不会这么简单。
2020-09-15 14:49
0
回复
举报
一般来说只有修改了头文件才会有这种影响,应该问题不大,谁会频繁修改被大量文件引用的头文件
2020-09-15 15:02
0
回复
举报
对于日常做开发的来说,多等几秒钟都是很痛苦的,比如在做Android的时候,等待编译的时间都可以去喝杯咖啡了;我的Go语言项目文件比较多的时候,也是很慢,这些都会严重影响我测试的频率和心情。当然很多人做的项目比较小、或者是在使用动态语言的时候就会体会不到。
2020-09-15 18:35
0
回复
举报
说得你单位时间内,改代码速度比编译器编译还快。一看就是对自己写的没谱,完全依赖编译器改错的。
2020-09-15 13:28
0
回复
举报
等你做过安卓和iOS开发,对比一下就知道了,你做的东西太浅,感受不到很正常,但是最好不好把这些肤浅的想法写出来,免得遭人耻笑。
2020-09-15 14:47
0
回复
举报
两个烂系统有啥子可骄傲的。一个,发明人都在准备另一手。一个只能靠垄断维持着。确实是感受不到,烂平台对编译器体系的依赖。
2020-09-16 11:46
0
回复
举报
clang的错误提示啥的,比gcc友好的多
2020-09-14 12:14
0
回复
举报
不是东方压西风,就是西风压东风。大家都是不断进步的,虽然每天只是一点点,积累起来还是很可观。
2020-09-14 12:13
0
回复
举报
gcc gdb  gnu 这条路是对的
2020-09-08 14:39
3
回复
举报
GCC YYDS
2020-09-05 21:23
0
回复
举报
在启用了LTO+PGO这种针对性优化后,LLVM还比默认的GCC慢,真是丢脸丢到外婆家了.
GCC在编译速度和生成的机器码质量上,都是高水准,这就是为什么Linux内核仍然默认使用GCC编译,而不是跟风LLVM.
2020-09-05 16:27
0
回复
举报
linux下不清楚,但是vc的编译器lto,pgt的编译速度似乎会明显增加。
2020-09-06 06:55
0
回复
举报
等VC支持编译Linux内核的时候再来凑热闹吧.
2020-09-06 09:47
0
回复
举报
不明白哪里跟哪里,我想说的意思 是lto,pgo开启后,一般是会降低编译速度的,不知道又触动了你哪根发疯筋。不懂的技术就不要乱嘲讽吧,人还是有点自知之明吧。
2020-09-06 09:48
0
回复
举报
哥们你真看得懂这种文章吗?你真的懂这里面提到的技术吗?
要不这样,说说看你做了哪些牛逼的事情,做过哪些出名的项目?还是天天吹水对网友,用键盘来证明自己的牛逼?
2020-09-06 10:08
0
回复
举报
https://www.laruence.com/2015/06/19/3063.html
少在我面前装,5年前PHP7发布时,鸟哥就已经就已经介绍过通过使用GCC的PGO来针对性优化PHP解释器.
并以WordPress首页作为profile,编译出经过GCC的PGO优化的PHP解释器,WordPress首页带来10%的性能提升.
第2次的PGO编译能够利用第1次编译和程序运行收集到的优化配置,速度比第1次编译快,你觉得很奇怪?
2020-09-06 16:05
4
回复
举报
在你面前装?你也太看得起自己了,既然 这样,那你拿gcc的lto和pgo的性能拉出来看看。pgo比正常编译慢我不觉得有什么奇怪的,而且编译速度和执行速度不一样,编译速度差那么一点点其实并没有什么的,一般编译器好坏主要是看执行速度的,只有像你这样无知偏执的人才会到处扯。btw:你何不也贴下gcc的lto和pgo的速度呢。
2020-09-06 23:02
0
回复
举报
回复 @bastetwang : 反击不给力呀,看来还不是eechen对手😁,回复都是模糊不定的东西,只会人身攻击质疑对方,求着对方给数据,这场比赛判eechen获胜!
2020-09-14 15:52
2
回复
举报
编译时间可以优化的点太多,要看具体配置的参数,直接比较无意义。比较一下编译后的结果还可以
2020-09-05 14:59
0
回复
举报
更多评论
39 评论
8 收藏
分享
返回顶部
顶部