溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

GCC優(yōu)化Linux分析

發(fā)布時(shí)間:2021-11-23 15:12:46 來源:億速云 閱讀:133 作者:iii 欄目:系統(tǒng)運(yùn)維

本篇內(nèi)容主要講解“GCC優(yōu)化Linux分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“GCC優(yōu)化Linux分析”吧!

軟件如果不能被電腦運(yùn)行,那么它就是無用的。而在處理運(yùn)行時(shí)性能的問題上,即使是最有才華的開發(fā)人員也會(huì)受編譯器的支配 —— 因?yàn)槿绻麤]有可靠的編譯器工具鏈,就無法構(gòu)建任何重要的東西。GNU 編譯器集合(GCC)提供了一個(gè)健壯、成熟和高性能的工具,以幫助你充分發(fā)揮你代碼的潛能。經(jīng)過數(shù)十年成千上萬人的開發(fā),GCC 成為了世界上最受尊敬的編譯器之一。如果你在構(gòu)建應(yīng)用程序是沒有使用 GCC,那么你可能錯(cuò)過了最佳解決方案。

根據(jù) LLVM.org 的說法,GCC 是“如今事實(shí)上的標(biāo)準(zhǔn)開源編譯器” [1],也是用來構(gòu)建完整系統(tǒng)的基礎(chǔ) —— 從內(nèi)核開始。GCC 支持超過 60 種硬件平臺(tái),包括 ARM、Intel、AMD、IBM POWER、SPARC、HP PA-RISC 和 IBM Z,以及各種操作環(huán)境,包括 GNU、Linux、Windows、macOS、FreeBSD、NetBSD、OpenBSD、DragonFly BSD、Solaris、AIX、HP-UX 和 RTEMS。它提供了高度兼容的 C/C++ 編譯器,并支持流行的 C 庫(kù),如 GNU C Library(glibc)、Newlib、musl 和各種 BSD 操作系統(tǒng)中包含的 C 庫(kù),以及 Fortran、Ada 和 GO 語(yǔ)言的前端。GCC 還可以作為一個(gè)交叉編譯器,可以為運(yùn)行編譯器的平臺(tái)以外的其他平臺(tái)創(chuàng)建可執(zhí)行代碼。GCC 是緊密集成的 GNU 工具鏈的核心組件,由 GNU 項(xiàng)目產(chǎn)生,它包括 glibc、Binutils 和 GNU 調(diào)試器(GDB)。

“一直以來我最喜歡的 GNU 工具是 GCC,即 GNU 編譯器集合。在開發(fā)工具非常昂貴的時(shí)候,GCC 是第二個(gè) GNU 工具,也是使社區(qū)能夠編寫和構(gòu)建所有其他工具的工具。這個(gè)工具一手改變了這個(gè)行業(yè),導(dǎo)致了自由軟件運(yùn)動(dòng)的誕生,因?yàn)橐粋€(gè)好的、自由的編譯器是一個(gè)社區(qū)軟件的先決條件?!?amp;mdash;— Red Hat 開源和標(biāo)準(zhǔn)團(tuán)隊(duì)的 Dave Neary。[2]

優(yōu)化 Linux

作為 Linux 內(nèi)核源代碼的默認(rèn)編譯器,GCC 提供了可靠、穩(wěn)定的性能以及正確構(gòu)建內(nèi)核所需的額外擴(kuò)展。GCC 是流行的 Linux 發(fā)行版的標(biāo)準(zhǔn)組件,如 ArchLinux、CentOS、Debian、Fedora、openSUSE 和 Ubuntu 這些發(fā)行版中,GCC 通常用來編譯支持系統(tǒng)的組件。這包括 Linux 使用的默認(rèn)庫(kù)(如 libc、libm、libintl、libssh、libssl、libcrypto、libexpat、libpthread 和 ncurses),這些庫(kù)依賴于 GCC 來提供可靠性和高性能,并且使應(yīng)用程序和系統(tǒng)程序可以訪問 Linux 內(nèi)核功能。發(fā)行版中包含的許多應(yīng)用程序包也是用 GCC 構(gòu)建的,例如 Python、Perl、Ruby、nginx、Apache HTTP 服務(wù)器、OpenStack、Docker 和 OpenShift。各個(gè) Linux 發(fā)行版使用 GCC 構(gòu)建的大量代碼組成了內(nèi)核、庫(kù)和應(yīng)用程序軟件。對(duì)于 openSUSE 發(fā)行版,幾乎 100% 的原生代碼都是由 GCC 構(gòu)建的,包括 6135 個(gè)源程序包、5705 個(gè)共享庫(kù)和 38927 個(gè)可執(zhí)行文件。這相當(dāng)于每周編譯 24540 個(gè)源代碼包。[3]

