计算仰角_论文精选|并行计算在机动飞行轨迹生成中的应用

0f67b1c703803265c2709ec6d58b6e83.png

摘要

针对现有通用机动轨迹需要较长的预规划时间,无法在机载计算平台实时解算的问题,提出一种利用并行计算的方式对通用机动框架进行加速的方法。对现有的MCTS算法叶子节点并行、根节点并行和树并行方式进行分析,结合叶子节点并行和根节点并行方式各自的优点,对每棵搜索树采用叶子节点并行方法,分别利用Pthread和CUDA对并行通用机动框架进行加速,并以筋斗机动为例对加速效果进行测试。实验结果表明:并行通用机动框架不仅性能优于串行框架,而且可大幅缩短机动解算时间。

来源

《兵工自动化》2020年第08期并行计算在机动飞行轨迹生成中的应用
作者:蒋超,王维嘉,王昊
单位:航空工业西安飞行自动控制研究所飞控部,西安 710065

引用格式

蒋超,王维嘉,王昊.并行计算在机动飞行轨迹生成中的应用,2020,39(8):25-31,36.
欢迎引用,谢谢!

0

引言

采用强化学习的思想,基于MCTS(蒙特卡罗搜索树)算法的通用机动控制框架在无人机动作空间反复试错,最终搜索出一条能实现期望的机动参考轨迹。该框架充分挖掘了无人机的机动潜能,有利于无人机更好地完成既定任务。由于MCTS算法是一种基于大量仿真抽样的搜索算法,需要较长的预规划时间,导致通用机动框架无法在机载计算平台实时解算;因此,笔者对该飞行机动轨迹框架的实时性进行改进。

1

现有的通用机动控制框架

现有的通用机动框架以MCTS算法为核心,由飞机模型、控制律模型、抽样器、评价器、决策器等部分组成。其系统结构如图1所示。

c4a4c0bace756b1c4e2a0e9a46edca33.png

通用机动框架各部分作用如下:

1)飞机模型:该部分为一个六自由度飞机数字模型,需要加载飞机气动数据。利用飞机当前状态,插值得到飞机气动系数,从而计算得到气动力与气动力矩。根据飞机动力学方程,可计算出飞机运动状态。

2)控制律模型:以传统的PID控制律为基础,对飞机纵向与横航向进行控制,增强飞机稳定性和操纵性,同时,对飞机飞行品质进行改善。

3)抽样器:在飞机动作空间进行抽样,获得指令序列,抽样方法选择随机抽样。

4)评价器:对抽样得到的每一个指令序列进行评价,利用评分函数计算该指令下飞机状态序列对应的分值。

5)决策器:在所有抽样指令序列集中选取评分最高的指令序列作为飞机实际的控制指令。

针对给定的机动动作,通用机动框架确定相应的动作空间。抽样器在该动作空间进行抽样,结合现有的最优树内搜索路径,得到机动指令序列。评价器结合飞机模型和控制律模型,将该机动指令序列作为飞机模型的输入,利用数字仿真的方式,得到该机动指令下飞机在飞行过程中所有状态向量的变化情况,根据评分函数,计算得到该指令序列的评分值。最后,评分值将通过反向传播的方式,对最优树内搜索路径上节点的评分值进行更新。

基于MCTS算法的通用机动框架利用蒙特卡罗模拟的方法,对搜索树内新增节点评分值进行估计,其对问题解空间的搜索程度随树内节点数量的增加而增加。然而,现有的串行通用机动框架,算法每循环一次,只能对一个节点评分值进行估计,同时,每一次只能新增一个树内节点,使得算法对解空间的搜索速度较慢。以筋斗动作为例,在不加入宏动作的情况下,飞机机动时间30 s,机动解算步长设置为0.02 s,机动指令序列采样时间为0.1 s,搜索深度为300层,对筋斗动作求解时,问题解空间大小为4300。加入宏动作后,虽可将问题搜索深度减小到20层,问题解空间大小减小为420;但短时间内,仍然无法实现对解空间的充分搜索。

2

MCTS并行化改造

MCTS并行化方法如图2所示。

d68c039985bf7de82687ee7c5432d4ad.png

2.1  叶子节点并行化

