范培勤,劉曉妍,過武宏,崔寶龍
(1.海軍潛艇學(xué)院,山東 青島 266199;2.92020部隊,山東 青島 266000; 3.青島海洋科學(xué)與技術(shù)試點國家實驗室,山東 青島 266000 )
聲波是目前唯一能夠在海水介質(zhì)中進行遠距離傳播的有效載體,掌握和了解水下聲傳播規(guī)律,并做出快速準(zhǔn)確的預(yù)報,對水聲傳感器、武器系統(tǒng)的使用和研究都具有極其重要的意義,也是海洋戰(zhàn)場環(huán)境仿真和“透明海洋”領(lǐng)域的基礎(chǔ)研究內(nèi)容。隨著水聲傳感器、武器裝備信息化程度的不斷提高,其性能的發(fā)揮對環(huán)境的敏感性和依賴性更加強烈,如何實時提供精細化、精確化、實時化海洋水聲環(huán)境信息保障,成為迫切需要解決的難題。隨著多核技術(shù)的發(fā)展,SMP(Symmetrical MultiProcessor)集群在高性能計算領(lǐng)域中所占的份額越來越大,如何充分發(fā)揮SMP集群強大的計算能力,提高計算資源有效使用效率,成為HPC領(lǐng)域研究的熱點和難點。本文結(jié)合SMP集群系統(tǒng)體系架構(gòu)特點,采用MPI(Message Passing Interface)+OpenMP(Open Multi-Processing)混合編程方法,通過節(jié)點內(nèi)內(nèi)存共享,節(jié)點間消息傳遞的方式,將并行編程環(huán)境與SMP集群的硬件特點進行有機融合,實現(xiàn)了WKBZ模型[1]的2級混合并行計算。測試結(jié)果表明,該方法可大幅提高程序的并行效率,同時具有良好的可擴展性。
MPI是由工業(yè)、科研和政府部門等聯(lián)合建立的消息傳遞并行編程標(biāo)準(zhǔn)[2]。它采用分而治之的思想,將大任務(wù)劃分為若干個小任務(wù)分配給集群系統(tǒng)的所有節(jié)點,節(jié)點間通過消息傳遞協(xié)同工作,最終實現(xiàn)問題的快速處理,具有標(biāo)準(zhǔn)化、可移植、可擴展等特點,適用于幾乎所有的高性能計算機系統(tǒng),是目前SMP集群上主流的并行編程模型。
OpenMP是一種共享內(nèi)存并行編程模型[3 - 5],通過顯式地添加并行編譯制導(dǎo)語句來實現(xiàn)程序的并行處理,具有編程簡單、移植性好和支持增量并發(fā)等特點,是共享存儲系統(tǒng)中的并行編程標(biāo)準(zhǔn)。
MPI+OpenMP混合并行編程模型通過在節(jié)點內(nèi)使用共享存儲模型、節(jié)點外采用消息傳遞模型實現(xiàn)具體問題的多級并行求解[6]。該模型將SMP集群的硬件特點與并行編程模型有機融合到一起,通過充分發(fā)揮2種模型各自的優(yōu)點,實現(xiàn)SMP集群計算性能的充分發(fā)揮,從而獲得更高的計算性能和可擴展性。具體來講:節(jié)點間采用消息傳遞,解決了節(jié)點間OpenMP模型計算結(jié)果無法交互的問題;節(jié)點內(nèi)采用共享存儲,減少進程的數(shù)量,縮短了進程初始化和通信所花費的時間。其基本架構(gòu)如圖1所示。
Figure 1 Structure of MPI+OpenMP hybrid parallel programming model圖1 MPI+OpenMP混合并行編程模型結(jié)構(gòu)圖
WKBZ簡正波模型可準(zhǔn)確計算深海環(huán)境水下聲場的分布,是認識和利用深海中水聲傳播規(guī)律的有效手段,廣泛應(yīng)用于深海環(huán)境下水聲環(huán)境的分析和保障。文獻[7]基于PC集群,采用MPI并行編程模型,通過“交叉劃分+聚合通信”的方法,實現(xiàn)了1維WKBZ簡正波模型的并行計算,可在10-1s的時間內(nèi)完成1維水聲傳播損失的計算。為進一步提高水聲環(huán)境信息保障的精細化程度,利用該方法對2維水聲傳播并行計算時間進行了測試,結(jié)果表明,計算時間隨進程數(shù)的增加呈現(xiàn)先減小后增加的趨勢,計算時間達到了秒級,難以滿足為水聲環(huán)境信息保障提供實時化水聲傳播數(shù)據(jù)支撐。通過對測試結(jié)果的進一步分析發(fā)現(xiàn),造成這種現(xiàn)象的主要原因是隨著進程數(shù)量的增加,進程間通信所花費的時間不斷增加,并逐漸主導(dǎo)著整個計算時間,嚴重影響程序的可擴展性。為提高程序的可擴展性,提高計算資源的使用效率,滿足水下聲場環(huán)境仿真對水下聲場實時化保障的需求,本文基于MPI+OpenMP混合并行編程的方法,通過節(jié)點內(nèi)共享內(nèi)存、節(jié)點間消息傳遞的方法,實現(xiàn)了水聲環(huán)境信息的快速計算,該方法大幅減少了進程間通信次數(shù)和數(shù)據(jù)交互量,有效縮短了通信時間,為實現(xiàn)業(yè)務(wù)化的水聲環(huán)境信息保障打下了堅實的基礎(chǔ)。
當(dāng)接收深度、目標(biāo)深度確定后,WKBZ簡正波模型的計算主要圍繞著本征值、本征函數(shù)、水平距離上傳播損失的計算開展,計算量隨著頻率的增加而增加。為了得到水下2維聲場的精細化分布,即考慮目標(biāo)深度不變,接收傳感器在整個水深上變化時所接收到的目標(biāo)聲場分布,將接收深度按照固定的水深間隔向海底方向循環(huán)計算,從而得到不同水平傳播距離在垂直方向上的聲場分布,其計算流程如圖2所示。
Figure 2 Flow chart of 2D WKBZ normal model serial computing圖2 WKBZ 2維聲場串行計算流程圖
WKBZ 1維聲場的并行計算主要采用“交叉劃分+聚合通信”的方式圍繞著本征值、本征函數(shù)和傳播損失3部分循環(huán)計算過程的并行處理展開,文獻[7]已有詳細的描述,在此不再贅述。
從圖3可以看出,與1維聲場計算相比,2維聲場的計算主要增加了接收深度循環(huán),即圍繞著不同接收深度上本征函數(shù)和本征值的循環(huán)求解展開,其并行處理可以采用2種方式:
(1)直接在1維聲場傳播并行計算程序中添加1層深度循環(huán),仍然使用多進程分別完成某1個接收深度上的本征函數(shù)、傳播損失并行計算,計算完成后再開始計算下1深度的本征函數(shù)值和傳播損失值。這種方法的實現(xiàn)相對簡單,但每個接收深度的計算結(jié)束時需要做2次聚合通信和1次廣播通信,總的通信次數(shù)為接收深度上循環(huán)次數(shù)的3倍。
(2)對接收深度循環(huán)進行并行劃分,讓每1個進程獨立地完成某1個接收深度上的本征函數(shù)、傳播損失計算,所有進程計算完成后,再通過聚合通信將傳播損失值收集到一起。這種方式只需要在每個進程計算完成后進行1次聚合通信,大大減少了通信次數(shù)。本文采用此方法來實現(xiàn)基于MPI的WKBZ 2維聲場并行計算,計算流程如圖3所示。
Figure 3 Flow chart of parallel computing of 2D WKBZ normal model based on MPI圖3 基于MPI的WKBZ 2維聲場并行計算流程圖
基于MPI的WKBZ 2維聲場并行計算主要圍繞著不同接收深度上本征函數(shù)和傳播損失的并行處理開展,接收深度的循環(huán)次數(shù)通常不會超過103次,因此在一定程度上制約著程序的可擴展性。另外,在單個接收深度計算過程中不需要與其他進程進行數(shù)據(jù)交換,并行計算部分花費的時間通常隨進程數(shù)的增加線性減少,而每個進程的通信次數(shù)和數(shù)據(jù)傳輸量相對固定,這將會導(dǎo)致隨著計算規(guī)模的增加,并行計算花費的時間在整個程序計算時間中所占的比例不斷減少,進程間通信時間所占的比例將會不斷增加,當(dāng)計算規(guī)模達到一定程度時,通信時間可能會占據(jù)主導(dǎo)地位。
通過前面的分析可知,2維WKBZ簡正波模型的計算過程主要圍繞著不同接收深度上本征函數(shù)、水平距離上傳播損失的計算開展,計算過程可歸結(jié)為2重循環(huán):第1重為深度循環(huán),即求解不同接收深度上的傳播損失值,稱之為外循環(huán);另1重為求解具體接收深度上本征函數(shù)及不同距離上的傳播損失,稱之為內(nèi)循環(huán)。2維水聲傳播模型的求解過程可通過MPI+OpenMP混合2級編程模型與SMP集群的存儲結(jié)構(gòu)的特點有機地結(jié)合起來。具體來講:外循環(huán)實際上主要完成不同接收深度上水聲傳播計算任務(wù)的分配,是1種粗粒度的任務(wù)劃分,可通過MPI消息傳遞的方式實現(xiàn)其并行任務(wù)劃分;內(nèi)循環(huán)主要完成某個深度上具體的計算任務(wù)的處理,內(nèi)部不同部分間需要進行大量的數(shù)據(jù)交互,是1種細粒度的任務(wù)劃分,可采用OpenMP以共享內(nèi)存的方式實現(xiàn)任務(wù)的并行劃分。WKBZ簡正波模型混合并行算法的計算流程如圖4所示。
Figure 4 Flow chart of WKBZ normal model hybrid parallel computing圖4 WKBZ簡正波模型混合并行算法計算流程圖
算法的具體實現(xiàn)過程分為以下幾步:
(1)初始化。
完成節(jié)點內(nèi)部的線程數(shù)設(shè)定和環(huán)境參數(shù)的讀取等初始化工作,再通過MPI_Bcast()函數(shù)廣播給其他進程。
(2)本征值計算(MPI)。
采用交叉劃分方法,將不同號數(shù)本征值的求解分配給不同的進程,具體實現(xiàn)見文獻[7]。
(3)接收深度循環(huán)的劃分(MPI)。
采用均勻劃分方法,將在深度方向的循環(huán)次數(shù)分配給不同的進程(第1級循環(huán)并行處理)。計算過程偽代碼如下所示:
n=waterdeep/NP;
for(i=myid*n;i<(myid+1)n,i=++)
{
#pragma omp parallelprivate(tid)
{
傳播損失計算;
}
}
(4)計算劃分(OpenMP)。
調(diào)用OpenMP的并行編譯制導(dǎo)語句,分別實現(xiàn)對本征函數(shù)、傳播損失并行計算域的創(chuàng)建(第2級循環(huán)并行處理)。計算過程偽代碼如下所示:
#pragma omp parallelprivate(tid)
{
1例萬古霉素致急性腎損傷老年患者行血漿置換術(shù)的用藥分析和藥學(xué)監(jiān)護 ……………………………… 李 薇等(19):2704
tid=omp_get_thread_num();
#pragma omp for//本征函數(shù)求解
for(i=0;i { la[i]=la(vl[i]);//本征函數(shù) } #pragma omp for//傳播損失求解 for(i=0;i tl[i]=TL(vl,la);//傳播損失 } } (5)數(shù)據(jù)收集和輸出。 每個節(jié)點分配的計算任務(wù)完成后,調(diào)用MPI_REDUCE函數(shù)將計算結(jié)果收集到進程0,并將計算結(jié)果輸出。 基于MPI+OpenMP混合的WKBZ 2維聲場并行計算方法,通過在節(jié)點間傳遞消息,節(jié)點內(nèi)共享內(nèi)存的方式,實現(xiàn)了2維聲場“粗粒度+細粒度”的2級并行計算。采用該方法可以將進程數(shù)降低到MPI編程模型下的1/NP(NP為單節(jié)點計算核心數(shù)),在有效提升算法可擴展性的同時,大大降低了進程間的通信次數(shù)和通信開銷。 利用海軍潛艇學(xué)院SMP集群系統(tǒng)對WKBZ簡正波模型混合并行算法進行測試,該平臺共314個計算節(jié)點,理論峰值計算能力310 TFLOPS,具體配置如表1所示。 本文分別將MPI、MPI+OpenMP混合編程模型實現(xiàn)的2維WKBZ簡正波模型并行計算程序,使用同樣的計算資源進行性能測試和分析。為科學(xué)地表達2種編程模型的計算性能的差異,測試過程中按如下原則設(shè)定進程數(shù)和線程數(shù): Table 1 SMP cluster configuration table表1 SMP集群配置表 (1)在MPI編程模型中,指定單個計算核心只運行1個進程,單節(jié)點進程數(shù)與核心數(shù)相等。 (2)在OpenMP編程模型中,指定單個計算核心只運行1個線程,單節(jié)點線程數(shù)與核心數(shù)相等。 (3)在MPI+OpenMP混合編程模型中,單節(jié)點只啟動1個進程,節(jié)點內(nèi)線程數(shù)與核心數(shù)相等。 上述3個原則保證了計算過程中單個物理核心只運行1個計算任務(wù)。為便于比較,將計算資源統(tǒng)一用核心數(shù)進行表示,即在MPI編程模型下,核心數(shù)=進程數(shù);在MPI+OpenMP混合編程模型下,核心數(shù)=進程數(shù)*單節(jié)點核心數(shù)。 利用圖5給出的深海聲道行聲速剖面,設(shè)定計算頻率為5 000 Hz,表2為MPI與MPI+OpenMP 2種編程模型實現(xiàn)的水聲傳播模型的計算時間,圖6為其對應(yīng)的加速比。 Figure 5 Typical deep ocean sound speed profile圖5 典型深海聲速剖面 Table 2 Computing time of MPI andMPI+OpenMP hybrid parallel programs 編程模型核心數(shù)244896192384768MPI+OpenMP3.421.790.940.680.530.43MPI2.481.401.021.262.434.55 Figure 6 Parallel speedup of MPI and MPI+OpenMP parallel programs圖6 MPI與MPI+OpenMP并行程序計算加速比 由表2和圖6可以看出: (1)使用單計算節(jié)點運行時(24核),MPI編程模型程序性能優(yōu)于MPI+OpenMP混合編程模型的,這主要是由于在利用OpenMP對break、continue等語句進行處理時引入了一定的額外計算量引起的。 (2)對于MPI+OpenMP編程模型,計算時間隨核心數(shù)的增加逐漸減小,最小運行時間為0.43 s,核心數(shù)超過96個后,計算時間的減少量逐漸減小。 (3)對于MPI編程模型,計算時間隨核心數(shù)的增減呈現(xiàn)先減小后增加的現(xiàn)象,最小運行時間為1.02 s,核心數(shù)超過96個后,計算時間隨核心數(shù)的增加線性增加。 為了進一步分析造成2種編程模型性能差異的原因,將2種編程模型的運行時間分為并行計算時間和進程間通信時間2部分進行了測試,測試結(jié)果分別如表3和表4所示。 Table 3 Computing time of MPI parallel program表3 MPI并行程序計算時間 s 表3為MPI并行程序計算時間表,圖7為其計算時間圖。從表3和圖7可以看出,隨著核心數(shù)的增加,MPI程序并行部分計算花費時間由2.29 s減少為0.11 s,占總計算時間百分比由92.3%降低至2.4%;進程間通信消耗的時間由0.21 s增加至4.44 s,占總計算時間的百分比由7.7%提高至97.6%,從而導(dǎo)致并行程序的計算效率大幅降低。 Figure 7 Computing time of MPI parallel program圖7 MPI并行程序計算時間組成圖 Table 4 Computing time ofMPI+OpenMP parallel program 時間核心數(shù)244896192384768并行計算時間3.101.630.780.420.200.13進程通信時間0.320.160.160.260.330.30合計3.421.790.940.680.530.43 Figure 8 Computing time of MPI+OpenMP parallel program圖8 MPI+OpenMP混合并行程序計算時間 表4為OpenMP+MPI并行程序計算時間表,圖8為其計算時間圖。從表4和圖8可以看出,隨著計算規(guī)模的增加,MPI+OpenMP程序并行計算部分花費時間由3.10 s減少為0.13 s,占總計算時間百分比由90.6%降低到73.4%;進程通信部分消耗的時間由0.04 s增加到0.46 s,占總計算時間由9.4%提高至26.6%。 從上面的分析可以得出以下結(jié)論: (1)2種編程模型:并行計算部分花費的時間隨核心數(shù)的增加大幅減少,單核心計算時間基本一致。 (2)MPI并行程序:進程通信消耗的時間隨核心數(shù)的增加呈現(xiàn)先減少后增加的現(xiàn)象,且隨核心數(shù)的增加,逐漸在整個運行時間中占主導(dǎo)地位,遠大于并行計算部分花費的時間。 (3)MPI+OpenMP并行程序:通信時間雖然也呈現(xiàn)先減少后增加的現(xiàn)象,但由于進程的數(shù)量遠遠小于MPI并行程序的數(shù)量,其通信時間較MPI程序能夠降低1個數(shù)量級,具有更高的計算性能和可擴展性。 綜上,MPI+OpenMP混合編程模型通過節(jié)點內(nèi)共享內(nèi)存、節(jié)點間傳遞消息的方式,大大減少了進程通信消耗時間,計算性能和可擴展性遠高于MPI編程模型。因此,對于實時計算問題的并行處理,必須采取合理的通信方式,盡可能降低由于進程間通信帶來的時間開銷,提高程序的執(zhí)行速度,MPI+OpenMP混合編程是解決此類問題的1個很好的選擇。 本文基于SMP集群,采用MPI+OpenMP混合并行編程模型,實現(xiàn)了WKBZ簡正波模型的2級混合并行計算。該方法大大減少了進程間頻繁通信引起的時間開銷,同單一的MPI編程模型相比,具有更高的計算性能,基本滿足水下聲場信息實時仿真的需求,對具有2級循環(huán)結(jié)構(gòu)應(yīng)用問題的并行處理具有較好的參考價值。4 算法測試與結(jié)果分析
4.1 測試環(huán)境
4.2 測試方法
4.3 測試結(jié)果
表2 MPI與MPI+OpenMP混合并行程序計算時間s
表4 MPI+OpenMP并行程序計算時間s5 結(jié)束語