基于MPI+OpenMP混合编程模型的并行声纳信号处理技术研究∗
2018-01-04胡银丰
胡银丰 孔 强
1 引言
近20年来,随着计算机硬件和网络技术的飞速发展,大规模并行计算也得到了长足的发展,采用商用的微处理机构架,处理器数目达到了1000量级,我国的高性能并行计算技术也在飞速的发展,国产的大型高性能计算机已经达到每秒超百万亿次的计算能力,并且适合于办公室环境使用的高性能计算机也被开发出来,加速了高性能计算机的普及。另一方面,网络技术也同时飞速发展,千兆以太网已经普及,高带宽低延迟的网络也为声纳数据通讯提供了卓越的性能[1,4]。
随着声纳系统不断的朝着网络化、集成化、一体化和高性能的方向发展,对硬件资源的重新分配,软件的重新构建提出了更高的要求,随着计算机并行处理技术的不断完善,特别是分布式并行处理技术的成熟,为我们提供了一种有效的技术手段。本文将高性能并行技术引入声纳实时信号处理中,提出了一种基于MPI+OpenMP混合编程模型的声纳信号处理并行计算技术,将并行计算的设计思路引入声纳信号处理的体系架构设计,硬件资源的分配和数据通讯链路自动调度完成,不需要人为干预,实现了不依赖于硬件的声纳信号处理任务,极大地提高了软件开发的灵活性和可重构性。
2 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 并行声纳信号处理实现
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上实现了具有警戒、跟踪、侦察、收听等主要功能的声纳信号处理软件,运行情况良好。
4 结语
高性能并行计算技术的飞速发展,为现代声纳信号处理的海量数据实时处理和复杂算法实现提供了强大的物质保证,其具有的高速、并行、巨大的计算能力为复杂大型工程提供了方便。本文在分析多核分布式共享存储集群体系机构的基础上,结合声纳信号处理的特点,提出了一种基于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.