叶节点并行化最简单的一种并行化方法,主线程在树内游走,到达树内叶子节点,得到树内最优节点序列,然后为该叶子节点添加n个新节点,当该叶子节点的所有儿子节点数目小于n时,在其子节点下继续添加新节点(以上完成了MCTS算法选择和扩展步骤)。从所有新添加的节点开始,重复随机在动作空间选择动作,直到达到预设的搜索深度。将n个新节点分配给n个线程,得到所有新节点评分值。经由主线程将所有的分值依次为对应树内最优节点序列中的节点信息进行更新(反向传播)。2.2  根节点并行化根节点并行是在每个线程上构建一棵搜索树,线程之间独立工作。当到达预定的搜索时间(或搜索次数),搜索停止,将所有线程的搜索树结果进行汇总。合并后的搜索树,相同位置的节点,被访问次数为所有树相同位置访问次数之和,节点平均分数则以加权平均的方式进行计算。根据合并后的搜索树,给出待求解问题的搜索结果。这种并行方法,线程间通信量最少,实现起来比较容易。多棵搜索树在问题的求解空间多个点同时进行搜索,更容易找到全局最优解。2.3  树节点并行化树节点并行方法只构建了1棵共享的搜索树,多个线程同时对搜索树进行维护(更新节点信息),且分别重复进行选择、扩展、模拟、反向传播4种操作。

3

Pthread和CUDA下通用机动框架改造

在文中MCTS算法并行化的方法中,分别利用Pthread和CUDA对现有的通用机动框架进行改造,缩短框架解算时间。
3.1  基于Pthread的并行化通用机动框架改造Pthread(POSIX Threads)原本为Linux系统上实现多线程的线程接口,随着Windows系统下多线程API库的开发,使得基于Windows平台的多线程程序开发更为便捷。传统的进程只包含单个控制线程。该线程只在一个处理器核心上运行,造成多核处理器计算资源的极大浪费。多线程工作原理如图3所示,通过将一个进程的计算任务分配给多个线程,每个线程可在一个处理器核心上独立执行,可实现对多核处理器计算资源的充分利用,同时有效减少程序运行时间。

185ffa5bde5422aba328e68b4f8e44be.png

MCTS并行化算法有叶子节点并行、根节点并行、树节点并行以及笔者提出的块并行方式。新框架系统结构如图4所示。鉴于当前实验室多核处理器核心数的限制(4核8线程),笔者采用叶子节点并行的方式实现MCTS并行化。

1ad295b5df2a75bc8a9dd9da19ce01ca.png

根据MCTS算法叶子节点并行的思路,扩展阶段每次增加多个新节点,一个新节点可得到一条指令序列;因此,每一次树搜索过程,可得到多条指令序列,组成指令序列集合,再由主线程将指令序列集合分发给每个子线程。每个处理器核心上的线程对分到的指令序列进行模拟,最后将评分序列汇总到主线程。相比原有的串行通用机动框架,新框架一次可对解空间中多个点进行搜索,并对多条指令序列进行评价,提高了算法搜索速度。
3.2  基于CUDA的并行化通用机动框架改造
    基于CUDA的并行MCTS通用机动框架系统结构如图5所示。由于CPU处理复杂逻辑能力较强,并行MCTS算法选择、扩展与反向传播等过程在CPU端完成,利用叶子节点并行、根节点并行或块并行的方式,在CPU端可生成多条机动指令序列,组成指令序列集合。将指令序列集合发送到GPU端,借助GPU强大的多线程并行计算能力,利用给定的指令序列,根据飞机气动方程对飞机机动过程进行数字模拟,根据相应的飞行状态序列对该指令序列进行评分,计算出对应的指令序列评分。GPU内所有线程计算完成后,将评分结果汇总到CPU端,依次将每一条指令序列与相应评分作为反馈,对搜索树节点信息进行更新。利用GPU同时对多条指令序列进行模拟评分,有效减小了模拟过程平均执行时间,从而达到缩短框架解算时间的目的。

10dcedbacb4b59b6d4638902d7290b8d.png

4

实验验证

针对提出的基于Pthread和CUDA的并行通用机动框架,笔者分别对2种方案进行机动仿真实验,以测试并行框架搜索性能和加速效果。
4.1  Pthread加速实验
4.1.1  飞机模型

实验以开源的F16飞机为模型。
4.1.2  机动指令设置

实验中,笔者设定飞机初始状态为在3 km高度处,以230 速度做水平直线飞行,接收到机动指令后,利用基于Pthread的并行通用机动框架求解出满足机动要求的参考轨迹。

