火箭故障后任务重构方法、装置、终端设备及存储介质转让专利

申请号 : CN202210976465.5

文献号 : CN115437763B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王劲博白浩陈洪波施健林苏霖锋

申请人 : 中山大学

摘要 :

本发明提供了一种火箭故障后任务重构方法、装置、终端设备及存储介质,所述方法包括:构建求解火箭故障后的飞行轨迹的序列凸规划问题;对序列凸规划问题进行求解,获得火箭故障后的飞行轨迹;其中,LDL矩阵分解的过程包括:根据矩阵数据构建消去树,并获取各元素的计算代价信息;将消去树划分为若干个树干和树枝,并重构为依赖关系树;基于计算依赖关系和任务计算线程的配置数量进行任务调度分配,得到任务调度结果;根据预设的任务求解模板函数、预设的同步变量和任务调度结果,生成各个矩阵分解线程的线程函数,并基于各个线程函数执行LDL矩阵分解任务。本发明能够大大提高凸问题求解过程的计算效率,从而满足在线实时应用的计算性能需求。

权利要求 :

1.一种火箭故障后任务重构方法,其特征在于,包括:

构建求解火箭故障后的飞行轨迹的序列凸规划问题;

对所述序列凸规划问题进行求解,获得火箭故障后的飞行轨迹;其中,在求解所述序列凸规划问题时,通过以下方法对所述序列凸规划问题中各凸子问题所对应的KKT系统进行LDL矩阵分解:根据所述KKT系统的LDL矩阵分解任务对应的单位下三角矩阵L的矩阵数据构建消去树,并获取所述消去树中各元素的计算代价信息;其中,所述计算代价信息包括所述单位下三角矩阵L中各列的计算量以及各列对应的以该列为根的子树计算量;

基于所述消去树的结构特征以及所述计算代价信息,将所述消去树划分为若干个树干和树枝,并基于划分的若干个树干和树枝进行重构为依赖关系树;

根据所述依赖关系树获取所述LDL矩阵分解任务中各子任务的计算依赖关系,基于所述计算依赖关系和预设的任务计算线程的配置数量进行任务调度分配,得到任务调度结果;其中,所述任务调度结果包括各子任务与所述任务计算线程的映射关系;

根据预设的任务求解模板函数、预设的同步变量和所述任务调度结果,生成各个矩阵分解线程的线程函数,并基于各个所述线程函数执行LDL矩阵分解任务。

2.根据权利要求1所述的火箭故障后任务重构方法,其特征在于,所述对所述序列凸规划问题进行求解,获得火箭故障后的飞行轨迹,具体包括:在求解所述序列凸规划问题过程中,利用各个所述线程函数创建LDL矩阵分解的多个并行线程,以基于所述多个并行线程响应于问题求解主线程的求解信号执行LDL矩阵分解任务;其中,所述问题求解主线程向所述多个并行线程发出求解信号后进入阻塞状态,直至接收到所述多个并行线程反馈的求解完成信号。

3.根据权利要求1所述的火箭故障后任务重构方法,其特征在于,所述消去树的树干和树枝的划分方式具体包括:将所述消去树的根节点作为树干节点;

若一个树干节点只包含一个子节点,则将该树干节点的子节点作为当前树干的树干节点;

若一个树干节点包含多个子节点,则将该树干节点作为当前树干的终止节点;同时,从所述多个子节点中选择多个子树中计算量最大的子节点作为下一个树干的起始节点,并将其余子节点及对应的所有后代节点作为一个树枝的树枝节点。

4.根据权利要求1所述的火箭故障后任务重构方法,其特征在于,所述获取所述消去树中各元素的计算代价信息,具体包括:基于左视LDL矩阵分解算法,统计所述单位下三角矩阵L中各列所有非零元素所需的运算次数,并将所述运算次数作为所述单位下三角矩阵L中各列的计算量;其中所述运算次数为各个非零元素进行乘法运算和除法运算的次数总和。

5.根据权利要求1所述的火箭故障后任务重构方法,其特征在于,所述根据所述依赖关系树获取所述LDL矩阵分解任务中各子任务的计算依赖关系,基于所述计算依赖关系和预设的任务计算线程的配置数量进行任务调度分配,得到任务调度结果,具体包括:将各个树枝子任务按照计算量从大到小排序,并依次将各个树枝子任务分配至当前空闲的任务计算线程上;

在完成树枝子任务的分配后,将各个树干子任务分别划分为若干个树干并行部分子任务和树干串行部分子任务;

以任务计算线程的当前并行同步点为基础,将各个所述树干并行部分子任务分配至当前空闲的任务计算线程上,在完成树干并行部分子任务的分配后,将树干串行部分子任务分配至当前空闲的任务计算线程上;

重复执行上述树干子任务分配过程,直至完成所有的树干子任务分配调度。

6.一种火箭故障后任务重构装置,其特征在于,包括:

构建模块,用于构建求解火箭故障后的飞行轨迹的序列凸规划问题;

求解模块,用于对所述序列凸规划问题进行求解,获得火箭故障后的飞行轨迹;其中,在求解所述序列凸规划问题时,通过以下单元对所述序列凸规划问题中各凸子问题所对应的KKT系统进行LDL矩阵分解:信息获取单元,用于根据所述KKT系统的LDL矩阵分解任务对应的单位下三角矩阵L的矩阵数据构建消去树,并获取所述消去树中各元素的计算代价信息;其中,所述计算代价信息包括所述单位下三角矩阵L中各列的计算量以及各列对应的以该列为根的子树计算量;

划分重构单元,用于基于所述消去树的结构特征以及所述计算代价信息,将所述消去树划分为若干个树干和树枝,并基于划分的若干个树干和树枝进行重构为依赖关系树;

任务调度单元,用于根据所述依赖关系树获取所述LDL矩阵分解任务中各子任务的计算依赖关系,基于所述计算依赖关系和预设的任务计算线程的配置数量进行任务调度分配,得到任务调度结果;其中,所述任务调度结果包括各子任务与所述任务计算线程的映射关系;

