范培勤,過武宏,唐 帥
(海軍潛艇學(xué)院,山東 青島 266199)
海水介質(zhì)及其邊界條件的復(fù)雜多變性,導(dǎo)致了聲波在海水中傳播規(guī)律的復(fù)雜多樣性。如何快速、準(zhǔn)確完成水聲傳播計(jì)算,為水聲傳感器提供實(shí)時(shí)、大范圍、長(zhǎng)時(shí)間序列水聲傳播信息支持,對(duì)優(yōu)化和完善水聲傳感器的設(shè)計(jì)和使用具有重要的意義。隨著多核技術(shù)的快速發(fā)展,以多核處理器為計(jì)算核心的對(duì)稱多處理(Symmetrical Multi-Processing,SMP)集群成為應(yīng)用最為廣泛的高性能計(jì)算平臺(tái)。SMP集群將“分布式內(nèi)存結(jié)構(gòu)”和“共享式內(nèi)存結(jié)構(gòu)”兩種并行系統(tǒng)架構(gòu)結(jié)合在一起,既克服了SMP可擴(kuò)展性差的缺點(diǎn),同時(shí)又具備集群高效通信的優(yōu)點(diǎn),更適合采用節(jié)點(diǎn)內(nèi)內(nèi)存共享、節(jié)點(diǎn)間消息傳遞的多級(jí)混合并行編程模型[1-2]。在水聲傳播模型的并行計(jì)算方面,國(guó)內(nèi)科研人員做了大量的工作,王魯軍等[3]利用共享存儲(chǔ)(Open Multi-Processing,OpenMP)并行編程環(huán)境,在個(gè)人計(jì)算機(jī)上實(shí)現(xiàn)了拋物方程模型的并行計(jì)算,孫雪海等[4]研究了基于圖形處理器(Graphics Processing Unit,GPU)的水下三維聲場(chǎng)快速預(yù)報(bào)方法,張朝金等[5]利用多線程技術(shù)實(shí)現(xiàn)了射線模型的并行處理,范培勤等[6]利用消息傳遞+共享內(nèi)存(Message Passing Interface+Open Multi-Processing,MPI+OpenMP)混合并行編程模型,開展了水平不變聲道中WKBZ簡(jiǎn)正波模型的并行計(jì)算方法研究,這些工作大多圍繞著水聲傳播模型本身的并行處理開展,力求實(shí)現(xiàn)單次水聲傳播計(jì)算的快速求解,難以直接應(yīng)用于大范圍海洋水聲傳播產(chǎn)品的快速預(yù)報(bào)。本文基于SMP集群,使用波束位移射線簡(jiǎn)正波模型(BDRM)模型,采用MPI+OpenMP二級(jí)混合并行編程方法,通過在經(jīng)緯度方向進(jìn)行大粒度二級(jí)并行劃分,開展了大范圍水聲傳播產(chǎn)品并行預(yù)報(bào)技術(shù)研究,并結(jié)合水聲傳感器對(duì)環(huán)境保障信息的具體需求,實(shí)現(xiàn)了水聲傳播產(chǎn)品的快速預(yù)報(bào)。
多核處理器技術(shù)的快速發(fā)展,極大地促進(jìn)了SMP架構(gòu)計(jì)算機(jī)的普及。SMP并行機(jī)具有通信開銷小、易于編程等優(yōu)點(diǎn),但受硬件架構(gòu)的限制,其處理器的數(shù)量通常不能超過100個(gè),且隨著規(guī)模的增大,數(shù)量眾多的處理器在同時(shí)訪問共享內(nèi)存時(shí)容易引起內(nèi)存沖突,并會(huì)造成內(nèi)存訪問帶寬嚴(yán)重不足,極大限制了SMP并行機(jī)的可擴(kuò)展性;MPP和COW的特點(diǎn)是基于分布式存儲(chǔ),具有良好的擴(kuò)展性,但存在處理器之間的通信開銷較大、編程困難等問題[7-8];SMP集群是多核技術(shù)和集群技術(shù)的完美結(jié)合,一方面,節(jié)點(diǎn)內(nèi)多個(gè)多核CPU,確保每個(gè)節(jié)點(diǎn)都具有較高的處理能力;另一方面,節(jié)點(diǎn)之間使用專用高速計(jì)算網(wǎng)絡(luò)進(jìn)行通信,提高了節(jié)點(diǎn)間通信速度。SMP集群,在保證高性能的同時(shí),具有更高的可擴(kuò)展性和更強(qiáng)的連通性,使之成為當(dāng)今高性并行計(jì)算機(jī)的主流架構(gòu)。
SMP集群這種多層次體系結(jié)構(gòu)特點(diǎn),決定了其可以采用消息傳遞并行編程模式與內(nèi)存共享并行編程模式混合編程模式來更高效地解決實(shí)際應(yīng)用問題。此時(shí),節(jié)點(diǎn)間可以采用基于消息傳遞,完成粗粒度的任務(wù)并行化劃分,通過通信可以輕易地實(shí)現(xiàn)節(jié)點(diǎn)之間的數(shù)據(jù)傳遞和共享;節(jié)點(diǎn)內(nèi)采用基于共享內(nèi)存編程模式,可對(duì)節(jié)點(diǎn)分配的任務(wù)進(jìn)一步細(xì)化并行,實(shí)現(xiàn)細(xì)粒度的并行處理。從而實(shí)現(xiàn)編程環(huán)境與硬件結(jié)構(gòu)的有機(jī)融合,最大限度發(fā)揮這種層次化結(jié)構(gòu)的優(yōu)勢(shì),有效提高并行系統(tǒng)的運(yùn)行效率和可擴(kuò)展性[9-11]。MPI+OpenMP混合并行程序執(zhí)行流程如圖1所示。

