首頁 > 科技週邊 > IT業界 > Ampere處理器GCC指南

Ampere處理器GCC指南

尊渡假赌尊渡假赌尊渡假赌
發布: 2025-02-08 12:23:09
原創
507 人瀏覽過

Ampere處理器GCC指南

本文最初是由Ampere Computing發表的。 本文介紹瞭如何有效地使用GNU編譯器收集(GCC)選項來幫助優化Ampere處理器上的應用程序性能。

嘗試優化應用程序時,必須衡量潛在優化是否改善性能至關重要。這包括編譯器選項。使用高級編譯器選項可能會導致更好的運行時性能,這可能是出於增加編譯時間,更多調試困難以及通常會增加二進制尺寸的成本。為什麼編譯器選項影響性能超出了本文的範圍,儘管簡短的答案是代碼生成,現代處理器體系結構以及它們如何相互作用非常複雜!另一個重要的一點是,由於計算機體系結構的變化和特定的微結構,不同的處理器可能會從不同的編譯器選項中受益。優化的重複實驗是績效成功的關鍵。

>如何衡量應用程序的績效來確定限制因素以及以前發表的文章中已經涵蓋的優化策略。該論文是在基於安培的阿爾特拉(Ampere Altra)實例上運行時要回答的前10個問題,它描述了要收集的性能數據以了解整個系統的性能。優化Ampere Altra家族處理器的性能分析方法解釋瞭如何使用數據驅動方法有效地優化。

>本文首先總結了最常見的GCC選項,並描述了這些選項如何影響應用程序。然後,討論使用GCC選項轉向目前的案例研究,以提高Ampere處理器的VP9視頻編碼軟件和MySQL數據庫的性能。有效地使用了類似的策略來優化安培處理器上運行的其他軟件。

GCC建議

GCC編譯器提供了許多可以改善應用程序性能的選項。有關詳細信息,請參見GCC網站。要生成利用Ampere處理器中可用的所有性能功能的代碼,請使用GCC -MCPU選項。

>使用GCC -MCPU選項,要么設置CPU模型,要么告訴GCC使用基於GCC在VIA -MCPU =本機上運行的機器的CPU模型。註釋基於舊版X86的系統,GCC -MCPU是-Mtune的不棄用同義詞,而GCC -MCPU在基於ARM的系統上得到了完全支持。有關詳細信息,請參見ARM的編譯器標誌指南:-March,-mtune和-mcpu。

總而言之,只要可能,在編譯ARM時僅使用-MCPU,然後避免-march和-mtune。以下是一個案例研究,通過使用VP9視頻編碼軟件設置GCC -MCPU選項來突出顯示性能的提高。

設置-MCPU選項:

  • -MCPU = Ampere1:生成將在安培處理器上運行的代碼。 Ampereone是從安培的下一代云本地處理器,將高性能處理器的家族擴展到新的行業領先的核心計數。請注意,這可以生成不會在Ampere Altra和Altra Max處理器上運行的代碼。此選項最初在GCC版本12.1及更高版本中可用,然後回到GCC 10.5和GCC 11.3。

  • -MCPU = Neoverse-N1:生成將在Ampere Altra,Ampere Altra Max和Ampere AmpereOne上運行的代碼。在支持將在安培安培中運行的代碼使用此選項,但它可能不會利用所有可用的新績效功能。請注意,需要GCC版本9.1或更高版本才能為Ampere Altra和Ampere Altra Max處理器啟用CPU特定調諧。

  • -MCPU =本機:生成代碼基於CPU GCC正在運行的CPU模型。注意,需要GCC版本9.1或更高版本以啟用Ampere Altra和Ampere Altra Max處理器的CPU特定調諧。

使用-mcpu =本機的使用可能更易於使用,儘管如果在其他系統上使用可執行文件,共享庫或對象文件,則可能存在潛在的問題。如果在安培安培處理器上完成構建,則該代碼可能無法在安培的Altra或Altra Max處理器上運行,因為生成的代碼可能包括AMPERE安培處理器支持的ARMV8.6指令。 如果在Ampere Altra或Altra Max處理器上完成構建,則GCC將不會利用安培安培處理器上可用的最新性能改進。當構建代碼以利用任何體系結構的性能功能時,這是一個一般問題。

>下表列出了支持Ampere處理器-MCPU值的GCC版本。

>處理器 -MCPU值 gcc 9 gcc 10 gcc 11 GCC 12 > gcc 13 安培的醒目 Neoverse-N1 ≥9.1 全部 全部 全部 全部 安培·奧特拉(Ampere Altra Max) Neoverse-N1 ≥9.1 全部 全部 全部 全部 安培 Ampere1 N/A。 ≥10.5 ≥11.3 ≥12.1 全部

>我們的建議是使用上述適當的值使用GCC -MCPU選項(-mcpu = ampere1,-mcpu = neoverse -n1或-mcpu =本機)和-O2來建立性能的基線,然後探索其他優化選項並衡量與基線相比,不同的選項是否提高了性能。

>

常見GCC選項的摘要:

  • 在構建Ampere處理器上,建議使用

    -MCPU,以啟用處理器特定的調整和優化。 (有關詳細信息,請參見上面的討論“設置-MCPU選項”部分。)

    >
  • 如果您的應用程序受到獲取說明的限制,則

    -OS可以優化以減少代碼大小。

  • -O2被認為是標準的GCC優化選項,並且可以用作與其他GCC選項進行比較的基準。

  • -O3添加了其他優化,以生成更有效的循環代碼,如果您的應用程序性能在循環中所花費的時間主導,則可以嘗試使用。

  • 配置文件指導優化(PGO):-frofile -fer -fofile -fofile -use。生成編譯器將使用的配置文件數據有潛在地對優化做出更好的決策,例如內部,循環優化和默認分支。這被認為是高級優化,因為它需要更改構建系統,請參見下文。

  • >鏈接時間優化(LTO):-flto。啟用鏈接時間優化,允許編譯器在各個源文件上進行優化。這使得在其他編譯器優化以及其他編譯器優化和其他編譯器優化方面可以將函數在源文件上進行串聯。這也被認為是高級優化,可能需要更改構建系統。此選項增加了整體構建時間,這對於大型應用程序可能是戲劇性的。可以將LTO僅在績效關鍵源文件上使用,以減少構建時間。

> VP9視頻編碼案例研究與GCC -MCPU

VP9是由Google開發的視頻編碼格式。 LIBVPX是Google的VP8和VP9視頻編解碼器的開源參考軟件實現,以及Open Media聯盟(AOMEDIA)。 LIBVPX在X264上提供了顯著改善,並花費了額外的計算時間。有關VP9和LIBVPX的其他信息,請訪問Wikipedia。 在本案例研究中,VP9構建被配置為使用GCC -MCPU =本機選項來提高性能。如上所述,在編譯安培處理器上時,請使用-MCPU選項以啟用CPU特定的調整和優化。最初,使用默認配置構建了libvpx,然後使用-mcpu =本機進行重建。為了評估VP9性能,使用了1080p輸入視頻文件,使用了YouTube的用戶生成的內容數據集的Original_videos_sports_sports_1080p_sports_1080p-0063.mkv。有關如何構建FFMPEG和包括Ampere處理器的VP9在內的各種編解碼器,請參見Ampere的FFMPEG調整和構建指南。

>

>默認的libvpx構建:

如何使用-mcpu =本機

優化libvpx構建
$ git clone https://chromium.googlesource.com/webm/libvpx
$ cd libvpx/
$ export CFLAGS="-mcpu=native -DNDEBUG -O3 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wdeclaration-after-statement -Wdisabled-optimization -Wfloat-conversion -Wformat=2 -Wpointer-arith -Wtype-limits -Wcast-qual -Wvla -Wimplicit-function-declaration -Wmissing-declarations -Wmissing-prototypes -Wuninitialized -Wunused -Wextra -Wundef -Wframe-larger-than=52000 -std=gnu89"
$ export CXXFLAGS="-mcpu=native -DNDEBUG -O3 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wdisabled-optimization -Wextra-semi -Wfloat-conversion -Wformat=2 -Wpointer-arith -Wtype-limits -Wcast-qual -Wvla -Wmissing-declarations -Wuninitialized -Wunused -Wextra -Wno-psabi -Wc++14-extensions -Wc++17-extensions -Wc++20-extensions -std=gnu++11 -std=gnu++11"
$ ./configure
$ make verbose=1 
$ ./vpxenc --codec=vp9 --profile=0 --height=1080 --width=1920 --fps=25/1 --limit=100 -o output.mkv /home/joneill/Videos/original_videos_Sports_1080P_Sports_1080P-0063.mkv --target-bitrate=2073600 --good --passes=1 --threads=1 –debug
登入後複製

使用Linux Perf的調查測量功能中CPU週期的數量,該函數花費了最多的時間包括函數VPX_Convolve8_Horiz_Neon和VPX_Convolve8_vert_neon。 LIBVPX GIT存儲庫表明,通過ARM優化了這些功能以使用ARMV8.6-A USDOT(混合符號點產物)指令,該指令由Ampere處理器支持。

。使用GCC -MCPU =天然,在VPX_Convolve8_Horiz_Neon中花費的CPU週期從6.07e 11減少到2.52e 11,以在Ampere Altra處理器上啟用點產品優化,從而將CPU週期減少為2.4x。

對於VPX_Convolve8_vert_neon,

將CPU週期從2.46E 11減少到2.07e 11,以減少16%。

總體而言,使用-mcpu =天然來啟用DOT產品指令加速編碼文件Original_videos_sports_sports_1080p_sports_sports_1080p -0063.mkv在AMPERE ALTRA處理器上通過改進應用程序瀏覽器來啟用7%。下表顯示了使用Perf Record和Perf Report實用程序收集的數據,以測量CPU週期和指令退休。

構建config

符號 循環(%) 循環 >指令(%) >指令 默認構建 vpx_convolve8_horiz_neon 8.72 6.07e 11 7.52 1.13e 12 vpx_convolve8_vert_neon 3.53 2.46 E11 2.51 3.78e 11 整個應用程序 100 6.97e 10 100 1.48e 11 -mcpu =本機 vpx_convolve8_horiz_neon 3.89 2.52E 11 3.87 5.71E 11 vpx_convolve8_vert_neon 3.19 2.07 E11 3.29 4.86e 11 整個應用程序 100 6.48e 10 100 1.48e 11 > GCC配置文件指導優化 >本節概述了GCC的配置文件指導優化(PGO)和用PGO優化MySQL的案例研究。配置指南的優化使GCC能夠做出更好的優化決策,包括優化分支,代碼塊重新排序,通過循環展開,循環剝離和矢量化來融合功能和循環優化。使用PGO需要修改構建環境才能進行三部分構建。

>使用配置文件的優化構建應用程序,GCC -FROFILE生成。

在代表工作負載上運行應用程序以生成配置文件數據。

>使用配置文件數據,gcc -fprofile -use。
  1. 使用PGO的挑戰是上面步驟2中極高的性能開銷。由於運行使用GCC -FROFILE生成的應用程序的性能緩慢,因此在生產環境中運行的系統運行可能是不切實際的。請參閱GCC手冊的程序儀器選項部分,以使用運行時儀器和使用生成的配置文件信息進行優化進行優化的部分構建應用程序,以獲取其他詳細信息。
  2. 如GCC手冊中所述,建議用於多線程應用程序,並可以通過收集改進的配置文件數據來提高性能。

    何時使用PGO?

    >使用PGO,GCC可以通過提供其他信息,例如測量分支,而不是採用並測量循環跳閘計數來更好地優化應用程序。 PGO是一種有用的優化,可以嘗試查看其是否提高性能。 PGO可能有助於包括分支錯誤預測的應用程序的性能簽名,可以使用Perf Utility讀取CPU的性能監控單元(PMU)計數器BR_MIS_PRED_RETIED。大量的分支錯誤預測導致前端攤位的很高比例,可以通過Stall_frontend PMU計數器進行測量。具有高L2指令的申請緩存率也可能受益於PGO,可能與錯誤預測的分支機構有關。總而言之,很大一部分分支機構錯誤預測,CPU前端攤位和L2指令cache遺漏是績效簽名,PGO可以提高性能。

    > MySQL數據庫GCC PGO案例研究

    MySQL是世界上最受歡迎的開源數據庫,由於MySQL二進制尺寸巨大,是使用GCC PGO優化的理想候選者。沒有PGO信息,海灣合作委員會就無法正確預測執行的許多不同代碼路徑。使用PGO極大地減少了分支錯誤預測,L2指令cache MISS率和CPU前端檔位上的Ampere Altra Max處理器。

    總結使用GCC PGO優化MySQL的方式:

    Sysbench用於評估MySQL性能

    使用MySQL MTR(MySQL-Test-run)測試套件
    1. GCC PGO
    2. 與默認構建相比 然後將所使用的線程數從1到1024變化,OLTP_POINT_SELECT的平均速度為29%,在Ampere Altra Max M128-30處理器上測試的OLTP_READ_ONLY測試為20%。
    3. 有64個線程,PGO通過改進MySQL的吞吐量
    4. 提高了32%
    5. 其他詳細信息可以在Ampere開發人員的網站上找到MySQL Tuning Guide。
    6. 摘要
    7. 優化應用程序需要實驗不同的策略,以確定哪種作用最佳。本文為不同的海灣合作委員會編譯器優化提供了建議,以生成在安培處理器上運行的高性能應用程序。它突出顯示了使用-MCPU選項作為生成代碼的最簡單方法,該代碼利用了Ampere Cloud Native處理器支持的所有功能。針對MySQL數據庫和VP9視頻編碼器的兩個案例研究顯示了使用GCC選項來優化這些應用程序至關重要的這些應用程序。Ampere的第一個雲本地處理器為可持續雲計算而構建的

      >可預測的高性能,平台可擴展性和功率效率在行業中提供了前所未有的。我們邀請您了解有關開發人員工作的更多信息,並在developer.amperecomputing.com上找到最佳實踐,並加入community.amperecomputing.com。

以上是Ampere處理器GCC指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板