范培勤,劉曉妍,過武宏,崔寶龍
(1.海軍潛艇學院,山東 青島 266199;2.92020部隊,山東 青島 266000; 3.青島海洋科學與技術試點國家實驗室,山東 青島 266000 )
聲波是目前唯一能夠在海水介質中進行遠距離傳播的有效載體,掌握和了解水下聲傳播規律,并做出快速準確的預報,對水聲傳感器、武器系統的使用和研究都具有極其重要的意義,也是海洋戰場環境仿真和“透明海洋”領域的基礎研究內容。隨著水聲傳感器、武器裝備信息化程度的不斷提高,其性能的發揮對環境的敏感性和依賴性更加強烈,如何實時提供精細化、精確化、實時化海洋水聲環境信息保障,成為迫切需要解決的難題。隨著多核技術的發展,SMP(Symmetrical MultiProcessor)集群在高性能計算領域中所占的份額越來越大,如何充分發揮SMP集群強大的計算能力,提高計算資源有效使用效率,成為HPC領域研究的熱點和難點。本文結合SMP集群系統體系架構特點,采用MPI(Message Passing Interface)+OpenMP(Open Multi-Processing)混合編程方法,通過節點內內存共享,節點間消息傳遞的方式,將并行編程環境與SMP集群的硬件特點進行有機融合,實現了WKBZ模型[1]的2級混合并行計算。測試結果表明,該方法可大幅提高程序的并行效率,同時具有良好的可擴展性。
MPI是由工業、科研和政府部門等聯合建立的消息傳遞并行編程標準[2]。它采用分而治之的思想,將大任務劃分為若干個小任務分配給集群系統的所有節點,節點間通過消息傳遞協同工作,最終實現問題的快速處理,具有標準化、可移植、可擴展等特點,適用于幾乎所有的高性能計算機系統,是目前SMP集群上主流的并行編程模型。
OpenMP是一種共享內存并行編程模型[3 - 5],通過顯式地添加并行編譯制導語句來實現程序的并行處理,具有編程簡單、移植性好和支持增量并發等特點,是共享存儲系統中的并行編程標準。
MPI+OpenMP混合并行編程模型通過在節點內使用共享存儲模型、節點外采用消息傳遞模型實現具體問題的多級并行求解[6]。該模型將SMP集群的硬件特點與并行編程模型有機融合到一起,通過充分發揮2種模型各自的優點,實現SMP集群計算性能的充分發揮,從而獲得更高的計算性能和可擴展性。具體來講:節點間采用消息傳遞,解決了節點間OpenMP模型計算結果無法交互的問題;節點內采用共享存儲,減少進程的數量,縮短了進程初始化和通信所花費的時間。其基本架構如圖1所示。

Figure 1 Structure of MPI+OpenMP hybrid parallel programming model圖1 MPI+OpenMP混合并行編程模型結構圖
WKBZ簡正波模型可準確計算深海環境水下聲場的分布,是認識和利用深海中水聲傳播規律的有效手段,廣泛應用于深海環境下水聲環境的分析和保障。文獻[7]基于PC集群,采用MPI并行編程模型,通過“交叉劃分+聚合通信”的方法,實現了1維WKBZ簡正波模型的并行計算,可在10-1s的時間內完成1維水聲傳播損失的計算。為進一步提高水聲環境信息保障的精細化程度,利用該方法對2維水聲傳播并行計算時間進行了測試,結果表明,計算時間隨進程數的增加呈現先減小后增加的趨勢,計算時間達到了秒級,難以滿足為水聲環境信息保障提供實時化水聲傳播數據支撐。通過對測試結果的進一步分析發現,造成這種現象的主要原因是隨著進程數量的增加,進程間通信所花費的時間不斷增加,并逐漸主導著整個計算時間,嚴重影響程序的可擴展性。為提高程序的可擴展性,提高計算資源的使用效率,滿足水下聲場環境仿真對水下聲場實時化保障的需求,本文基于MPI+OpenMP混合并行編程的方法,通過節點內共享內存、節點間消息傳遞的方法,實現了水聲環境信息的快速計算,該方法大幅減少了進程間通信次數和數據交互量,有效縮短了通信時間,為實現業務化的水聲環境信息保障打下了堅實的基礎。
當接收深度、目標深度確定后,WKBZ簡正波模型的計算主要圍繞著本征值、本征函數、水平距離上傳播損失的計算開展,計算量隨著頻率的增加而增加。為了得到水下2維聲場的精細化分布,即考慮目標深度不變,接收傳感器在整個水深上變化時所接收到的目標聲場分布,將接收深度按照固定的水深間隔向海底方向循環計算,從而得到不同水平傳播距離在垂直方向上的聲場分布,其計算流程如圖2所示。