任务求解单元,用于根据预设的任务求解模板函数、预设的同步变量和所述任务调度结果,生成各个矩阵分解线程的线程函数,并基于各个所述线程函数执行LDL矩阵分解任务。

7.根据权利要求6所述的火箭故障后任务重构装置,其特征在于,所述求解模块具体用于:在求解所述序列凸规划问题过程中,利用各个所述线程函数创建LDL矩阵分解的多个并行线程,以基于所述多个并行线程响应于问题求解主线程的求解信号执行LDL矩阵分解任务;其中,所述问题求解主线程向所述多个并行线程发出求解信号后进入阻塞状态,直至接收到所述多个并行线程反馈的求解完成信号。

8.根据权利要求6所述的火箭故障后任务重构装置,其特征在于,所述划分重构单元具体用于:将所述消去树的根节点作为树干节点;

若一个树干节点只包含一个子节点,则将该树干节点的子节点作为当前树干的树干节点;

若一个树干节点包含多个子节点,则将该树干节点作为当前树干的终止节点;同时,从所述多个子节点中选择多个子树中计算量最大的子节点作为下一个树干的起始节点,并将其余子节点及对应的所有后代节点作为一个树枝的树枝节点。

9.一种终端设备,其特征在于,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至5任一项所述的火箭故障后任务重构方法。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如权利要求1至5任一项所述的火箭故障后任务重构方法。

说明书 :

火箭故障后任务重构方法、装置、终端设备及存储介质

技术领域

[0001] 本发明涉及数据处理技术领域,尤其是涉及一种火箭故障后任务重构方法、装置、终端设备及存储介质。

背景技术

[0002] 随着新型航空、航天任务对自主化、智能化和可靠性水平要求的不断提升,先进计算技术发挥着不可替代且越来越重要的作用。其中,先进空天制导、导航与控制(Guidance, Navigation and Control, GNC)算法的研究、算法与箭载/机载嵌入式计算机的融合应用,以及先进箭载/机载计算机硬件性能的提升,是实现自主、智能、可靠空天飞行的三项支撑性计算技术。
[0003] 在线轨迹优化属于计算制导与控制(Computational Guidance and Control, CG&C)方法范畴,是解决自主最优制导问题的一种新途径。其中,凸优化理论的应用是实现在线轨迹优化的主要突破口。国内外众多研究机构和大量学者开展了基于凸优化的空天飞行轨迹优化与最优制导问题研究,取得了有价值的成果和诸多技术突破。然而,相关理论和技术的发展还远未达到成熟应用的水平。
[0004] 通过分析可知,在基于凸优化的在线轨迹优化算法中,底层内点法计算占据了绝大部分计算耗时。随着问题规模逐渐增大,采用现有的方法进行凸优化问题求解已经不能满足在线实时应用的计算性能需求。

发明内容

[0005] 本发明旨在提供一种火箭故障后任务重构方法、装置、终端设备及存储介质,以解决上述技术问题,从而能够提高凸优化问题的求解效率,以满足在线实时应用的计算性能需求。
[0006] 为了解决上述技术问题,本发明提供了一种火箭故障后任务重构方法,包括:
[0007] 构建求解火箭故障后的飞行轨迹的序列凸规划问题;
[0008] 对所述序列凸规划问题进行求解,获得火箭故障后的飞行轨迹;其中,在求解所述序列凸规划问题时,通过以下方法对所述序列凸规划问题中各凸子问题所对应的KKT系统进行LDL矩阵分解:
[0009] 根据所述KKT系统的LDL矩阵分解任务对应的单位下三角矩阵L的矩阵数据构建消去树,并获取所述消去树中各元素的计算代价信息;其中,所述计算代价信息包括所述单位下三角矩阵L中各列的计算量以及各列对应的以该列为根的子树计算量;
[0010] 基于所述消去树的结构特征以及所述计算代价信息,将所述消去树划分为若干个树干和树枝,并基于划分的若干个树干和树枝进行重构为依赖关系树;
[0011] 根据所述依赖关系树获取所述LDL矩阵分解任务中各子任务的计算依赖关系,基于所述计算依赖关系和预设的任务计算线程的配置数量进行任务调度分配,得到任务调度结果;其中,所述任务调度结果包括各子任务与所述任务计算线程的映射关系;
[0012] 根据预设的任务求解模板函数、预设的同步变量和所述任务调度结果,生成各个矩阵分解线程的线程函数,并基于各个所述线程函数执行LDL矩阵分解任务。
[0013] 进一步地,所述对所述序列凸规划问题进行求解,获得火箭故障后的飞行轨迹,具体包括:
[0014] 在求解所述序列凸规划问题过程中,利用各个所述线程函数创建LDL矩阵分解的多个并行线程,以基于所述多个并行线程响应于问题求解主线程的求解信号执行LDL矩阵分解任务;其中,所述问题求解主线程向所述多个并行线程发出求解信号后进入阻塞状态,直至接收到所述多个并行线程反馈的求解完成信号。
[0015] 进一步地,所述消去树的树干和树枝的划分方式具体包括:
[0016] 将所述消去树的根节点作为树干节点;
[0017] 若一个树干节点只包含一个子节点,则将该树干节点的子节点作为当前树干的树干节点;
[0018] 若一个树干节点包含多个子节点,则将该树干节点作为当前树干的终止节点;同时,从所述多个子节点中选择多个子树中计算量最大的子节点作为下一个树干的起始节点,并将其余子节点及对应的所有后代节点作为一个树枝的树枝节点。
[0019] 进一步地,所述获取所述消去树中各元素的计算代价信息,具体包括:
[0020] 基于左视LDL矩阵分解算法,统计所述单位下三角矩阵L中各列所有非零元素所需的运算次数,并将所述运算次数作为所述单位下三角矩阵L中各列的计算量;其中所述运算次数为各个非零元素进行乘法运算和除法运算的次数总和。
[0021] 进一步地,所述根据所述依赖关系树获取所述LDL矩阵分解任务中各子任务的计算依赖关系,基于所述计算依赖关系和预设的任务计算线程的配置数量进行任务调度分配,得到任务调度结果,具体包括:
[0022] 将各个树枝子任务按照计算量从大到小排序,并依次将各个树枝子任务分配至当前空闲的任务计算线程上;
[0023] 在完成树枝子任务的分配后,将各个树干子任务分别划分为若干个树干并行部分子任务和树干串行部分子任务;
[0024] 以任务计算线程的当前并行同步点为基础,将各个所述树干并行部分子任务分配至当前空闲的任务计算线程上,在完成树干并行部分子任务的分配后,将树干串行部分子任务分配至当前空闲的任务计算线程上;
[0025] 重复执行上述树干子任务分配过程,直至完成所有的树干子任务分配调度。
[0026] 本发明还提供了一种火箭故障后任务重构装置,包括:
[0027] 构建模块,用于构建求解火箭故障后的飞行轨迹的序列凸规划问题;
[0028] 求解模块,用于对所述序列凸规划问题进行求解,获得火箭故障后的飞行轨迹;其中,在求解所述序列凸规划问题时,通过以下单元对所述序列凸规划问题中各凸子问题所对应的KKT系统进行LDL矩阵分解:
[0029] 信息获取单元,用于根据所述KKT系统的LDL矩阵分解任务对应的单位下三角矩阵L的矩阵数据构建消去树,并获取所述消去树中各元素的计算代价信息;其中,所述计算代价信息包括所述单位下三角矩阵L中各列的计算量以及各列对应的以该列为根的子树计算量;
[0030] 划分重构单元,用于基于所述消去树的结构特征以及所述计算代价信息,将所述消去树划分为若干个树干和树枝,并基于划分的若干个树干和树枝进行重构为依赖关系树;
[0031] 任务调度单元,用于根据所述依赖关系树获取所述LDL矩阵分解任务中各子任务的计算依赖关系,基于所述计算依赖关系和预设的任务计算线程的配置数量进行任务调度分配,得到任务调度结果;其中,所述任务调度结果包括各子任务与所述任务计算线程的映射关系;
[0032] 任务求解单元,用于根据预设的任务求解模板函数、预设的同步变量和所述任务调度结果,生成各个矩阵分解线程的线程函数,并基于各个所述线程函数执行LDL矩阵分解任务。
[0033] 本发明另一实施例提供了一种终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现上述发明实施例所述的火箭故障后任务重构方法。
[0034] 本发明另一实施例提供了一种存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行上述发明实施例所述的火箭故障后任务重构方法。
[0035] 与现有技术相比,本发明具有如下有益效果:
[0036] 本发明通过利用消去树描述矩阵分解计算数据依赖关系,提出了基于树干和树枝结构的任务划分策略,并基于子任务的计算量进行任务分配调度,最后基于函数模板和任务调度结果生成并行化代码用于执行矩阵分解任务,从而大大提高了凸问题求解过程的计算效率,能够满足在线实时应用的计算性能需求。

