范培勤,过武宏,韩 梅,唐 帅,张 驰
(1.海军潜艇学院,山东 青岛 266199;2.青岛海洋科学与技术试点国家实验室,山东 青岛 266000 )
海洋水声环境主要指声音在海水中传输的信道环境,由海水声速垂直结构、声吸收、界面特性和海洋内部不均匀性等要素构成。声波是目前唯一有效的水下远距离信息传输载体,由于海洋水声环境具有强烈的时空易变性,从而引起水声信息传输信道的改变,进而显著影响到水声装备的使用和性能发挥[1]。因此,为实现水声装备与水声环境的最佳匹配,优化水声装备的使用,迫切需要利用温盐流等基础海洋环境数值预报数据,结合水声装备的具体需求,开展海洋水声环境特征参数的快速预报,为水声装备的使用提供时效更长、准确率更高、范围更广的水声环境预报产品。随着海洋环境数值预报能力的快速提高[2,3],三维温盐流数值预报产品[4]的范围、分辨率和精度都有了大幅提升,如何将海洋数值预报产品快速转化为水声环境产品,为水声装备的有效使用提供大范围、长时间序列、高分辨率和精细化水声环境辅助决策支持成为亟待解决的问题。
针对上述问题,本文基于SMP集群,采用MPI并行编程方式[5],完成了水声环境参数并行计算程序的设计和实现,围绕程序运行中存在的负载不均衡问题,对计算任务并行划分方法进行了优化和完善,有效改善了程序负载均衡性,大幅提高了水声环境特征参数的预报能力。
海洋水声环境特征参数的快速预报,主要基于高性能计算机和三维温盐流数值预报结果,结合水声装备的技术指标和使用要求,利用水声环境特征参数计算模型,实现声速剖面分类,跃层强度和深度等特征参数的快速计算,为水声装备的合理使用和优化设计提供水声环境辅助决策信息。水声环境参数的预报主要围绕经度和纬度方向上的两重循环开展,每一个位置点获取相应的温盐流等环境数据后,利用特征参数计算模型便可以开展计算,不同循环间基本不存在数据交换,其并行处理主要针对经度和纬度方向上的两重循环的并行划分进行,实现过程相对简单。本文基于MPI并行编程环境,设计开发了水声环境特征参数并行预报程序,并对程序进行了性能分析和测试。
水声环境参数并行预报的计算流程如图1所示。其主要计算过程如下所示:
第1步:调用MPI_INIT函数,完成MPI的初始化。
第2步:为提高并行度,将经度和纬度方向上的两重循环改为一重循环。
第3步:利用MPI,按照均匀划分方法,将预报区域分配至不同进程,然后各进程从数据文件中读取相应位置的初始场数据,开始计算。上述过程实际是将预报区域按纬度由低向高均匀分区,然后分配至不同的进程进行计算。
第4步:计算完成后,调用MPI_REDUCE(),将结果收集到某个进程,并输出,计算完成。
Figure 1 Flow chart of underwater acoustic environment parameters parallel forecasting图1 水声环境参数并行预报流程图
并行程序的性能主要受串行程序开销、I/O开销、进程通信开销和任务负载均衡等几个因素的影响[6,7],表1给出了上述4个因素对并行程序性能影响的分析。
Table 1 Performance analysis of parallel program表1 并行程序性能分析
综上所述,该并行程序中的I/O开销、通信开销和负载均衡等方面可能会对程序的性能有较大影响。
本文利用海军潜艇学院超算平台对海洋水声环境参数并行预报程序进行了测试,该平台共314个计算结点,单结点配置双路V3 CPU,24颗计算核心,内存128 GB,计算网络为InfiniBand 交换机(56 Gb/s)。
表2给出了分别用1 200,2 400,4 800个进程执行程序时所花费的时间,图2分别为其对应加速比。
Table 2 Computing time of parallel program表2 并行程序计算时间
Figure 2 Speedup of parallel program图2 并行程序加速比
单纯地从表2和图2来看,其加速比基本呈线性增长,进程数为2 400时加速比甚至出现了超线性现象。为进一步优化程序的并行性能,本文分别从I/O、通信和负载均衡3个方面进行测试分析。表3给出了I/O和通信消耗时间的测试结果。
Table 3 Consumption time of I/O and communication表3 I/O和通信消耗的时间
从表3可以看出,随着进程数量的增加,I/O和通信消耗的时间逐渐增加,特别是I/O所消耗的时间,对并行程序整体性能有一定影响,但影响有限。
为分析程序负载分配的均衡性,表4给出了上述3种情况下并行计算部分消耗的时间。
Table 4 Computing time statistics of parallel program表4 并行程序计算时间统计
从表4可以看出,该程序负载不均衡问题十分严重,部分进程甚至没有分配到有效计算任务,最长计算时间均比最短计算时间高出4个以上数量级。
通过以上测试可以看出,在I/O性能、通信性能和负载分配这3个因素中,I/O性能和通信性能对该程序的并行性能影响不大,负载分配不均衡是主要影响因素。因此,并行性能的提升也应主要围绕着并行任务的划分进行优化和完善。
由以上分析可知,水声环境参数并行预报程序存在严重的负载不均衡现象,且由于采用阻塞通信方式,在很大程度上降低了通信和计算的并发性,本节将从这2个方面对程序进行优化完善。
2.2节中曾指出,由于不同纬度上陆地所占面积和海水深度存在差异,计算任务按纬度均匀划分可能会导致负载分配不均衡问题,仿真结果也验证了这个结论。图3给出了预报区域不同纬度陆地点个数的分布情况。
Figure 3 Number of non-land point at different latitudes in forecast region图3 预报区域不同纬度非陆地点个数
从图3可以看出,随着纬度的增加,海洋面积所占的比例呈逐渐减小趋势,计算任务按纬度均匀分区,必然会造成有效计算任务随进程数的增加逐渐减少,进程的计算时间也会随进程数的增加逐渐缩短,从而导致负载分配不均衡。因此,并行任务应按照对预报区域中海洋面积进行均匀分区的原则进行划分,将区域中有效计算任务均匀地分配至每个进程。算法主要步骤如下所示:
第1步 变量声明:预报区域总栅格点数记为N_All、海洋栅格点数记为N_Ocean、进程数记为NP、进程号记为np、进程np分配的海洋栅格点数记为N_np。
第2步 初始场数据处理:利用水深数据对统计预报区域逐栅格点进行处理,剔除陆地栅格点,记录海洋栅格点的总数N_Ocean,记录下排序前后海洋栅格点的对应关系。排序后参与计算的栅格点数减少近一半,整体对内存的需求也会下降一半。因此,数据读写和进程间的通信时间也会有大幅下降。
第3步 if 0≤np≤NP-2:N_np=N_Ocean/NP;
第4步 ifnp=NP-1:N_np=N_Ocean-(np-1)*N_np。
表5给出了优化后程序的计算时间统计表,图4为其对应的加速比图。表6给出了3种情况下计算时间统计分析情况。
Table 5 Computing time of parallel program after optimization表5 优化后并行程序计算时间
Figure 4 Speedup of parallel program after optimization图4 优化后并行程序加速比
Table 6 Computing time statistics of parallel program after optimization
从表5、表6和图4可以看出,优化后并行程序计算性能有了明显提升,计算时间整体下降约20%,其加速比基本呈线性增长,各进程计算时间的均方差下降近1个数量级,时间的离散程度有了明显改善,负载分配不均衡问题得到了很大的改善。
为进一步分析程序负载分配情况,对3种情况下进程计算时间进行了分析,图5~图7为计算时间的散点分布情况。
Figure 5 Computing time distribution of 1 200 processes图5 1 200个进程计算时间分布
Figure 6 Computing time distribution of 2 400 processes图6 2 400个进程计算时间分布
Figure 7 Computing time distribution of 4 800 processes图7 4 800个进程计算时间分布
从图5~图7可以看出,3种情况下约2/3进程计算时间曲线基本呈水平分布,后1/3进程计算时间仍有明显的变化,负载不均问题仍然比较突出。
为找到造成上述现象的原因,本文对计算任务在进程的分布情况进行进一步分析。按照上面的任务划分方法,后1/3的进程分配到的计算区域为整个预报区域中海洋面积的后1/3,约为北纬30°以北区域(见图3),通过对水深数据统计发现该区域平均水深较深(见图8),约为其他海区水深的2倍,且水深变化剧烈。水声环境特征参数的计算过程中会大量地调用水声传播模型,而水声传播模型的计算量与水深有关,水深越大,水声传播模型的计算量就越大。因此,在分配同样数量海洋栅格点的情况下,后1/3进程的计算时间要更长,从而造成负载不均衡。
Figure 8 Average water depth at different latitudes in forecast region图8 预报区域不同纬度平均水深深度分布
鉴于此,为缩短后1/3进程的计算时间,尽可能达到负载均衡,本文对任务并行划分步骤的第3、4步进行了调整,具体步骤如下所示:
(1)np<2*NP/3:
N_np=f(np)*(N_Ocean)*NP/3
(2)np≥2*NP/3:
其中,
通过对参数a,b进行调整,便可完成对负载分配的控制。表7给出了a=0.08,b=0.05时,并行程序的计算时间统计,图9为其加速比图。
Table 7 Computing time of parallel program when a=0.08,b=0.05表7 a=0.08,b=0.05时并行程序计算时间
Figure 9 Speedup of parallel program when a=0.08,b=0.05图9 a=0.08,b=0.05时并行程序加速比
从表7和图9可以看出,并行程序计算性能有了进一步的提升,其计算时间较首次优化缩短了约50%,其加速比基本呈线性增长。表8是3种情况下计算时间统计分析表。从表8中可以看出,进一步优化后计算时间的离散程度进一步减小,负载均衡性得到了进一步提升。
图10~图12为计算时间散点分布情况图,从图中也可以看到,采用上述优化方法后,各进程计算时间基本呈水平分布,计算时间大幅缩短,负载不均衡问题得到了较好的解决。
Table 8 Computing time statistics of parallel program when a=0.08,b=0.05表8 a=0.08,b=0.05时并行程序计算时间统计
Figure 10 Computing time distribution of 1 200 processes when a=0.08,b=0.05图10 a=0.08,b=0.05时1 200个进程计算时间分布
Figure 11 Computing time distribution of 2 400 processes when a=0.08,b=0.05图11 a=0.08,b=0.05时2 400个进程计算时间分布
Figure 12 Computing time distribution of 4 800 processes when a=0.08,b=0.05图12 a=0.08,b=0.05时4 800个进程计算时间分布图
并行程序开发和性能优化是一项非常复杂的工作,需综合考虑高性能计算机体系结构、编程环境、应用问题和开发人员等多种因素的影响,详细分析算法的I/O性能、通信性能和任务划分等对性能的影响,找到影响性能提升的瓶颈,有针对性地开展优化。优化过程中既要对算法的整体结构进行粗粒度的完善,又要针对影响性能的具体问题进行细粒度优化,有时甚至需要细化到某一个具体进程,往往需要多次迭代才能获得一个较好的结果。本文基于MPI实现了水声环境特征参数的并行预报,从I/O性能、通信性能和并行任务划分方法等方面对并行程序的性能进行了分析和优化。针对并行程序负载不均衡问题,采用按有效计算任务进行均匀划分的原则,综合考虑海洋栅格点数和水深对计算量的影响,对并行任务的划分方法进行优化和完善,有效提高了负载均衡性,大幅提高了水声环境特征参数数值预报能力。本文工作对大规模、长时间序列、数据耦合度低的应用问题并行程序设计和优化具有一定的参考价值。