Linux 發(fā)行版中包含的 GCC 的基本版本用于創(chuàng)建定義系統(tǒng)應(yīng)用程序二進(jìn)制接口(ABI)的內(nèi)核和庫(kù)。用戶空間開發(fā)者可以選擇下載 GCC 的最新穩(wěn)定版本,以獲得高級(jí)功能、性能優(yōu)化和可用性改進(jìn)。Linux 發(fā)行版提供安裝說明或預(yù)構(gòu)建的工具鏈,用于部署最新版本的 GCC 以及其他 GNU 工具,這些工具有助于提高開發(fā)人員的工作效率和縮短部署時(shí)間。

優(yōu)化互聯(lián)網(wǎng)

GCC 是嵌入式系統(tǒng)中被廣泛采用的核心編譯器之一,支持為日益增長(zhǎng)的物聯(lián)網(wǎng)設(shè)備開發(fā)軟件。GCC 提供了許多擴(kuò)展功能,使其非常適合嵌入式系統(tǒng)軟件開發(fā),包括使用編譯器的內(nèi)建函數(shù)、#語(yǔ)法、內(nèi)聯(lián)匯編和以應(yīng)用程序?yàn)橹行牡拿钚羞x項(xiàng)進(jìn)行精細(xì)控制。GCC 支持廣泛的嵌入式體系結(jié)構(gòu),包括 ARM、AMCC、AVR、Blackfin、MIPS、RISC-V、Renesas Electronics V850、NXP 和 Freescale Power 處理器,可以生成高效、高質(zhì)量的代碼。GCC提供的交叉編譯能力對(duì)這個(gè)社區(qū)至關(guān)重要,而預(yù)制的交叉編譯工具鏈 [4] 是一個(gè)主要需求。例如,GNU ARM 嵌入式工具鏈?zhǔn)墙?jīng)過集成和驗(yàn)證的軟件包,其中包含 ARM 嵌入式 GCC 編譯器、庫(kù)和其它裸機(jī)軟件開發(fā)所需的工具。這些工具鏈可用于在 Windows、Linux 和 macOS 主機(jī)操作系統(tǒng)上對(duì)流行的 ARM Cortex-R 和 Cortex-M 處理器進(jìn)行交叉編譯,這些處理器已裝載于數(shù)百億臺(tái)支持互聯(lián)網(wǎng)的設(shè)備中。[5]

GCC 為云計(jì)算賦能,為需要直接管理計(jì)算資源的軟件提供了可靠的開發(fā)平臺(tái),如數(shù)據(jù)庫(kù)和 Web 服務(wù)引擎以及備份和安全軟件。GCC 完全兼容 C++ 11 和 C++ 14,為 C++ 17 和 C++ 2a 提供實(shí)驗(yàn)支持 [6](LCTT 譯注:本文原文發(fā)布于 2018 年),可以創(chuàng)建性能優(yōu)異的對(duì)象代碼,并提供可靠的調(diào)試信息。使用 GCC 的應(yīng)用程序的一些例子包括:MySQL 數(shù)據(jù)庫(kù)管理系統(tǒng),它需要 Linux 的 GCC [7];Apache HTTP 服務(wù)器,它建議使用 GCC [8];Bacula,一個(gè)企業(yè)級(jí)網(wǎng)絡(luò)備份工具,它需要 GCC。[9]

優(yōu)化一切

對(duì)于高性能計(jì)算(HPC)中使用的科學(xué)代碼的研究和開發(fā),GCC 提供了成熟的 C、C++ 和 Fortran 前端,以及對(duì) OpenMP 和 OpenACC API的支持,用于基于指令的并行編程。因?yàn)?GCC 提供了跨計(jì)算環(huán)境的可移植性,它使得代碼能夠更容易地在各種新的和傳統(tǒng)的客戶機(jī)和服務(wù)器平臺(tái)上進(jìn)行測(cè)試。GCC 為 C、C++ 和 Fortran 編譯器提供了 OpenMP 4.0 的完整支持,為 C 和 C++ 編譯器提供了 OpenMP 4.5 完整支持。對(duì)于 OpenACC、 GCC 支持大部分 2.5 規(guī)范和性能優(yōu)化,并且是唯一提供 OpenACC 支持的非商業(yè)、非學(xué)術(shù)編譯器。

