摘要:當應用軟體及硬體確定后,編譯器對應用的自動優化將成為應用性能的關鍵,
從應用優化說起
一個應用的優化通常有架構級優化、模塊級優化和函式級優化,高性能作為云資料庫GaussDB主打特性之一,其在這幾方面都進行了大量的優化,也有很強的性能表現,如何進一步提升性能,是否還有其他方面的切入點?
答案之一是編譯器,編譯器作為人機交流的橋梁,一方面正確地把高級語言翻譯成機器語言,另一方通過各種優化變換方法生成更高效的等價語意,所以當應用軟體及硬體確定后,編譯器對應用的自動優化將成為應用性能的關鍵,
1.畢昇編譯器是什么
畢昇編譯器是華為編譯器實驗室針對通用處理器架構構建,支持C/C++/Fortran編程語言,增強和引入了多種編譯優化技術,致力于打造高性能、高可信及易擴展的編譯器工具鏈,畢昇編譯器針對鯤鵬架構深度優化,SPEC CPU 2017性能較開源GCC提升30%,
- 高性能:編譯深度優化,增強多核并行化,自動向量化等,大幅提升指令和資料呑吐量,
- 多算力支持:支持其他Arm架構國產芯片,如飛騰,支持x86、RISC-V、龍芯等架構,
- 高可信:商業+自研測驗套,每日100萬+測驗用例,全面質量保障;開發態提供多種安全編碼工具;社區CVE及時修復;車規級安全認證,
2. 相關編譯器優化技術
2.1 函式行內(inline)
函式/程序是編程語言的重要組成部分,函式/程序之間的呼叫是有一定的開銷,比如保存和恢復背景關系、傳遞引數等操作開銷,函式行內優化是一種常用的優化技術,它可以將函式呼叫處直接替換為函式體,從而減少函式呼叫的開銷,下面是一個簡單的示例,展示了如何在編譯器中應用inline優化,
int square(int x) { return x * x; } int calculate(int a) { return square(a) + square(a + 1); }
編譯器進行自動行內后,如下:
int calculate(int a) { return (a * a) + ((a + 1) * (a + 1)); }
在優化后的代碼中,不再有呼叫square函式的開銷,另外行內后可以幫助編譯器發現更多的優化機會,比如本例中,可以進一步進行編譯期間的計算,
這只是一個簡單的例子,實際的編譯器inline優化會更為復雜,涉及到更多的優化策略和技術,畢昇編譯器進行了inline優化增強,如下是mataERP場景下inline的情況,
函式行內后對應用熱補丁機制有一定影響,制作作業量會略有增加,
2.2 指令預取優化
指令預取(Instruction Prefetching)是一種計算機體系結構中的優化技術,用于提前獲取未來可能需要執行的指令資料,并將其預加載到指令快取中,以減少指令訪問延遲和提高程式的執行效率,
在執行程式時,處理器需要從記憶體中獲取指令資料并進行解碼和執行,由于記憶體訪問的延遲比處理器的執行速度慢,處理器可能需要等待指令資料的到達,導致指令執行的停滯,為了克服這種延遲,指令預取技術被引入,
指令預取的基本原理是根據程式的訪存模式和分支預測資訊,提前預測和獲取未來可能需要執行的指令資料,這樣,當處理器執行到需要這些指令的時候,它們已經被預先加載到指令快取(例如指令高速快取)中,避免了等待時間,
如下面這個來自GaussDB的函式:
畢昇編譯器(右側)插入了prfm預取指令,prfm是鯤鵬平臺上定義的記憶體資料預取指令,執行指令預取優化,
2.3 自動向量化技術
自動向量化技術是編譯器利用硬體架構提供的SIMD(single instruction multiple data)指令,如Arm的NEON/SVE指令,x86平臺的SSE/AVX指令,一條指令可以處理多路資料,從而提升應用二進制的執行效率,畢昇編譯器做了大量向量化新場景識別和演算法增強,并結合鯤鵬SIMD指令特點進行深度優化,
如上圖,如有兩組四個整形資料相加運算,左側需要四次操作,而右側向量化后只需要1次操作,
2.4 鏈接時優化技術
鏈接時優化LTO(Link Time Optimization)是程式鏈接期優化,也叫鏈接期程序間優化,如下圖,編譯器在鏈接時將所有編譯單元(程序)合并在一起,這樣可以發掘不同程序間的優化機會,比如行內(inline)、函式特化(function specialization)、冗余代碼消除、常量傳播等等,通常可以獲得更高的性能收益,當然同時也帶來編譯器時間加長的負面收益,
2.5 CFGO優化
對于控制流較多、對資料分段訪問較多的應用(例如資料庫類應用)非常適合編譯器的反饋類優化技術,CFGO(Continuous FGO)通過收集程式運行時資訊(profile)進行優化決策,編譯器根據這些運行時資訊指導各種編譯優化技術進行更準確的優化決策,生成目標程式,
3. 性能收益
畢昇編譯器協同GaussDB跨域創新,基于應用層優化、編譯中端優化、算力優化等多種手段對GaussDB應用場景持續優化,
- 高性能:對插入、更新、洗掉等不同負載的業務,畢昇 for GuassDB優化實作 TPCC性能提升30%,TPCH性能提升13%,應用性能提升5%-10%,
- 高安全:畢昇編譯器全面升級代碼檢測工具,保障安全可信代碼開發,實作高質量、高安全的持續集成、交付與部署,
4. 總結與展望
資料庫和編譯器都是關鍵的基礎軟體,為關基行業提供軟體根技術,后續將進行如下幾方面的作業:
(1)完成GaussDB切換畢昇編譯器,直接獲取已有的性能收益;
(2)針對典型客戶場景,技術能力聯合創新和快速驗證;
(3)突破編譯器/虛擬機關鍵技術,支撐高斯PLSQL性能提升;
目前GaussDB已啟動切換畢昇編譯器行程,并在已經在銀行、政務云等客戶進行了POC驗證,相信后續畢昇編譯器可以為GaussDB提供更強大的競爭力,從而也為更多行業客戶創造更多的商業價值,
另外,畢昇編譯器作為通用編譯器,也可涵蓋金融領域其他應用場景,如優化haproxy應用,助力工行音視頻互動服務獲得收益;落地上交所CICD,通過協助檢測記憶體安全、代碼規范,保障高質量交付,
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/555025.html
標籤:其它
上一篇:MySQL 8.0.29 instant DDL 資料腐化問題分析
下一篇:返回列表
