APP下载

基于四阶龙格-库塔法的多弹道并行计算研究

2024-12-18范磊周琳

航空科学技术 2024年9期

关键词:弹道计算; 微分方程; 并行运算; 龙格-库塔法; 多核多线程技术

弹道学主要研究各种弹丸或抛射体从发射起点到终点的运动规律及伴随发生的有关现象[1]。作为弹道学的一个分支,计算弹道学通过对实际弹道问题建立数学模型,利用高性能计算设备对弹道学中的各种现象与规律进行数值计算和仿真分析,已成为武器火力系统计算机辅助设计的重要基础,为武器的总体论证及性能预测提供了必要的数据[1-5]。为了提高复杂的导弹诸元和弹道计算任务的执行效率,通常采用并行计算技术[2-5],通过将大型计算任务分解为多个子任务在多个并发处理机上进行运算,利用多核计算设备和并行计算技术可以有效地缩短任务解算时间。

为了提高弹道解算效率,科研人员利用数值模拟技术开展了许多研究工作[2-11]。对于弹道并行运算的研究,廉灿国等[2]在并行计算导弹诸元时提出了线程池的技术,即在积分函数的调用次数较多的情况下使用多个线程的线程池来减少计算时间,虽然相对提高了并行弹道计算的速度,但频繁地进行线程创建和销毁会耗费大量时间。潘艇等[3]提出了通过现场可编程门阵列(FPGA)实现并行数据处理从而提高弹道解算速率,但是主要针对火控解算中求解微分方程组的速度和精确度等进行设计,未考虑硬件之间的数据通信带来的影响。钟新玉等[4]提出了基于信息传递接口(MPI)的弹道仿真的并行计算方法,主要侧重于通过减少并行计算进程之间通信量和通信次数来加速解算时间。鲜勇等[5]在弹道并行计算的设计中提出了面向对象的思想进行弹道解算,即通过将导弹在飞行过程中受到的影响因素进行对象划分后赋予各个对象不同的性质从而计算出不同的弹道。王镒磊等[6]基于迫击炮内弹道模型提出了一种内弹道优化设计方法并采用多目标遗传算法进行求解,以提高优化设计效率。黄玉才[7]针对高超声速弹箭建立了外弹道数学模型。徐晓东等[8-9]基于MPI研究了诸元和弹道并行计算的并行计算模型和实现方法,并针对远程弹道导弹扰动引力计算设计了利用多台计算机的并行计算模型。秦小丽等[10]针对巨型规模的火箭弹最优弹道解算问题建立了一种并行求解模型。由于计算硬件或系统内部进程之间的数据交互和通信通常会额外花费大量的时间,会极大地影响加速效率,尽管以上研究尝试利用并行计算技术提高弹道计算速度,但仍需要进一步研究加速架构与解算任务之间的耦合关系。杨帆等[11]研究和分析了导弹武器系统动力学性能与武器系统总体参数之间的定量关系,并讨论了提高导弹精度的新方法。除弹道计算领域外,数值计算和模拟分析技术在其他工程应用领域中发挥着日益重要的作用[12-13]。

本文针对多弹道计算问题设计了基于Visual C++异步编程的多线程多核并行运算架构,通过对多弹道计算任务的划分和调度实现了多核多线程并行化运算,通过仿真试验测试了所设计的并行运算架构在多弹道解算中的性能,并将串行计算和并行计算进行对比,来验证并行运算方法的有效性。

1 弹道解算

1.1 弹道解算概述

诸元与弹道计算[1]是指弹道导弹发射前,根据实际发射条件和武器系统状态计算出一条由发射点到目标点的理论弹道,如图1 所示,并以该弹道为基准,为导弹的控制系统、瞄准系统和弹头系统等计算并制定一整套基准参数,确保导弹实际发射后能基本沿着选择的弹道飞行,并以要求的精度命中目标[14]。这些参数包括自射出点起计算的弹丸飞行时间、弹丸质心在地面坐标系中的坐标、质心速度的大小,以及矢量与水平面的方向倾角等,可简要概括为射程、最大弹道高、初速、落速、射角、落角和飞行时间等。此外,弹道计算在实际中有广泛的应用,如射表编拟[15]和火控计算[16]。在火控系统设计中,弹道解算器按照弹种和激光测距仪测到的目标距离自动装定表尺,同时控制稳定器在高低向自动抬炮。因此必须有计算弹道的数学模型作为基本依据,使得在射击中的实际弹道与弹道计算结果足够准确符合。

1.2 弹丸质心运动方程组

