基于MPI+OpenMP的水声传播并行预报方法

2021-08-19 11:06范培勤过武宏
海洋技术学报 2021年3期
关键词:水声进程内存

范培勤,过武宏,唐 帅

(海军潜艇学院,山东 青岛 266199)

海水介质及其边界条件的复杂多变性,导致了声波在海水中传播规律的复杂多样性。如何快速、准确完成水声传播计算,为水声传感器提供实时、大范围、长时间序列水声传播信息支持,对优化和完善水声传感器的设计和使用具有重要的意义。随着多核技术的快速发展,以多核处理器为计算核心的对称多处理(Symmetrical Multi-Processing,SMP)集群成为应用最为广泛的高性能计算平台。SMP集群将“分布式内存结构”和“共享式内存结构”两种并行系统架构结合在一起,既克服了SMP可扩展性差的缺点,同时又具备集群高效通信的优点,更适合采用节点内内存共享、节点间消息传递的多级混合并行编程模型[1-2]。在水声传播模型的并行计算方面,国内科研人员做了大量的工作,王鲁军等[3]利用共享存储(Open Multi-Processing,OpenMP)并行编程环境,在个人计算机上实现了抛物方程模型的并行计算,孙雪海等[4]研究了基于图形处理器(Graphics Processing Unit,GPU)的水下三维声场快速预报方法,张朝金等[5]利用多线程技术实现了射线模型的并行处理,范培勤等[6]利用消息传递+共享内存(Message Passing Interface+Open Multi-Processing,MPI+OpenMP)混合并行编程模型,开展了水平不变声道中WKBZ简正波模型的并行计算方法研究,这些工作大多围绕着水声传播模型本身的并行处理开展,力求实现单次水声传播计算的快速求解,难以直接应用于大范围海洋水声传播产品的快速预报。本文基于SMP集群,使用波束位移射线简正波模型(BDRM)模型,采用MPI+OpenMP二级混合并行编程方法,通过在经纬度方向进行大粒度二级并行划分,开展了大范围水声传播产品并行预报技术研究,并结合水声传感器对环境保障信息的具体需求,实现了水声传播产品的快速预报。

1 MPI+OpenMP混合并行编程模式

多核处理器技术的快速发展,极大地促进了SMP架构计算机的普及。SMP并行机具有通信开销小、易于编程等优点,但受硬件架构的限制,其处理器的数量通常不能超过100个,且随着规模的增大,数量众多的处理器在同时访问共享内存时容易引起内存冲突,并会造成内存访问带宽严重不足,极大限制了SMP并行机的可扩展性;MPP和COW的特点是基于分布式存储,具有良好的扩展性,但存在处理器之间的通信开销较大、编程困难等问题[7-8];SMP集群是多核技术和集群技术的完美结合,一方面,节点内多个多核CPU,确保每个节点都具有较高的处理能力;另一方面,节点之间使用专用高速计算网络进行通信,提高了节点间通信速度。SMP集群,在保证高性能的同时,具有更高的可扩展性和更强的连通性,使之成为当今高性并行计算机的主流架构。

SMP集群这种多层次体系结构特点,决定了其可以采用消息传递并行编程模式与内存共享并行编程模式混合编程模式来更高效地解决实际应用问题。此时,节点间可以采用基于消息传递,完成粗粒度的任务并行化划分,通过通信可以轻易地实现节点之间的数据传递和共享;节点内采用基于共享内存编程模式,可对节点分配的任务进一步细化并行,实现细粒度的并行处理。从而实现编程环境与硬件结构的有机融合,最大限度发挥这种层次化结构的优势,有效提高并行系统的运行效率和可扩展性[9-11]。MPI+OpenMP混合并行程序执行流程如图1所示。

图1 MPI+OpenMP混合并行程序执行流程图

2 海洋水声传播产品混合并行算法的设计与实现

海洋水声传播产品的计算,主要围绕经度和纬度方向上的二重循环开展,在计算过程中不需进行数据交互[12],如图2所示。本文先使用MPI消息传递的方式实现水声传播产品的并行预报,在此基础上结合OpenMP共享内存方式,实现二级混合并行预报。