附图说明

[0037] 图1是本发明实施例提供的火箭故障后任务重构方法的流程示意图;
[0038] 图2是本发明实施例提供的CPIM算法并行LDL矩阵分解的定制化实现过程示意图;
[0039] 图3是本发明实施例提供的消去树列计算量与子树计算量示意图;
[0040] 图4是本发明实施例提供的示例问题树干、数值子任务划分结果示意图;
[0041] 图5是本发明实施例提供的基于消去树的示例问题任务划分(15个配点)示意图;
[0042] 图6是本发明实施例提供的基于消去树重构的示例问题子任务依赖关系示意图;
[0043] 图7是本发明实施例提供的树干子任务可并行的部分Update操作示意示意图;
[0044] 图8是本发明实施例提供的树干子任务进一步可并行部分任务划分示意图;
[0045] 图9是本发明实施例提供的示例问题树枝子任务调度结果示意图;
[0046] 图10是本发明实施例提供的示例问题树干4子任务调度结果示意图;
[0047] 图11是本发明实施例提供的示例问题整体静态任务调度结果示意图;
[0048] 图12是本发明实施例提供的定制化代码生成的生成的LDL分解线程函数示意图;
[0049] 图13是本发明实施例提供的火箭故障后任务重构装置的结构示意图。

具体实施方式

