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