图2 海洋水声环境参数计算过程

2.1 基于MPI的水声传播产品并行预报

2.1.1 算法的设计 如上所述,海洋水声传播产品的计算主要围绕着预报海区在经度和纬度两个方向上的循环开展,基于MPI的并行实现主要围绕着二重循环的并行划分进行,其并行实现相对简单,具体如下。

第一步:环境变量初始化。调用MPI_INIT函数,完成MPI的初始化,通过MPI通信函数完成初始数据同步操作。

第二步:任务并行划分。将预报海区按照纬度方向均匀划分为与进程数相等的相同大小的子海区,并分配给具体进程。

第三步:计算结果收集。调用MPI_REDUCE聚合通信函数,将计算结果收集到进程0。

2.1.2 算法的优化 并行算法的设计和实现都相对简单,但可能存在可扩展性差、负载不均衡问题,这主要由以下原因引起。

(1)预报在经纬度两个方向开展,单个方向循环次数有限,以全球区域为例,按5'×5'的分辨率,经度方向网格为4 320个,经度方向为2 160个,最多可用4 320个进程运行此程序,严重影响可扩展性。

(2)每个子区域中海洋所占的面积不同:在计算开始时首先会判断计算任务所在位置是否为陆地,如为陆地则直接跳过该次循环,由于预报区域海洋和陆地分布的不均匀性,计算海区按纬度均匀并行划分必然会导致不同进程所分配的计算量不一致,特别是当进程数较多时,负载不均衡问题会更加突出。

(3)不同子区域海水深度不一致:每个节点的计算量除与陆地面积所占比例相关外,还与分配的计算任务区域内海水深度直接相关,通常水深越大,计算量越大,水深分布的不均匀性也会造成严重的负载不均衡。

针对以上问题,主要从以下3方面对算法进行了优化:(1)将经纬度方向上的二重循环调整为一重循环,从而提高程序的并行性;(2)将陆地从预报海区中剔除,对剩余区域重新排序;(3)以剩余区域平均水深值作为第一级并行任务划分的标准,尽量使每个进程所分配的计算区域的平均水深与区域平均水深值相等。

2.2 基于MPI+OpenMP的水声传播产品混合并行预报

2.2.1 并行算法设计 第一步:环境变量初始化。完成环境场数据初始化,通过MPI完成初始场数据同步。

第二步:第一级并行(MPI)。将重新排序后的预报任务按水深平均值均匀划分为与进程数相等的子任务,通过MPI消息传递接口,将子任务分配给对应的计算节点。

第三步:第二级并行(OpenMP)。每一个节点OpenMP接口的初始化,设定for制导语句,启动多线程,完成具体经纬度点的水声环境参数计算,计算完成后线程退出。

第四步:计算结果收集。计算完成后,调用MPI通信函数,将计算结果收集到某一节点。

该算法首先调用MPI接口,实现计算任务在计算节点上的粗粒度划分,然后在计算节点上调用OpenMP,启动多线程,以共享内存的实现具体位置点的水声环境参数的预报,进程数量减少到原来的(Nc为单计算节点配置的CPU总核数),有效降低了进程规模,减少了MPI进程初始化所需要的时间和进程间通信的次数。计算流程如图3所示。

图3 海洋水声环境参数预报混合并行算法计算流程图

2.2.2 算法实现 海洋水声传播产品并行预报算法的实现主要围绕着初始场数据预处理、循环的优化、并行任务的二级划分等具体编程实现开展。

(1)初始数据场处理

海洋初始场数据文件通常在几千兆到几十千兆,直接写入内存,会占用大量资源。另外,陆地区域在整个预报海区中占有较大比例,会严重影响并行任务划分的负载均衡。因此,必须对初始场数据和预报海区进行预处理,尽可能减少对内存的占用,并保证各计算节点内负载分配均衡。

① 数据读取

为减少内存的占用量,同时避免多个进程同时读写初始场数据文件影响系统的I/O性能,在程序设计时,指定一个进程对初始场数据进行读取和处理,处理完成后调用MPI通信函数,将指定的数据分配给对应进程。

② 陆地剔除

