王慧文 許鋼燦
(第七一五研究所,杭州,310023)
蛙人、UUV 等水下威脅目標由于體積小、機動性強、隱蔽性好等特點,已成為恐怖活動的重要工具。為了提高港口碼頭及其他水域的小目標探測和識別能力[1-4],反蛙人聲吶需要增加通道數(shù)、提高陣增益,信號處理算法相應也會日趨復雜,這些因素都會大大增加信號處理的運算量。為了實現(xiàn)所有數(shù)據(jù)的實時處理,就需要更高效的信號處理平臺。傳統(tǒng)的單核處理器很難實現(xiàn)大量數(shù)據(jù)的實時處理,多核處理器的并行處理已經(jīng)成為解決這一問題的有效途徑[5-6]。本文將MPI 與MKL 引入聲吶信號的實時處理中,MPI 提供多進程間的并行化處理架構和進程間通信,MKL 實現(xiàn)進程內部并行計算。
MPI 是一種基于消息傳遞的并行編程技術,支持異構、同構環(huán)境里的進程通信,多用于分布式進程、多核進程之間的通信,并且可以與其他并行計算相結合,形成不同粒度的并行計算架構。MPI 并行算法是基于進程間消息傳遞的算法,它提供了多種通信方式,有點對點通信、組播通信、非阻塞通信、阻塞通信等[7-8]。反蛙人聲吶的信號處理按照功能可以劃分為不同的功能模塊,并采用流水線設計實現(xiàn)并行,非常適合使用MPI 進行功能模塊之間的并行化處理。
MKL 是英特爾數(shù)學核心函數(shù)庫,是一套經(jīng)過高度并行優(yōu)化和廣泛線程化的數(shù)學例程,專為需要極致性能的科學、工程及金融等領域的應用而設計。MKL 提供大量的向量、矩陣運算函數(shù),調用這些函數(shù)可實現(xiàn)局部范圍的高效并行計算。反蛙人聲吶信號處理過程中,數(shù)據(jù)處理主要針對通道、波束進行單獨處理,因此存在大量的單獨循環(huán),這些循環(huán)操作可采用MKL 實現(xiàn)。
基于MPI 的并行編程架構實現(xiàn)了功能模塊之間的并行計算,相比于串行計算可顯著提高運算效率[9-10]。MPI 并行編程框架如圖1 所示,其中功能模塊的數(shù)量需根據(jù)具體應用設計,每個功能模塊對應MPI 的一個進程。運算效率取決于計算開銷和通信開銷。計算開銷是進程執(zhí)行計算的時間,通信開銷是進程之間數(shù)據(jù)傳輸及同步的時間,增加進程數(shù)量可以提高并行度,但會增加進程間的通信開銷。
圖1 傳統(tǒng)MPI 并行編程架構
MPI 只能實現(xiàn)進程之間的并行計算,無法在線程級別進行并行運算,MKL 可以在線程級別提供并行運算,因此MPI+MKL 這種層次化并行模型能夠實現(xiàn)兩級并行,提供模塊間和模塊內部的兩級并行,它結合了模塊間的粗粒度并行(濾波器,波束形成,匹配濾波等)和模塊內部的細粒度并行(for循環(huán)并行),執(zhí)行效率遠高于單純使用MPI 的程序,MPI+MKL 的并行編程架構如圖2 所示。
圖2 MPI+MKL 并行編程架構
本文的實現(xiàn)是搭建在多核服務器上,算法的并行化是在單一的MPI 并行處理算法基礎上結合MKL 的編程模型,以提供模塊間和模塊內的兩級并行處理,最大限度地利用多核服務器的體系結構?;旌暇幊棠P蜏p少了進程間的消息傳遞,增加并行處理的力度,提高了并行效率。
反蛙人聲吶的軟件系統(tǒng)按照功能模塊劃分可分為濾波處理、波束形成、匹配濾波、圖像處理、目標識別。首先初始化MPI 環(huán)境,創(chuàng)建5 個進程,分別對應5 個功能模塊,實現(xiàn)一級并行處理:0 號進程進行濾波處理,1 號進程進行波束形成,2 號進程進行匹配濾波,3 號進程進行聲吶圖像處理[11],4 號進程進行目標識別。對于波束形成這種比較耗時的計算,也可以將其分成多個模塊,進一步增加并行性。每個進程通過MPI_Recv()接收上一模塊的數(shù)據(jù),完成本模塊的數(shù)據(jù)處理,然后調用MPI_Send()將本模塊的處理結果送下一功能模塊。二級并行處理在進程內部主要針對功能模塊內部進行并行化處理。調用MKL 函數(shù)實現(xiàn)功能模塊內部并行化處理的軟件流程見圖3。
圖3 反蛙人聲吶處理流程
本文的硬件環(huán)境為聯(lián)想邊緣服務器SE350(2個CPU,每個CPU 包含8 個核心,16 線程,主頻1.9 GHz,64 G DDR4 內存,4T 硬盤);軟件環(huán)境為CentOS6.5 操作系統(tǒng),支持MPI 并行環(huán)境,使用gcc4.8,mpi4.0,mkl2019,程序采用C 語言編寫。試驗聲吶頻率為70 kHz,通道數(shù)為256 通道,發(fā)射信號為HFM 信號,信號降基帶后的采樣率30 kHz。在聲吶信號處理過程中,波束形成是比較耗時的操作,因此本文只對波束形成的執(zhí)行時間進行統(tǒng)計,波束形成采用頻域波束形成,共形成256 個波束。通過設置不同的進程數(shù),比較MPI 和MPI+MKL 混合模型的運行效率。
通過表1 可以看出,MPI+MKL 較單純使用MPI 提高了系統(tǒng)運算效率。隨著進程數(shù)的增加,進程間的通信開銷增多,所以表中運行時間沒有按比例減小。
表1 波束形成時間對比
本文通過對反蛙人聲吶信號處理的特點進行了分析,構建了基于MPI+MKL 的混合編程模型,結合了MPI 和MKL 的優(yōu)點,實現(xiàn)了聲吶信號處理的兩級并行,并對其運行效率進行測試。測試結果表明,基于MPI+MKL 的混合模型具有較高的執(zhí)行效率,相比于單純使用MPI,可以提高運算效率,減少計算資源,是一種高效可行的并行編程模型,能夠滿足反蛙人聲吶高采樣、多通道和復雜算法的實時處理要求。