眾所周知,LLVM的Clang C / C ++編譯器比GCC提供更快的編譯速度。 但是,新版本的GCC中的編譯速度有所提高。
并且在某些領(lǐng)域由于 LLVM/Clang 進(jìn)一步優(yōu)化工作的缺失和其他工作加入到不斷增長的代碼庫中,導(dǎo)致其速度有所減慢,因此就目前而言,GCC 在編譯 Linux 內(nèi)核方面的速度比 LLVM/Clang 更快。
與會者在上周 Linux Plumbers 2020 大會上發(fā)表的演講介紹了使用 LLVM/Clang 編譯 Linux 內(nèi)核的時間。
開發(fā)者 Nathan Chancellor 和 Nathan Huckleberry 發(fā)現(xiàn),對于 64 位 ARM 和 x86_64 架構(gòu)來說,即便 LLVM 在啟用 LTO 和 PGO 的情況下進(jìn)行編譯,“GCC 編譯速度始終擊敗 LLVM”。
只有當(dāng) LLVM 在編譯時啟用 PGO 來為 32 位 ARM 進(jìn)行構(gòu)建的情況下,其編譯 Linux 內(nèi)核的速度才比 GCC 快。
從歷史上看,這個數(shù)據(jù)是出乎意料的,但考慮到最新的編譯器及其在編譯器性能方面激烈而友好的競爭,似乎又不是過于令人感到震驚的事情。
不過這種被超越的案例也讓 LLVM 的開發(fā)者們開始探索未來的改進(jìn)途徑。例如,冗余的內(nèi)聯(lián)內(nèi)聯(lián)匯編(Inline Assembly)語句消耗了大約 13% 的構(gòu)建過程,而此問題已經(jīng)在 Clang 11 中得到解決。
另外,還有一些需要跟蹤宏參數(shù)源位置的高開銷計算。
隨著上游 LLVM/Clang 編譯器為 x86_64 和 AArch64(以及最近的 i686)構(gòu)建上游內(nèi)核編譯器,LLVM 開發(fā)者將更密切關(guān)注未來的構(gòu)建時間。