实验以筋斗指令为例进行测试。为了对每一次模拟进行评价,笔者根据机动终止状态S*制定机动评价函数如下:

05c34a73b436a3506b29c7a4d4a6b5e7.png

其中:θ为飞机俯仰角;Δx为飞机筋斗过程前飞距离;Δh为飞机筋斗过程高度变化量;Δt为筋斗过程持续时间。上述变量定义如图6所示。在实际筋斗机动中,应使Δx、Δh、Δt越小越好;因此,筋斗机动求解为一个多目标优化问题,通过加权求和的方式,赋予每个变量不同的权重k1、k2、k3。

将问题转化单目标优化问题,使得最终评价函数值feval(S*)越小越好。其中k1、k2、k3取值分别为0.000 5, 0.1, 0.1。

ceb86e2d51297f242a4e319a258bbcd9.png

由于筋斗是纵平面机动,增加油门开度和对升降舵面进行控制有益于筋斗动作的实现;因此,将飞机操纵动作空间设置为{a0  a1  a2  a3}。其中:

a0:增加油门开度,并且升降舵增加;

a1:增加油门开度,升降舵面不变;

a2:增加油门开度,升降舵面减少;

a3:回正动作,油门开度和升降舵面回到了配平值。
4.1.3  实验硬件环境

实验硬件环境如表1所示。

f9ce41fe92471d9b780967462ad76a97.png

4.1.4  实验结果分析

笔者采用叶子节点并行的方案,对基于Pthread的并行通用机动框架进行加速测试。由于CPU为4核8线程,选取线程数分别为1、2、4、8,每种情况重复实验20次,数据结果取平均值。笔者分别统计实验中评价函数值、程序运行时间和程序加速比(程序运行时间与相同搜索次数时,线程数为1的程序运行时间的比值),实验结果如表2—6所示。

24727f03bde056256a6b100ce9250544.png

754df3380e16f3b5bbc05f50f09d4f37.png

为了综合评价不同线程数对搜索算法性能影响,笔者统计了搜索次数从80~1 600实验中,不同线程数在该次实验中评价函数均值排名情况如表 2所示,利用排名总和对算法性能进行排名比较。由排名总和可看出:当线程数为2时,利用叶子节点并行的方式对通用机动框架进行加速,可提升算法性能。当线程数为4和8时,算法性能有所下降。

结合表3可知:随着线程数的增加,程序运行时间显著下降。当线程数为8时,随着树搜索次数增加(从80增加到640),程序加速比显著提高,其原因在于当树搜索次数较少时,程序总运行时间较短,多线程技术需要在内存空间初始化8架飞机实体,其时间开销占程序总运行时间的比重,随着树搜素次数的增加(程序总运行时间增加)而减小。3种线程数并行效率比较如表3所示。

表6对3种并行方式并行效率(加速比与并行度的比值)进行比较可知,随着线程数增加,程序并行效率降低。由于Pthread采用共享内存方式并行,随着线程数目增多,线程间通信时间开销增加,并且线程数越多,已经完成计算的线程等待其他线程完成计算的平均等待时间增加,导致程序并行效率降低。

4.2  CUDA加速实验

笔者利用CUDA分别就叶子节点并行、根并行以及块并行方式对通用机动框架进行加速。飞机模型和机动指令设置与Pthread实验一致。

利用CUDA就叶子节点并行的方式对通用  机动框架进行加速,总的树搜索次数分别为1 024,   2 048, 3 072, 4 096次,线程数分别为4, 8, 16, 32,每种情况运行20次,结果取平均值,框架性能变化情况如表7—9所示。

ec876434fa206f0415f56d41cf95422f.png

利用排名总和对算法性能进行比较可知,当线程数为4时,通用机动框架性能有所提升,同时,程序加速比为1.4。当线程数为8, 16, 32时,程序加速比显著提升,但通用机动框架性能随之下降。考虑到引入并行计算的目的是在保证通用机动框架性能的前提下,减小框架运行时间;因此,综合框
架性能与加速比因素,选取线程数16作为并行方式比较时,叶子节点并行方式典型代表。
4.2.1  根节点并行结果分析笔者利用根节点并行的方式,对通用机动框 架进行加速,总的树搜索次数分别为1 024, 2 048,    3 072, 4 096次,线程数分别为4, 8, 16, 32,每种情况运行20次,结果取平均值。表10-13为不同线程数时并行通用机动框架性能随树搜索次数变化情况。利用表13所示评价函数均值排名总和对框架性能进行比较可知:当线程数为8和32时,通用机动框架性能有所提升;考虑到线程数为32时,程序加速比为4.3,比线程数为8时,拥有更好的程序加速效果;线程数为32时,通用机动框架性能更优。选取线程数32作为并行方式比较时,作为根节点并行方式典型代表。