Figure 2 Flow chart of 2D WKBZ normal model serial computing圖2 WKBZ 2維聲場串行計算流程圖
WKBZ 1維聲場的并行計算主要采用“交叉劃分+聚合通信”的方式圍繞著本征值、本征函數和傳播損失3部分循環計算過程的并行處理展開,文獻[7]已有詳細的描述,在此不再贅述。
從圖3可以看出,與1維聲場計算相比,2維聲場的計算主要增加了接收深度循環,即圍繞著不同接收深度上本征函數和本征值的循環求解展開,其并行處理可以采用2種方式:
(1)直接在1維聲場傳播并行計算程序中添加1層深度循環,仍然使用多進程分別完成某1個接收深度上的本征函數、傳播損失并行計算,計算完成后再開始計算下1深度的本征函數值和傳播損失值。這種方法的實現相對簡單,但每個接收深度的計算結束時需要做2次聚合通信和1次廣播通信,總的通信次數為接收深度上循環次數的3倍。
(2)對接收深度循環進行并行劃分,讓每1個進程獨立地完成某1個接收深度上的本征函數、傳播損失計算,所有進程計算完成后,再通過聚合通信將傳播損失值收集到一起。這種方式只需要在每個進程計算完成后進行1次聚合通信,大大減少了通信次數。本文采用此方法來實現基于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維聲場并行計算主要圍繞著不同接收深度上本征函數和傳播損失的并行處理開展,接收深度的循環次數通常不會超過103次,因此在一定程度上制約著程序的可擴展性。另外,在單個接收深度計算過程中不需要與其他進程進行數據交換,并行計算部分花費的時間通常隨進程數的增加線性減少,而每個進程的通信次數和數據傳輸量相對固定,這將會導致隨著計算規模的增加,并行計算花費的時間在整個程序計算時間中所占的比例不斷減少,進程間通信時間所占的比例將會不斷增加,當計算規模達到一定程度時,通信時間可能會占據主導地位。
通過前面的分析可知,2維WKBZ簡正波模型的計算過程主要圍繞著不同接收深度上本征函數、水平距離上傳播損失的計算開展,計算過程可歸結為2重循環:第1重為深度循環,即求解不同接收深度上的傳播損失值,稱之為外循環;另1重為求解具體接收深度上本征函數及不同距離上的傳播損失,稱之為內循環。2維水聲傳播模型的求解過程可通過MPI+OpenMP混合2級編程模型與SMP集群的存儲結構的特點有機地結合起來。具體來講:外循環實際上主要完成不同接收深度上水聲傳播計算任務的分配,是1種粗粒度的任務劃分,可通過MPI消息傳遞的方式實現其并行任務劃分;內循環主要完成某個深度上具體的計算任務的處理,內部不同部分間需要進行大量的數據交互,是1種細粒度的任務劃分,可采用OpenMP以共享內存的方式實現任務的并行劃分。WKBZ簡正波模型混合并行算法的計算流程如圖4所示。