本文基于以下基本假设:(1)弹丸在全飞行过程中,迎角为0;(2)弹丸的质量分布是轴对称的;(3)弹丸质心运动环境中地表为平面并且重力加速度大小不变且垂直向下;(4)地球自转产生的科氏加速度为0;(5)气象环境为标准大气条件、无风力作用等,研究了弹丸质心运动,建立了弹丸质心运动方程组。

2 四阶龙格-库塔法

通过迭代求解微分方程进行弹道计算,首先依据初始值计算出标准的弹道以及落点与目标点之间的偏差,然后根据偏差依次修正迭代的初始值,直到落点的偏差在允许的范围内则停止修正。本文采用龙格-库塔法迭代求解微分方程,龙格-库塔方法是一种在工程上应用广泛的高精度单步算法,由于此算法精度高,需采取措施对误差进行抑制,因此其实现原理也较为复杂。该算法源于欧拉公式,算法原理如下。

由于四阶龙格-库塔法通过四步分段逼近微分方程组的解,在一个求解步长h 内可以逼近较复杂的曲线,因此能够取得较高的计算精度,其截断误差可以达到O(h5),该算法当前每一步的求解都需要其上一步的求解结果,通过迭代得到最终结果。

3 基于四阶龙格-库塔法的多弹道并行计算架构

3.1 多弹道并行解算

并行计算是指将一个应用分解为多个子任务分配给并行机上不同的处理器,各个处理器之间相互协同并行地执行子任务,从而达到加速求解大规模应用问题的目的[5]。随着计算机硬件的发展,CPU核数的不断增加,要体现多核在并行计算上的优势,需要在问题建模、算法构造以及程序实现等阶段进行有效设计以充分利用多核高性能硬件资源的并行效能。

本文在多核环境下利用多核多线程并行计算技术来解决多弹道并行计算问题,以保证在给定精度要求的前提下能够在规定的时间内完成多弹道解算任务,图2 为多弹道并行化流程图。为保证在尽可能短的等待时间内完成解算任务,算法需要对每个弹道解算任务进行评估和调度。弹道计算的初始参数包括射击起始点坐标、弹丸初始速度、弹丸直径和射角。

弹道计算通常对运算速度和精度具有较高的要求,特别是在整个弹丸发射过程中,相等时间间隔内弹丸的位置变化规律并不固定,而是一个间隔持续变化的过程,因而需要不断地对弹丸的轨迹进行迭代和修正计算。利用龙格-库塔法进行多弹道解算,微分方程数目较多并且迭代运算复杂,属于计算密集型计算任务。如果使用串行计算策略,运算时间会随着计算精度和弹道数目的增加而急剧增加,从而因耗时过长而导致无法满足实际需求。为了提高求解微分方程的迭代速度,在多核环境下采用并行计算多条弹道的方式来减少解算任务的迭代时间,即对多弹道的计算数据进行分解,将非必须串行化的部分分开到多个并行的核上进行计算,从而达到加速计算的目的。

3.2 基于多核多线程的并行多弹道解算

采用多核多线程并行计算技术将不同弹道计算数据进行分解,根据弹道参数将相互之间变量关联密切的弹道分配为同一个子线程并调度至相应的处理器内核中。如图3 所示,初始参数设置完成后,为了实现多核多线程并行结构,将不同弹道计算任务进行分解,将相互之间关联变量多的弹道分配为同一个子线程,可以缩短计算时间和平衡负载。在每一个子线程的执行过程中,迭代求解在某种环境因素下的微分方程,最后接收并输出弹道计算结果。将子线程调度至处理器内核后,主线程可以根据参数关联情况将解算任务分配至相应的子线程,而该子线程无须为新分配的解算任务开辟计算空间,同时,线程之间是异步并行的,每个子线程完成解算任务后便可以将结果传递给控制器。

在算法执行过程中需要将多个弹道解算任务映射到不同的内核线程中,以提高解算效率。不同的弹道会被分配到不同的线程中,通过异步调用可以避免同步等待结果和阻塞主线程,线程返回的响应结果暂存至缓存,在需要时可直接获取结果,但获取结果的过程会阻塞主线程,如图4所示。