4de3b2f8be259c2a4fbab4bfd776fdf4.png

c9f1ec2fd6cff5804a7b31717bc06306.png

根并行方式需要由主线程同时对多棵搜索树进行维护。总树搜索次数不变情况下,相对于线程数为8、16和32的情况,线程数为4时,CPU与GPU通信次数增多,增加了程序时间开销。线程数较小时,程序并行度较低,GPU利用率较低;因此,当线程数为4时候,程序加速比出现小于1的情况。
4.2.2  块并行结果分析

笔者利用块并行的方式对通用机动框架进行 加速,总的树搜索次数分别为1 024, 2 048, 3 072,    4 096次,叶子节点并行度分别为4, 8, 16, 32,对应的根节点并行度为4, 8, 16, 32,对框架性能变化情况进行分析。

随着叶子节点并行度和根节点并行度的增加,程序加速比呈增大趋势。利用表14所示评价函数均值排名总和对框架性能进行比较可知,根节点并行度为4,叶子节点并行度为4时,通用机动框架性能最好;因此,选取根并行度4、叶并行度4作为4.2.3小节并行方式比较时块并行方式典型代表。

078c494e1f624089b14f73d9a3c4787b.png

4.2.3  并行方式比较前面小节分别就叶子节点并行、根节点并行和块并行方式对通用机动框架加速结果进行分析,在综合框架性能和程序加速比因素后,各选出一种情况作为该种并行方式的典型代表,分别为:线程数16的叶子节点并行方式,线程数32的根节点并行方式和根并行度为8、叶并行度为8的块并行方式。笔者分别以上述3种并行情况为代表,就叶子节点并行、根并行和块并行3种并行方式对通用机动框架性能影响进行对比,对比结果如表15—17。

e7dba6a8b06ed8640b85915ff46b040a.png

由3种并行方式在不同树搜索次数下性能变化情况可知:在树搜索次数较低时,3种并行方式能明显提升通用机动框架性能,随着树搜索次数增加,搜索结果趋于收敛。当树搜索次数为4 096次时,串行和叶子节点并行方式评价函数均值不降反增,表明2种方法稳定性不如根节点并行和块并行方式,容易陷入局部最优解。结果表明:块并行的通用机动框架性能最优,其次为根并行方式。由于块并行和根并行方式都同时构建了多棵搜索树,在机动问题解空间从多个点出发开始搜索,增大框架全局搜索能力,陷入局部最优解可能性降低。同时,块并行方式每棵搜索树采用叶子节点并行方式进行搜索,能同时对多个节点进行评价,当问题动作空间较小(筋斗动作数为4)时候,能对当前节点所有子节点进行搜索,对该分支节点开发程度较高,能以更快速度找到问题最优解。表16、表17分别就程序运行时间和程序加速比变化情况进行比较。由表16、表17可知,利用并行计算的方式能大幅减少程序运行时间。表18对3种并行方式并行效率进行比较。由表18可知:叶子节点并行效率最高,其次为根并行方式,块并行方式并行效率最低。究其原因,MCTS算法树内游走过程时间开销远大于叶子节点扩展过程,叶子节点并行每次搜索只用进行一次树内游走,叶子节点扩展时间开销较小。树并行方式每次搜索时,每棵搜索树需要进行一次树内游走,且只扩展一个叶子节点,相对于叶子节点并行方式,树内游走次数更多,程序时间开销增加导致程序并行效率较低。块并行方式同根节点并行一样,同时开发多棵搜索树,程序并行效率同样较低。

25fa7d4e4968bfac24a10db19ed6102b.png

4.3  最大加速比测试