[0050] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0051] 需要说明的是,随着新型航空、航天任务对自主化、智能化和可靠性水平要求的不断提升,先进计算技术发挥着不可替代且越来越重要的作用。其中,先进空天制导、导航与控制(Guidance, Navigation and Control, GNC)算法的研究、算法与箭载/机载嵌入式计算机的融合应用,以及先进箭载/机载计算机硬件性能的提升,是实现自主、智能、可靠空天飞行的三项支撑性计算技术。本申请重点关注上述前两点,即在现有的嵌入式计算平台上,开发支撑先进GNC应用的底层数值优化算法,并将算法与计算平台特性充分融合,实现对有限硬件资源的充分利用,进而使能复杂GNC算法的在线、箭载/机载应用,满足特定应用中对算法自主性、实时性和可靠性等方面的要求。具体地,针对未来空天飞行任务,开展在线轨迹优化算法设计与硬件应用的创新研究。
[0052] 在线轨迹优化属于计算制导与控制(Computational Guidance and Control, CG&C)方法范畴,是解决自主最优制导问题的一种新途径。其中,凸优化理论的应用是实现在线轨迹优化的主要突破口。国内外众多研究机构和大量学者开展了基于凸优化的空天飞行轨迹优化与最优制导问题研究,取得了有价值的成果和诸多技术突破。然而,相关理论和技术的发展还远未达到成熟应用的水平。
[0053] 一方面,针对火箭在线任务重构、集群无人机编队、可重复使用运载器返回和地外行星着陆等复杂的多约束非线性问题,现有在线轨迹优化方法往往在收敛可靠性、计算实时性、偏差鲁棒性以及嵌入式计算平台适用性等方面存在不足。例如,美国国家航空航天局NASA和蓝色起源公司(Blue Origin)在2021年使用新谢泼德火箭开展了行星着陆最优制导算法搭载飞行试验,在一定程度上代表了目前先进理论和技术水平,发现现有算法在计算效率上还无法满足未来应用需求。
[0054] 另一方面,由于涉及大量在线迭代计算和数据存储与调用,在箭载/机载计算机的运用机理上,基于在线轨迹优化的方法与传统解析或显式制导方法有着本质的差异。目前,国内学者针对轨迹优化算法与计算平台结合的研究较少,国外相关研究也处于探索和发展阶段。
[0055] 解决上述问题的热点研究方向之一,是对求解在线轨迹优化中凸子问题的底层数值优化算法进行性能改进。内点法(Interior Point Method, IPM)是求解凸优化问题的最有效的算法之一,特别是对于空天飞行轨迹优化、以及大量自主无人系统运动规划问题中最常见的中小规模二阶锥规划(Second‑Order Cone Programming, SOCP)凸子问题而言,先进的原对偶内点法(Primal‑Dual IPM)具有极强适用性和可靠性,绝大多数现有商业或专用软件都基于这一方法。通过分析可知,在基于凸优化的在线轨迹优化算法中,底层内点法计算占据了绝大部分计算耗时。有大量文献指出,提高凸优化在线轨迹优化算法实时性、可靠性和箭载/机载运行可行性的一个关键要点,是对其底层内点算法进行定制化改造,即针对特定的问题开发专门的求解器,实现对问题结构特性的充分利用,进而大幅度提高算法效率。
[0056] 目前,国内外研究现状如下:
[0057] 如前所述,在基于凸优化的直接法轨迹优化中,问题转化与凸子问题的求解共同决定了算法的性能。目前,在基于凸优化的空天飞行器轨迹优化研究中,大多重点关注的是问题转化方法的设计,如约束变换、凸化近似方法等,而对底层数值计算过程考虑相对较少,往往将求解凸子问题的内点法视作成熟的工具,直接调用诸如MOSEK、ECOS等通用算法包。然而,数学理论上成熟的算法,不一定能够直接在箭载计算机上获得满意的性能。一方面,特定轨迹优化问题有大量可以利用的结构特征,这些特征是通用算法无法有效捕获和高效利用的;另一方面,某些算法虽然能在PC上展现出优异的性能,但受到计算能力和存储条件的限制,其未必适用于嵌入式的箭载计算机。
[0058] 原对偶内点法是求解凸优化问题的最有效的方法之一,特别适用于空天飞行轨迹优化问题中最常见的中小规模二阶锥规划问题。现有的绝大部分凸优化算法软件,也都是基于预测校正原对偶内点法的不同形式的实现。对于一般的通用内点法软件,其不利于箭载/机载在线应用的一个主要原因在于:在其每一次内部迭代中,需要耗费极为可观的计算资源和时间,来辨识和维护问题的稀疏结构,有些软件甚至需要反复进行动态内存空间分配与释放。
[0059] 对于空天自主飞行中的特定问题,如火箭在线任务重构问题,其轨迹优化模型一方面具有稀疏性较高的离散化系数矩阵,另一方面其模型稀疏结构在序列凸化外部迭代和内点法内部迭代中都不会改变。则可知,在线轨迹优化问题的本质是对一系列结构相同、参数不同的凸子问题(KKT系统)进行求解直至收敛。显然,对于解决专门问题的箭载/机载应用而言,通用算法中存在大量冗余逻辑和数值操作,对结果无益且耗时耗力。因此,为特定问题开发专用的定制化内点法,在设计阶段即对问题稀疏结构进行充分剖析与利用、进而排除在线求解阶段的全部冗余运算,是在线轨迹优化方法研究的重要方向之一。
[0060] 内点法代码生成器CVXGEN是内点法定制化研究的较早实践。其首先对特定问题的约束结构进行分析,随后按照原对偶内点法的计算流程,采用固定的模板自动生成定制化的显式计算代码。由于不涉及冗余计算,CVXGEN的计算效率显著高于通用求解器,且生成的C语言代码不依赖外部库,适合在嵌入式计算机上运行。美国SpaceX猎鹰9号子级着陆制导中就应用到了CVXGEN。然而,CVXGEN仅适用于二次规划问题,且对于中等以上规模问题的加速能力较弱。
[0061] 在凸优化轨迹优化方法的研究中,最引人瞩目的成果之一是NASA支持的G‑FOLD项目中开展的凸优化制导飞行试验,验证了基于定制化内点算法BSOCP的实时轨迹优化方法。BSOCP采用与CVXGEN类似的预测校正原对偶内点法和显式代码自动生成方法,最初针对三自由度真空着陆问题开发。随着“安全与精确着陆集成能力进化(SPLICE)”项目的进一步发展,NASA在2021年利用新谢泼德火箭开展了更为复杂全面的飞行试验,对基于BSOCP的六自由度实时轨迹优化算法进行了验证,在一定程度上代表了相关理论和技术的先进水平。
[0062] 现有技术的缺点在于:
[0063] 针对中小规模问题,显式编码定制化内点算法相对通用化算法有显著的计算效率提升。然而,随着问题规模逐渐增大(体现为离散点数量增加),显式代码行数急剧上升,导致了指令缓存缺失率的升高。在问题规模增大到一定程度后,显式编码带来的收益即被缓存缺失导致了访存延迟所湮没,进而难以获得计算效率提升。
[0064] 在空天飞行应用中,诸多长航时、长航程轨迹优化问题需要采用数量较大的离散点或配点。如在高超声速再入问题中,为了保证轨迹优化的精度以及对过程约束的精确刻画,往往需要100至200个离散点。针对这类问题,采用显式编码方法显然无法获得满足需求的计算性能。
[0065] 在本发明实施例中,针对上述问题,面向中、大规模空天在线轨迹优化问题,以提升计算效率位主要目标,提出了全新的利用多核处理器嵌入式计算机的并行定制化实时内点法(Customized Parallel real‑time Interior‑point Method),后文简称CPIM。
[0066] CPIM算法定制化开发的要点同样在与占据内点法内部迭代绝大部分耗时的KKT系统线性等式方程组的求解上。进一步结合中、大规模空天在线轨迹优化问题的特点开展计算耗时分布分析。随着配点数不断增长,KKT系统求解中的矩阵分解部分计算耗时占比也会不断增长。对于运载火箭在线任务重构示例问题,在配点数量超过60个时,系数矩阵LDL分解的耗时即占据了内部迭代的70%以上,且随着问题规模逐渐增加,矩阵分解耗时占比接近90%。
[0067] 因此,进一步抓住内点法计算加速的主要矛盾,CPIM算法重点针对直接法求解KKT系统中的矩阵LDL分解计算开展定制化并行加速。
[0068] 通用稀疏矩阵LDL分解算法由三重循环构成,其中各重循环都具有并行化潜力。然而,考虑嵌入式CPU计算核心数有限,不具备大规模并行能力,而且过细的任务粒度必然带来高昂的同步通信开销。因此,设计了以单位下三角矩阵L的列计算为基础单元的粗粒度并行算法。
[0069] 首先,利用消去树(Elimination Tree)所描述的矩阵分解计算数据依赖关系,开展并行任务划分研究,提出了独特的基于“树干(Trunk)”和“树枝(Branch)”结构的任务划分策略,将计算分解为若干个可并行的树干和树枝子任务。
[0070] 随后,设计了“静态”任务调度算法,在离线分析阶段,根据各子任务的计算量统计,将其确定性地分配给各个计算线程,进而实现各核心负载的平衡与优化。其中,调度算法将各个树枝计算子任务直接分配给不同的计算线程;树干任务调度则相对复杂,需要进一步将其划分为一系列可并行的“树干并行”子任务,和“树干串行”子任务,将并行子任务调度到各个计算线程上,再将无法并行的串行子任务分配给某个计算线程。
[0071] 最后,设计了以互斥量、条件变量为基础的多线程同步机制,保证并行LDL分解计算的高效、可靠。
[0072] 此外,作为主要创新点之一,所设计的求解器具备自动任务划分、自动任务静态调度、自动生成多线程计算同步代码的能力,进而可显著提高算法对于不同核心数量计算平台适应的敏捷性、降低代码移植难度、提高开发和应用效率。这是其他内点算法软件所不具备的特点。
[0073] 请参见图1,本发明实施例提供了一种火箭故障后任务重构方法,可以包括步骤:
[0074] S1、构建求解火箭故障后的飞行轨迹的序列凸规划问题;
[0075] S2、对序列凸规划问题进行求解,获得火箭故障后的飞行轨迹;其中,在求解序列凸规划问题时,通过以下方法对序列凸规划问题中各凸子问题所对应的KKT系统进行LDL矩阵分解:
[0076] S3、根据KKT系统的LDL矩阵分解任务对应的单位下三角矩阵L的矩阵数据构建消去树,并获取消去树中各元素的计算代价信息;其中,计算代价信息包括单位下三角矩阵L中各列的计算量以及各列对应的以该列为根的子树计算量;
[0077] S4、基于消去树的结构特征以及计算代价信息,将消去树划分为若干个树干和树枝,并基于划分的若干个树干和树枝进行重构为依赖关系树;
[0078] S5、根据依赖关系树获取LDL矩阵分解任务中各子任务的计算依赖关系,基于计算依赖关系和预设的任务计算线程的配置数量进行任务调度分配,得到任务调度结果;其中,任务调度结果包括各子任务与任务计算线程的映射关系;
[0079] S6、根据预设的任务求解模板函数、预设的同步变量和任务调度结果,生成各个矩阵分解线程的线程函数,并基于各个线程函数执行LDL矩阵分解任务。
[0080] 在本发明实施例中,进一步地,步骤S2具体包括:
[0081] 在求解序列凸规划问题过程中,利用各个线程函数创建LDL矩阵分解的多个并行线程,以基于多个并行线程响应于问题求解主线程的求解信号执行LDL矩阵分解任务;其中,问题求解主线程向多个并行线程发出求解信号后进入阻塞状态,直至接收到多个并行线程反馈的求解完成信号。
[0082] 在本发明实施例中,进一步地,消去树的树干和树枝的划分方式具体包括:
[0083] 将消去树的根节点作为树干节点;
[0084] 若一个树干节点只包含一个子节点,则将该树干节点的子节点作为当前树干的树干节点;
[0085] 若一个树干节点包含多个子节点,则将该树干节点作为当前树干的终止节点;同时,从多个子节点中选择多个子树中计算量最大的子节点作为下一个树干的起始节点,并将其余子节点及对应的所有后代节点作为一个树枝的树枝节点。
[0086] 在本发明实施例中,进一步地,获取消去树中各元素的计算代价信息,具体包括:
[0087] 基于左视LDL矩阵分解算法,统计单位下三角矩阵L中各列所有非零元素所需的运算次数,并将运算次数作为单位下三角矩阵L中各列的计算量;其中运算次数为各个非零元素进行乘法运算和除法运算的次数总和。
[0088] 在本发明实施例中,进一步地,根据依赖关系树获取LDL矩阵分解任务中各子任务的计算依赖关系,基于计算依赖关系和预设的任务计算线程的配置数量进行任务调度分配,得到任务调度结果,具体包括:
[0089] 将各个树枝子任务按照计算量从大到小排序,并依次将各个树枝子任务分配至当前空闲的任务计算线程上;
[0090] 在完成树枝子任务的分配后,将各个树干子任务分别划分为若干个树干并行部分子任务和树干串行部分子任务;
[0091] 以任务计算线程的当前并行同步点为基础,将各个树干并行部分子任务分配至当前空闲的任务计算线程上,在完成树干并行部分子任务的分配后,将树干串行部分子任务分配至当前空闲的任务计算线程上;
[0092] 重复执行上述树干子任务分配过程,直至完成所有的树干子任务分配调度。
[0093] 与现有技术相比,本发明通过利用消去树描述矩阵分解计算数据依赖关系,提出了基于树干和树枝结构的任务划分策略,并基于子任务的计算量进行任务分配调度,最后基于函数模板和任务调度结果生成并行化代码用于执行矩阵分解任务,从而大大提高了凸问题求解过程的计算效率,能够满足在线实时应用的计算性能需求。
[0094] 请参见图2至图12,基于上述方案,为便于更好的理解本发明实施例提供的火箭故障后任务重构方法,以下对方案的步骤流程进行详细说明:
[0095] CPIM并非通用并行算法,是针对特定问题定制化开发的。在求解实际问题之前,需要结合问题结构和嵌入式设备特点进行分析以及定制化代码生成;生成的C语言定制化代码则可在嵌入式计算机上高效执行。
[0096] 如图2所示,将CPIM算法应用于在线轨迹优化问题求解的过程,包含两个主要阶段。在结构分析与代码生成阶段,针对输入的问题描述(约束于性能指标结构、配点数量等),通过一系列分析重构过程,自动生成LDL矩阵分解并行化代码。在问题求解阶段,利用并行化代码创建LDL矩阵分解的多个并行线程,并等待主线程求解信号。当内点算法需要进行LDL矩阵分解时,主线程向LDL矩阵分解线程组发送求解信号,同时主线程进入阻塞状态,等待LDL矩阵分解线程组完成计算并发出求解完成信号。
[0097] 以下针对并行LDL矩阵分解计算的任务划分、任务调度与代码生成这三个主要实现环节展开详细描述。
[0098] 一、并行LDL矩阵分解任务划分方法
[0099] 如前所述,设计的并行LDL矩阵分解算法是以列计算为基础单元的粗粒度“列块并行”算法;将消去树重新组织为树干‑树枝结构,树干和树枝分别代表不同的特定列计算的集合,即为列块并行思想中的“列块”。
[0100] 本专利研究的LDL矩阵分解任务划分算法和后文任务调度算法,都是以“计算量”为基础进行度量的,认为计算量是计算执行耗时的有效估计,则需要确定“计算每列的计算量”以及“该列为根的子树计算量”。
[0101] 首先,确定计算一列元素所需的计算量:乘除法运算是矩阵分解的主要计算,则以左视LDL矩阵分解算法为基础,统计每列所有非零元素计算需要的“乘/除法运算”次数,忽略其他运算操作。
[0102] 随后,利用树形结构递归算法,计算该列为根的子树计算量,即有:
[0103] 该列为根子树计算量 = 该列计算量 + 该列所有子节点列为根子树计算量[0104] 以一个维度为21的L矩阵计算消去树为示例进行说明,图3所示为其各列计算量统计和以当前列为根的子树计算量统计结果。
[0105] 在获得消去树子树计算量信息后,即可容易地将树状结构重构划分出树干与树枝子任务。树干子任务是由一系列“树干节点”构成的,树枝子任务则为以一个“树枝节点”为根的子树。从根节点开始向下查找与划分:
[0106] 1、默认根节点属于树干节点,图3中的21号节点即属于树干节点;
[0107] 2、如果一个树干节点只有一个子节点,那么这个子节点也属于树干节点;例如,21号节点只有一个子节点,即20号节点,则其属于树干节点;
[0108] 3、如果一个树干节点有多个子节点,则该节点作为“一段树干”的终止节点;同时,选择子树计算量最大的节点作为下一段树干的起始节点;其余节点及对应的所有后代节点作为树枝节点,并构成树枝子任务;例如,19号节点有两个子节点,18和10号子节点,由于18号节点的子树计算量最大,则其作为新的树干起点,并将以10号节为根的子树构成一个树枝。
[0109] 根据任务划分算法,可以将图3示例的消去树划分为一系列树干和树枝,结果如图4所示,包含了3段树干以及4个树枝。
[0110] 在上述简单问题举例分析的基础上,针对本发明实施例具体研究的运载火箭动力故障任务重构示例问题。将其计算任务按照上述方法划分为一系列树干和树枝子任务。如图5所示,根据消去树中各列非零元素的计算代价,将整个任务划分为4段树干和5个树枝子任务。划分后的树枝子任务均没有依赖关系,而树干子任务往往依赖于其他树干、树枝计算子任务。
[0111] 以各个计算子任务为节点,可以将消去树重新组织为更加直观的“树干‑树枝”结构形式,更明确地体现出各个子任务之间的计算依赖关系,如图6所示。
[0112] 由图6可见,树枝子任务之间可以完全解耦、互不依赖,但树干计算子任务具有强烈的串行依赖关系,各树干计算子任务难以同时计算。如树干4至树干1的计算只能的顺序串行进行。树干子任务的计算量较大,为了进一步提高并行度、提高树干子任务的计算效率,本发明实施例提出“树干部分更新”并行计算方法,将每个树干的可并行部分进一步划分。
[0113] 树干子任务包含了若干列的计算,CPIM将这些列再次划分构成多个“树干部分子任务”。在进行树干子任务各列的Update操作时,将其左侧依赖的列分为两部分:树干子任务外的列和树干子任务内的列。
[0114] 在左视LDL分解算法中,某j列的Update计算操作需要依赖该列左侧的部分列,这使得树干子任务中的列之间也具备依赖关系,不能完全并行。然而,在执行树干子任务计算时,其左侧树干之外的列已完成计算,数据已知。树干内的一列计算,即依赖树干之外的左侧列,也依赖树干内的部分左侧列;因此,提出树干内各个列首先分别利用树干外的数据完成部分更新即“部分Update”操作,再串行执行树干之内的各列计算更新。由于树干内各列的“部分Update”操作无相互依赖关系,可并行执行,如图7所示。
[0115] 因此,本发明实施例将树干子任务各列的部分Update操作再次组织为若干个可并行的“树干并行部分子任务”,树干子任务各列的剩余计算组织为一个串行的“树干串行子任务”,如图8所示。其中,树干串行部分子任务依赖于各个树干并行部分子任务,需要各部分子任务完成后才能开始计算。
[0116] 二、并行LDL矩阵分解任务调度方法
[0117] 在前一小节,通过对LDL矩阵分解计算消去树以及计算量的分析,将整个LDL矩阵分解任务划分为了一系列树干、树枝子任务,各子任务均代表了对若干个L矩阵列的计算。根据子任务之间的依赖关系,进一步确定了子任务之间的计算依赖关系。在此基础上,即可充分挖掘多核处理器系统的计算能力,利用POSIX线程库(Pthreads)编程接口开启多个LDL矩阵分解worker线程来提高计算效率。
[0118] 在指定了参与矩阵分解的线程数后,需要将前一小节划分的子任务调度到各个计算线程上开展计算,不同线程上计算量的负载平衡是保证计算效率的关键。在实际计算前,由于无法确定分解计算能够并行的部分以及各部分的计算量,通用的稀疏对称矩阵LDL并行算法往往难以实现良好的计算负载平衡。而对于本文研究的针对特定种类问题的定制化求解器,在分析和代码生成阶段即可进行高效的任务划分,并确定各并行子任务块所需的计算量,这是定制化算法的一个重要优势。
[0119] 在此提出一种高效的“静态调度”算法,即子任务调度并非在线计算,而是在计算前离线确定。在实际计算时,CPIM算法将所有的LDL矩阵分解worker线程绑定到固定的CPU内核上,其中计算线程数不超过CPU内核数目,这样能够保证离线分析的计算结果与在线运行结果一致。根据划分的树干、树枝计算子任务与输入的线程数,任务调度算法确定每个子任务运行时与worker线程的映射关系。
[0120] 下面以示例问题取15个配点、划分4个LDL矩阵分解线程为例,进一步阐述上述任务调度方法。
[0121] 由于所有的树枝计算子任务没有任何数据依赖关系,计算线程读写各自的内存空间,这些子任务有着非常好的计算并行性,调度算法将所有5个树枝子任务一一分配给各个计算线程,其各自的计算量统计如表 1所示。
[0122] 表1示例问题树枝子任务计算量(15个配点)
[0123]
[0124] 以计算量模拟各个计算线程的时间,为了保证负载均衡,调度算法将所有树枝计算子任务按计算量从大到小排序,再依次调度到空闲的计算线程上。调度结如图9所示。
[0125] 完成对树枝计算子任务的调度后,就可以开始调度剩余的树干计算子任务。按照树干子任务依赖关系,依次调度树干4、树干3、树干2、树干1等子任务。要注意的是,需要待树干子任务所依赖的各子任务完成后,方可开始计算当前树干子任务。在前一小节中已经提到,我们将树干子任务再细分为若干并行部分子任务和串行部分子任务。将多个树干并行部分子任务调度给空闲的计算线程,待所有并行部分子任务完成后,再调度串行部分子任务。
[0126] 树干4依赖树枝4、树枝5的计算,因此,待线程4完成树枝5的计算任务后,开始执行树干4子任务,调度算法将树干4分为3个并行和1个串行部分子任务,计算量如表2所示。调度结果如图10所示,算法将树干4并行部分子任务调度到线程2、3、4上进行并行计算,串行部分子任务调度到线程2上计算。可以理解的是,分配原则是尽可能不让任何一个线程产生长时间空闲,保证各个线程之计算负载尽可能均衡,分配逻辑基于对计算量的实现估计,进而确定负载尽可能均衡的分配方案。
[0127] 表2示例问题树干4部分子任务计算量(15个配点)
[0128]
[0129] 采用同样的方法调度树干3、树干2、树干1子任务,可以得到最终的静态调度结果,如下图11所示。
[0130] 根据上述分析讨论,示例问题在15个离散配点下,将LDL矩阵分解计算任务按照设计的调度算法分配给4个计算线程,能够实现良好的负载平衡。针对上述问题,CPIM算法LDL矩阵分计算能够取得的理论加速比为:2.64。
[0131] 三、并行LDL矩阵分解代码生成方法
[0132] 在上述任务划分、任务调度方法研究的基础上,即可开展用于实时计算的定制化代码生成方法研究。定制化代码主要包含:求解树枝子任务、树干并行部分子任务、树干串行部分子任务的模板代码;LDL矩阵分解多线程同步代码;以及各个线程的线程函数。
[0133] 树枝子任务、树干并行部分子任务、树干串行部分子任务的计算逻辑是一致和通用的,本发明实施例建立了统一的模板函数calculate_work()。该函数根据左视LDL矩阵分解算法实现,其输入参数包括任务类型、计算任务包含的列、Update操作左侧用来更新列的范围等。值得注意的是,在计算树枝子任务、树干串行部分子任务时,由于列间依赖关系需要将要计算的列按照从小到大排序,则在任务分析阶段将各个计算任务包含的列生成为显式数组,在线计算时通过起始索引确定。
[0134] 多线程程序相对于单线程程序要复杂很多,要使其始终正常工作就必须要处理好线程间的同步问题。LDL矩阵分解多线程计算涉及两类同步问题。第一类是由于各个子任务之间的依赖关系带来的同步问题。第二类是则是对各个线程间的任务协调、主线程与计算线程的同步,以及针对各个计算线程设置同步屏障等。
[0135] 本文以Pthreads线程库提供的互斥量、条件变量为基础,开展同步机制设计。在每个同步点设计了条件信息,条件信息用互斥锁变量进行保护,各个线程在获得互斥锁后修改条件信息。在条件不满足时,线程选择阻塞在对应的条件变量上;当某个线程发现条件满足时,则唤醒阻塞在该条件变量上的所有线程。由于已经确定了任务划分、任务调度和任务依赖信息,可以事先确定需要的条件信息、互斥锁和条件变量,即可以生成这些变量的声明、定义和初始化操作等代码。
[0136] 根据任务求解模板函数、同步变量和任务调度信息,可以很容易地生成各个LDL矩阵分解计算线程的线程函数。本文将线程函数设计为一个while循环,每次循环操作代表一次LDL矩阵分解。在循环开始时和结束时设置屏障;在计算每个子任务前进行同步,保证该任务所依赖的计算任务已经完成;在任务完成后再次进行同步操作,通知其他线程该计算任务已经完成。针对LDL矩阵分解线程大量依赖的信息,如待分解矩阵、分解后因子、的存储位置等,本文设计了一个MT_contex全局变量,记录这些信息供线程函数访问。
[0137] 图12所示为按照上述方法所生成的一个LDL分解线程函数的示例。
[0138] 四、数值实验与分析
[0139] 对提出的并行定制化化实时内点算法进行数值实验,在验证其满足凸问题高精度求解要求的前提下,重点分析其相对通用求解器的加速性能,以及针对CPU高速缓存利用优化的效果。在加速性能分析中,采用性能先进的ECOS求解器作为对比对象。
[0140] 以运载火箭动力系统故障在线任务重构问题为典型示例,对所研究的定制化实时内点法进行实验验证。数值实验中使用的火箭参数和初始状态、目标轨道根数信息分别如表3和表4所示。
[0141] 表3 运载火箭末级参数取值
[0142]
[0143] 表4 运载火箭末级初始飞行状态和目标轨道根数
[0144]
[0145] 本发明实施例既关注定制化内点算法的绝对速度,又关注其相对通用求解器的加速比。采用不同的计算机平台,对计算速度和加速比均有不同的影响。为全面验证算法性能以及算法缓存敏感性分析,采用三型不同架构、不同主频、不同缓存大小的计算机进行实验测试,如表5所示。其中,配有i9处理器的台式计算机(简称i9台式机)CPU主频最高,三级缓存较大;采用ARM V8.2处理器的英伟达Jetson AGX开发板(简称AGX),具有最大的一级和二级缓存,主频也较高;树莓派4B开发板主频最低,各级缓存也相对较小。
[0146] 表5 数值实验采用的三型计算平台及CPU参数
[0147]
[0148] 需要说明的是,对于以上方法或流程实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作并不一定是本发明实施例所必须的。
[0149] 请参见图13,为了解决相同的技术问题,本发明还提供了一种火箭故障后任务重构装置,包括:
[0150] 构建模块1,用于构建求解火箭故障后的飞行轨迹的序列凸规划问题;
[0151] 求解模块2,用于对所述序列凸规划问题进行求解,获得火箭故障后的飞行轨迹;其中,在求解所述序列凸规划问题时,通过以下单元对所述序列凸规划问题中各凸子问题所对应的KKT系统进行LDL矩阵分解:
[0152] 信息获取单元3,用于根据所述KKT系统的LDL矩阵分解任务对应的单位下三角矩阵L的矩阵数据构建消去树,并获取所述消去树中各元素的计算代价信息;其中,所述计算代价信息包括所述单位下三角矩阵L中各列的计算量以及各列对应的以该列为根的子树计算量;
[0153] 划分重构单元4,用于基于所述消去树的结构特征以及所述计算代价信息,将所述消去树划分为若干个树干和树枝,并基于划分的若干个树干和树枝进行重构为依赖关系树;
[0154] 任务调度单元5,用于根据所述依赖关系树获取所述LDL矩阵分解任务中各子任务的计算依赖关系,基于所述计算依赖关系和预设的任务计算线程的配置数量进行任务调度分配,得到任务调度结果;其中,所述任务调度结果包括各子任务与所述任务计算线程的映射关系;
[0155] 任务求解单元6,用于根据预设的任务求解模板函数、预设的同步变量和所述任务调度结果,生成各个矩阵分解线程的线程函数,并基于各个所述线程函数执行LDL矩阵分解任务。
[0156] 进一步地,所述求解模块2具体用于:
[0157] 在求解所述序列凸规划问题过程中,利用各个所述线程函数创建LDL矩阵分解的多个并行线程,以基于所述多个并行线程响应于问题求解主线程的求解信号执行LDL矩阵分解任务;其中,所述问题求解主线程向所述多个并行线程发出求解信号后进入阻塞状态,直至接收到所述多个并行线程反馈的求解完成信号。
[0158] 进一步地,所述划分重构单元4具体用于:
[0159] 将所述消去树的根节点作为树干节点;
[0160] 若一个树干节点只包含一个子节点,则将该树干节点的子节点作为当前树干的树干节点;
[0161] 若一个树干节点包含多个子节点,则将该树干节点作为当前树干的终止节点;同时,从所述多个子节点中选择多个子树中计算量最大的子节点作为下一个树干的起始节点,并将其余子节点及对应的所有后代节点作为一个树枝的树枝节点。
[0162] 可以理解的是上述装置项实施例,是与本发明方法项实施例相对应的,本发明实施例提供的一种火箭故障后任务重构装置,可以实现本发明任意一项方法项实施例提供的火箭故障后任务重构方法。
[0163] 所述领域的技术人员可以清楚地了解到,为的方便和简洁,上述描述的装置的具体工作过程,可参考前述方法实施例中对应的过程,在此不再赘述。
[0164] 终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器、存储器。
[0165] 所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器  (Digital Signal Processor,DSP)、专用集成电路 (Application Specific Integrated Circuit,ASIC)、现成可编程门阵列 (Field‑Programmable Gate Array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述终端设备的控制中心,利用各种接口和线路连接整个终端设备的各个部分。
[0166] 所述存储器可用于存储所述计算机程序,所述处理器通过运行或执行存储在所述存储器内的计算机程序,以及调用存储在存储器内的数据,实现所述终端设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card, SMC),安全数字(Secure Digital, SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0167] 所述存储介质为计算机可读存储介质,所述计算机程序存储在所述计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0168] 以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。