在混合线程系统中多线程之间主要存在两种竞争:进程竞争和系统竞争。进程竞争是指线程与相同进程内的其他线程进行竞争,系统竞争是指线程与系统进程内的线程进行竞争。弹道计算线程如图5 所示。如进程A有4 个线程,对应4 条待计算的弹道,进程B 有2 个线程,对应2条弹道,系统有4 个CPU核心。由于进程A的前三个线程使用了内核1 和内核2,这三个线程会在进程A 内竞争。而进程B的一个线程和进程A的一个线程共用内核3,这两个线程会在系统范围内竞争。解决这些竞争需要在执行计算任务之前进行合理地调度,每个线程可以设置与主线程不同的调度策略和优先级。混合线程分配方式如图6所示。根据弹道初始参数估算弹道解算的计算量,首先利用式(6)计算弹丸飞行时间t,然后根据飞行时间t 利用式(7)估算弹丸质心的最大飞行距离xmax。因此,弹道解算的计算量可估算为E » xmax /h。本文基于轮询调度策略均衡内核负载,详细调度策略如算法LBS所示。

4 仿真试验与结果分析

本文试验采用了三组不同的弹道(参数见表1、轨迹见图7)对所设计的基于四阶龙格-库塔法的多弹道并行计算架构进行仿真验证,并对计算架构的性能进行测试和分析。

在不同的弹道发射初始值下,得到基于四阶龙格-库塔法计算的弹道轨迹,如图7 所示。其中,图7(a)为对弹道1设置不同的射击高度所得到的弹丸轨迹,图7(b)为对弹道2设置不同的射击角度而得到的弹丸轨迹,图7(c)为对弹道3设置不同的初始速度而得到的弹丸轨迹。从图7 可以看出,初始速度和射击角度影响弹丸飞行的垂直高度和落点的水平距离,而在实际应用中弹丸飞行时所受的空气阻力还受到弹丸直径的影响,因而可以自由设置多组参数来解算对应的轨迹。

为了评估多弹道并行计算架构的有效性,在仿真试验中随机采用不同参数下的试验1~3 分别组成10 弹道、20 弹道、26 弹道、35 弹道以及50 弹道进行解算,分别采用多线程并行计算、多核多线程计算以及串行计算对多个弹道进行计算和试验对比。表2 为采用不同计算策略的多弹道计算仿真试验结果。由表2 可以发现,对于计算量较小的弹道计算,并行计算所使用的计算时间相较于串行计算并未产生较大提升,然而对于计算量较大的弹道计算,并行计算结果明显优于串行计算,从而验证了多弹道并行计算的有效性。通过对比单核多线程并行计算和多核多线程并行计算所使用时间,可以看出对于计算量较小(步长较大)的弹道解算任务,多核并行计算所花费的时间与多线程并行计算基本相近。但对于计算量较大(步长较小)的弹道计算任务,多核并行计算花费的计算时间少于多线程并行计算(见图8和图9)。

从图8 可以看出,对于计算数目较小的多弹道并行化计算,多线程并行方法不能对程序提升较大的速度,相反可能由于线程之间的阻塞会导致计算过程变慢,而多核随机分配的过程是通过将计算过程中的多个弹道随机分配到空余的CPU内核中,因此计算速度并不会受到太大影响。

从图9 可以看出,在步长缩短到0.01 时,计算量随之增大,此时多线程以及多核等并行化方法相较于串行计算方法,计算速度明显加快,计算时间降低了50%。随着计算量的增加,计算速度减少的比率更高。如图10 所示,在不同步长下,并行计算策略明显优于串行计算。

在相同弹道数的情况下,试验测试了弹道解算时间随步长变化的对应关系,试验中分别采用20、35 和50 条弹道对弹道2 进行并行计算,结果如图11 所示。随着步长的增加,解算时间快速减少,验证了本文所设计并行计算架构的有效性。

为了进一步测试本文所设计并行计算架构的稳定性,在复杂计算环境下对由图7 中所示弹道随机组合的多弹道进行了解算试验,复杂计算环境设置为处理器在处理弹道解算任务时同时处理其他事务,试验中通过多次运行统计了所花费计算时间的平均值和方差,试验结果如图12 所示(红色为并行计算,黑色为串行计算)。试验结果显示,本文所设计的并行计算架构受运算环境的影响较小,具有较高的稳定性。

5 结束语

本文设计了基于多核多线程的多弹道并行计算架构,为了充分利用多核处理器实现弹道解算加速,在并行计算中将多弹道解算任务映射为可异步执行的并发多线程任务,并且根据弹道初始参数对计算任务进行划分,然后通过调度将各线程分配至多个处理器内核,从而实现了多任务的异步并发执行。试验验证了所设计的多核多线程并行计算架构在多弹道计算实例中可以显著提高多弹道计算速度,且随着弹道数目逐渐增加,并行计算性能明显优于串行计算策略。因此,利用多线程技术可以有效地改进多弹道解算效率。由于国内特殊计算装备对计算性能的高要求,在诸多弹道计算中采用并行化技术可以有效提高弹道计算时间和设备快速反应能力。