Figure 4 Flow chart of WKBZ normal model hybrid parallel computing圖4 WKBZ簡正波模型混合并行算法計算流程圖
算法的具體實現過程分為以下幾步:
(1)初始化。
完成節點內部的線程數設定和環境參數的讀取等初始化工作,再通過MPI_Bcast()函數廣播給其他進程。
(2)本征值計算(MPI)。
采用交叉劃分方法,將不同號數本征值的求解分配給不同的進程,具體實現見文獻[7]。
(3)接收深度循環的劃分(MPI)。
采用均勻劃分方法,將在深度方向的循環次數分配給不同的進程(第1級循環并行處理)。計算過程偽代碼如下所示:
n=waterdeep/NP;
for(i=myid*n;i<(myid+1)n,i=++)
{
#pragma omp parallelprivate(tid)
{
傳播損失計算;
}
}
(4)計算劃分(OpenMP)。
調用OpenMP的并行編譯制導語句,分別實現對本征函數、傳播損失并行計算域的創建(第2級循環并行處理)。計算過程偽代碼如下所示:
#pragma omp parallelprivate(tid)
{
1例萬古霉素致急性腎損傷老年患者行血漿置換術的用藥分析和藥學監護 ……………………………… 李 薇等(19):2704
tid=omp_get_thread_num();
#pragma omp for//本征函數求解
for(i=0;i { la[i]=la(vl[i]);//本征函數 } #pragma omp for//傳播損失求解 for(i=0;i tl[i]=TL(vl,la);//傳播損失 } } (5)數據收集和輸出。 每個節點分配的計算任務完成后,調用MPI_REDUCE函數將計算結果收集到進程0,并將計算結果輸出。 基于MPI+OpenMP混合的WKBZ 2維聲場并行計算方法,通過在節點間傳遞消息,節點內共享內存的方式,實現了2維聲場“粗粒度+細粒度”的2級并行計算。采用該方法可以將進程數降低到MPI編程模型下的1/NP(NP為單節點計算核心數),在有效提升算法可擴展性的同時,大大降低了進程間的通信次數和通信開銷。 利用海軍潛艇學院SMP集群系統對WKBZ簡正波模型混合并行算法進行測試,該平臺共314個計算節點,理論峰值計算能力310 TFLOPS,具體配置如表1所示。 本文分別將MPI、MPI+OpenMP混合編程模型實現的2維WKBZ簡正波模型并行計算程序,使用同樣的計算資源進行性能測試和分析。為科學地表達2種編程模型的計算性能的差異,測試過程中按如下原則設定進程數和線程數: Table 1 SMP cluster configuration table表1 SMP集群配置表 (1)在MPI編程模型中,指定單個計算核心只運行1個進程,單節點進程數與核心數相等。 (2)在OpenMP編程模型中,指定單個計算核心只運行1個線程,單節點線程數與核心數相等。 (3)在MPI+OpenMP混合編程模型中,單節點只啟動1個進程,節點內線程數與核心數相等。 上述3個原則保證了計算過程中單個物理核心只運行1個計算任務。為便于比較,將計算資源統一用核心數進行表示,即在MPI編程模型下,核心數=進程數;在MPI+OpenMP混合編程模型下,核心數=進程數*單節點核心數。 利用圖5給出的深海聲道行聲速剖面,設定計算頻率為5 000 Hz,表2為MPI與MPI+OpenMP 2種編程模型實現的水聲傳播模型的計算時間,圖6為其對應的加速比。 Figure 5 Typical deep ocean sound speed profile圖5 典型深海聲速剖面 Table 2 Computing time of MPI andMPI+OpenMP hybrid parallel programs 編程模型核心數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)使用單計算節點運行時(24核),MPI編程模型程序性能優于MPI+OpenMP混合編程模型的,這主要是由于在利用OpenMP對break、continue等語句進行處理時引入了一定的額外計算量引起的。 (2)對于MPI+OpenMP編程模型,計算時間隨核心數的增加逐漸減小,最小運行時間為0.43 s,核心數超過96個后,計算時間的減少量逐漸減小。 (3)對于MPI編程模型,計算時間隨核心數的增減呈現先減小后增加的現象,最小運行時間為1.02 s,核心數超過96個后,計算時間隨核心數的增加線性增加。 為了進一步分析造成2種編程模型性能差異的原因,將2種編程模型的運行時間分為并行計算時間和進程間通信時間2部分進行了測試,測試結果分別如表3和表4所示。 Table 3 Computing time of MPI parallel program表3 MPI并行程序計算時間 s 表3為MPI并行程序計算時間表,圖7為其計算時間圖。從表3和圖7可以看出,隨著核心數的增加,MPI程序并行部分計算花費時間由2.29 s減少為0.11 s,占總計算時間百分比由92.3%降低至2.4%;進程間通信消耗的時間由0.21 s增加至4.44 s,占總計算時間的百分比由7.7%提高至97.6%,從而導致并行程序的計算效率大幅降低。 Figure 7 Computing time of MPI parallel program圖7 MPI并行程序計算時間組成圖 Table 4 Computing time ofMPI+OpenMP parallel program 時間核心數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可以看出,隨著計算規模的增加,MPI+OpenMP程序并行計算部分花費時間由3.10 s減少為0.13 s,占總計算時間百分比由90.6%降低到73.4%;進程通信部分消耗的時間由0.04 s增加到0.46 s,占總計算時間由9.4%提高至26.6%。 從上面的分析可以得出以下結論: (1)2種編程模型:并行計算部分花費的時間隨核心數的增加大幅減少,單核心計算時間基本一致。 (2)MPI并行程序:進程通信消耗的時間隨核心數的增加呈現先減少后增加的現象,且隨核心數的增加,逐漸在整個運行時間中占主導地位,遠大于并行計算部分花費的時間。 (3)MPI+OpenMP并行程序:通信時間雖然也呈現先減少后增加的現象,但由于進程的數量遠遠小于MPI并行程序的數量,其通信時間較MPI程序能夠降低1個數量級,具有更高的計算性能和可擴展性。 綜上,MPI+OpenMP混合編程模型通過節點內共享內存、節點間傳遞消息的方式,大大減少了進程通信消耗時間,計算性能和可擴展性遠高于MPI編程模型。因此,對于實時計算問題的并行處理,必須采取合理的通信方式,盡可能降低由于進程間通信帶來的時間開銷,提高程序的執行速度,MPI+OpenMP混合編程是解決此類問題的1個很好的選擇。 本文基于SMP集群,采用MPI+OpenMP混合并行編程模型,實現了WKBZ簡正波模型的2級混合并行計算。該方法大大減少了進程間頻繁通信引起的時間開銷,同單一的MPI編程模型相比,具有更高的計算性能,基本滿足水下聲場信息實時仿真的需求,對具有2級循環結構應用問題的并行處理具有較好的參考價值。4 算法測試與結果分析
4.1 測試環境
4.2 測試方法

4.3 測試結果

表2 MPI與MPI+OpenMP混合并行程序計算時間s



表4 MPI+OpenMP并行程序計算時間s

5 結束語