陆地区域在整个预报海区中占有较大比例,在串行程序的计算过程中,可以通过对水深的判断来确定是否为陆地,使用continue或break等语句来跳过陆地区域相关参数的计算,可有效地减少计算量。并行计算过程中,这虽然不会增加额外的计算量,但由于计算任务仍在总的循环过程中,极易造成进程任务负载不均衡。本文在进行初始场数据处理时,首先对陆地区域进行筛除,然后对剩余的区域进行重新排序,并记录排序前后的对应关系,最后对重新排序后的计算任务进行并行分配。

③ 数据共享

初始声速场处理完成后,通过调用MPI通信函数,将声速场数据发送至其他进程,确保各进程初始数据一致。

(2)循环优化

为提高计算任务的并行度,将经度和纬度方向上的二重循环改为一重循环,实现过程如下所示。

优化后,总的循环次数没有改变,但任务的并行度可以提高至少三个数量级。

(3)子任务构建

依据计算节点数和平均水深确定各子任务循环的起点和终点,具体如下。

(4)任务并行划分

任务并行划分主要完成计算任务在节点间并行分配和节点内的并行计算两步工作,具体实现如下:

① 节点间任务并行划分

节点间任务的并行分配通过MPI实现,划分主要通过控制进程号数,将重新构建的子任务分配到对应计算节点。在实际并行划分过程中需要结合进程数和测试情况,对平均水深进行适当调整,尽可能达到负载均衡,减小程序运行时间。

② 节点内任务并行计算

节点内任务的并行计算通过调用OpenMP模式的for并行编译制导语来实现,如下所示。

OpenMP并行编程的实现相对简单,但要处理好变量的共享和私有以及变量在进入和退出并行域边界的拷贝等问题。

3 算法测试与结果分析

利用海军潜艇学院超算平台对混合并行程序进行了测试,该平台共有314个计算节点,单节点配置双路V3 CPU,共24颗计算核心,内存128 GB,计算网络采用56 Gb/s InfiniBand交换机。

3.1 测试方法

通过对比同等计算规模情况下MPI并行程序与MPI+OpenMP混合并行程序的计算时间的方法,来比较混合编程算法的优缺点。为便于表达两种模式的计算性能,测试过程中按如下原则设定进程数和线程数。

(1)在MPI模式中,单节点启动的进程数与计算核心数相同。

(2)在MPI+OpenMP模式中,单节点只启动一个进程,启动的线程数与物理核数相等。

(3)统一用核心数来表示参与计算的计算资源数量,即每一核心运行一个线程或进程。

3.2 测试结果

表1为MPI与MPI+OpenMP并行程序在集群上的测试结果。图4和图5分别为其对应的效率和加速度。

表1 MPI与MPI+OpenMP混合并行算法计算时间(s)

图4 并行程序执行效率图

图5 并行程序执行加速比图

从图4和图5可以看出,随着参与计算核心数的增加MPI+OpenMP程序具有更高的并行效率,其加速比基本呈线性增加,比MPI程序具有更好的扩展性。MPI+OpenMP混合编程模式通过节点内共享内存和节点间消息传递的方式,可有效地解决功效能存模式难以扩展和消息传递模式下进程通信开销较大的难题,其计算性能和可扩展性远高于单一编程模式的计算结果。

4 结 论

本文采用MPI+OpenMP混合并行编程模式,实现了海洋水声传播产品的快速预报。测试结果表明,该方法将SMP集群的体系架构与并行编程模式结合起来,充分发挥MPI与OpenMPI各自的优势,大幅降低水声传播产品的预报时间,为海洋环境大规模并行预报问题的快速高效处理提供一种解决思路,下一步计划开展海洋-声学耦合预报混合并行处理方法的研究。

猜你喜欢
水声进程内存
水声单载波扩频均衡技术研究
一种适用于水声通信的信号水印认证技术
债券市场对外开放的进程与展望
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
改革开放进程中的国际收支统计
认知水声通信系统中OFDM技术的应用
新型多功能水声应答器电子系统设计
内存搭配DDR4、DDR3L还是DDR3?
社会进程中的新闻学探寻