明平洲,劉 婷,李治剛,尹 強(qiáng),蘆 韡,劉 東,曾 輝,余紅星
(中國(guó)核動(dòng)力研究設(shè)計(jì)院,四川 成都 610213)
隨著并行計(jì)算技術(shù)發(fā)展以及電子計(jì)算機(jī)硬件性能的提升,反應(yīng)堆工程領(lǐng)域具備研制較多大規(guī)模并行軟件的條件。并行計(jì)算聯(lián)合反應(yīng)堆計(jì)算程序在高性能計(jì)算平臺(tái)上的高效應(yīng)用成為科研設(shè)計(jì)和工程應(yīng)用的研究熱點(diǎn)之一,它們從多個(gè)角度來(lái)提升核反應(yīng)堆工程計(jì)算的效率和應(yīng)用更多精細(xì)的模型[1,2]。伯克利并行實(shí)驗(yàn)室提出的Dwarf導(dǎo)則將并行軟件的編寫(xiě)按照行業(yè)進(jìn)行抽象,總結(jié)出并行模式設(shè)計(jì),并在研究中針對(duì)蒙特卡羅中子輸運(yùn)計(jì)算形成了底層的框架軟件[3]。核能領(lǐng)域的CASL等項(xiàng)目也將并行工具和底層算法進(jìn)行整合,形成適用于大規(guī)模集群計(jì)算機(jī)的軟件框架,并應(yīng)用于工程耦合軟件的研發(fā)[4,5]??蚣芊椒ǖ膶?shí)質(zhì)便是基于復(fù)用構(gòu)件和軟件結(jié)構(gòu)進(jìn)行軟件的開(kāi)發(fā)。框架方法的共性研究在著名的FLASH研究文獻(xiàn)[6]中早期被總結(jié)為兩種技術(shù)路線:
1)先設(shè)計(jì)和開(kāi)發(fā)框架,然后逐步添加求解器和其他計(jì)算能力;
2)圍繞小的求解器或?qū)I(yè)應(yīng)用進(jìn)行持續(xù)研發(fā),最終發(fā)展成為大型專業(yè)軟件。
第一種技術(shù)路線方面,桑迪亞國(guó)家實(shí)驗(yàn)室研發(fā)的Trilinos是用于大規(guī)模工程和科學(xué)問(wèn)題求解的軟件框架。該計(jì)算框架集成了較多知名軟件包,提供了豐富的數(shù)值計(jì)算功能;PETSc由阿貢國(guó)家實(shí)驗(yàn)室維護(hù),提供多個(gè)適用于并行計(jì)算的線性和非線性數(shù)值求解器和功能模塊;日本通過(guò)建立大規(guī)模并行數(shù)值計(jì)算技術(shù)研究小組,在京超級(jí)計(jì)算機(jī)上研制大規(guī)模的高性能數(shù)值軟件KMATHLIB,與底層AICS硬件緊密結(jié)合[7];Charm++是由Illinois大學(xué)基于C++編程語(yǔ)言研制的并行面向?qū)ο缶幊陶Z(yǔ)言,它將集群計(jì)算機(jī)的處理器核心虛擬化[8]。第二種技術(shù)路線方面,PPM圍繞著物理學(xué)科的數(shù)值計(jì)算特點(diǎn),研制了位于底層并行計(jì)算環(huán)境與學(xué)科應(yīng)用之間的抽象中間件,減輕并行軟件的研制難度[9]。以上基于框架方法的研究思路在堆芯計(jì)算領(lǐng)域,尤其在國(guó)內(nèi)尚處于無(wú)統(tǒng)一標(biāo)準(zhǔn)的局部應(yīng)用階段(例如中國(guó)工程物理研究院的JASMIN軟件),且缺乏細(xì)致的程序設(shè)計(jì)和對(duì)應(yīng)的理論模型。
圍繞著堆芯計(jì)算軟件的應(yīng)用重點(diǎn),論文描述了適用于堆芯計(jì)算的框架原型軟件NAC4R的設(shè)計(jì)和初步編程實(shí)現(xiàn),并列舉抽象程序的驗(yàn)證和實(shí)際屏蔽輸運(yùn)計(jì)算軟件Hydra-SN3D的重制工作來(lái)說(shuō)明框架方法的有效性。
數(shù)值計(jì)算與并行計(jì)算環(huán)境可以按照不同層次進(jìn)行融合[10]。例如在計(jì)算科學(xué)領(lǐng)域,中間件的概念來(lái)源于分布式計(jì)算技術(shù),它基于網(wǎng)絡(luò)計(jì)算平臺(tái)上部署的分布式計(jì)算環(huán)境,用于提供開(kāi)發(fā)工具和公共服務(wù),從而支持分布式通信應(yīng)用。本文提及的框架方法則側(cè)重于數(shù)值計(jì)算的功能設(shè)計(jì),同時(shí)包含部分中間件的內(nèi)容以便集群計(jì)算機(jī)的數(shù)據(jù)通信,重點(diǎn)關(guān)注數(shù)值計(jì)算內(nèi)數(shù)據(jù)的傳遞和代數(shù)運(yùn)算。NAC4R作為框架方法的原型設(shè)計(jì),其研制過(guò)程將專業(yè)應(yīng)用范圍限制在堆芯計(jì)算,且運(yùn)行平臺(tái)僅考慮內(nèi)部封閉的集群計(jì)算機(jī)系統(tǒng),所以與硬件的配合程度應(yīng)單獨(dú)予以考慮。
框架方法映射至軟件系統(tǒng)的不同層次,NAC4R的基本結(jié)構(gòu)框圖如圖1所示。
圖1 NAC4R的結(jié)構(gòu)框架Fig.1 The structure of NAC4R
該設(shè)計(jì)提供多種基礎(chǔ)計(jì)算功能,然后利用Python接口層來(lái)進(jìn)行自動(dòng)化處理和提供外部應(yīng)用函數(shù)接口?,F(xiàn)階段在原型階段對(duì)基礎(chǔ)計(jì)算功能的模塊進(jìn)行如下分類:
1)基礎(chǔ)數(shù)據(jù)模塊,對(duì)控制和計(jì)算所用的數(shù)據(jù)進(jìn)行合理表示,兼顧串行情況和分布式內(nèi)存并行情況;
2)常用功能模塊,提供基本的非數(shù)值計(jì)算操作,例如數(shù)據(jù)封裝、快速排序、查找和圖分區(qū)等功能;
3)基礎(chǔ)線性代數(shù)操作,例如對(duì)BLAS函數(shù)接口規(guī)范、LAPACK函數(shù)接口規(guī)范提供包裹函數(shù),便于直接使用FORTRAN函數(shù)。后續(xù)在接口規(guī)范一致的前提下也可以編程實(shí)現(xiàn)適用于特定并行硬件的基礎(chǔ)線性代數(shù)功能;
4)并行數(shù)據(jù)結(jié)構(gòu)模塊,它由1)進(jìn)行派生,基于著名的Epetra模塊,在分布式內(nèi)存環(huán)境下對(duì)數(shù)據(jù)進(jìn)行合理表示和存儲(chǔ)[11];
5)線性方程組求解,現(xiàn)階段僅需提供Jacobi、Bi-CG、GMRES和LU分解的求解器,實(shí)現(xiàn)求解功能和考慮初步的健壯性,基于著名的Aztec模塊進(jìn)行編程實(shí)現(xiàn)[12];
6)輸入輸出模塊,對(duì)框架內(nèi)部的輸入輸出功能進(jìn)行編程實(shí)現(xiàn),關(guān)注文本文件和二進(jìn)制文件,同時(shí)提供框架內(nèi)部固定的計(jì)算數(shù)據(jù)存儲(chǔ)格式;
7)事件追蹤模塊,提供對(duì)計(jì)算過(guò)程的時(shí)間線統(tǒng)計(jì)和計(jì)算時(shí)間分析,便于引入TAU等工具;
8)基礎(chǔ)數(shù)值計(jì)算模塊,提供基本的數(shù)值計(jì)算操作和數(shù)值函數(shù),例如伽馬函數(shù),勒讓德多項(xiàng)式展開(kāi)系數(shù),線性求積組等功能。
因此,NAC4R的基礎(chǔ)計(jì)算功能現(xiàn)階段由8個(gè)模塊組成,并強(qiáng)調(diào)使用C/C++語(yǔ)言和Fortran語(yǔ)言進(jìn)行混合編程實(shí)現(xiàn)計(jì)算核心,一方面便于C/C++語(yǔ)言實(shí)現(xiàn)控制和封裝等管理特性,另一方面便于Fortran語(yǔ)言實(shí)現(xiàn)高效數(shù)值計(jì)算和利用已有的底層計(jì)算核心,例如BLAS、LAPACK等第三方內(nèi)容。通過(guò)以上設(shè)計(jì)可以歸納出,NAC4R與框架方法的聯(lián)系體現(xiàn)在多項(xiàng)計(jì)算內(nèi)容的抽象上。
(1)數(shù)據(jù)的表達(dá)
在集群計(jì)算機(jī)內(nèi)部,數(shù)據(jù)結(jié)構(gòu)主要分為三類:原語(yǔ)類型、復(fù)合類型和抽象數(shù)據(jù)類型。各種堆芯計(jì)算相關(guān)的具有物理意義的數(shù)據(jù)便由這些數(shù)據(jù)結(jié)構(gòu)進(jìn)行承載和存儲(chǔ)。NAC4R一方面提供專用的數(shù)據(jù)結(jié)構(gòu),諸如雙向鏈表、B-tree、紅黑樹(shù)以及圖,另一方面也根據(jù)堆芯計(jì)算的特點(diǎn),強(qiáng)調(diào)數(shù)據(jù)有效的組織邏輯,表述為區(qū)域拓?fù)?、粒子、網(wǎng)格等對(duì)象。這些數(shù)據(jù)的表達(dá)在NAC4R內(nèi)部由類部件或者函數(shù)接口這種模塊形式來(lái)提供使用。
(2)數(shù)據(jù)通信
在分布式內(nèi)存情況下實(shí)現(xiàn)高效的數(shù)據(jù)通信?,F(xiàn)有的集群計(jì)算機(jī)在處理器核心之間主要使用MPI消息傳遞模型進(jìn)行數(shù)據(jù)通信,為了開(kāi)發(fā)用戶層面上函數(shù)接口的統(tǒng)一性和適應(yīng)扁平化設(shè)計(jì),并不直接使用MPI提供的函數(shù),而是進(jìn)行包裹函數(shù)庫(kù)(Wrapped Function Library)的研發(fā)設(shè)計(jì),一方面減少輸入形參和實(shí)現(xiàn)功能的組合和統(tǒng)一管理,另一方面固定函數(shù)接口,使得包裹函數(shù)內(nèi)部可以靈活更改,以適應(yīng)不同的硬件平臺(tái)和更新或者替換底層的MPI庫(kù)(見(jiàn)圖2)。
圖2 包裹層示意圖Fig.2 Schematic of the wrapping layer
這種設(shè)計(jì)思路在PETSc、Trilinos、KMATHLIB和較多的框架軟件中均有體現(xiàn),按照分布式通信集中管理的原則,NAC4R內(nèi)的數(shù)據(jù)通信通過(guò)管理功能、數(shù)據(jù)轉(zhuǎn)換功能、通信區(qū)域分割等內(nèi)容進(jìn)行實(shí)現(xiàn),它涉及MPI分布式內(nèi)存并行和OpenMP或多線程共享式內(nèi)存并行。
(3)文件I/O
在MPI-2規(guī)范中引入的并行I/O,也稱為MPI-IO,它是NAC4R數(shù)據(jù)通信模型中關(guān)于分布式文件讀寫(xiě)的基礎(chǔ)。為了減小問(wèn)題的復(fù)雜度,NAC4R對(duì)文件的讀寫(xiě)僅僅針對(duì)二進(jìn)制文件,并不針對(duì)文本文件(文本文件可以通過(guò)轉(zhuǎn)換接口來(lái)生成二進(jìn)制文件),且NAC4R也使用和擴(kuò)展了Fisher所提出的SDF文件格式來(lái)減小數(shù)據(jù)存儲(chǔ)和傳遞的復(fù)雜性[13]。
(4)數(shù)值求解器
NAC4R的數(shù)值求解部分針對(duì)具體的堆芯計(jì)算特點(diǎn),現(xiàn)階段已實(shí)現(xiàn)線性方程組Ax=b和非線性方程組的部分求解方法,例如圍繞Jacobi、Bi-CG、GMRES和LU分解的理論和算法進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)。為了提升適應(yīng)性,當(dāng)矩陣規(guī)模較小或精度要求較高時(shí),使用直接法的接口更為有效。
原型軟件NAC4R內(nèi)存在著面向結(jié)構(gòu)和面向?qū)ο蟮能浖O(shè)計(jì),考慮到應(yīng)用需求,它自身存在著配置文件,可以指定具體的計(jì)算任務(wù)和集群計(jì)算機(jī)的資源等信息實(shí)現(xiàn)獨(dú)立運(yùn)行。在NAC4R的編程實(shí)現(xiàn)過(guò)程中應(yīng)考慮三種應(yīng)用情況。
1)直接在上面集成專業(yè)應(yīng)用的求解器,構(gòu)成完整的專業(yè)軟件;
2)使用NAC4R提供的部分模塊,以函數(shù)庫(kù)的形式進(jìn)行重用;
3)復(fù)用NAC4R的程序代碼,并利用提供的自動(dòng)化功能進(jìn)行并行性能預(yù)測(cè)和收集計(jì)算信息。
基礎(chǔ)模塊的開(kāi)發(fā)為第一階段,體現(xiàn)為NAC4R在研制過(guò)程中實(shí)施單元測(cè)試,然后開(kāi)發(fā)相應(yīng)的示例程序和腳本語(yǔ)言包裹層。
第二階段對(duì)實(shí)際的堆芯樣本程序進(jìn)行應(yīng)用和分析,本文選取結(jié)構(gòu)化網(wǎng)格條件下的三維離散縱標(biāo)法的并行算法進(jìn)行應(yīng)用研究。針對(duì)其中的徑向掃描并行算法部分,樣本程序被解讀和分析,并在NAC4R原型軟件中快速進(jìn)行重新開(kāi)發(fā),理解核心并行求解算法的編寫(xiě)流程和效率提升模式(見(jiàn)表1)。
表1 樣本程序Hydra-SN3D的信息
第三階段是持續(xù)改進(jìn)原型軟件NAC4R,并擴(kuò)大應(yīng)用范圍,對(duì)新的堆芯計(jì)算特點(diǎn)進(jìn)行特征識(shí)別,即在NAC4R內(nèi)部集成新的并行算法和共性計(jì)算內(nèi)容。
美國(guó)LANL實(shí)驗(yàn)室研制的一系列離散縱標(biāo)程序是SN方法的起源,北京應(yīng)用物理與計(jì)算數(shù)學(xué)研究所前期圍繞中子輸運(yùn)SN算法開(kāi)展了多方面的研究,并重點(diǎn)介紹二維中子輸運(yùn)方程SN算法的研究與應(yīng)用情況[14]。2010年美國(guó)LANL實(shí)驗(yàn)室的技術(shù)報(bào)告中宣講了走鵑超級(jí)計(jì)算機(jī)上運(yùn)行的SN輸運(yùn)程序Sweep3D,它作為PARTISN中子輸運(yùn)程序的縮減版本,可以計(jì)算XYZ三維笛卡爾坐標(biāo)系的幾何系統(tǒng),使用二維處理器網(wǎng)絡(luò)結(jié)構(gòu)來(lái)匹配幾何的分塊網(wǎng)格,從多個(gè)層次上實(shí)施并行來(lái)加速SN算法的求解[15]。離散縱標(biāo)法的形式通常由波爾茲曼輸運(yùn)方程的離散縱標(biāo)形式進(jìn)行建模,可以反映中子或光子的輻射效應(yīng)。
Ωm·Img+(σA+σS)Img
(1)
輻射通量Img(x,y,z)按照能群、角方向進(jìn)行離散化,公式表明沿著一個(gè)特定方向Ωm輻射通量將發(fā)生的變化,求解過(guò)程便是定量獲得此變化趨勢(shì)。計(jì)算時(shí)只對(duì)選定的若干個(gè)離散方向Ωm對(duì)中子輸運(yùn)方程進(jìn)行求解。從中子輸運(yùn)方程求出φ(r,E,Ωm)后,關(guān)于方向Ω的有關(guān)積分則用數(shù)值積分來(lái)近似表示。
(2)
式中,求積系數(shù)ωm、離散方向及其數(shù)目取決于計(jì)算精度的要求(SN方法,又寫(xiě)作SN)。此處下標(biāo)N表示方向向量在某個(gè)坐標(biāo)方向上(例如XYZ三維笛卡爾坐標(biāo)系的某個(gè)坐標(biāo)軸方向)的離散點(diǎn)數(shù)目。近期中國(guó)核動(dòng)力研究設(shè)計(jì)院和西安交大聯(lián)合研制Hydra-SN3D是類似于DORT核心求解器的離散縱標(biāo)法程序。程序?qū)⒄麄€(gè)方程抽象為矩陣系統(tǒng)進(jìn)行求解,這種完整性更貼近于復(fù)雜系統(tǒng)的模擬和仿真。假定輸運(yùn)算符為Η,裂變算符為Γ。
Ηφ=Ω·
(3)
(4)
根據(jù)公式(3)和(4)的算符定義,離散縱標(biāo)法的源迭代求解算法為:
Input:?0,v∑f,∑s,∑tOutput:keff,?S=Γ?;while|k-kold|kold≥εkor||S-Sold||||Sold||≥ε?do H?=S Sold=S S=Γ? k=
對(duì)離散縱標(biāo)法的框架方法實(shí)踐將基于上面描述內(nèi)容實(shí)施抽象和編程實(shí)現(xiàn)。
框架方法同時(shí)強(qiáng)調(diào)抽象,為了有效在NAC4R內(nèi)部實(shí)現(xiàn)對(duì)樣本程序的應(yīng)用或研究,可以參照代理程序SNAP的研究思路[16],根據(jù)問(wèn)題域本身的特征進(jìn)行抽象(本文強(qiáng)調(diào)堆芯計(jì)算)。一方面抽象其中的核心計(jì)算部分,按照NAC4R提供的程序部件和結(jié)構(gòu)進(jìn)行重寫(xiě);另一方面使用數(shù)學(xué)模型來(lái)模擬真實(shí)軟件的行為,研究新的模型、算法等。
堆芯計(jì)算的一次完整計(jì)算可以按照功能和先后次序進(jìn)行分解,總可以形成圖3所示的多個(gè)計(jì)算任務(wù)構(gòu)成的網(wǎng)狀結(jié)構(gòu)。
圖3 計(jì)算任務(wù)的網(wǎng)狀結(jié)構(gòu)Fig.3 Mesh structure for computing tasks
此時(shí)每個(gè)計(jì)算任務(wù)可以使用一個(gè)進(jìn)程或線程代表的計(jì)算資源完成計(jì)算,然后發(fā)送數(shù)據(jù)到它的后繼,其后繼在接收到所有所需數(shù)據(jù)之后開(kāi)始計(jì)算。在數(shù)學(xué)上,這種互聯(lián)網(wǎng)狀結(jié)構(gòu)可以通過(guò)有向圖或者Petri網(wǎng)進(jìn)行表達(dá)和研究。有向圖是由一組定點(diǎn)和邊(V,E)進(jìn)行定義的數(shù)學(xué)模型,當(dāng)有向圖中不存在循環(huán)結(jié)構(gòu)時(shí),有向圖又被稱為有向無(wú)循環(huán)圖,它仍然遵循有向圖的各種定理,例如反向后序序列等價(jià)于圖模型中的拓?fù)渑判?,反映了各個(gè)計(jì)算任務(wù)的一種調(diào)度關(guān)系。當(dāng)有向無(wú)循環(huán)圖的連接邊E不存在權(quán)重值時(shí),可以直接由有向圖對(duì)應(yīng)的矩陣M進(jìn)行調(diào)度算法的設(shè)計(jì)。
1)Mi,j在初始情況下為0,當(dāng)單元被調(diào)度完成計(jì)算后,可以置Mi,j為1;
2)Mi,j(i≠j)表明了單元j依賴的前驅(qū)單元,如果Mi,j≠0,則單元j的調(diào)度需要等待單元i完成計(jì)算。
離散縱標(biāo)輸運(yùn)計(jì)算的徑向掃描計(jì)算具備圖4所示的流水線結(jié)構(gòu),它在SN輸運(yùn)計(jì)算過(guò)程中可能由多進(jìn)程對(duì)較大的分塊區(qū)域按照此互聯(lián)關(guān)系進(jìn)行并行求解,也可能由多線程對(duì)分塊區(qū)域內(nèi)部的網(wǎng)格按照此互聯(lián)關(guān)系進(jìn)行并行求解,前者會(huì)產(chǎn)生進(jìn)程之間的數(shù)據(jù)通信開(kāi)銷(xiāo),后者則共享數(shù)據(jù)內(nèi)存,只存在著計(jì)算的先后次序和多線程的管理開(kāi)銷(xiāo)。
圖4 SN方法的流水線結(jié)構(gòu)Fig.4 Pipeline of the SN method
假定每個(gè)網(wǎng)格區(qū)域的體積一致時(shí),此時(shí)每個(gè)網(wǎng)格區(qū)域的計(jì)算任務(wù)的計(jì)算量相同,當(dāng)數(shù)據(jù)量較小且不考慮數(shù)據(jù)通信時(shí),對(duì)應(yīng)于多線程并行情況,此時(shí)理想并行性能(加速比)為:
(5)
理想性能的取得需要計(jì)算資源(進(jìn)程或線程)滿足≥min{i,j}。當(dāng)計(jì)算資源并不充足時(shí),可以根據(jù)上述抽象和NAC4R提供的并行性能預(yù)測(cè)工具生成不同概率分布的輸入,模擬資源數(shù)的增長(zhǎng)與實(shí)際的并行性能,獲得指導(dǎo)性建議來(lái)輔助并行編程。以I=50,J=50為例,可以使用工具模擬,按照時(shí)間片輪轉(zhuǎn)的方式得到以下的運(yùn)行時(shí)間趨勢(shì)。
圖5顯示的趨勢(shì)表明每個(gè)網(wǎng)格區(qū)域的計(jì)算量相同,且不考慮數(shù)據(jù)通信時(shí),當(dāng)計(jì)算資源在10(十個(gè)進(jìn)程或線程)以內(nèi)時(shí),該例題規(guī)模下并行所帶來(lái)的增益最為明顯??紤]到預(yù)測(cè)的復(fù)雜性,還可以采用Petri網(wǎng)數(shù)學(xué)模型對(duì)更為復(fù)雜的情況進(jìn)行性能預(yù)測(cè),例如當(dāng)每個(gè)網(wǎng)格區(qū)域的計(jì)算量不相同,考慮數(shù)據(jù)通信之后的多進(jìn)程并行性能。2.1節(jié)解釋的框架方法反映的是一種程序抽象的能力,并行算法的性能預(yù)測(cè)是一種用途。
圖5 SN徑向掃描的并行性能預(yù)測(cè)Fig.5 Parallel performanceprediction of radial scanning
與2.1描述的抽象保持一致,真實(shí)的離散縱標(biāo)法的掃描算法在每個(gè)卦限內(nèi)每個(gè)離散方向均需要遍歷掃描各個(gè)網(wǎng)格,它在結(jié)構(gòu)化網(wǎng)格的條件下應(yīng)用KBA并行掃描算法。此時(shí)求解過(guò)程對(duì)應(yīng)于通量矩的線性系統(tǒng)的代數(shù)運(yùn)算。
(6)
L——差分輸運(yùn)算符;
M——通量矩離散化算符矩陣;
S——散射矩陣。
待求解對(duì)象ψ代表角通量,φ為通量矩。結(jié)構(gòu)化網(wǎng)格情況下KBA掃描計(jì)算的實(shí)質(zhì)是求解L-1,它將三維網(wǎng)格進(jìn)行區(qū)域劃分,假設(shè)總的網(wǎng)格在每個(gè)方向上為(I,J,K),各個(gè)區(qū)域(Ia,Jb,K)被映射至每個(gè)進(jìn)程計(jì)算任務(wù)進(jìn)行并行求解。此時(shí)每個(gè)卦限內(nèi)的各區(qū)域XY方向上的掃描計(jì)算由多層循環(huán)結(jié)構(gòu)表示,它的算法描述為:
I,J,K←0,1,2for k in d_begin[K]:d_end[K] ?up,j←?in for j in d_begin[J]:d_end[J] for i in d_begin[I]:d_end[I] ?psi←?up callT(i,j,k,?psi) end for ?up←?psi end for ?out←?up,j end for ?out←?up,k
上述掃描計(jì)算過(guò)程中,外推模型的計(jì)算子函數(shù)T具備獨(dú)立性,僅僅與網(wǎng)格序號(hào)(i,j,k)相關(guān),通量矩變量φup、φpsi等存在著先后依賴關(guān)系。對(duì)于該流水線并行的并行算法,可引入全局標(biāo)志位來(lái)輔助流水線結(jié)構(gòu)的執(zhí)行,此時(shí)的循環(huán)結(jié)構(gòu)使用OpenMP多線程并行的算法可以設(shè)計(jì)為:
#pragma omp parallel forfor j in d_begin[J]:d_end[J] for i in d_begin[I]:d_end[I] wait(done[j][i]) ?psi←?up call T(i,j,k,?psi) done[next(j)][i]=1 end forend for
框架方法在原型軟件NAC4R中單獨(dú)提供一類機(jī)制來(lái)統(tǒng)一這種流水線結(jié)構(gòu)的執(zhí)行。一方面由于循環(huán)結(jié)構(gòu)并行算法的不恰當(dāng)編程實(shí)現(xiàn)將造成性能的惡化,另一方面以上算法結(jié)構(gòu)較難高效和正確編寫(xiě)成功。NAC4R統(tǒng)一使用OpenMP提供的omp_set_lock和omp_unset_lock操作提前分配和管理互斥數(shù)據(jù)結(jié)構(gòu),便于OpenMP多線程在流水線結(jié)構(gòu)下并發(fā)運(yùn)行。計(jì)算用戶只需要編寫(xiě)循環(huán)結(jié)構(gòu)本身,將計(jì)算和數(shù)據(jù)表示相互獨(dú)立,也便于后續(xù)保留效率較高的程序編寫(xiě)模式。表2統(tǒng)計(jì)了編譯優(yōu)化等級(jí)為-O0時(shí)的數(shù)值實(shí)驗(yàn)計(jì)算效率,兩個(gè)預(yù)設(shè)例題的計(jì)算結(jié)果在樣本程序、NAC4R改寫(xiě)之后的程序及其并行版本均保持一致。
表2 預(yù)設(shè)例題的計(jì)算時(shí)間統(tǒng)計(jì)
兩個(gè)例題的單進(jìn)程計(jì)算效率得到了較大提升,且對(duì)于每個(gè)基準(zhǔn)例題,按照3.1節(jié)提供的預(yù)測(cè)信息,對(duì)每個(gè)進(jìn)程使用8個(gè)線程實(shí)施的多線程并行均起到了接近圖5所示的加速效果。這給后續(xù)引入進(jìn)程和線程多級(jí)并行的策略帶來(lái)信心。
表3則統(tǒng)計(jì)和對(duì)比了不同編譯優(yōu)化等級(jí)下NAC4R內(nèi)重制的離散縱標(biāo)法模塊的計(jì)算時(shí)間,如果簡(jiǎn)單按照前面列出的全局標(biāo)志位來(lái)編寫(xiě)OpenMP并行算法,O2優(yōu)化等級(jí)將無(wú)法得到一致的數(shù)值結(jié)果。NAC4R內(nèi)部統(tǒng)一提供的多線程鎖機(jī)制的管理方式確保了計(jì)算結(jié)果保持不變,且表中數(shù)據(jù)表明高編譯優(yōu)化等級(jí)下流水線掃描結(jié)構(gòu)仍然可以使用OpenMP多線程來(lái)提升計(jì)算性能。
表3 不同編譯優(yōu)化等級(jí)的預(yù)設(shè)例題計(jì)算時(shí)間統(tǒng)計(jì)
樣本程序Hydra-SN3D在NAC4R內(nèi)部的重制工作前后共花費(fèi)2個(gè)月,共3個(gè)人力,其中主要程序開(kāi)發(fā)人員僅花費(fèi)1個(gè)月便完成Hydra-SN3D軟件的編制和測(cè)試。NAC4R這種統(tǒng)一結(jié)構(gòu)的框架方法及其編程理念有利于程序的研制、改寫(xiě)或重組,可復(fù)用的工程應(yīng)用核心就在于提供了較多共性計(jì)算功能和使用單個(gè)模塊部件及其組合這種形式來(lái)組織數(shù)值計(jì)算內(nèi)容。原型軟件NAC4R內(nèi)部存在較多可復(fù)用的程序片段,它們是以往并行軟件研制經(jīng)驗(yàn)和模式的總結(jié),使得開(kāi)發(fā)用戶花費(fèi)更多時(shí)間對(duì)問(wèn)題進(jìn)行抽象,匹配已有模式,從而縮減編寫(xiě)程序的時(shí)間。
隨著應(yīng)用的深入和計(jì)算硬件的改善,超大規(guī)模集群計(jì)算機(jī)下堆芯計(jì)算軟件的呈現(xiàn)將產(chǎn)生較大變化。NAC4R原型軟件作為框架方法的研究思路在本文進(jìn)行了介紹,通過(guò)討論,得到如下結(jié)論。
1)框架方法可以取得軟件復(fù)用的目標(biāo),堆芯計(jì)算經(jīng)過(guò)抽象來(lái)適應(yīng)已有的模式或基礎(chǔ)計(jì)算功能可以簡(jiǎn)化數(shù)值程序的編寫(xiě)流程,且便于并行算法相關(guān)內(nèi)容的分析。提出的NAC4R原型軟件對(duì)框架方法的實(shí)例化初步可行,從基礎(chǔ)功能上給出了較多計(jì)算的理論來(lái)源和編程實(shí)現(xiàn)考慮。
2)離散縱標(biāo)法的屏蔽輸運(yùn)程序Hydra-SN3D在NAC4R內(nèi)被重新抽象和編程實(shí)現(xiàn),通過(guò)數(shù)值實(shí)驗(yàn)和統(tǒng)計(jì)數(shù)據(jù)論證了框架方法應(yīng)用于堆芯計(jì)算的可行性和有效性。
后續(xù)將進(jìn)一步對(duì)原型軟件進(jìn)行發(fā)展,以適應(yīng)更多堆芯計(jì)算內(nèi)容,例如非結(jié)構(gòu)化網(wǎng)格的離散縱標(biāo)法程序和兩相流仿真程序等,擴(kuò)大框架方法的適用范圍和提煉其中的并行模式。