圖1 MPI+OpenMP混合并行程序執(zhí)行流程圖
海洋水聲傳播產(chǎn)品的計(jì)算,主要圍繞經(jīng)度和緯度方向上的二重循環(huán)開展,在計(jì)算過程中不需進(jìn)行數(shù)據(jù)交互[12],如圖2所示。本文先使用MPI消息傳遞的方式實(shí)現(xiàn)水聲傳播產(chǎn)品的并行預(yù)報(bào),在此基礎(chǔ)上結(jié)合OpenMP共享內(nèi)存方式,實(shí)現(xiàn)二級(jí)混合并行預(yù)報(bào)。

圖2 海洋水聲環(huán)境參數(shù)計(jì)算過程
2.1.1 算法的設(shè)計(jì) 如上所述,海洋水聲傳播產(chǎn)品的計(jì)算主要圍繞著預(yù)報(bào)海區(qū)在經(jīng)度和緯度兩個(gè)方向上的循環(huán)開展,基于MPI的并行實(shí)現(xiàn)主要圍繞著二重循環(huán)的并行劃分進(jìn)行,其并行實(shí)現(xiàn)相對(duì)簡(jiǎn)單,具體如下。
第一步:環(huán)境變量初始化。調(diào)用MPI_INIT函數(shù),完成MPI的初始化,通過MPI通信函數(shù)完成初始數(shù)據(jù)同步操作。
第二步:任務(wù)并行劃分。將預(yù)報(bào)海區(qū)按照緯度方向均勻劃分為與進(jìn)程數(shù)相等的相同大小的子海區(qū),并分配給具體進(jìn)程。
第三步:計(jì)算結(jié)果收集。調(diào)用MPI_REDUCE聚合通信函數(shù),將計(jì)算結(jié)果收集到進(jìn)程0。
2.1.2 算法的優(yōu)化 并行算法的設(shè)計(jì)和實(shí)現(xiàn)都相對(duì)簡(jiǎn)單,但可能存在可擴(kuò)展性差、負(fù)載不均衡問題,這主要由以下原因引起。
(1)預(yù)報(bào)在經(jīng)緯度兩個(gè)方向開展,單個(gè)方向循環(huán)次數(shù)有限,以全球區(qū)域?yàn)槔?'×5'的分辨率,經(jīng)度方向網(wǎng)格為4 320個(gè),經(jīng)度方向?yàn)? 160個(gè),最多可用4 320個(gè)進(jìn)程運(yùn)行此程序,嚴(yán)重影響可擴(kuò)展性。
(2)每個(gè)子區(qū)域中海洋所占的面積不同:在計(jì)算開始時(shí)首先會(huì)判斷計(jì)算任務(wù)所在位置是否為陸地,如為陸地則直接跳過該次循環(huán),由于預(yù)報(bào)區(qū)域海洋和陸地分布的不均勻性,計(jì)算海區(qū)按緯度均勻并行劃分必然會(huì)導(dǎo)致不同進(jìn)程所分配的計(jì)算量不一致,特別是當(dāng)進(jìn)程數(shù)較多時(shí),負(fù)載不均衡問題會(huì)更加突出。
(3)不同子區(qū)域海水深度不一致:每個(gè)節(jié)點(diǎn)的計(jì)算量除與陸地面積所占比例相關(guān)外,還與分配的計(jì)算任務(wù)區(qū)域內(nèi)海水深度直接相關(guān),通常水深越大,計(jì)算量越大,水深分布的不均勻性也會(huì)造成嚴(yán)重的負(fù)載不均衡。
針對(duì)以上問題,主要從以下3方面對(duì)算法進(jìn)行了優(yōu)化:(1)將經(jīng)緯度方向上的二重循環(huán)調(diào)整為一重循環(huán),從而提高程序的并行性;(2)將陸地從預(yù)報(bào)海區(qū)中剔除,對(duì)剩余區(qū)域重新排序;(3)以剩余區(qū)域平均水深值作為第一級(jí)并行任務(wù)劃分的標(biāo)準(zhǔn),盡量使每個(gè)進(jìn)程所分配的計(jì)算區(qū)域的平均水深與區(qū)域平均水深值相等。
2.2.1 并行算法設(shè)計(jì) 第一步:環(huán)境變量初始化。完成環(huán)境場(chǎng)數(shù)據(jù)初始化,通過MPI完成初始場(chǎng)數(shù)據(jù)同步。
第二步:第一級(jí)并行(MPI)。將重新排序后的預(yù)報(bào)任務(wù)按水深平均值均勻劃分為與進(jìn)程數(shù)相等的子任務(wù),通過MPI消息傳遞接口,將子任務(wù)分配給對(duì)應(yīng)的計(jì)算節(jié)點(diǎn)。
第三步:第二級(jí)并行(OpenMP)。每一個(gè)節(jié)點(diǎn)OpenMP接口的初始化,設(shè)定for制導(dǎo)語(yǔ)句,啟動(dòng)多線程,完成具體經(jīng)緯度點(diǎn)的水聲環(huán)境參數(shù)計(jì)算,計(jì)算完成后線程退出。
第四步:計(jì)算結(jié)果收集。計(jì)算完成后,調(diào)用MPI通信函數(shù),將計(jì)算結(jié)果收集到某一節(jié)點(diǎn)。
該算法首先調(diào)用MPI接口,實(shí)現(xiàn)計(jì)算任務(wù)在計(jì)算節(jié)點(diǎn)上的粗粒度劃分,然后在計(jì)算節(jié)點(diǎn)上調(diào)用OpenMP,啟動(dòng)多線程,以共享內(nèi)存的實(shí)現(xiàn)具體位置點(diǎn)的水聲環(huán)境參數(shù)的預(yù)報(bào),進(jìn)程數(shù)量減少到原來的(Nc為單計(jì)算節(jié)點(diǎn)配置的CPU總核數(shù)),有效降低了進(jìn)程規(guī)模,減少了MPI進(jìn)程初始化所需要的時(shí)間和進(jìn)程間通信的次數(shù)。計(jì)算流程如圖3所示。