代碼性能是這個(gè)社區(qū)的一個(gè)重要參數(shù),GCC 提供了一個(gè)堅(jiān)實(shí)的性能基礎(chǔ)。Colfax Research 于 2017 年 11 月發(fā)表的一篇論文評(píng)估了 C++ 編譯器在使用 OpenMP 4.x 指令并行化編譯代碼的速度和編譯后代碼的運(yùn)行速度。圖 1 描繪了不同編譯器編譯并使用單個(gè)線程運(yùn)行時(shí)計(jì)算內(nèi)核的相對(duì)性能。性能值經(jīng)過了歸一化處理,以 G++ 的性能為 1.0。

GCC優(yōu)化Linux分析

圖 1 為由不同編譯器編譯的每個(gè)內(nèi)核的相對(duì)性能。(單線程,越高越好)。

他的論文總結(jié)道:“GNU 編譯器在我們的測(cè)試中也做得很好。G++ 在六種情況中的三種情況下生成的代碼速度是第二快的,并且在編譯時(shí)間方面是最快的編譯器之一?!盵10]

誰在用 GCC?

在 JetBrains 2018 年的開發(fā)者生態(tài)狀況調(diào)查中,在接受調(diào)查的 6000 名開發(fā)者中,66% 的 C++ 程序員和 73% 的 C 程序員經(jīng)常使用 GCC。[11] 以下簡(jiǎn)要介紹 GCC 的優(yōu)點(diǎn),正是這些優(yōu)點(diǎn)使它在開發(fā)人員社區(qū)中如此受歡迎。

? 對(duì)于需要為各種新的和遺留的計(jì)算平臺(tái)和操作環(huán)境編寫代碼的開發(fā)人員,GCC 提供了對(duì)最廣泛的硬件和操作環(huán)境的支持。硬件供應(yīng)商提供的編譯器主要側(cè)重于對(duì)其產(chǎn)品的支持,而其他開源編譯器在所支持的硬件和操作系統(tǒng)方面則受到很大限制。[12]

? 有各種各樣的基于 GCC 的預(yù)構(gòu)建工具鏈,這對(duì)嵌入式系統(tǒng)開發(fā)人員特別有吸引力。這包括 GNU ARM 嵌入式工具鏈和 Bootlin 網(wǎng)站上提供的 138 個(gè)預(yù)編譯交叉編譯器工具鏈。[13] 雖然其他開源編譯器(如 Clang/LLVM)可以取代現(xiàn)有交叉編譯工具鏈中的 GCC,但這些工具集需要開發(fā)者完全重新構(gòu)建。[14]

? GCC 通過成熟的編譯器平臺(tái)向應(yīng)用程序開發(fā)人員提供可靠、穩(wěn)定的性能?!对?AMD EPYC 平臺(tái)上用 GCC 8/9 與 LLVM Clang 6/7 編譯器基準(zhǔn)測(cè)試》這篇文章提供了 49 個(gè)基準(zhǔn)測(cè)試的結(jié)果,這些測(cè)試的編譯器在三個(gè)優(yōu)化級(jí)別上運(yùn)行。使用 -O3 -march=native 級(jí)別的 GCC 8.2 RC1 在 34% 的時(shí)間里排在第一位,而在相同的優(yōu)化級(jí)別 LLVM Clang 6.0 在 20% 的時(shí)間里贏得了第二位。[15]

? GCC 為編譯調(diào)試 [16] 提供了改進(jìn)的診斷方法,并為運(yùn)行時(shí)調(diào)試提供了準(zhǔn)確而有用的信息。GCC 與 GDB 緊密集成,GDB 是一個(gè)成熟且功能齊全的工具,它提供“不間斷”調(diào)試,可以在斷點(diǎn)處停止單個(gè)線程。

? GCC 是一個(gè)得到良好支持的平臺(tái),它有一個(gè)活躍的、有責(zé)任感的社區(qū),支持當(dāng)前版本和以前的兩個(gè)版本。由于每年都有發(fā)布計(jì)劃,這為一個(gè)版本提供了兩年的支持。

