胡銀豐 孔 強
近20年來,隨著計算機硬件和網絡技術的飛速發展,大規模并行計算也得到了長足的發展,采用商用的微處理機構架,處理器數目達到了1000量級,我國的高性能并行計算技術也在飛速的發展,國產的大型高性能計算機已經達到每秒超百萬億次的計算能力,并且適合于辦公室環境使用的高性能計算機也被開發出來,加速了高性能計算機的普及。另一方面,網絡技術也同時飛速發展,千兆以太網已經普及,高帶寬低延遲的網絡也為聲納數據通訊提供了卓越的性能[1,4]。
隨著聲納系統不斷的朝著網絡化、集成化、一體化和高性能的方向發展,對硬件資源的重新分配,軟件的重新構建提出了更高的要求,隨著計算機并行處理技術的不斷完善,特別是分布式并行處理技術的成熟,為我們提供了一種有效的技術手段。本文將高性能并行技術引入聲納實時信號處理中,提出了一種基于MPI+OpenMP混合編程模型的聲納信號處理并行計算技術,將并行計算的設計思路引入聲納信號處理的體系架構設計,硬件資源的分配和數據通訊鏈路自動調度完成,不需要人為干預,實現了不依賴于硬件的聲納信號處理任務,極大地提高了軟件開發的靈活性和可重構性。
目前,高性能計算領域大部分的系統為SMP集群,其體系結構如圖1所示。這種體系結構同時具備結點間分布式存儲和結點內共享內存的層次結構[12]。
MPI[2](Message Passing Interface)消息傳遞編程是高性能并行計算中廣為流行的編程模式。但是在很多情況下,采用單純的MPI消息傳遞編程模式并不能在這種多核處理器構成的集群上取得理想的性能[5]。OpenMP[3]是共享存儲編程的實際工業標準,它是一種編譯指導語句,指導多線程、共享內存并行的應用程序編程接口。可見MPI與OpenMP能夠在SMP集群上混合使用,例如,結點間采用MPI消息傳遞通信,結點內采用OpenMP共享內存并行。這種混合編程模式與SMP集群的體系結構非常匹配,能夠充分發揮硬件架構的性能[6~11]。
MPI+OpenMP混合編程模型的實現機制描述如下:
在每個結點上只有一個MPI進程,這個MPI進程首先進行必要的初始化。為了保證程序的線程安全,必須使用函數MPI_Init_thread替換MPI_Init進行初始化;
1)每個結點上的MPI進程可以獨立作一些局部計算,需要時也可以進行結點間的通信。
2)在每個MPI進程內部,通過OpenMP編譯指導語句,實現多線程并行計算。
3)OpenMP計算部分和MPI計算部分可以穿插進行,當全部計算完成后,MPI進程結束。
4)下面給出混合編程模型的偽代碼,MPI初始化采用MPI_Init_thread,MPI終止采用MPI_Finalize,中間插入OpenMP并行編譯指導為每個進程啟動若干線程。
MPI_Init_thread();
一部特定的聲納是針對基陣數據來源進行不同功能化的處理,各個功能的計算處理都是獨立的,只是在互相配合時才產生少量的數據交互,這就具有了典型的分布式并行計算的特性,適合使用MPI進行粗粒度的功能化并行。另外,對于特定的聲納信號處理,往往都是對各通道或者各波束的數據進行單獨處理的,存在大量的獨立循環,因此,每個信號處理的算法本身就具有可以并行的特性,適合使用OpenMP進行多線程細粒度的并行計算。可見MPI+OpenMP混合編程模型適合聲納實時信號處理的并行實現。
3.1 硬件運行環境及配置
本文使用的硬件平臺為曙光PHPC100高性能并行計算機,是采用了分布式共享內存結構的機群式高性能計算機。PHPC100共由五個刀片服務器結點組成,每個結點內置兩個AMD皓龍4核CPU,主頻3.0GHz,每個結點獨享8G內存,即系統內共有2*4*5=40個CPU計算核心,可支持最多40個進程(線程)并發執行。
PHPC100各結點間通過高性能網絡進行連接,各結點除了可以作為單一的計算資源供交互式用戶使用外,還可以協同工作并表現為單一、集中控制的計算資源供并行計算任務使用。它是一種造價低廉、易于構建,具有較好可擴展性的并行機體系結構。機群中任意兩個結點間均可以通過網絡互相通訊,拓撲結構非常靈活,向下支持常用的TCP/IP網絡協議,向上支持MPI消息傳遞并行庫。PHPC采用Linux操作系統,同時使用MPI+OpenMP混合編程的方式支持并行計算。
3.2 聲納信號處理軟件設計
現代聲納的主要功能有全向警戒、跟蹤、收聽、測距、目標識別、魚雷報警分析等,這些功能本身都具有自己獨特和復雜的算法,但是,從工程計算的角度看,各個功能是可以分開進行獨立運算的,具有顯式并行的特征。因此我們為每個功能分配不同的計算結點,由MPI控制任務的分配,所有功能自動分配運行在各個計算核心上,硬件資源的分配和數據鏈路由并行計算機自動完成,數據流、控制流均通過網絡通訊方式自動實現。
對于每個具體的功能實現,根據不同功能算法的計算量大小,可以通過選擇OpenMP線程數,對代碼進行簡單修改即可實現內部線程級的并行。例如,可以將多波束形成的計算分拆到多個線程上計算,設形成的波束個數為K,設波束號分別為[1、2、3、…、K],根據計算量估算需要使用的計算核心個數為p。
1)將波束號區間劃分為p個均等的子區間;
2)每個線程分別計算自己所屬子區間的波束形成;
3)由主線程匯總,輸出。
程序結構如圖2所示。
采用上述的軟件架構,我們在曙光PHPC100上實現了具有警戒、跟蹤、偵察、收聽等主要功能的聲納信號處理軟件,運行情況良好。
高性能并行計算技術的飛速發展,為現代聲納信號處理的海量數據實時處理和復雜算法實現提供了強大的物質保證,其具有的高速、并行、巨大的計算能力為復雜大型工程提供了方便。本文在分析多核分布式共享存儲集群體系機構的基礎上,結合聲納信號處理的特點,提出了一種基于MPI+OpenMP混合編程模型的聲納實時信號處理的實現方法。將并行計算的設計思路引入聲納信號處理的體系架構設計,極大地提高了軟件開發的靈活性和可重構性。同時實現了硬件與軟件平臺的分離,信號處理編程在一個通用的開發環境中進行,簡化了信號處理軟件開發的難度。并且能夠滿足聲納信號處理的實時性要求。
[1]王鵬等,并行計算應用與實戰[M].北京:機械工業出版社,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]陳國良.并行計算機體系結構[M].北京:高等教育出版社,2002:132-133.
[5]都志輝.高性能計算并行編程技術-MPI并行程序設計[M].北京:清華大學出版社,2001:13-15.
[6]單瑩,吳建平,王正華.基于SMP集群的多層并行編程模型與并行優化技術[J].計算機應用研究,2006(10):254-260.
[7]趙永華,遲學斌.基于SMP集群的MPI+OpenMP混合編程模型及有效實現[J].微電子學與計算機,2005,22(10):7-11.
[8]曹倩,左敏.異構多核上支持OpenMP3.0的自適應任務粒度策略[J]. 小型微型計算機系統.2012(06):1350-1357.
[9]陳輝,孫雷鳴,李錄明,羅省賢,趙安軍.基于MPI+OpenMP的多層次并行偏移算法研究[J].成都理工大學學報(自然科學版).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.