圖3 海洋水聲環(huán)境參數(shù)預(yù)報(bào)混合并行算法計(jì)算流程圖
2.2.2 算法實(shí)現(xiàn) 海洋水聲傳播產(chǎn)品并行預(yù)報(bào)算法的實(shí)現(xiàn)主要圍繞著初始場(chǎng)數(shù)據(jù)預(yù)處理、循環(huán)的優(yōu)化、并行任務(wù)的二級(jí)劃分等具體編程實(shí)現(xiàn)開展。
(1)初始數(shù)據(jù)場(chǎng)處理
海洋初始場(chǎng)數(shù)據(jù)文件通常在幾千兆到幾十千兆,直接寫入內(nèi)存,會(huì)占用大量資源。另外,陸地區(qū)域在整個(gè)預(yù)報(bào)海區(qū)中占有較大比例,會(huì)嚴(yán)重影響并行任務(wù)劃分的負(fù)載均衡。因此,必須對(duì)初始場(chǎng)數(shù)據(jù)和預(yù)報(bào)海區(qū)進(jìn)行預(yù)處理,盡可能減少對(duì)內(nèi)存的占用,并保證各計(jì)算節(jié)點(diǎn)內(nèi)負(fù)載分配均衡。
① 數(shù)據(jù)讀取
為減少內(nèi)存的占用量,同時(shí)避免多個(gè)進(jìn)程同時(shí)讀寫初始場(chǎng)數(shù)據(jù)文件影響系統(tǒng)的I/O性能,在程序設(shè)計(jì)時(shí),指定一個(gè)進(jìn)程對(duì)初始場(chǎng)數(shù)據(jù)進(jìn)行讀取和處理,處理完成后調(diào)用MPI通信函數(shù),將指定的數(shù)據(jù)分配給對(duì)應(yīng)進(jìn)程。
② 陸地剔除
陸地區(qū)域在整個(gè)預(yù)報(bào)海區(qū)中占有較大比例,在串行程序的計(jì)算過程中,可以通過對(duì)水深的判斷來確定是否為陸地,使用continue或break等語(yǔ)句來跳過陸地區(qū)域相關(guān)參數(shù)的計(jì)算,可有效地減少計(jì)算量。并行計(jì)算過程中,這雖然不會(huì)增加額外的計(jì)算量,但由于計(jì)算任務(wù)仍在總的循環(huán)過程中,極易造成進(jìn)程任務(wù)負(fù)載不均衡。本文在進(jìn)行初始場(chǎng)數(shù)據(jù)處理時(shí),首先對(duì)陸地區(qū)域進(jìn)行篩除,然后對(duì)剩余的區(qū)域進(jìn)行重新排序,并記錄排序前后的對(duì)應(yīng)關(guān)系,最后對(duì)重新排序后的計(jì)算任務(wù)進(jìn)行并行分配。
③ 數(shù)據(jù)共享
初始聲速場(chǎng)處理完成后,通過調(diào)用MPI通信函數(shù),將聲速場(chǎng)數(shù)據(jù)發(fā)送至其他進(jìn)程,確保各進(jìn)程初始數(shù)據(jù)一致。
(2)循環(huán)優(yōu)化
為提高計(jì)算任務(wù)的并行度,將經(jīng)度和緯度方向上的二重循環(huán)改為一重循環(huán),實(shí)現(xiàn)過程如下所示。

優(yōu)化后,總的循環(huán)次數(shù)沒有改變,但任務(wù)的并行度可以提高至少三個(gè)數(shù)量級(jí)。
(3)子任務(wù)構(gòu)建
依據(jù)計(jì)算節(jié)點(diǎn)數(shù)和平均水深確定各子任務(wù)循環(huán)的起點(diǎn)和終點(diǎn),具體如下。

(4)任務(wù)并行劃分
任務(wù)并行劃分主要完成計(jì)算任務(wù)在節(jié)點(diǎn)間并行分配和節(jié)點(diǎn)內(nèi)的并行計(jì)算兩步工作,具體實(shí)現(xiàn)如下:
① 節(jié)點(diǎn)間任務(wù)并行劃分
節(jié)點(diǎn)間任務(wù)的并行分配通過MPI實(shí)現(xiàn),劃分主要通過控制進(jìn)程號(hào)數(shù),將重新構(gòu)建的子任務(wù)分配到對(duì)應(yīng)計(jì)算節(jié)點(diǎn)。在實(shí)際并行劃分過程中需要結(jié)合進(jìn)程數(shù)和測(cè)試情況,對(duì)平均水深進(jìn)行適當(dāng)調(diào)整,盡可能達(dá)到負(fù)載均衡,減小程序運(yùn)行時(shí)間。
② 節(jié)點(diǎn)內(nèi)任務(wù)并行計(jì)算
節(jié)點(diǎn)內(nèi)任務(wù)的并行計(jì)算通過調(diào)用OpenMP模式的for并行編譯制導(dǎo)語(yǔ)來實(shí)現(xiàn),如下所示。

OpenMP并行編程的實(shí)現(xiàn)相對(duì)簡(jiǎn)單,但要處理好變量的共享和私有以及變量在進(jìn)入和退出并行域邊界的拷貝等問題。
利用海軍潛艇學(xué)院超算平臺(tái)對(duì)混合并行程序進(jìn)行了測(cè)試,該平臺(tái)共有314個(gè)計(jì)算節(jié)點(diǎn),單節(jié)點(diǎn)配置雙路V3 CPU,共24顆計(jì)算核心,內(nèi)存128 GB,計(jì)算網(wǎng)絡(luò)采用56 Gb/s InfiniBand交換機(jī)。
通過對(duì)比同等計(jì)算規(guī)模情況下MPI并行程序與MPI+OpenMP混合并行程序的計(jì)算時(shí)間的方法,來比較混合編程算法的優(yōu)缺點(diǎn)。為便于表達(dá)兩種模式的計(jì)算性能,測(cè)試過程中按如下原則設(shè)定進(jìn)程數(shù)和線程數(shù)。
(1)在MPI模式中,單節(jié)點(diǎn)啟動(dòng)的進(jìn)程數(shù)與計(jì)算核心數(shù)相同。
(2)在MPI+OpenMP模式中,單節(jié)點(diǎn)只啟動(dòng)一個(gè)進(jìn)程,啟動(dòng)的線程數(shù)與物理核數(shù)相等。
(3)統(tǒng)一用核心數(shù)來表示參與計(jì)算的計(jì)算資源數(shù)量,即每一核心運(yùn)行一個(gè)線程或進(jìn)程。
表1為MPI與MPI+OpenMP并行程序在集群上的測(cè)試結(jié)果。圖4和圖5分別為其對(duì)應(yīng)的效率和加速度。

表1 MPI與MPI+OpenMP混合并行算法計(jì)算時(shí)間(s)

圖4 并行程序執(zhí)行效率圖

圖5 并行程序執(zhí)行加速比圖
從圖4和圖5可以看出,隨著參與計(jì)算核心數(shù)的增加MPI+OpenMP程序具有更高的并行效率,其加速比基本呈線性增加,比MPI程序具有更好的擴(kuò)展性。MPI+OpenMP混合編程模式通過節(jié)點(diǎn)內(nèi)共享內(nèi)存和節(jié)點(diǎn)間消息傳遞的方式,可有效地解決功效能存模式難以擴(kuò)展和消息傳遞模式下進(jìn)程通信開銷較大的難題,其計(jì)算性能和可擴(kuò)展性遠(yuǎn)高于單一編程模式的計(jì)算結(jié)果。
本文采用MPI+OpenMP混合并行編程模式,實(shí)現(xiàn)了海洋水聲傳播產(chǎn)品的快速預(yù)報(bào)。測(cè)試結(jié)果表明,該方法將SMP集群的體系架構(gòu)與并行編程模式結(jié)合起來,充分發(fā)揮MPI與OpenMPI各自的優(yōu)勢(shì),大幅降低水聲傳播產(chǎn)品的預(yù)報(bào)時(shí)間,為海洋環(huán)境大規(guī)模并行預(yù)報(bào)問題的快速高效處理提供一種解決思路,下一步計(jì)劃開展海洋-聲學(xué)耦合預(yù)報(bào)混合并行處理方法的研究。