GCC:仍然在繼續(xù)優(yōu)化

GCC 作為一個(gè)世界級(jí)的編譯器繼續(xù)向前發(fā)展。GCC 的最新版本是 8.2,于 2018 年 7 月發(fā)布(LCTT 譯注:本文原文發(fā)表于 2018 年),增加了對(duì)即將推出的 Intel CPU、更多 ARM CPU 的硬件支持,并提高了 AMD 的 ZEN CPU 的性能。增加了對(duì) C17 的初步支持,同時(shí)也對(duì) C++2A 進(jìn)行了初步工作。診斷功能繼續(xù)得到增強(qiáng),包括更好的發(fā)射診斷,改進(jìn)了定位、定位范圍和修復(fù)提示,特別是在 C++ 前端。Red Hat 的 David Malcolm 在 2018 年 3 月撰寫的博客概述了 GCC 8 中的可用性改進(jìn)。[17]

新的硬件平臺(tái)繼續(xù)依賴 GCC 工具鏈進(jìn)行軟件開發(fā),例如 RISC-V,這是一種自由開放的 ISA,機(jī)器學(xué)習(xí)、人工智能(AI)和物聯(lián)網(wǎng)細(xì)分市場(chǎng)都對(duì)其感興趣。GCC 仍然是 Linux 系統(tǒng)持續(xù)開發(fā)的關(guān)鍵組件。針對(duì) Intel 架構(gòu)的 Clear Linux 項(xiàng)目是一個(gè)為云、客戶端和物聯(lián)網(wǎng)用例構(gòu)建的新興發(fā)行版,它提供了一個(gè)很好的示例,說明如何使用和改進(jìn) GCC 編譯器技術(shù)來提高基于 Linux 的系統(tǒng)的性能和安全性。GCC 還被用于微軟 Azure Sphere 的應(yīng)用程序開發(fā),這是一個(gè)基于 Linux 的物聯(lián)網(wǎng)應(yīng)用程序操作系統(tǒng),最初支持基于 ARM 的聯(lián)發(fā)科 MT3620 處理器。在培養(yǎng)下一代程序員方面,GCC 也是樹莓派的 Windows 工具鏈的核心組件,樹莓派是一種運(yùn)行基于 Debian 的 GNU/Linux 的低成本嵌入式板,用于促進(jìn)學(xué)校和發(fā)展中國(guó)家的基礎(chǔ)計(jì)算機(jī)科學(xué)教學(xué)。

GCC 由 GNU 項(xiàng)目的創(chuàng)始人理查德•斯托曼首次發(fā)布 于 1987 年 3 月 22 日,由于它是第一個(gè)作為自由軟件發(fā)布的可移植的 ANSI C 優(yōu)化編譯器,因此它被認(rèn)為是一個(gè)重大突破。GCC 由來自世界各地的程序員組成的社區(qū)在指導(dǎo)委員會(huì)的指導(dǎo)下維護(hù),以確保對(duì)項(xiàng)目進(jìn)行廣泛的、有代表性的監(jiān)督。GCC 的社區(qū)方法是它的優(yōu)勢(shì)之一,它形成了一個(gè)由開發(fā)人員和用戶組成的龐大而多樣化的社區(qū),他們?yōu)轫?xiàng)目做出了貢獻(xiàn)并提供支持。根據(jù) Open Hub 的說法,“GCC 是世界上最大的開源團(tuán)隊(duì)之一,在 Open Hub 上的所有項(xiàng)目團(tuán)隊(duì)中排名前 2%?!盵18]

關(guān)于 GCC 的許可問題,人們進(jìn)行了大量的討論,其中大多數(shù)是混淆而不是啟發(fā)。GCC 在 GNU 通用公共許可證(GPL)版本 3 或更高版本下發(fā)布,但運(yùn)行時(shí)庫(kù)例外。這是一個(gè)左版許可,這意味著衍生作品只能在相同的許可條款下分發(fā)。GPLv3 旨在保護(hù) GCC,防止其成為專有軟件,并要求對(duì) GCC 代碼的更改可以自由公開地進(jìn)行。對(duì)于“最終用戶”來說,這個(gè)編譯器與其他編譯器完全相同;使用 GCC 對(duì)你為自己的代碼所選擇的任何許可都沒有區(qū)別。[19]

到此,相信大家對(duì)“GCC優(yōu)化Linux分析”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI