本文最初是由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。
-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版本。
>我們的建議是使用上述適當的值使用GCC -MCPU選項(-mcpu = ampere1,-mcpu = neoverse -n1或-mcpu =本機)和-O2來建立性能的基線,然後探索其他優化選項並衡量與基線相比,不同的選項是否提高了性能。
>常見GCC選項的摘要:
-MCPU,以啟用處理器特定的調整和優化。 (有關詳細信息,請參見上面的討論“設置-MCPU選項”部分。)
>-OS可以優化以減少代碼大小。
-O2被認為是標準的GCC優化選項,並且可以用作與其他GCC選項進行比較的基準。
-O3添加了其他優化,以生成更有效的循環代碼,如果您的應用程序性能在循環中所花費的時間主導,則可以嘗試使用。
配置文件指導優化(PGO):-frofile -fer -fofile -fofile -use。生成編譯器將使用的配置文件數據有潛在地對優化做出更好的決策,例如內部,循環優化和默認分支。這被認為是高級優化,因為它需要更改構建系統,請參見下文。
>鏈接時間優化(LTO):-flto。啟用鏈接時間優化,允許編譯器在各個源文件上進行優化。這使得在其他編譯器優化以及其他編譯器優化和其他編譯器優化方面可以將函數在源文件上進行串聯。這也被認為是高級優化,可能需要更改構建系統。此選項增加了整體構建時間,這對於大型應用程序可能是戲劇性的。可以將LTO僅在績效關鍵源文件上使用,以減少構建時間。
>
>默認的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處理器支持。
對於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
符號在代表工作負載上運行應用程序以生成配置文件數據。
>使用配置文件數據,gcc -fprofile -use。>使用PGO,GCC可以通過提供其他信息,例如測量分支,而不是採用並測量循環跳閘計數來更好地優化應用程序。 PGO是一種有用的優化,可以嘗試查看其是否提高性能。 PGO可能有助於包括分支錯誤預測的應用程序的性能簽名,可以使用Perf Utility讀取CPU的性能監控單元(PMU)計數器BR_MIS_PRED_RETIED。大量的分支錯誤預測導致前端攤位的很高比例,可以通過Stall_frontend PMU計數器進行測量。具有高L2指令的申請緩存率也可能受益於PGO,可能與錯誤預測的分支機構有關。總而言之,很大一部分分支機構錯誤預測,CPU前端攤位和L2指令cache遺漏是績效簽名,PGO可以提高性能。
總結使用GCC PGO優化MySQL的方式:
Sysbench用於評估MySQL性能
使用MySQL MTR(MySQL-Test-run)測試套件>可預測的高性能,平台可擴展性和功率效率在行業中提供了前所未有的。我們邀請您了解有關開發人員工作的更多信息,並在developer.amperecomputing.com上找到最佳實踐,並加入community.amperecomputing.com。
以上是Ampere處理器GCC指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!