明平洲,李治剛,劉 婷,蘆 韡,劉 東,曾 輝,余紅星
(1.中國核動(dòng)力研究設(shè)計(jì)院,四川 成都 610213;2.中國核動(dòng)力研究設(shè)計(jì)院核反應(yīng)堆系統(tǒng)設(shè)計(jì)技術(shù)重點(diǎn)實(shí)驗(yàn)室,四川 成都 610213)
堆芯計(jì)算涉及到的學(xué)科主要有反應(yīng)堆物理、熱工水力、力學(xué)和燃料性能等,它們的單學(xué)科計(jì)算或者多學(xué)科耦合計(jì)算均用于論證和分析堆芯內(nèi)部存在的大量異質(zhì)現(xiàn)象[1]。由于真實(shí)堆芯的解析解極難獲得,采用不同的數(shù)值離散方法對(duì)各種物理數(shù)學(xué)方程進(jìn)行工程求解成為計(jì)算相關(guān)研究人員的核心工作[2]。現(xiàn)階段中國核動(dòng)力研究設(shè)計(jì)院引進(jìn)的基礎(chǔ)集群計(jì)算設(shè)施采用異構(gòu)設(shè)計(jì),國產(chǎn)飛騰處理器組成的計(jì)算分區(qū)能夠通過SLURM集群資源管理系統(tǒng)進(jìn)行計(jì)算作業(yè)的分區(qū)投遞。目前國內(nèi)高端處理器市場主要有龍芯、飛騰和兆芯等品牌,其中天津飛騰信息有限公司研制的CPU已加入到開放的ARM生態(tài)系統(tǒng),飛騰64位通用處理器產(chǎn)品兼容ARMv8指令集[3],采用28 nm工藝流片,具備高性能和低功耗等特點(diǎn),定位為中高端Intel至強(qiáng)服務(wù)器芯片的替代品。區(qū)別于Intel商用處理器使用的X86復(fù)雜指令集體系,ARM是典型的精簡指令集體系,這使得集群計(jì)算機(jī)有不同特點(diǎn)的計(jì)算資源可使用。不同指令集體系下的處理器存在著不同特點(diǎn)[4],在商用處理器受限或計(jì)算資源緊張的情況下,ARM計(jì)算資源有可能成為一種補(bǔ)充的數(shù)值計(jì)算資源。
本文研究移植的4個(gè)軟件描述為:
(1)NACK-R是使用粗網(wǎng)節(jié)塊法求解穩(wěn)態(tài)中子擴(kuò)散方程的C/C++程序[5],常用于充當(dāng)堆芯燃料管理軟件的核心求解器,提供堆芯各個(gè)工況點(diǎn)下的通量分布和功率分布。
(2)中國核動(dòng)力研究設(shè)計(jì)院堆芯熱工水力分析軟件CORTH(CORe Thermal-Hydraulics)是用于堆芯熱工水力分析的子通道程序,可用于分析研究反應(yīng)堆及其回路系統(tǒng)中冷卻劑的流動(dòng)特性、熱量傳輸特性和燃料元件的傳熱特性,且正在持續(xù)進(jìn)行新功能開發(fā)和細(xì)節(jié)改進(jìn)[6]。
(3)特征線中子輸運(yùn)計(jì)算方法具有計(jì)算精度高、幾何適應(yīng)性強(qiáng)和形式簡單等優(yōu)點(diǎn)。美國麻省理工學(xué)院研制的開源特征線輸運(yùn)程序OpenMOC(Open Method Of Characteristics neutral particle transport code)使用Python和C++進(jìn)行混合編程,內(nèi)部的數(shù)值計(jì)算核心采用C++編程語言,早期版本用于任意二維幾何區(qū)域的輸運(yùn)計(jì)算[7]。
(4)全堆芯的中子物理參數(shù)求解在多個(gè)層面上存在著均勻化計(jì)算。KYLIN2程序現(xiàn)階段在組件級(jí)別為堆芯程序提供組件庫的計(jì)算,其核心為使用特征線方法的中子輸運(yùn)求解器,具備多種參數(shù)的計(jì)算功能[8]。
中國核動(dòng)力研究設(shè)計(jì)院引進(jìn)的集群計(jì)算機(jī)具備多個(gè)異構(gòu)計(jì)算結(jié)點(diǎn),使用資源管理軟件SLURM劃分為多個(gè)分布式內(nèi)存計(jì)算區(qū)域,其中2類分區(qū)分別對(duì)應(yīng)于商業(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)域,通用ARM芯片在數(shù)值分析計(jì)算領(lǐng)域尚處于局部應(yīng)用狀態(tài)。
硬件描述:飛騰FT-1500A是基于ARM64位架構(gòu)的服務(wù)器芯片,面向計(jì)算服務(wù)器市場。在本單位購置的集群計(jì)算機(jī)上,每個(gè)邏輯上的飛騰計(jì)算結(jié)點(diǎn)使用1個(gè)飛騰FT-1500A處理器,具備16個(gè)處理器核心,每個(gè)處理器核心運(yùn)行單個(gè)線程。每個(gè)飛騰計(jì)算結(jié)點(diǎn)上的內(nèi)存為32 GB,具備16 MB的緩存。根據(jù)供應(yīng)商提供的文檔可以獲知該通用計(jì)算處理器的主頻為1.6 GHz。
軟件描述:圍繞麒麟操作系統(tǒng)建立系統(tǒng)環(huán)境,關(guān)聯(lián)集群計(jì)算機(jī)的各個(gè)軟件層次。其中開發(fā)環(huán)境主要為GCC 4.9.3,安裝Glibc 2.19、make 4.0和開發(fā)工具鏈Binutils 2.24.90[9]。
待移植程序或軟件的部分?jǐn)?shù)值求解內(nèi)容依賴于第三方數(shù)值函數(shù)庫,因此移植過程需要圍繞2類軟件進(jìn)行移植、修訂和測試。一類是底層系統(tǒng)軟件,用于為上層的堆芯數(shù)值計(jì)算提供通用計(jì)算功能,在ARM計(jì)算環(huán)境中擺脫對(duì)商業(yè)處理器環(huán)境中的函數(shù)庫依賴;另一類是堆芯計(jì)算本身的求解內(nèi)容,需要進(jìn)行程序代碼改寫和修訂,從而以同一套程序代碼適應(yīng)不同硬件的計(jì)算環(huán)境。表1統(tǒng)計(jì)了真實(shí)移植過程所涉及的軟件。
Table 1 Softwares to be ported
本文首先驗(yàn)證飛騰處理器在ARM環(huán)境中進(jìn)行移植的可行性和正確性,記錄上述軟件的移植過程和數(shù)值實(shí)驗(yàn)。然后利用OpenMP對(duì)KYLIN2程序并行進(jìn)行優(yōu)化,論證單結(jié)點(diǎn)多個(gè)飛騰處理器核心的并行能力。這里選取的對(duì)比對(duì)象為Intel商用處理器,其中Intel商用處理器的主頻約為飛騰處理器主頻的2倍,理論上飛騰處理器的串行運(yùn)行效率為Intel商用處理器串行運(yùn)行效率的一半。分析KYLIN2程序并行優(yōu)化時(shí),按照最多使用12個(gè)處理器核心進(jìn)行討論。
整個(gè)移植工作采用自底向上的流程以適應(yīng)由飛騰處理器所構(gòu)建的集群計(jì)算機(jī)單結(jié)點(diǎn)ARM計(jì)算環(huán)境。測試過程將對(duì)比Intel商用處理器所在計(jì)算環(huán)境和ARM計(jì)算環(huán)境的效率、數(shù)值穩(wěn)定性和正確性。
參與數(shù)據(jù)前后處理的DATA函數(shù)庫和HDF5讀寫庫直接使用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ù)庫由多個(gè)模塊組成,底層依賴于向量、矩陣和索引集等數(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)庫和動(dòng)態(tài)庫。與此同時(shí),基于已獲取的熱工分析相關(guān)線性方程組的研究工作[10],本文使用移植的庫進(jìn)行線性方程組求解例題的測試,以證明飛騰處理器構(gòu)建的ARM通用計(jì)算環(huán)境能夠正常完成基本的數(shù)值計(jì)算,且收斂精度均可達(dá)到預(yù)期。
NACK-R是用于堆芯燃料管理分析的C/C++版本的粗網(wǎng)節(jié)塊法擴(kuò)散計(jì)算程序(CORCA-3D擴(kuò)散計(jì)算模塊的參考原型),本文將其移植到ARM環(huán)境中,并參照NACK-F的測試內(nèi)容,使用4個(gè)例題進(jìn)行對(duì)比測試,計(jì)算結(jié)果主要統(tǒng)計(jì)有效增殖因子keff和例題的運(yùn)行時(shí)間(各個(gè)粗網(wǎng)節(jié)塊的通量值也進(jìn)行了對(duì)比,計(jì)算結(jié)果保持一致)。Intel商用處理器的計(jì)算環(huán)境和飛騰處理器的計(jì)算環(huán)境所使用的編譯器均選擇g++。
編譯的優(yōu)化選項(xiàng)首先選取為O0,保證不引入編譯器的特定優(yōu)化行為,統(tǒng)計(jì)結(jié)果如表2所示。
Table 2 Test Comparison of NACK-R using O0 optimization in Intel environment and Phytium environment
編譯的優(yōu)化選項(xiàng)為O2,相應(yīng)的統(tǒng)計(jì)結(jié)果如表3所示。
Table 3 Test comparison of NACK-R using O2 optimization in Intel environment and Phytium environment
編譯的優(yōu)化選項(xiàng)為O3,相應(yīng)的統(tǒng)計(jì)結(jié)果如表4所示。
Table 4 Test comparison of NACK-R using O3 optimization in Intel environment and Phytium environment
該程序移植使用C/C++編程語言,從統(tǒng)計(jì)數(shù)據(jù)來看,串行運(yùn)行時(shí)飛騰處理器隨著編譯優(yōu)化等級(jí)的變化能夠持續(xù)對(duì)效率進(jìn)行改善,O3優(yōu)化等級(jí)比起O2優(yōu)化等級(jí)仍然有10%左右的性能提升。Intel商用處理器在O3優(yōu)化等級(jí)和O2優(yōu)化等級(jí)的計(jì)算效率基本相同。整體上Intel商用處理器性能高于飛騰計(jì)算結(jié)點(diǎn)的飛騰處理器,O0優(yōu)化等級(jí)情況下數(shù)據(jù)量較小時(shí)兩者相差約7倍,在數(shù)據(jù)量較大時(shí)相差約9倍,高于頻率之間的2倍差異。隨著編譯優(yōu)化等級(jí)的提升,飛騰處理器本身的運(yùn)行效率有了較大提升,2種處理器之間的性能差異在縮小,這表明C/C++數(shù)值計(jì)算程序在使用精簡指令集的情況下可以通過編譯優(yōu)化等級(jí)的改變來明顯提升計(jì)算效率,此時(shí)2種硬件之間性能差距也接近頻率差距的2倍。移植和測試結(jié)果也表明2種硬件環(huán)境中的數(shù)值計(jì)算結(jié)果保持一致,遵循IEEE的浮點(diǎn)數(shù)標(biāo)準(zhǔn)規(guī)范。
CORTH程序采用矩陣形式求解具有滑速比的四方程均勻流模型,可以實(shí)現(xiàn)按照全堆芯柵元級(jí)別劃分子通道的數(shù)值計(jì)算,求解整個(gè)堆芯的焓升和壓降。本文移植的CORTH版本為0.8.4,其主要編程語言為C/C++。為了保證數(shù)值穩(wěn)定性以及Intel處理器環(huán)境和飛騰處理器環(huán)境能夠針對(duì)同一套程序代碼進(jìn)行編譯,向ARM環(huán)境的移植過程需要對(duì)CORTH 0.8.4版本完成以下2方面的代碼修訂工作:
(1)去除Intel 商業(yè)函數(shù)庫MKL(Math Kernel Library)的依賴。CORTH程序使用MKL函數(shù)庫內(nèi)的mkl_dcsrgemv函數(shù)對(duì)能量守恒和動(dòng)量守恒形成的線性方程組進(jìn)行迭代求解,這里將求解函數(shù)替換為SparseLib++提供的GMRES函數(shù)。該函數(shù)同樣使用廣義最小殘差的Krylov子空間方法來迭代求解線性方程組,能夠獲得與原函數(shù)mkl_dcsrgemv相同的計(jì)算精度,且串行計(jì)算效率更高。
(2)編譯過程需要在ARM環(huán)境中重新編譯CORTH程序使用的第三方內(nèi)容,例如2.1節(jié)列出的DATA類和熱工物性函數(shù)庫。該移植過程涉及到Fortran和C++混合編程,為了獲得不同硬件環(huán)境中程序代碼的一致性,需要按照GNU編譯器推薦的標(biāo)準(zhǔn)混合編程規(guī)范重寫計(jì)算函數(shù)的聲明,例如熱工物性函數(shù)庫中的func函數(shù),重寫的頭文件聲明如下所示:
#ifdef__cplusplus
extern"C"
{
#endif
externdoublefunc_(double*,double*,double*);
#ifdef__cplusplus
}
#endif
它在Intel處理器環(huán)境和ARM處理器環(huán)境中均能夠被正確識(shí)別和混合編程應(yīng)用。
當(dāng)C/C++編程語言內(nèi)調(diào)用Fortran語言形式的熱工物性函數(shù)接口時(shí),需要在函數(shù)名稱func后添加下劃線“_”,且形參均為引用傳遞。
完成CORTH移植后,本文針對(duì)ACP1000的堆芯構(gòu)造4種子通道劃分的例題進(jìn)行串行計(jì)算的正確性和效率測試。2種硬件環(huán)境下均使用GNU編譯器,根據(jù)3.2節(jié)的移植分析結(jié)論,編譯優(yōu)化等級(jí)統(tǒng)一設(shè)置為O2。
Table 5 Results and running time of CORTH
從表5的統(tǒng)計(jì)數(shù)據(jù)來看,引入SparseLib++的迭代法后,其數(shù)值穩(wěn)定性和正確性在以飛騰結(jié)點(diǎn)代表的ARM環(huán)境和Intel處理器環(huán)境中保持一致,表明了飛騰處理器具備通用計(jì)算的特點(diǎn)。計(jì)算性能方面,Intel處理器明顯高于飛騰處理器,但不同的問題規(guī)模下飛騰處理器與Intel處理器的效率差距始終保持在3~4倍,略高于兩者之間的處理器頻率差異。這是由于ARM環(huán)境中飛騰處理器具有更小的緩存,間接影響CORTH程序在執(zhí)行數(shù)值計(jì)算時(shí)的性能。
本文將中子輸運(yùn)的偏微分方程轉(zhuǎn)換為常微分方程,然后使用特征線形式進(jìn)行數(shù)值求解。相比其它中子輸運(yùn)理論數(shù)值計(jì)算方法,特征線方法具有計(jì)算精度高、幾何適應(yīng)性強(qiáng)和形式簡單等優(yōu)點(diǎn)。麻省理工學(xué)院研制的二維特征線輸運(yùn)程序OpenMOC使用Python和C++進(jìn)行混合編程,內(nèi)部的數(shù)值計(jì)算核心采用C++語言編程,用于任意二維幾何區(qū)域的輸運(yùn)計(jì)算。本文將OpenMOC 0.1.4b版本移植到ARM環(huán)境之后使用C5G7 1/4堆芯問題進(jìn)行串行運(yùn)行測試,以探究特征線方法的運(yùn)行特點(diǎn)。在Intel處理器環(huán)境中使用相同程序?qū)Ρ闰?yàn)證,記錄keff的數(shù)值和計(jì)算效率。各個(gè)網(wǎng)格柵元的通量經(jīng)過可視化顯示后可以快速觀察2種環(huán)境中運(yùn)行結(jié)果是否相同。圖1所示移植結(jié)果表明在Intel處理器與飛騰處理器上的計(jì)算保持一致。
Figure 1 Core layout and flux distribution of 2D C5G7 quarter core圖1 二維C5G7 1/4堆芯的布置和標(biāo)通量分布
2種硬件環(huán)境下的編譯器均選擇GNU編譯器,編譯過程支持C++0x特性。固定C5G7例題的數(shù)值計(jì)算分辨率參數(shù)(能群數(shù)7,方位角個(gè)數(shù)16,特征線間距0.1 cm),編譯優(yōu)化選項(xiàng)首先取為O0等級(jí),OpenMOC性能對(duì)比如表6所示。
Table 6 Test comparison of OpenMOC using O0 optimization in Intel environment and Phytium environment
編譯優(yōu)化選項(xiàng)為O2等級(jí),OpenMOC性能對(duì)比如表7所示。
Table 7 Test comparison of OpenMOC using O2 optimization in Intel environment and Phytium environment
編譯優(yōu)化選項(xiàng)為O3等級(jí),OpenMOC性能對(duì)比如表8所示。
Table 8 Test comparison of OpenMOC using O3 optimization in Intel environment and Phytium environment
上述測試完成之后可以明確,OpenMOC在飛騰結(jié)點(diǎn)和Intel處理器環(huán)境中的計(jì)算結(jié)果保持一致,但在每種編譯優(yōu)化等級(jí)條件下飛騰結(jié)點(diǎn)的計(jì)算效率均低于Intel處理器的計(jì)算效率,比值相差約為3~4倍,高于兩者之間的頻率差異。隨著編譯優(yōu)化等級(jí)的提升,2種計(jì)算環(huán)境中的效率差距有所縮小,不同于3.2節(jié)移植程序的特點(diǎn),O2選項(xiàng)和O3選項(xiàng)在2種硬件環(huán)境下對(duì)于計(jì)算效率的改善相差不大,說明OpenMOC程序編程實(shí)現(xiàn)的特征線方法使用O3的優(yōu)化等級(jí)并不會(huì)對(duì)生成的可執(zhí)行程序的效率有更好的改善。
KYLIN2程序使用二維特征線輸運(yùn)算法集成燃耗計(jì)算用于生成組件截面庫,本文選取0.8.8版本KYLIN2移植到ARM環(huán)境中,源代碼按照多個(gè)目錄進(jìn)行組織,每個(gè)目錄代表一個(gè)功能模塊,其整體計(jì)算步驟如下所示:
(1)計(jì)算參數(shù)的初始化和內(nèi)存空間分配;
(2)讀取輸入文件;
(3)獲取計(jì)算基干的數(shù)據(jù)庫文件;
(4)判斷計(jì)算類型,執(zhí)行組件計(jì)算或燃料分支計(jì)算;
(5)判斷燃耗步是否結(jié)束,結(jié)束則整個(gè)計(jì)算完成,否則轉(zhuǎn)回步驟(2)。
移植過程的主要工作分為2個(gè)方面,一方面是重寫編譯腳本來對(duì)這種多目錄組織的源代碼進(jìn)行定制編譯和鏈接,規(guī)范化整個(gè)程序的軟件結(jié)構(gòu)和執(zhí)行順序;另一方面是移植和修訂程序使用的第三方內(nèi)容。在飛騰計(jì)算環(huán)境中不能使用MKL函數(shù)庫,因此需要對(duì)KYLIN2的程序代碼進(jìn)行調(diào)整,去除依賴性。為了不破壞已有的程序代碼,在移植修訂過程中通過宏開關(guān)來對(duì)改動(dòng)代碼進(jìn)行處理,宏的判斷標(biāo)準(zhǔn)為是否是ARM64硬件平臺(tái)。
#ifdef__aarch64__
(新增的修訂代碼)
#else
(原有代碼)
#endif
調(diào)用的MKL求解函數(shù)LAPACKE_dgesv用于求解Ax=B,其中A和B為矩陣。實(shí)質(zhì)為使用LAPACKE中的求解函數(shù),安裝Netlib提供的LAPACK和LAPACKE,替換MKL求解函數(shù)。調(diào)用MKL求解函數(shù)PARDISO,該函數(shù)使用直接消去法求解稀疏線性方程組Ax=b,其中A為矩陣,b為右手向量。使用SuperLU軟件(SuperLU軟件較為知名,是由勞倫斯伯克利國家實(shí)驗(yàn)室研制的稀疏矩陣直接法求解函數(shù)庫)來應(yīng)用直接消去法進(jìn)行求解,替換MKL的求解函數(shù)。
移植完成之后,可在Intel結(jié)點(diǎn)和飛騰結(jié)點(diǎn)上使用同一套KYLIN2程序代碼。本文使用表9列舉的2個(gè)組件例題進(jìn)行數(shù)值測試和驗(yàn)證,統(tǒng)計(jì)相應(yīng)的計(jì)算結(jié)果來論證其正確性和計(jì)算效率。
Table 9 Assembly testing examples for KYLIN2 program
正確性方面的對(duì)比按照燃耗深度與有效增殖因子(keff)的關(guān)系圖給出,計(jì)算效率則給出同一例題在不同計(jì)算環(huán)境中的總運(yùn)行時(shí)間。2個(gè)例題均需要迭代多個(gè)燃耗步,有限增殖因子隨燃耗深度的變化趨勢如圖2所示,其中參考解選取的是原始KYLIN2程序使用MKL函數(shù)庫在Intel環(huán)境中的運(yùn)行結(jié)果,根據(jù)3.4節(jié)的分析結(jié)果,統(tǒng)一選取的編譯優(yōu)化選項(xiàng)為O2等級(jí)。圖2中橫坐標(biāo)均為“燃耗步數(shù)”,縱坐標(biāo)均為“有效增殖因子”,二者均無單位。
Figure 2 Burn-up change trend graph of two examples圖2 2個(gè)例題的燃耗變化趨勢圖
從圖2中可以看到,2種硬件環(huán)境中增殖因子隨燃耗深度的變化趨勢互相吻合,經(jīng)過較長時(shí)間的迭代計(jì)算之后數(shù)值穩(wěn)定性均未發(fā)生變化。2個(gè)例題在2種硬件環(huán)境中的串行運(yùn)行時(shí)間如表10所示。
根據(jù)以上的移植和測試,可以得出KYLIN2程序運(yùn)行這2個(gè)例題在飛騰計(jì)算環(huán)境與Intel計(jì)算環(huán)境中的效率差距在6~8倍,遠(yuǎn)高于處理器頻率之間的差別。這一方面是由于組件計(jì)算過程中使用的數(shù)據(jù)量較大;另一方面是由于ARM精簡指令的運(yùn)行方式在數(shù)值計(jì)算的細(xì)節(jié)上相比Intel處理器略有不足,KYLIN2程序可供優(yōu)化的數(shù)值操作較多。盡管如此,KYLIN2程序底層的數(shù)值求解方法的替換對(duì)數(shù)值穩(wěn)定性沒有影響,飛騰計(jì)算結(jié)點(diǎn)上數(shù)值計(jì)算的準(zhǔn)確性與Intel計(jì)算環(huán)境沒有明顯差異。
Table 10 Serial running time of two examples
實(shí)際工程應(yīng)用需要反復(fù)調(diào)用KYLIN2,生成不同工況點(diǎn)下的大量組件截面庫,計(jì)算效率成為了應(yīng)用的瓶頸。由飛騰處理器構(gòu)建的集群計(jì)算機(jī)結(jié)點(diǎn)通常具備多個(gè)處理器核心,具備共享式內(nèi)存并行的能力。對(duì)KYLIN2的輸運(yùn)計(jì)算模塊編寫相應(yīng)的OpenMP共享式內(nèi)存并行版本KYLIN2-OpenMP,一方面在飛騰處理器為代表的ARM計(jì)算環(huán)境中提升KYLIN2程序的計(jì)算效率;另一方面也用于論證單個(gè)飛騰計(jì)算結(jié)點(diǎn)的并行性能,增強(qiáng)國產(chǎn)芯片的實(shí)用性。本文使用2種常見于學(xué)術(shù)論文的組件基準(zhǔn)例題(壓水堆組件AFA3G和C5G7基準(zhǔn)例題UO2組件)進(jìn)行測試,給出對(duì)正確性和計(jì)算效率的對(duì)比結(jié)果。
先對(duì)KYLIN2程序不使用粗網(wǎng)加速算法的情況進(jìn)行統(tǒng)計(jì),根據(jù)3.4節(jié)和3.5節(jié)的討論,編譯優(yōu)化選項(xiàng)選為O2等級(jí),相應(yīng)的計(jì)算結(jié)果和串行計(jì)算效率統(tǒng)計(jì)如表11所示。飛騰計(jì)算結(jié)點(diǎn)在求解AFA3G組件問題時(shí)耗時(shí)較長,與Intel環(huán)境中的耗時(shí)相差1個(gè)數(shù)量級(jí)(10倍)。
Table 11 Results and running time of KYLIN2 without GCMFD表11 無粗網(wǎng)加速的KYLIN2運(yùn)行結(jié)果和時(shí)間統(tǒng)計(jì)
粗網(wǎng)加速算法將減少數(shù)值迭代次數(shù),縮短串行運(yùn)行時(shí)間。表12統(tǒng)計(jì)相應(yīng)的運(yùn)行時(shí)間,編譯優(yōu)化選項(xiàng)仍然選為O2等級(jí)。
Table 12 Results and running time of KYLIN2 with GCMFD表12 粗網(wǎng)加速的KYLIN2運(yùn)行結(jié)果和時(shí)間統(tǒng)計(jì)
特征線方法內(nèi)數(shù)值方法的局部改變并不會(huì)改變程序內(nèi)數(shù)據(jù)的內(nèi)存布局,處理器之間的性能差異仍然保持在1個(gè)數(shù)量級(jí)左右?,F(xiàn)階段實(shí)際應(yīng)用KYLIN2程序時(shí)往往在Intel處理器環(huán)境中使用單個(gè)處理器核心來運(yùn)行例題,表12中數(shù)據(jù)表明飛騰處理器不能直接應(yīng)用于堆芯程序的研發(fā)階段,因其有可能降低程序的運(yùn)行效率。考慮到KYLIN2程序在特征線非模塊化布置情況下,對(duì)組件問題的能群循環(huán)參數(shù)引入OpenMP共享式內(nèi)存并行是論證ARM環(huán)境中使用飛騰處理器多個(gè)處理器核心的較好選擇。特征線方法內(nèi)能群并行的OpenMP并行算法偽代碼列舉如下:
setcurrent←0;
setangular_flux←0;
#pragma omp parallel for default(shared) private(current) schedule(guided)
forg=1:GROUPS
forray=1:RAYS
forp=1:POLARS
current←FC(g,ray,p);
#pragma omp parallel reduction(+:sum)
angularflux←sweepFC(g,ray,p,current);
current←FB(g,ray,p);
#pragma omp parallel reduction(+:sum)
mesh_angular_flux←sweepFB(g,ray,p,current);
endfor
endfor
endfor
該算法中函數(shù)FC和FB不存在數(shù)據(jù)爭用的情況,遍歷特征線更新角中子通量密度的操作sweepFC和sweepFB需要使用OpenMP的互斥操作。KYLIN2-OpenMP多線程版本在2種硬件環(huán)境中進(jìn)行了較多測試,限于篇幅這里僅給出C5G7 UO2組件例題不使用粗網(wǎng)加速算法的統(tǒng)計(jì)結(jié)果(AFA3G組件例題有類似結(jié)果)。實(shí)驗(yàn)時(shí)考慮使用的最多處理器核心數(shù)量為12個(gè),線程數(shù)取值參數(shù)取為1,2,4,8或12。2種硬件環(huán)境中的計(jì)算結(jié)果保持一致,這里重點(diǎn)分析計(jì)算所消耗的時(shí)間。
如圖3所示,2種硬件環(huán)境下C5G7組件例題的計(jì)算效率在O2優(yōu)化等級(jí)下均通過多線程并行取得效率的提升(處理器核數(shù)超過8個(gè)之后并不能帶來計(jì)算效率的改善,這是由于C5G7例題的能群循環(huán)結(jié)構(gòu)只有7個(gè),超過數(shù)量7之后OpenMP并行增益達(dá)到上限)。使用單個(gè)線程運(yùn)行時(shí)飛騰計(jì)算結(jié)點(diǎn)耗時(shí)11 123 s,在Intel環(huán)境中耗時(shí)1 205 s。使用8個(gè)線程時(shí)飛騰計(jì)算結(jié)點(diǎn)運(yùn)行時(shí)間為1 598 s,Intel環(huán)境下的運(yùn)行時(shí)間為120 s。整體趨勢上飛騰計(jì)算結(jié)點(diǎn)的計(jì)算效率與在Intel環(huán)境中的計(jì)算效率差距在縮小,且使用8個(gè)線程后飛騰處理器運(yùn)行C5G7組件例題的效率與參照對(duì)象Intel處理器的單核運(yùn)行時(shí)間接近。當(dāng)集群計(jì)算機(jī)的商用計(jì)算資源緊張時(shí),由于國產(chǎn)計(jì)算結(jié)點(diǎn)使用人數(shù)較少,此多線程并行版本的臨時(shí)解決方案可達(dá)成使用ARM計(jì)算環(huán)境臨時(shí)替換商用計(jì)算環(huán)境來執(zhí)行工程計(jì)算任務(wù)的需求(現(xiàn)階段商用處理器計(jì)算結(jié)點(diǎn)經(jīng)常使用單線程來運(yùn)行KYLIN2程序)。
Figure 3 Running time of assembly example after OpenMP programming圖3 引入OpenMP并行后的組件例題運(yùn)行時(shí)間
在內(nèi)部集群計(jì)算機(jī)的飛騰計(jì)算結(jié)點(diǎn)上進(jìn)行堆芯程序的移植和測試,探討國產(chǎn)芯片構(gòu)建的計(jì)算環(huán)境應(yīng)用于工程計(jì)算的可行性,形成的結(jié)論為:
(1)所有的程序均移植成功,由飛騰處理器構(gòu)建的ARM計(jì)算環(huán)境具備通用計(jì)算的特點(diǎn),適用于堆芯數(shù)值計(jì)算程序的研制和運(yùn)行。移植的程序在飛騰計(jì)算結(jié)點(diǎn)上的串行計(jì)算效率均低于在參照對(duì)象Intel處理器上的串行計(jì)算效率,且不管在何種編譯優(yōu)化等級(jí)條件下,計(jì)算時(shí)間的比值均超過處理器頻率之間的2倍差異,小規(guī)模堆芯例題的差異保持在3~4倍,較大規(guī)模堆芯例題的串行計(jì)算效率差異更大。
(2)移植過程的堆芯程序能夠在不同硬件環(huán)境中獲得一致的計(jì)算結(jié)果(偏差范圍內(nèi)),確保了數(shù)值計(jì)算的穩(wěn)定性。
(3)飛騰計(jì)算結(jié)點(diǎn)上的數(shù)值計(jì)算運(yùn)行效率較低,一方面是由于底層函數(shù)庫為了適應(yīng)精簡指令集特性和通用計(jì)算的特性,需要執(zhí)行更多的指令來完成某些數(shù)值計(jì)算;另一方面也由于飛騰處理器本身與參照對(duì)象Intel處理器之間的硬件架構(gòu)差異。Intel商用處理器的復(fù)雜指令集存在多種復(fù)合指令,完成部分計(jì)算需要更少的指令周期,但通過對(duì)KYLIN2程序進(jìn)行局部的OpenMP多線程優(yōu)化,可以使得國產(chǎn)飛騰處理器對(duì)應(yīng)的ARM計(jì)算環(huán)境能夠臨時(shí)替換商用處理器的串行運(yùn)行環(huán)境,成為工程計(jì)算的補(bǔ)充資源。
現(xiàn)階段各個(gè)樣本程序在集群計(jì)算機(jī)的飛騰計(jì)算結(jié)點(diǎn)上逐步開展移植和運(yùn)行,以期充分利用這部分計(jì)算資源。國產(chǎn)處理器及其生態(tài)環(huán)境持續(xù)發(fā)展拓寬了核反應(yīng)堆工程計(jì)算與計(jì)算機(jī)科學(xué)的融合領(lǐng)域。橫向借鑒日本、美國等經(jīng)驗(yàn),核反應(yīng)堆工程計(jì)算在后續(xù)發(fā)展過程可以覆蓋更多的計(jì)算硬件,提升適用性和交叉驗(yàn)證,更快和更準(zhǔn)確地為反應(yīng)堆設(shè)計(jì)和應(yīng)用進(jìn)行服務(wù)。本文形成的結(jié)論和記錄的技術(shù)細(xì)節(jié)將隨著后續(xù)在國產(chǎn)計(jì)算結(jié)點(diǎn)上開展程序研制和移植的工作進(jìn)行深化和擴(kuò)展。
致 謝
本研究工作感謝中國核動(dòng)力研究設(shè)計(jì)院設(shè)計(jì)所九室提供的樣本程序和集群運(yùn)行環(huán)境,同時(shí)也感謝相關(guān)人員對(duì)論文的建議。