發(fā)布時間: 2021-08-02 10:10:18
HPC( High Performance Computing,高性能計算)領域主要是解決計算密集型、海量數(shù)據(jù)處理等業(yè)務的計算需求,如科學研究、氣象預報、計算模擬等。如何提高計算能力、極致化應用性能成為當前 HPC 領域各大平臺最關鍵的課題之一,編譯器在其中發(fā)揮著至關重要的作用。
畢昇編譯器作為一款基于鯤鵬平臺的高性能編譯器,在編譯算法、加速指令集、 Autotuner 等方面對應用場景進行了深度的優(yōu)化,為開發(fā)者提供高效的性能加持。本期由畢昇編譯器工程師為你介紹鯤鵬的性能優(yōu)化利器——畢昇編譯器如何釋放鯤鵬的強勁算力。
了解畢昇編譯器
畢昇編譯器是基于 LLVM,針對鯤鵬平臺進行了深度優(yōu)化的高性能編譯器。除支持 LLVM 通用功能之外,對以下三個方面進行了增強,使得鯤鵬平臺的強勁算力能夠較大限度地得到釋放。
高性能編譯算法:編譯深度優(yōu)化,內存優(yōu)化增強,自動矢量化等,大幅提升指令和數(shù)據(jù)呑吐量。
加速指令集:結合 NEON/SVE 等內嵌指令技術,深度優(yōu)化指令編譯和運行時庫,發(fā)揮鯤鵬架構極致算力。
AI 迭代調優(yōu):內置 AI 自學習模型,自動優(yōu)化編譯配置,迭代提升程序性能,完成最優(yōu)編譯。
畢昇編譯器特性架構圖
當前畢昇編譯器已廣泛應用于多種 HPC 典型場景,如氣象、安防、流體力學等,性能優(yōu)勢已初步體現(xiàn)。其中,SPEC CPU 2017 benchmark 跑分平均優(yōu)于 GCC 20%以上,HPC 典型氣象應用 WRF 優(yōu)于 GCC 10%。
畢昇編譯器與開源編譯器SPEC CPU 2017 跑分對比
畢昇編譯器典型優(yōu)化場景及其優(yōu)化原理
結構體內存布局優(yōu)化—大幅提升緩存命中率,突破訪存瓶頸
SPEC CPU 2017 benchmark 中的 mcf 子項是對內存要求較高的應用,它是一款叫做MCF的大規(guī)模交通規(guī)劃軟件的核心代碼。其瓶頸代碼如下圖左邊所示。
結構體優(yōu)化原理示意圖
可見在 struct 中,data1 的使用率較高,而 data2 是不使用的。然而由于源代碼中,數(shù)據(jù)的排布是以結構體數(shù)組的形式排布。按照一般編譯器的編譯方式,拿數(shù)據(jù)時每次都會將整個結構體放到 cache 里面,導致大量不參與計算的 data2 也被加載到了 cache 中,造成高速內存空間的浪費和性能的損耗。
畢昇編譯器會通過用戶標記的結構體聲明,或者通過自動檢查循環(huán)中適合優(yōu)化的內存場景,確認優(yōu)化點。然后通過將結構體數(shù)組變?yōu)閿?shù)組結構體的方式(如上圖右),將有效數(shù)據(jù)緊湊排布,從而提高 cache 命中率和應用性能。經測試,此優(yōu)化可以對 mcf 子項帶來50%的性能提升。
自動矢量化—計算效率提升的秘訣
鯤鵬平臺支持 Armv8 NEON 矢量化指令集。當前支持32個128位的矢量寄存器,指令可以同時操作4*32或2*64的數(shù)據(jù)。畢昇編譯器依托這種硬件優(yōu)勢做了大量優(yōu)化,包括 SLP(superword-level parallelism) 矢量化和循環(huán)自動矢量化。例如在 SPEC CPU 2017 benchmark 中處理視頻流格式轉換的x264子項中,畢昇編譯器會自動識別并使用 uabd 和 udot 這類高效向量指令完成計算來替換標量指令,增大單時鐘周期的數(shù)據(jù)處理量, 從而大幅提升計算效率。對于 x264 子項,這項優(yōu)化可有效提升其30%的計算效率。
矢量化優(yōu)化示例
Autotuner—基于機器學習快速獲取最優(yōu)編譯配置
如何獲取性能最優(yōu)編譯選項是編譯器使用中常見的問題,往往需要長時間的手動選項調優(yōu)。為了減少這其中的工作量,使得用戶能快速找到最優(yōu)的優(yōu)化選項,畢昇編譯器自研了基于 ML 的自動搜索技術(ML-based Search) 的 Autotuner 工具。
Autotuner 的調優(yōu)流程由兩個階段組成:初始編譯階段(initial compilation)和調優(yōu)階段(tuning process),如下圖所示:
Autotuner 使用流程?
簡單來說,在初始編譯階段,編譯器會通過用戶指定的調優(yōu)方向,對可調優(yōu)的代碼區(qū)間進行標記。在隨后的調優(yōu)階段,Autotuner 會根據(jù)搜索算法對不同的優(yōu)化區(qū)間生成不同的編譯配置。然后使用此配置編譯運行,并根據(jù)運行性能的反饋來迭代優(yōu)化配置參數(shù)。最后經過給定迭代次數(shù)后找出最優(yōu)配置供用戶使用。在實踐過程中,通過 Autotuner 對 Coremark Benchmark 進行調優(yōu)可以獲取5%以上的收益。
以上介紹的三個優(yōu)化特性分別是畢昇編譯器在中前端算法優(yōu)化、后端指令優(yōu)化、迭代調優(yōu)中較具代表性、在各自領域對性能提升表現(xiàn)最佳的三個特性。除以上介紹的三個優(yōu)化特性之外,畢昇編譯器在軟件預取、循環(huán)優(yōu)化、分支預測、指針壓縮等編譯優(yōu)化技術均有探索且取得了顯著的收益
上一篇: oracle考試流程
下一篇: 使用 Spring Boot、Oracle 自治數(shù)據(jù)庫和OCI Vault構建安全的云原生應用