胡銀豐 孔 強(qiáng)
近20年來(lái),隨著計(jì)算機(jī)硬件和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,大規(guī)模并行計(jì)算也得到了長(zhǎng)足的發(fā)展,采用商用的微處理機(jī)構(gòu)架,處理器數(shù)目達(dá)到了1000量級(jí),我國(guó)的高性能并行計(jì)算技術(shù)也在飛速的發(fā)展,國(guó)產(chǎn)的大型高性能計(jì)算機(jī)已經(jīng)達(dá)到每秒超百萬(wàn)億次的計(jì)算能力,并且適合于辦公室環(huán)境使用的高性能計(jì)算機(jī)也被開(kāi)發(fā)出來(lái),加速了高性能計(jì)算機(jī)的普及。另一方面,網(wǎng)絡(luò)技術(shù)也同時(shí)飛速發(fā)展,千兆以太網(wǎng)已經(jīng)普及,高帶寬低延遲的網(wǎng)絡(luò)也為聲納數(shù)據(jù)通訊提供了卓越的性能[1,4]。
隨著聲納系統(tǒng)不斷的朝著網(wǎng)絡(luò)化、集成化、一體化和高性能的方向發(fā)展,對(duì)硬件資源的重新分配,軟件的重新構(gòu)建提出了更高的要求,隨著計(jì)算機(jī)并行處理技術(shù)的不斷完善,特別是分布式并行處理技術(shù)的成熟,為我們提供了一種有效的技術(shù)手段。本文將高性能并行技術(shù)引入聲納實(shí)時(shí)信號(hào)處理中,提出了一種基于MPI+OpenMP混合編程模型的聲納信號(hào)處理并行計(jì)算技術(shù),將并行計(jì)算的設(shè)計(jì)思路引入聲納信號(hào)處理的體系架構(gòu)設(shè)計(jì),硬件資源的分配和數(shù)據(jù)通訊鏈路自動(dòng)調(diào)度完成,不需要人為干預(yù),實(shí)現(xiàn)了不依賴于硬件的聲納信號(hào)處理任務(wù),極大地提高了軟件開(kāi)發(fā)的靈活性和可重構(gòu)性。
目前,高性能計(jì)算領(lǐng)域大部分的系統(tǒng)為SMP集群,其體系結(jié)構(gòu)如圖1所示。這種體系結(jié)構(gòu)同時(shí)具備結(jié)點(diǎn)間分布式存儲(chǔ)和結(jié)點(diǎn)內(nèi)共享內(nèi)存的層次結(jié)構(gòu)[12]。
MPI[2](Message Passing Interface)消息傳遞編程是高性能并行計(jì)算中廣為流行的編程模式。但是在很多情況下,采用單純的MPI消息傳遞編程模式并不能在這種多核處理器構(gòu)成的集群上取得理想的性能[5]。OpenMP[3]是共享存儲(chǔ)編程的實(shí)際工業(yè)標(biāo)準(zhǔn),它是一種編譯指導(dǎo)語(yǔ)句,指導(dǎo)多線程、共享內(nèi)存并行的應(yīng)用程序編程接口??梢?jiàn)MPI與OpenMP能夠在SMP集群上混合使用,例如,結(jié)點(diǎn)間采用MPI消息傳遞通信,結(jié)點(diǎn)內(nèi)采用OpenMP共享內(nèi)存并行。這種混合編程模式與SMP集群的體系結(jié)構(gòu)非常匹配,能夠充分發(fā)揮硬件架構(gòu)的性能[6~11]。
MPI+OpenMP混合編程模型的實(shí)現(xiàn)機(jī)制描述如下:
在每個(gè)結(jié)點(diǎn)上只有一個(gè)MPI進(jìn)程,這個(gè)MPI進(jìn)程首先進(jìn)行必要的初始化。為了保證程序的線程安全,必須使用函數(shù)MPI_Init_thread替換MPI_Init進(jìn)行初始化;
1)每個(gè)結(jié)點(diǎn)上的MPI進(jìn)程可以獨(dú)立作一些局部計(jì)算,需要時(shí)也可以進(jìn)行結(jié)點(diǎn)間的通信。
2)在每個(gè)MPI進(jìn)程內(nèi)部,通過(guò)OpenMP編譯指導(dǎo)語(yǔ)句,實(shí)現(xiàn)多線程并行計(jì)算。
3)OpenMP計(jì)算部分和MPI計(jì)算部分可以穿插進(jìn)行,當(dāng)全部計(jì)算完成后,MPI進(jìn)程結(jié)束。
4)下面給出混合編程模型的偽代碼,MPI初始化采用MPI_Init_thread,MPI終止采用MPI_Finalize,中間插入OpenMP并行編譯指導(dǎo)為每個(gè)進(jìn)程啟動(dòng)若干線程。
MPI_Init_thread();
一部特定的聲納是針對(duì)基陣數(shù)據(jù)來(lái)源進(jìn)行不同功能化的處理,各個(gè)功能的計(jì)算處理都是獨(dú)立的,只是在互相配合時(shí)才產(chǎn)生少量的數(shù)據(jù)交互,這就具有了典型的分布式并行計(jì)算的特性,適合使用MPI進(jìn)行粗粒度的功能化并行。另外,對(duì)于特定的聲納信號(hào)處理,往往都是對(duì)各通道或者各波束的數(shù)據(jù)進(jìn)行單獨(dú)處理的,存在大量的獨(dú)立循環(huán),因此,每個(gè)信號(hào)處理的算法本身就具有可以并行的特性,適合使用OpenMP進(jìn)行多線程細(xì)粒度的并行計(jì)算。可見(jiàn)MPI+OpenMP混合編程模型適合聲納實(shí)時(shí)信號(hào)處理的并行實(shí)現(xiàn)。
3.1 硬件運(yùn)行環(huán)境及配置
本文使用的硬件平臺(tái)為曙光PHPC100高性能并行計(jì)算機(jī),是采用了分布式共享內(nèi)存結(jié)構(gòu)的機(jī)群式高性能計(jì)算機(jī)。PHPC100共由五個(gè)刀片服務(wù)器結(jié)點(diǎn)組成,每個(gè)結(jié)點(diǎn)內(nèi)置兩個(gè)AMD皓龍4核CPU,主頻3.0GHz,每個(gè)結(jié)點(diǎn)獨(dú)享8G內(nèi)存,即系統(tǒng)內(nèi)共有2*4*5=40個(gè)CPU計(jì)算核心,可支持最多40個(gè)進(jìn)程(線程)并發(fā)執(zhí)行。
PHPC100各結(jié)點(diǎn)間通過(guò)高性能網(wǎng)絡(luò)進(jìn)行連接,各結(jié)點(diǎn)除了可以作為單一的計(jì)算資源供交互式用戶使用外,還可以協(xié)同工作并表現(xiàn)為單一、集中控制的計(jì)算資源供并行計(jì)算任務(wù)使用。它是一種造價(jià)低廉、易于構(gòu)建,具有較好可擴(kuò)展性的并行機(jī)體系結(jié)構(gòu)。機(jī)群中任意兩個(gè)結(jié)點(diǎn)間均可以通過(guò)網(wǎng)絡(luò)互相通訊,拓?fù)浣Y(jié)構(gòu)非常靈活,向下支持常用的TCP/IP網(wǎng)絡(luò)協(xié)議,向上支持MPI消息傳遞并行庫(kù)。PHPC采用Linux操作系統(tǒng),同時(shí)使用MPI+OpenMP混合編程的方式支持并行計(jì)算。
3.2 聲納信號(hào)處理軟件設(shè)計(jì)
現(xiàn)代聲納的主要功能有全向警戒、跟蹤、收聽(tīng)、測(cè)距、目標(biāo)識(shí)別、魚(yú)雷報(bào)警分析等,這些功能本身都具有自己獨(dú)特和復(fù)雜的算法,但是,從工程計(jì)算的角度看,各個(gè)功能是可以分開(kāi)進(jìn)行獨(dú)立運(yùn)算的,具有顯式并行的特征。因此我們?yōu)槊總€(gè)功能分配不同的計(jì)算結(jié)點(diǎn),由MPI控制任務(wù)的分配,所有功能自動(dòng)分配運(yùn)行在各個(gè)計(jì)算核心上,硬件資源的分配和數(shù)據(jù)鏈路由并行計(jì)算機(jī)自動(dòng)完成,數(shù)據(jù)流、控制流均通過(guò)網(wǎng)絡(luò)通訊方式自動(dòng)實(shí)現(xiàn)。
對(duì)于每個(gè)具體的功能實(shí)現(xiàn),根據(jù)不同功能算法的計(jì)算量大小,可以通過(guò)選擇OpenMP線程數(shù),對(duì)代碼進(jìn)行簡(jiǎn)單修改即可實(shí)現(xiàn)內(nèi)部線程級(jí)的并行。例如,可以將多波束形成的計(jì)算分拆到多個(gè)線程上計(jì)算,設(shè)形成的波束個(gè)數(shù)為K,設(shè)波束號(hào)分別為[1、2、3、…、K],根據(jù)計(jì)算量估算需要使用的計(jì)算核心個(gè)數(shù)為p。
1)將波束號(hào)區(qū)間劃分為p個(gè)均等的子區(qū)間;
2)每個(gè)線程分別計(jì)算自己所屬子區(qū)間的波束形成;
3)由主線程匯總,輸出。
程序結(jié)構(gòu)如圖2所示。
采用上述的軟件架構(gòu),我們?cè)谑锕釶HPC100上實(shí)現(xiàn)了具有警戒、跟蹤、偵察、收聽(tīng)等主要功能的聲納信號(hào)處理軟件,運(yùn)行情況良好。
高性能并行計(jì)算技術(shù)的飛速發(fā)展,為現(xiàn)代聲納信號(hào)處理的海量數(shù)據(jù)實(shí)時(shí)處理和復(fù)雜算法實(shí)現(xiàn)提供了強(qiáng)大的物質(zhì)保證,其具有的高速、并行、巨大的計(jì)算能力為復(fù)雜大型工程提供了方便。本文在分析多核分布式共享存儲(chǔ)集群體系機(jī)構(gòu)的基礎(chǔ)上,結(jié)合聲納信號(hào)處理的特點(diǎn),提出了一種基于MPI+OpenMP混合編程模型的聲納實(shí)時(shí)信號(hào)處理的實(shí)現(xiàn)方法。將并行計(jì)算的設(shè)計(jì)思路引入聲納信號(hào)處理的體系架構(gòu)設(shè)計(jì),極大地提高了軟件開(kāi)發(fā)的靈活性和可重構(gòu)性。同時(shí)實(shí)現(xiàn)了硬件與軟件平臺(tái)的分離,信號(hào)處理編程在一個(gè)通用的開(kāi)發(fā)環(huán)境中進(jìn)行,簡(jiǎn)化了信號(hào)處理軟件開(kāi)發(fā)的難度。并且能夠滿足聲納信號(hào)處理的實(shí)時(shí)性要求。
[1]王鵬等,并行計(jì)算應(yīng)用與實(shí)戰(zhàn)[M].北京:機(jī)械工業(yè)出版社,2009.
[2]MPI,MPI:A Message-Passing Interface standard,Message Passing Interface Forum,June 1995.http://www.mpi-forum.org/.
[3]OpenMP,The OpenMP ARB.http://www.openmp.org/.
[4]陳國(guó)良.并行計(jì)算機(jī)體系結(jié)構(gòu)[M].北京:高等教育出版社,2002:132-133.
[5]都志輝.高性能計(jì)算并行編程技術(shù)-MPI并行程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2001:13-15.
[6]單瑩,吳建平,王正華.基于SMP集群的多層并行編程模型與并行優(yōu)化技術(shù)[J].計(jì)算機(jī)應(yīng)用研究,2006(10):254-260.
[7]趙永華,遲學(xué)斌.基于SMP集群的MPI+OpenMP混合編程模型及有效實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2005,22(10):7-11.
[8]曹倩,左敏.異構(gòu)多核上支持OpenMP3.0的自適應(yīng)任務(wù)粒度策略[J]. 小型微型計(jì)算機(jī)系統(tǒng).2012(06):1350-1357.
[9]陳輝,孫雷鳴,李錄明,羅省賢,趙安軍.基于MPI+OpenMP的多層次并行偏移算法研究[J].成都理工大學(xué)學(xué)報(bào)(自然科學(xué)版).2010(05):528-534.
[10]Cappello F,Etiemble D.MPI versus MPI+OpenMP on IBM SP for the NAS benchmarks[C]//In Proceedings of the 2000 ACM/IEEE Conference on Supercomputing,Dallas.Texas,USA:IEEE Computer Society Press,2000.
[11]Chen Yong,Chen Guo-Liang,Xu Yin-Long,et al.Implementation and evaluation of MPI+OpenMP programming model on Dawning 3000[C]//Proceedings of the 21stIASTED International Conference.Calgary:ACTA Press,2003:732-737.
[12]Grama A,Gupta A,Karypis G,ea al.Introduction to Parallel Computing[M].Second Editon Harlow England Addison Wesley 2003:429-467.