明平洲,蘆 韡,劉 東,曾 輝,余紅星
(1.中國核動力研究設(shè)計(jì)院,四川 成都 610213;2.中國核動力研究設(shè)計(jì)院核反應(yīng)堆系統(tǒng)設(shè)計(jì)技術(shù)重點(diǎn)實(shí)驗(yàn)室,四川 成都 610213)
中國核動力研究設(shè)計(jì)院開展的軟件自主化項(xiàng)目已進(jìn)入到第三期,其成果形式主要是NESTOR軟件包等涵蓋核反應(yīng)堆多個學(xué)科所需的計(jì)算程序。堆芯計(jì)算涉及的學(xué)科主要有反應(yīng)堆物理、熱工水力、力學(xué)以及燃料性能等,它們的單學(xué)科計(jì)算或者多學(xué)科耦合計(jì)算均用于論證和分析堆芯內(nèi)部存在的大量異質(zhì)現(xiàn)象[1]。由于真實(shí)堆芯的解析解極難獲得,不同的數(shù)值離散方法對各種物理數(shù)學(xué)方程的工程求解成為計(jì)算相關(guān)研究人員的核心工作[2]?,F(xiàn)階段中國核動力研究設(shè)計(jì)院引進(jìn)的基礎(chǔ)集群計(jì)算設(shè)施采用Intel商用處理器和國產(chǎn)飛騰處理器混合組成的結(jié)構(gòu),能夠通過SLURM集群資源管理系統(tǒng)進(jìn)行計(jì)算作業(yè)的分區(qū)投遞。目前國內(nèi)高端處理器市場主要有龍芯、飛騰和兆芯等品牌,其中飛騰研制的CPU已加入開放的ARM生態(tài)系統(tǒng),指令集兼容ARMv8-A[3]。區(qū)別于Intel商用處理器使用的X86復(fù)雜指令集體系,ARM是典型的精簡指令集體系。這使得集群計(jì)算機(jī)有不同特點(diǎn)的計(jì)算資源可供使用。不同指令集體系下的處理器存在著不同特點(diǎn)[4],在商用處理器受限或計(jì)算資源緊張的情況下,ARM計(jì)算資源有可能成為一種補(bǔ)充的數(shù)值計(jì)算資源。
研究涉及移植的兩個軟件描述為[5]:
1)CORTH是用于堆芯熱工水力分析的子通道程序,可用于分析研究反應(yīng)堆及其回路系統(tǒng)中冷卻劑的流動特性、熱量傳輸特性和燃料元件的傳熱特性,正在持續(xù)進(jìn)行開發(fā)和改進(jìn)。
2)反應(yīng)堆物理涉及穩(wěn)態(tài)計(jì)算和動態(tài)計(jì)算兩大類,它們根據(jù)某一層面的均勻化處理結(jié)果進(jìn)行全堆芯的中子物理參數(shù)求解。KYLIN2程序現(xiàn)階段在組件級別為堆芯程序提供組件庫的計(jì)算,其核心為使用特征線方法的中子輸運(yùn)求解器,具備多種計(jì)算功能。
現(xiàn)階段中國核動力研究設(shè)計(jì)院引進(jìn)的集群計(jì)算機(jī)具備多個計(jì)算節(jié)點(diǎn),分為多個分布式內(nèi)存計(jì)算區(qū)域,兩個主要類別對應(yīng)于Intel商業(yè)處理器環(huán)境和國產(chǎn)飛騰處理器環(huán)境。前者在運(yùn)行穩(wěn)定性和配套軟件上較為成熟;后者面向通用計(jì)算,但計(jì)算效率和運(yùn)行穩(wěn)定性略為不同,通常ARM處理器結(jié)構(gòu)主要應(yīng)用于嵌入式數(shù)字設(shè)備等領(lǐng)域,在數(shù)值分析計(jì)算領(lǐng)域尚處于局部應(yīng)用狀態(tài)。
硬件描述:飛騰FT-1500 A是基于ARM64位架構(gòu)的服務(wù)器芯片,面向計(jì)算服務(wù)器市場。在集群計(jì)算機(jī)上,每個邏輯上的飛騰計(jì)算節(jié)點(diǎn)使用了一個飛騰FT-1500 A處理器,具備16個處理器核心,每個處理器核心運(yùn)行單個線程。處理器打開了FP和ASIMD、SHA1,SHA2等標(biāo)志位。每個飛騰計(jì)算節(jié)點(diǎn)上的內(nèi)存為64 GB;
軟件描述:操作系統(tǒng)為麒麟操作系統(tǒng),開發(fā)環(huán)境主要為GCC 4.9.3,安裝Glibc 2.19、make 4.0和開發(fā)工具鏈Binutils 2.24.90[6]。
子通道計(jì)算軟件CORTH和堆芯組件程序KYLIN2作為專業(yè)應(yīng)用軟件在開發(fā)過程中依賴于第三方數(shù)值函數(shù)庫等。因此,移植過程需要圍繞兩類軟件進(jìn)行移植和測試,一類是底層系統(tǒng)軟件,用于為軟件自主化的上層應(yīng)用軟件提供通用計(jì)算功能的接口,并在ARM計(jì)算環(huán)境下擺脫對商業(yè)函數(shù)庫的依賴;另一類是堆芯計(jì)算本身的內(nèi)容,需要進(jìn)行程序代碼改寫和修訂,適應(yīng)新的計(jì)算環(huán)境。在本文中將對CORTH和KYLIN2展開分析和計(jì)算。
表1 待移植軟件Table 1 Software to be ported
研究首先驗(yàn)證飛騰處理器所在ARM環(huán)境下移植的可行性和正確性,然后給出移植堆芯程序的過程和實(shí)驗(yàn)來展開討論。考慮集群計(jì)算機(jī)商用計(jì)算節(jié)點(diǎn)配置參數(shù)的涉密性,這里選取的商用處理器對比對象為HP Z800服務(wù)器計(jì)算環(huán)境,其處理器為Intel Xeon X5540,共計(jì)12個核心,處理器頻率為2.53 GHz,約為飛騰處理器的兩倍。
整個移植工作采用自底向上的流程以適應(yīng)ARM計(jì)算環(huán)境,測試過程則將對比Intel處理器環(huán)境(HP Z800服務(wù)器)和ARM計(jì)算環(huán)境(集群系統(tǒng)的飛騰計(jì)算節(jié)點(diǎn))的效率、數(shù)值穩(wěn)定性和正確性。
參與數(shù)據(jù)前后處理的DATA和HDF5函數(shù)庫直接使用ARM計(jì)算環(huán)境提供的C/C++編譯器進(jìn)行編譯和軟件提供的基準(zhǔn)程序進(jìn)行測試,確保文本文件或二進(jìn)制文件的正確讀寫。
參與數(shù)值計(jì)算的PETSc、SparseLib++、Lapack和SuperLU在移植過程中重點(diǎn)用于求解線性方程組和參與特征值計(jì)算等數(shù)值問題。各個函數(shù)庫由多個模塊組成,底層依賴于向量、矩陣和索引集等數(shù)據(jù)結(jié)構(gòu),內(nèi)部采用C/C++語言和Fortran語言混合編程。這里移植到飛騰計(jì)算節(jié)點(diǎn)后使用GNU編譯器(gcc,g++和gfortran)以及基于GNU編譯器生成的并行編譯器(mpicc,mpicxx和mpifort)進(jìn)行編譯,能夠正常生成靜態(tài)庫和動態(tài)庫。與此同時,基于已有的熱工分析內(nèi)的守恒控制方程和特征線方法內(nèi)的提取的全局粗網(wǎng)加速線性方程組的研究工作[7],使用移植的庫進(jìn)行例題測試。ARM計(jì)算環(huán)境能夠正常完成數(shù)值計(jì)算,且收斂精度均達(dá)到預(yù)期的需求。
CORTH程序?qū)崿F(xiàn)全堆芯柵元級別的子通道計(jì)算,僅使用C/C++編程。移植過程中需要去掉MKL函數(shù)庫的依賴和改寫Fortran語言部分,例如將線性方程組的求解改用SparseLib++進(jìn)行求解。此外在ARM64平臺上重新編譯DATA類和熱工物性函數(shù)庫Thermal_lib,移植過程涉及Fortran和C++在ARM環(huán)境下的相互調(diào)用,例如熱工物性函數(shù)庫中的func函數(shù),在書寫GNU編譯器對應(yīng)的頭文件聲明為:
#ifdef __cplusplus
extern"C"
{
#endif
extern double func_(double*,double*,double*);
#ifdef __cplusplus
}
#endif
移植完成后針對ACP1000壓水堆四種子通道劃分的例題進(jìn)行串行計(jì)算效率的測試。兩種硬件環(huán)境下均使用GNU編譯器,編譯優(yōu)化等級統(tǒng)一設(shè)置為O2。
表2 CORTH運(yùn)行時間統(tǒng)計(jì)Table 2 Runtime statistics of CORTH
串行計(jì)算情況下Intel商用節(jié)點(diǎn)的效率明顯高于ARM計(jì)算節(jié)點(diǎn),隨著子通道劃分的數(shù)量增加,ARM計(jì)算節(jié)點(diǎn)的效率與Intel計(jì)算環(huán)境的差距由7.8倍變?yōu)?.7倍。經(jīng)過測試之后可以明確子通道分析程序的運(yùn)行特點(diǎn):隨著問題規(guī)模的提升,ARM計(jì)算節(jié)點(diǎn)與Intel計(jì)算環(huán)境的效率差距在減小。
KYLIN2用于生成組件截面庫,內(nèi)部的燃耗計(jì)算提供不同工況點(diǎn),因此KYLIN2的核心計(jì)算功能體現(xiàn)為二維特征線輸運(yùn)計(jì)算和點(diǎn)燃耗計(jì)算。KYLIN2程序的主要計(jì)算步驟為:
1)計(jì)算參數(shù)的初始化和分配內(nèi)存空間;
2)讀取輸入文件;
3)獲取基干數(shù)據(jù)庫文件;
4)判斷計(jì)算類型,執(zhí)行組件基干計(jì)算或燃料分支計(jì)算;
5)燃耗步是否結(jié)束,結(jié)束則整個計(jì)算完成,否則轉(zhuǎn)回步驟2)。
串行KYLIN2程序的移植過程主要涉及替換燃耗計(jì)算的線性方程組求解部分,即使用SuperLU函數(shù)庫提供的直接消去法函數(shù)進(jìn)行線性方程組的求解。
表3 組件例題Table 3 Assembly examples
以上兩個例題將在HPZ800服務(wù)器和內(nèi)部集群計(jì)算機(jī)的飛騰計(jì)算節(jié)點(diǎn)運(yùn)行。數(shù)值穩(wěn)定性和正確性將對比按照燃耗深度與有效增殖因子值的關(guān)系圖形給出(限于篇幅,每個燃耗步下的功率分布和燃耗分布不在論文中給出)。計(jì)算效率方面則給出同一例題在HP Z800服務(wù)器和飛騰計(jì)算節(jié)點(diǎn)的各自串行總計(jì)算時間。
(1)31016B例題
該例題增殖因子隨燃耗深度的變化趨勢如圖1所示。
圖1 31016B問題的燃耗變化趨勢圖Fig.1 Burn-up change trend of 31016B example
從圖1中可以看到,兩種硬件平臺下增殖因子隨燃耗深度的變化趨勢保持吻合,數(shù)值穩(wěn)定性在誤差范圍內(nèi)。該例題在兩類硬件環(huán)境中的串行計(jì)算時間統(tǒng)計(jì)如表4所示,兩者相差約在6倍左右。
表4 31016B問題的計(jì)算時間Table 4 Calculation time of 31016B example
(2)42000_Grey例題
該例題增殖因子隨燃耗深度的變化趨勢如圖2所示。
圖2 42000_Grey問題的燃耗變化趨勢圖Fig.2 Burn-up change trend of 24000_Grey example
從圖2中可以看到,兩種硬件平臺下增殖因子隨燃耗深度的變化趨勢保持吻合,數(shù)值穩(wěn)定性在誤差范圍內(nèi)。另外該例題在兩類硬件環(huán)境中的串行計(jì)算時間統(tǒng)計(jì)如表5所示,兩者相差約在7倍左右。
表5 42000_Grey問題的計(jì)算時間Table 5 Calculation time of 42000_Grey example
根據(jù)以上的移植和測試,可以得出結(jié)論: KYLIN2程序在ARM計(jì)算節(jié)點(diǎn)與Intel計(jì)算環(huán)境的效率差距在6~8倍,仍然遠(yuǎn)高于CPU頻率之間的差別,這一方面由于ARM精簡指令的運(yùn)行方式在數(shù)值計(jì)算方面相比Intel處理器使用的復(fù)雜指令集在處理數(shù)值計(jì)算的時候存在差異,另一方面也由于飛騰處理器FT-1500 A的緩存較小。整個計(jì)算結(jié)果表明數(shù)值求解方法的替換對數(shù)值穩(wěn)定性沒有影響,ARM計(jì)算節(jié)點(diǎn)上數(shù)值計(jì)算的準(zhǔn)確性與Intel計(jì)算環(huán)境沒有明顯差異。
實(shí)際工程應(yīng)用時需要對KYLIN2反復(fù)調(diào)用,生成不同工況點(diǎn)下的大量組件截面庫。為了在飛騰處理器為代表的ARM計(jì)算環(huán)境下提升計(jì)算效率,對KYLIN2的輸運(yùn)計(jì)算模塊編制OpenMP共享式內(nèi)存并行版本KYLIN2-OpenMP,增強(qiáng)國產(chǎn)芯片的實(shí)用性。使用兩種常見于學(xué)術(shù)論文的組件基準(zhǔn)例題(壓水堆組件AFA3G和C5G7基準(zhǔn)例題UO2組件)進(jìn)行測試,同時對比有效增殖因子值的正確性和計(jì)算效率。
首先對不使用粗網(wǎng)加速的情況進(jìn)行統(tǒng)計(jì),編譯優(yōu)化選項(xiàng)選為-O2,相應(yīng)的計(jì)算結(jié)果和串行計(jì)算效率統(tǒng)計(jì)如表6所示。飛騰計(jì)算節(jié)點(diǎn)在求解AFA3 G組件問題時耗時較長(約兩天時間仍然沒有計(jì)算完成),與HP Z800相差一個數(shù)量級(10倍)。
表6 無粗網(wǎng)加速的計(jì)算時間統(tǒng)計(jì)Table 6 Calculation time without GCMFD
使用粗網(wǎng)加速之后將減少數(shù)值迭代次數(shù),表7統(tǒng)計(jì)相應(yīng)的運(yùn)行時間,編譯優(yōu)化選項(xiàng)仍然選為-O2。數(shù)值方法的改變并不會改變數(shù)據(jù)的內(nèi)存布局,處理器的差異仍然保持在一個數(shù)量級左右。
表7 粗網(wǎng)加速的計(jì)算時間統(tǒng)計(jì)Table 7 Calculation time of GCMFD
接下來固定優(yōu)化等級為O2,然后測試OpenMP多線程版本在兩種硬件環(huán)境下的實(shí)際并行效率,限于篇幅這里僅給出C5 G7 UO2組件例題的統(tǒng)計(jì)結(jié)果(AFA3 G組件例題有類似結(jié)果)。實(shí)驗(yàn)時考慮HP Z800服務(wù)器最多有12個處理器核心,因此線程數(shù)取值范圍取為[1,12]。
如圖3所示趨勢,兩種硬件環(huán)境下C5 G7例題的計(jì)算效率在O2優(yōu)化等級下均通過多線程并行取得效率的提升,但處理器核數(shù)超過8個之后并不能帶來計(jì)算效率的改善,這一方面由于C5 G7例題的能群循環(huán)結(jié)構(gòu)只有7個能群,能群并行的算法存在著增益上限,另一方面多線程的管理開銷隨著線程增多逐漸變得不可忽略。借助于OpenMP共享式內(nèi)存并行,單個計(jì)算方案在飛騰計(jì)算節(jié)點(diǎn)內(nèi)的計(jì)算效率與HP Z800服務(wù)器的差距在縮小,此時統(tǒng)計(jì)計(jì)算時間可以明確使用8個線程后飛騰處理器運(yùn)行兩個例題的效率與HP Z800服務(wù)器上單個Intel處理器的運(yùn)行時間接近。當(dāng)集群計(jì)算機(jī)的商用計(jì)算資源緊張時,由于國產(chǎn)計(jì)算節(jié)點(diǎn)使用人數(shù)較少,此多線程并行版本的臨時解決方案可滿足使用ARM計(jì)算環(huán)境臨時替換商用計(jì)算環(huán)境執(zhí)行計(jì)算的需求(核工程計(jì)算過程中,Intel商用處理器經(jīng)常使用單線程來運(yùn)行早期版本的KYLIN2程序)。
圖3 引入OpenMP并行后的組件例題運(yùn)行時間Fig.3 Runtime statistics ofassembly example after OpenMP programming
在內(nèi)部集群計(jì)算機(jī)的飛騰計(jì)算節(jié)點(diǎn)進(jìn)行移植應(yīng)用,探討國產(chǎn)芯片構(gòu)建的計(jì)算環(huán)境應(yīng)用于工程計(jì)算的可行性,形成的結(jié)論如下所述:
1)所有初步移植的程序在飛騰計(jì)算節(jié)點(diǎn)上的串行計(jì)算效率均低于HP Z800這類Intel處理器商用服務(wù)器,且超過處理器頻率之間的差異。更改編譯優(yōu)化等級之后,計(jì)算效率的差異保持不變;
2)現(xiàn)階段串行CORTH 0.8.4版本和KYLIN2 0.8.8版本的程序已被成功移植到飛騰計(jì)算節(jié)點(diǎn),且能夠正常運(yùn)行和開展工程計(jì)算。移植過程使用的計(jì)算例題均能夠正常完成計(jì)算,計(jì)算結(jié)果與Intel硬件環(huán)境下保持一致(偏差范圍內(nèi));
3)飛騰計(jì)算節(jié)點(diǎn)上的數(shù)值計(jì)算運(yùn)行效率較低,一方面是由于使用的是底層函數(shù)庫,另一方面也由于飛騰處理器本身的精簡指令集特性和較小的緩存。相比Intel處理器復(fù)雜指令集存在多種復(fù)合指令,完成部分計(jì)算需要更多的指令周期,但通過引入局部的OpenMP多線程優(yōu)化,可以使得國產(chǎn)飛騰這種ARM計(jì)算環(huán)境成為工程計(jì)算的補(bǔ)充資源。
國產(chǎn)處理器及其生態(tài)環(huán)境在持續(xù)發(fā)展,核反應(yīng)堆工程計(jì)算在后續(xù)發(fā)展過程可以橫向借鑒日本、美國等經(jīng)驗(yàn),覆蓋更多的計(jì)算硬件,提升適用性和交叉驗(yàn)證計(jì)算方案的正確性。本文形成的結(jié)論和記錄的技術(shù)細(xì)節(jié)將隨著后續(xù)在國產(chǎn)計(jì)算節(jié)點(diǎn)上開展的計(jì)算分析工作進(jìn)行深化和擴(kuò)展。
本研究工作感謝中國核動力研究設(shè)計(jì)院設(shè)計(jì)所九室提供的樣本程序和集群運(yùn)行環(huán)境,同時也感謝相關(guān)人員對論文的建議。