水超洋 ,于獻智 ,王銀山 ,譚光明
1(中國科學(xué)院 計算技術(shù)研究所,北京 100190)
2(中國科學(xué)院大學(xué),北京 100190)
HPL(high performance linpack)是目前HPC 領(lǐng)域中最重要的基準(zhǔn)測試程序之一,其性能被用作TOP500 的排名依據(jù)[1,2].HPL 可以從超級計算機的計算性能、訪存性能、網(wǎng)絡(luò)性能、可用性和穩(wěn)定性等各個方面給予超級計算機綜合評價.HPL 的優(yōu)化具有重要意義,在學(xué)界長期受到關(guān)注和研究.HPL 的優(yōu)化可以為其他科學(xué)計算應(yīng)用的并行優(yōu)化提供有價值的參考.
自1993 年TOP500[3]排名開始,榜單中的超級計算機的體系結(jié)構(gòu)一直在發(fā)生變化.圖1 展示了排名第一的計算機的體系結(jié)構(gòu)的變化.從圖1 中我們可以看到超算的體系結(jié)構(gòu)從早期的向量處理器和單核通用CPU 時代開始,然后演進到多核CPU 時代,超級計算機的計算能力也從GFLOPS 提升到TFLOPS.2008 年的超算Roadrunner[4]標(biāo)志著異構(gòu)架構(gòu)的超級計算機體系結(jié)構(gòu)的興起,隨后異構(gòu)架構(gòu)開始頻繁涌現(xiàn),超級計算機進入了PFLOPS 的時代.各種加速器,如GPU、DSP、FPGA、MIC 等都作為加速卡出現(xiàn)在各種超算中,我國有也了自己的國產(chǎn)加速器和國產(chǎn)處理器.伴隨著超算體系結(jié)構(gòu)的變化,HPL算法的設(shè)計與實現(xiàn)也應(yīng)該適應(yīng)新的體系結(jié)構(gòu).在這種背景下,本文建立了國產(chǎn)處理器-國產(chǎn)加速器異構(gòu)架構(gòu)上的HPL 性能模型,重點研究了國產(chǎn)處理器-國產(chǎn)加速器異構(gòu)架構(gòu)下的HPL算法的設(shè)計與實現(xiàn).本文的主要貢獻如下:
?本文建立了一個HPL 性能模型.
?針對國產(chǎn)處理器-國產(chǎn)加速器異構(gòu)架構(gòu),本文設(shè)計了一種多線程細粒度流水HPL算法,充分利用異構(gòu)系統(tǒng)中的多種硬件,取得了超過同類系統(tǒng)其他實現(xiàn)的效率.
?本文實現(xiàn)了輕量級跨平臺的異構(gòu)加速框架HPCX.
本文第1 節(jié)分析相關(guān)研究.第2 節(jié)介紹HPL 的性能模型.第3 節(jié)給出針對異構(gòu)架構(gòu)的多線程細粒度流水HPL算法及異構(gòu)加速框架HPCX.第4 節(jié)呈現(xiàn)新HPL算法的性能以及分析.第5 節(jié)總結(jié)全文.
HPL 是橫量超算性能最重要的基準(zhǔn)測試程序之一,其性能作為TOP500 排名的依據(jù).由于HPL 的重要地位,國內(nèi)外有許多針對Linpack 的優(yōu)化工作.這些工作主要集中在HPL算法優(yōu)化,雙精度矩陣乘法效率優(yōu)化和HPL性能模型3 個方面.
在Linpack算法優(yōu)化方面,Dongarra 等人基于消息通信接口(message pass interface,簡稱MPI)和基本線性數(shù)學(xué)庫(basic linear arithmetic subroutine,簡稱BLAS)的Level 3 函數(shù)實現(xiàn)了分布式的HPL算法[1].在此基礎(chǔ)上,文獻[5]提出了一種單邊通信和動態(tài)look-ahead算法,通過重疊第i+1 輪迭代的panel 分解與第i輪迭代的尾矩陣更新來實現(xiàn)部分通信與計算的重疊.針對異構(gòu)架構(gòu),Fatica 通過將尾矩陣劃分為固定比例的兩塊分別分配給加速器和CPU 以實現(xiàn)CPU 和加速器的協(xié)同計算[6].Yang 擴展了Fatica 的工作實現(xiàn)了動態(tài)的CPU 和加速器計算任務(wù)劃分,采取根據(jù)上一次計算的CPU/加速器性能比決定下一輪任務(wù)劃分比例的策略[7].文獻[8]實現(xiàn)了一種work-stealing 的策略來實現(xiàn)CPU 和加速器的計算任務(wù)動態(tài)平衡,并且利用有向無環(huán)圖來維護算法中的計算依賴關(guān)系.通過這種對依賴關(guān)系的分析,文獻[8]將行交換的過程分成幾個部分,通過行交換和尾矩陣更新的相互重疊探索了一種粗粒度的流水線算法.
作為HPL 的核心運算,雙精度矩陣乘法的優(yōu)化在HPL 的優(yōu)化中占有重要地位并且得到了全面而深入的研究.在傳統(tǒng)CPU 平臺上,文獻[9]給出了CPU 上的矩陣乘法的分層算法,通過對CPU 存儲層次的模擬設(shè)計出相應(yīng)的多級分塊緩存策略,以盡可能地利用高速緩存中的數(shù)據(jù).在包含加速器的異構(gòu)架構(gòu)上,李佳佳等提出了五階段流水的異構(gòu)矩陣乘算法來掩蓋CPU 與加速器之間的PCIe 數(shù)據(jù)傳輸[10,11].MAGMA[12]通過細粒度的任務(wù)劃分并且靈活地在CPU 和加速器上調(diào)度這些任務(wù)來實現(xiàn)負載的動態(tài)平衡.為充分利用加速器如GPU 的計算能力,文獻[13]通過微基準(zhǔn)測試來探測GPU 的體系結(jié)構(gòu),在匯編語言層面做了多種優(yōu)化,以實現(xiàn)接近GPU 理論浮點峰值性能的雙精度矩陣乘效率[13].
關(guān)于HPL 的性能建模,文獻[14]以預(yù)測HPL 的擴展性為目的給出了HPL 在CPU 系統(tǒng)上的性能模型.HPL的求解時間被建模為panel 分解,panel 廣播,行交換和尾矩陣更新的時間之和,并給出了模型中一些常量系數(shù)的經(jīng)驗值.王申等人在這個基礎(chǔ)上考慮了look-ahead算法中部分廣播開銷可以被尾矩陣的更新和行交換所掩蓋的情況[15],給出了更為精確的模型.文獻[16]認為上述模型的計算都不夠精確,因為模型中的常量值都是經(jīng)驗值,而CPU 計算效率以及通信帶寬等模型常量都會受數(shù)據(jù)量大小的影響.他們主張將這些常量系數(shù)視為可變的,通過已有的測試結(jié)果去學(xué)習(xí)這些系數(shù),用學(xué)習(xí)得到得系數(shù)建模預(yù)測大規(guī)模求解的性能.
已有文獻中對HPL 的優(yōu)化主要集中在同構(gòu)架構(gòu)上的簡單算法優(yōu)化和性能建模以及異構(gòu)架構(gòu)上的雙精度矩陣乘的優(yōu)化上,而缺少異構(gòu)架構(gòu)上的HPL 的算法建模和算法流水層面的優(yōu)化.本文在CPU 的HPL 性能模型的基礎(chǔ)上建立了國產(chǎn)處理器-國產(chǎn)加速器異構(gòu)架構(gòu)上的HPL 性能模型,并提出了多線程細粒度的HPL 流水線算法,以充分發(fā)揮異構(gòu)系統(tǒng)中國產(chǎn)處理器的巨大計算能力.在實現(xiàn)上,我們實現(xiàn)了一個輕量級的跨平臺異構(gòu)加速框架HPCX,并用生產(chǎn)者消費者模型來協(xié)調(diào)多線程和多流的協(xié)同計算.
HPL算法通過迭代法求解N 階線性方程組Ax=b.求解過程包含兩個步驟,首先通過帶行交換的高斯消元法對系數(shù)矩陣進行 LU 分解得到[Ab] =[[L,U]y],然后進行三角回帶求解x.其中 LU 分解的計算量為,三角回帶的計算量為2N2[1].給定系統(tǒng)的理論浮點峰值性能和HPL 的求解時間T,系統(tǒng)的實測浮點峰值性能Rmax可以表示為,HPL 的效率E=Rmax/Rpeak.
HPL 的兩個步驟中LU 分解的計算量為O(N3),三角回帶的計算量為O(N2),相比于LU 分解的時間,三角回帶的時間基本可以忽略[17],所以我們的優(yōu)化也集中在LU 分解上.式(1)給出了LU 分解的符號表示,詳細的算法數(shù)學(xué)證明請參考文獻[1].在實現(xiàn)上,LU 分解以NB列為迭代步進行迭代求解,算法1 給出了LU 分解的詳細算法描述.每一輪迭代包含4 個子過程,分別是panel 分解、panel 廣播、行交換和尾矩陣更新.其中panel 分解(panel_factorization)通過遞歸高斯消元求解得到L11,U11和L21;panel 廣播(panel_bcast)將L11和L21廣播給同行的行進程;行交換(row_swap)根據(jù)panel 廣播收到的行交換信息做行交換;尾矩陣更新(update)首先執(zhí)行雙精度三角矩陣求逆(DTRSM)得到U12,然后通過將L21和U12做雙精度矩陣乘(DGEMM)更新A22矩陣.
在已有的CPU HPL 建模分析的基礎(chǔ)上[14,16?19],我們提出了適應(yīng)于處理器-加速器異構(gòu)架構(gòu)的HPL 性能模型.在具體介紹我們的HPL 性能模型之前,我們先給出一些符號及其含義,大部分符號采取與文獻[17]中一致的名稱.矩陣A是N×(N+1)的系數(shù)矩陣,以NB×NB的塊大小均勻分布在P×Q的二維進程網(wǎng)格中,mp×nq表示每個進程處理的子矩陣的大小.ffact表示panel 分解中浮點操作的比例,Pcpu和Ecpu分別表示國產(chǎn)處理器雙精度浮點峰值性能和浮點操作的效率,Pacc表示國產(chǎn)加速器雙精度浮點峰值性能,Edgemm和Edtrsm分別表示國產(chǎn)加速器上DGEMM 和DTRSM 的效率,網(wǎng)絡(luò)延遲為Lats,帶寬為BWbyte/s.對于panel 分解子過程,我們通過估計子過程中矩陣乘的計算量乘以一個系數(shù)來估計整體的浮點計算量,式(2)給出了這一子過程的時間估計.其中需要特別指出的是,我們將panel分解中大矩陣放到國產(chǎn)加速器上進行計算,這在式(2)的分母中體現(xiàn)了出來.
對于panel 廣播算法的選擇,我們實現(xiàn)中采用的是HPL 軟件包中復(fù)雜度較低的Long算法.它的復(fù)雜度為log級別,體現(xiàn)在式(3)前半部分的系數(shù).每次廣播,我們需要傳輸大小為NB×NB的L11和mp×NB的L12以及少量索引,這些數(shù)據(jù)均為雙精度類型(8 字節(jié)),公式的后半部分給出了每一跳(從一個節(jié)點傳往下一個節(jié)點)的時間估計.式(3)給出了對這一過程的時間估計.
行交換時間的估計方式與panel 廣播的估計方式類似,區(qū)別在于采取的算法和傳輸?shù)臄?shù)據(jù)量不同.出于避免冗余數(shù)據(jù)傳輸?shù)哪康?行交換采用的是spread-roll算法[11],式(4)給出了這一子過程的時間估計.
尾矩陣更新的過程主要是在國產(chǎn)加速器上執(zhí)行兩個BLAS庫函數(shù)DGEMM 和DTRSM,其計算量分別是2×mp×nq×NB和nq×NB×NB.式(5)給出了尾矩陣更新的時間估計.
性能模型中參數(shù)的值,我們分為兩類.一類是可以預(yù)知的,比如問題的規(guī)模,分塊的大小以及硬件的峰值浮點性能等等,對于這一類參數(shù),我們根據(jù)系統(tǒng)硬件以及求解問題的實際規(guī)模設(shè)定好對應(yīng)的值;另一類是不可以預(yù)知的,比如雙精度矩陣乘的效率可能和矩陣的規(guī)模相關(guān),網(wǎng)絡(luò)的實際帶寬和延遲可能受發(fā)送的數(shù)據(jù)量的影響等等,對于這一類參數(shù),我們通過小規(guī)模實際測試給出其實測值.
我們用TOP500 榜單中排名靠前的與國產(chǎn)處理器-國產(chǎn)加速器類似的異構(gòu)系統(tǒng),如Summit[20]、Serria[21]、ABCI[22]以及曙光E 級超算原型機對上述HPL 性能預(yù)測模型進行了檢驗,結(jié)果見表1[17].在大規(guī)模系統(tǒng)HPL 性能預(yù)測的準(zhǔn)確性上,最大誤差值不到5%.可以看到,我們建立的國產(chǎn)處理器-國產(chǎn)加速器異構(gòu)HPL 性能模型較為準(zhǔn)確,可以給將來E 級機的建造提供參考.
Table 1 TOP500 supercomputer performance prediction表1 TOP500 超級計算機性能預(yù)測
在已有的文獻中,LU 分解的4 個子過程,panel 分解,panel 廣播,行交換和尾矩陣的更新都是順序執(zhí)行的.在過去純CPU 時代,由于尾矩陣更新占據(jù)了90%以上的時間,HPL 的效率主要由DGEMM 的效率決定,其他3 個子過程對性能的影響不大.此時這種順序執(zhí)行4 個步驟,或者通過簡單的look-ahead算法[5]實現(xiàn)粗粒度流水的算法也能取得很好的效果.但是對于國產(chǎn)處理器-國產(chǎn)加速器異構(gòu)架構(gòu),由于國產(chǎn)加速器計算能力與國產(chǎn)處理器的計算能力存在1~2 個數(shù)量級的差距,尾矩陣更新的時間占比減少到了50%左右,此時panel 分解,panel 廣播和行交換對性能的影響就不能忽略.在這樣的背景下,探索一個新的細粒度流水算法用update 的有用計算去掩蓋panel 分解、panel 廣播和行交換的開銷對于提升HPL 的效率,充分發(fā)揮國產(chǎn)加速器的強大計算能力顯得尤為重要.
HPL 耗時最多的計算是尾矩陣A22更新的矩陣乘法計算,異構(gòu)HPL算法加速的核心是利用國產(chǎn)加速器加速矩陣乘法.傳統(tǒng)的CPU-加速器異構(gòu)HPL算法通過把panel 分解的結(jié)果L11,U12,L21矩陣拷貝到加速器內(nèi)存,同時將更新前的尾矩陣A22拷貝到加速器內(nèi)存,利用加速器求解U12和更新尾矩陣,將更新后的尾矩陣~A22拷貝回CPU 內(nèi)存[17].這種做法將系數(shù)矩陣放在CPU端內(nèi)存中,每次調(diào)用加速器的DGEMM 都需要把數(shù)據(jù)通過PCIe 拷貝到加速器內(nèi)存,在完成計算后又需要把結(jié)果矩陣拷貝回CPU 內(nèi)存.在文獻[6]中通過三階段流水的辦法用加速器上的計算來掩蓋PCIe 數(shù)據(jù)傳輸?shù)拈_銷,但是加速器算力增加的速度遠遠高于PCIe 帶寬的增加速度,它們之間越來越大的差距使得加速器計算的時間無法掩蓋PCIe 傳輸?shù)臅r間.為了解決這個問題,我們將系數(shù)矩陣放在國產(chǎn)加速器的內(nèi)存上,這樣就避免了國產(chǎn)處理器和國產(chǎn)加速器之間大量的數(shù)據(jù)交換.只需要在國產(chǎn)處理器做panel 分解之前,從國產(chǎn)加速器把panel 需要的NB列數(shù)據(jù)拷貝回來就可以了.假設(shè)當(dāng)前迭代中剩余待求解系數(shù)矩陣大小為n× (n+1),原來粗粒度并行的算法中,我們需要通過PCIe 移動字節(jié)的數(shù)據(jù),現(xiàn)在只需要移動字節(jié)數(shù)據(jù),通過PCIe 的數(shù)據(jù)傳輸量大大減少了.這個版本的HPL算法我們稱為粗粒度HPL算法.
粗粒度HPL算法存在兩個問題導(dǎo)致其不能取得很高的性能.一個問題是由于尾矩陣更新時間占比減少,行交換的網(wǎng)絡(luò)傳輸?shù)拈_銷顯得越來越大.另一個問題是通過簡單使用國產(chǎn)加速器的異步流機制讓國產(chǎn)處理器端的panel 分解和國產(chǎn)加速器端的update 并行,國產(chǎn)處理器與國產(chǎn)加速器只有很弱的并行工作的效果,大部分時間國產(chǎn)處理器與國產(chǎn)加速器都是串行執(zhí)行,這造成了國產(chǎn)加速器大量的空閑等待時間.為了解決這兩個問題,我們設(shè)計了一種國產(chǎn)處理器-國產(chǎn)加速器異構(gòu)多線程細粒度流水算法.我們通過對數(shù)據(jù)依賴的分析發(fā)現(xiàn)尾矩陣更新與行交換在列與列之間是沒有數(shù)據(jù)依賴的.受此啟發(fā),我們在列方向上對尾矩陣進行分塊,如圖2 所示,將完整的尾矩陣行交換和更新劃分成一個個由若干NB列塊組成的單元進行行交換和更新.行交換主要利用PCIe 和網(wǎng)絡(luò),對國產(chǎn)加速器的計算資源占用率不高,這樣就用尾矩陣更新的計算掩蓋了行交換的開銷[17].在上面細粒度任務(wù)劃分的基礎(chǔ)上,我們引入了多線程多流機制來協(xié)調(diào)國產(chǎn)處理器與國產(chǎn)加速器的計算.具體來說,我們引入了4個線程,如圖3 所示,thread 0 負責(zé)panel 分解和panel 廣播,thread 1 負責(zé)PCIe 的數(shù)據(jù)傳輸,thread 2 負責(zé)行交換,thread 3 負責(zé)尾矩陣更新.thread 1 和thread 2 兩個線程運行在同一個國產(chǎn)處理器物理核心上,thread 0 和thread 3 分別運行在其他兩個國產(chǎn)處理器物理核心上.除線程0 外,每個線程管理各自的異步流.通過利用線程間同步和流之間的同步來協(xié)調(diào)國產(chǎn)處理器與國產(chǎn)加速器的計算,最終實現(xiàn)了如圖3 所示的流水線.
Fig.2 HPL fine-grained parallel data splitting (K is a multiple of NB)圖2 HPL 細粒度并行數(shù)據(jù)劃分(K 是NB 的倍數(shù))
Fig.3 HPL multithread fine-grained parallel algorithm flow圖3 HPL 多線程細粒度并行算法流程圖
我們通過引入簡單的生產(chǎn)者消費者模式來維護細粒度算法的依賴關(guān)系,以降低多線程帶來的開銷,實現(xiàn)與文獻[17]中做法一致.如圖4 所示,行交換生產(chǎn)者做完一個列塊的行交換之后,生成一個更新任務(wù)放到更新任務(wù)隊列里邊;負責(zé)尾矩陣更新的線程作為消費者,取出更新隊列里面的任務(wù)并執(zhí)行,同時尾矩陣更新線程還是傳輸任務(wù)的生產(chǎn)者,在執(zhí)行完一個更新任務(wù)后,生成一個傳輸任務(wù)放到傳輸任務(wù)隊列里邊;負責(zé)傳輸?shù)木€程從傳輸隊列里取任務(wù)完成傳輸;負責(zé)panel分解的進程在等待自己需要的列塊數(shù)據(jù)更新完成之后就可以并行開始做下一輪的panel分解[17].各個線程間利用信號量實現(xiàn)等待和喚醒,當(dāng)任務(wù)隊列為空的時候,相應(yīng)線程就掛起,避免忙等待帶來的開銷.
異構(gòu)系統(tǒng)的加速器有多種,比如GPU、MIC、FPGA、國產(chǎn)加速器等等.為了讓異構(gòu)HPL算法具有可移植性,能夠運行在多種異構(gòu)平臺上,我們完成了一個輕量級的異構(gòu)加速框架HPCX[17].其實現(xiàn)與文獻[17]一致,如圖5 所示,我們抽象出了異構(gòu)加速平臺的一些共有特性,比如內(nèi)存管理,并行計算,數(shù)據(jù)傳輸,異步調(diào)用等等.同時我們對不同廠商的異構(gòu)加速器編程模型和基礎(chǔ)數(shù)學(xué)庫進行總結(jié),定義了一套統(tǒng)一的編程結(jié)構(gòu).在不同的加速器上,使用不同的編程模型(HIP、CUDA、C)實現(xiàn),底層用不同的編譯器編譯成不同平臺上的二進制程序.目前HPCX 支持國產(chǎn)加速器、AMD GPU 和NVIDIA GPU 以及國產(chǎn)處理器、Intel CPU 和AMD CPU.對于其他異構(gòu)加速器,結(jié)合硬件平臺給出HPCX 定義抽象接口的具體實現(xiàn)就可以方便整理到HPCX 框架中.異構(gòu)并行HPL算法通過調(diào)用HPCX 提供的編程接口實現(xiàn)跨平臺加速.
Fig.4 HPL producer-customer model圖4 HPL生產(chǎn)者消費者模型
Fig.5 Heterogeneous acceleration framework HPCX圖5 異構(gòu)加速框架HPCX
我們實現(xiàn)了包括國產(chǎn)加速器和NVIDIA GPU 兩種異構(gòu)平臺上的粗粒度版本HPL 和多線程細粒度版本HPL,在國產(chǎn)加速器和NVIDIA 兩個平臺上進行了測試.在NVIDIA 平臺上,我們將我們實現(xiàn)的兩個版本的HPL與開源成果三階段流水線版本HPL 以及目前NVIDIA 平臺上效率最高的NVIDIA 官方非開源程序nvhpl 進行了對比.在國產(chǎn)加速器平臺上,我們在曙光E 級超算原型機的512 個節(jié)點上進行大規(guī)模擴展性測試.
表2 給出了我們實驗平臺的信息.在兩種平臺上,單個節(jié)點內(nèi)處理器與加速器都通過PCIe 3.0 總線連接.NVIDIA 平臺上只有一個節(jié)點,配有兩張P100 顯卡.國產(chǎn)加速器平臺上有多個節(jié)點,每個節(jié)點上裝有一個國產(chǎn)加速器,節(jié)點之間采用100Gb/s 的EDR 網(wǎng)絡(luò)連接.
Table 2 Configuration of computing nodes表2 計算節(jié)點的配置
在NVIDIA 平臺上的單卡測試結(jié)果如圖6 所示.從圖6 中我們可以看到,隨著問題規(guī)模的變大,除了開源的3 階段流水線版本HPL 的性能沒有太大提高外,nvhpl 與我們實現(xiàn)的兩個版本HPL 均有明顯性能提升.出現(xiàn)這種情況是因為3 階段流水線版本的HPL 的矩陣位于CPU 上,而三階段流水線無法用加速器的計算掩蓋PCIe數(shù)據(jù)傳輸?shù)拈_銷.我們可以看到,通過簡單地把矩陣放到加速器內(nèi)存上,粗粒度HPL 就獲得了很大的性能提升,說明將矩陣置于加速器內(nèi)存上是合理的.但是粗粒度HPL算法與nvhpl 相比還是有較大差距,原因是粗粒度HPL算法對加速器與處理器的并行度挖掘不夠,以及忽略了行交換中網(wǎng)絡(luò)通信開銷的優(yōu)化.多線程細粒度HPL算法在做完上述優(yōu)化之后,性能完全超越了nvhpl 的性能,平均領(lǐng)先nvhpl 達9%.圖7 展示了NVIDIA 平臺上多卡的測試結(jié)果.由于三階段流水線版本HPL 速度太慢,我們略去了它的多卡測試.從圖7 中我們可以發(fā)現(xiàn),粗粒度HPL、多線程細粒度HPL 與nvhpl 都有較好的擴展性.在多卡測試上,我們的細粒度版本HPL 依然領(lǐng)先nvhpl.
如圖8 所示,在曙光E 級原型機的512 個節(jié)點上,我們進行了1~512 個節(jié)點的擴展性測試.從圖8 中可以看出,在不同測試進程規(guī)模下,HPL 的擴展性很好,隨著節(jié)點的增加HPL 的測試效率緩慢下降,從2 個節(jié)點約75%的效率下降到512 個節(jié)點約71%的效率.需要注意圖中單節(jié)點效率偏低是因為單節(jié)點測試采用的NN 格式(非轉(zhuǎn)置非轉(zhuǎn)置)的矩陣乘,而多節(jié)點采用的NT 格式(非轉(zhuǎn)置轉(zhuǎn)置)的矩陣乘,前者的效率低于后者.我們實現(xiàn)的多線程細粒度版本HPL 最終在512 個節(jié)點上實現(xiàn)了HPL 實測峰值性能2.3 PFLOPS,實測效率71.1%優(yōu)秀測試結(jié)果.
Fig.6 HPL performance on single NVIDIA GPU圖6 NVIDIA GPU 單卡HPL 性能
Fig.7 HPL performance on multiple NVIDIA GPUs圖7 NVIDIA GPU 多卡HPL 性能
Fig.8 Sugon E-prototype supercomputer HPL performance圖8 曙光E 級超算原型機HPL 性能
本文提出的異構(gòu)HPL算法通過將矩陣存儲于國產(chǎn)加速器的內(nèi)存解決了數(shù)據(jù)傳輸瓶頸,通過多線程細粒度的算法軟流水實現(xiàn)了對通信開銷的掩蓋,通過一個輕量級異構(gòu)加速框架HPCX 提供的對國產(chǎn)加速器的基本操作的抽象實現(xiàn)了跨平臺的異構(gòu)HPL算法.在同類異構(gòu)系統(tǒng)上,我們實現(xiàn)的算法性能遠遠超過開源的工作,并且優(yōu)于NVIDIA 公司的非開源HPL 程序.我們的算法也展示了良好的擴展性,在曙光E 級超算原型機512 個節(jié)點HPL 測試中實現(xiàn)了71.1%的效率.同時,我們的性能模型也展示了較高的準(zhǔn)確性,可以為未來E 級異構(gòu)超算的HPL 性能預(yù)測提供參考.