由实验可知:块并行的并行通用机动框架性能最优,为此,笔者利用块并行方式,探究1080Ti GPU对通用机动框架的最大加速比。由于1080Ti GPU[7]中有3 584个CUDA核心,其最大可并行度为3 584;因此,笔者设定通用机动框架总树搜索次数为3 584次,利用F16飞机模型,以筋斗动作为例,每次搜索重复执行50次,实验数据取平均值,实验结果如表19所示。

7ce78559eada482e5e0a3b1ff8522549.png

由表可知:总树搜索次数为3 584次时,串行通用机动框架求解时间较长,需要263 s,基于CUDA并行的通用机动框架,当并行度为3 584时,求解时间缩短到3 s以内,程序加速比达100倍以上。相比于单独对飞机仿真模块加速比最大为462.57的情况,基于CUDA并行的通用机动框架加速比有所下降,分析其原因如下:与串行飞机仿真模块相比,串行通用机动框架解算时间变短。二者都需对3 584个飞机架次进行机动仿真,且最大仿真步数同为3 000步,然而,通用机动框架在机动仿真时,会根据边界保护、目标机动达成标准等对飞机状态进行实时判断,对不符合要求的情况及时终止并舍弃该次仿真;因此,其平均机动仿真步数远小于飞机仿真模块,使得串行通用机动框架解算时间更短。与并行飞机仿真模块相比,并行通用机动框架解算时间变长。在模拟过程中,GPU内3 854个线程[8]同时开始解算,每个线程解算时间不同,其最终解算时长取决于所有线程中耗时最长的线程。再者,GPU以单指令多线程的方式运行,在模拟过程,引入逻辑分支对飞机状态进行判断会降低线程束指令执行效率,解算时间增加;因此,并行通用机动框架模拟过程比并行飞机仿真模块耗时更多。同时,还需要对搜索树进行维护和节点信息更新等操作,使得并行通用机动框架耗时更长。当搜索树数量较少(4或8)时候,并行通用机动框架性能略逊于串行通用机动框架;当搜索树数量较多(小于等于16)时,并行通用机动框架搜索性能优于串行框架。这是因为串行MCTS算法容易陷入局部最优解,块并行方式通过构建多棵搜索树,能以更大概率找到问题最优解;因此,搜索树数量较多时,并行通用机动框架性能优于串行框架。利用NVIDIA公司提供的profiler性能分析工具[9]对此时GPU资源使用情况进行统计。其结果如表20所示。

59cbb30e5d9f46fd1dd1f92eae832ea2.png

如表所示:每个线程块共享存储器使用量为15.488 kB,相对于最大可用量96 kB,资源还有很大富裕度,便于后期对框架任务功能进行扩展。由于并行度为3 584时,主机端(CPU)和设备端(GPU)间数据传输规模较小,全局存储器在小规模数据传输时实际带宽较低,使得其读取效率较低。GPU单指令多线程的运行方式使得程序内部逻辑分支的数量会显著影响其指令执行效率,线程数执行效率较低,可通过减少分支数的方式提高其执行效率;因此,并行框架还有进一步优化空间,通过对程序进行优化,加速比还可进一步提高。
综上所述:基于CUDA的并行通用机动框架,可在保证框架搜索性能的前提下,有效提高框架解算速度。在1080Ti GPU上,加速比可达100倍以上。且框架还有优化空间,优化后的框架可进一步提高加速比。

5

结束语

笔者利用CUDA分别就叶子节点并行、根节点并行和块并行方式对通用机动框架进行加速,得出以下结论:1) 串行通用机动框架容易陷入局部最优解,根节点并行和块并行的方式,可增大并行框架找到最优解的概率,同时,3种并行方式在选择合适的并行度时,框架性能都优于串行框架程序;2) 加速后的通用机动框架性能由好到坏依次为块并行方式、根节点并行和叶子节点并行;3) 3种并行方式程序加速比随程序并行度增加而增大,其中,叶子节点并行方式并行效率明显优于根并行和块并行方式;4) 由加速比实验可知,树搜索次数为3 584次时,串行通用机动框架解算时间为263 s,利用1080Ti GPU可有效对通用机动框架进行加速,机动解算时间缩短到3 s以内,最大加速比可达100倍以上,为通用机动框架在机载计算平台实现实时解算提供了可能。 bbfd35053932c0360f5d10c83b74d26c.gif

兵工自动化投稿网址

583660f2508105f2b77825e64c724842.gif

http://bgzdh.ijournals.com.cn/ch/author/login.aspx

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值