一种基于混合推进的多线程并行作战仿真方法和系统技术方案

技术编号:34193991 阅读:28 留言:0更新日期:2022-07-17 16:08
本发明专利技术公开一种基于混合推进的多线程并行作战仿真方法和系统。方法包括:创建引擎服务主线程;引擎服务主线程获取作战方案中的实体数量,创建第一分线程池;各个第一分线程并行执行加载各个实体信息和仿真作战任务,分别存储于实体队列和事件队列;引擎服务主线程销毁第一分线程池,获取获取时钟跳变时段集;引擎服务主线程创建第二分线程池,并将各个仿真作战任务分配给第二分线程池中各个第二分线程;引擎服务主线程设置仿真参数,并确定当前仿真时刻;各个第二分线程对对应的分事件队列中各个仿真作战任务并行执行仿真,直至仿真作战任务为止;引擎服务主线程销毁第二分线程池。本发明专利技术能够实现时间驱动和事件驱动的混合推进机制,仿真效率高。仿真效率高。仿真效率高。

【技术实现步骤摘要】
一种基于混合推进的多线程并行作战仿真方法和系统


[0001]本专利技术属于作战仿真
,具体涉及一种基于混合推进的多线程并行作战仿真方法和系统。

技术介绍

[0002]仿真是随时间演化实现模型的方法和过程。仿真技术的应用已有很久的历史,计算机的出现极大促进了仿真技术的发展。当前,仿真技术的应用日益广泛,在军事、科研、生产、娱乐等各个领域,正发挥着越来越重要的作用。关于仿真的分类,可以有多种方法。如按照模型的类型,可分为连续仿真、离散时间仿真和离散事件仿真;按逻辑时间与墙钟时间的关系可分为实时仿真、比例实时仿真和尽可能快的仿真;按仿真系统的运行方式可分为串行仿真和并行/分布仿真等。串行仿真是以一个线程或进程,逐个模拟事件链表内各行动过程,计算行动效能和结果,生成态势信息。根据并行的方式不同,并行仿真可以分为分布式并行仿真和共享内存式并行仿真。分布式并行仿真依靠分布式交互技术,在网络内多台计算机上,同时模拟事件队列内各行动过程,计算行动效能和结果,生成态势信息。共享内存式仿真依赖于计算机多核处理器,利用多线程技术,在同一台计算机内实施模拟。
[0003]离散事件仿真(Discrete Event Simulation, DES)是随时间演化实现离散事件系统模型的仿真。离散事件系统的状态改变都是由事件的发生引起的。事件的发生没有持续性,而是在一个时间点,瞬间完成。从仿真推进机制上,可分为时间驱动和事件驱动。在时间驱动的离散事件仿真中,仿真时间分为一串等长的时间步,仿真时间从一个时间步向下一个时间步推进。在事件驱动的离散事件仿真中,仿真时间从一个事件的发生时刻,推进到下一个事件的发生时刻,仿真时间推进具有跳跃性。
[0004]在作战仿真领域,仿真过程属于离散事件仿真的范畴,当前多数文献采用时间推进机制,如CN111597035A公开的基于多线程的时间推进方法,不足之处是仅使用多线程进行作战仿真推进,在加载作战方案/仿真方案时,没有使用多线程,当作战方案/仿真方案数据量较大时,用于加载的时间成本在整个仿真时间的比重将增加,而且创建的多线程生命周期为整个仿真引擎运行全过程,造成仿真主机的计算和存储资源的不必要开支。CN107193639A公开的一种支持联合作战的多核并行仿真引擎系统,采用分布式并行方式,但依赖一个包括多台仿真主机的计算机网络,仿真效率受到消息传递、时间统一和网络延迟等因素影响,而且仅依靠单台仿真主机不能实现仿真过程。因此,现有的作战仿真存在如下不足:1、当仿真方案数据量较大时,传统的单线程加载与解析仿真方案,耗时较大,延迟现象明显。
[0005]2、当仿真事件执行时间段的并集没有覆盖所有仿真时间的时候,采用时间推进机制,因每一次都要遍历和判断所有事件,将导致过多的时间和算力开支,降低仿真效率。
[0006]3、当仿真事件或者仿真方案数量并没有达到大规模的体量时,采用分布式并行,并不一定能够提高太多的仿真效率。

技术实现思路

[0007]本专利技术的目的之一,在于提供一种基于混合推进的多线程并行作战仿真方法,该多线程并行作战仿真方法能够实现时间驱动和事件驱动的混合推进机制,适用大规模的仿真事件,仿真效率高,且不需要考虑网络延迟、时间统一等分布式并行效率的延迟因素。
[0008]本专利技术的目的之二,在于提供一种基于混合推进的多线程并行作战仿真系统。
[0009]为了达到上述目的之一,本专利技术采用如下技术方案实现:一种基于混合推进的多线程并行作战仿真方法,所述多线程并行作战仿真方法包括如下步骤:步骤一、创建一个引擎服务主线程;步骤二、所述引擎服务主线程获取作战方案中的实体数量;步骤三、所述引擎服务主线程根据仿真主机核心数和实体数量,创建一个第一分线程池;步骤四、所述第一分线程池中各个第一分线程并行执行加载各个实体信息和仿真作战任务,并将所述各个实体的实体信息和仿真作战任务分别存储于实体队列和事件队列;步骤五、所述引擎服务主线程销毁所述第一分线程池,以释放所述各个第一分线程;步骤六、所述引擎服务主线程获取所述事件队列中各个仿真作战任务的作战时间,以获取时钟跳变时段集;其中,所述时钟跳变时段集中各个时钟跳变时段为在对应的时钟跳变时段内没有仿真作战任务;步骤七、所述引擎服务主线程根据所述仿真主机核心数和事件队列的大小,创建一个第二分线程池;步骤八、所述引擎服务主线程将所述事件队列中各个仿真作战任务分配给所述第二分线程池中各个第二分线程,得到所述各个第二分线程的分事件队列;步骤九、所述引擎服务主线程设置仿真参数;并根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻;其中,所述仿真参数包括仿真时刻和仿真步长;步骤十、所述各个第二分线程根据所述当前仿真时刻,对所述各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至所述各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止;步骤十一、所述引擎服务主线程销毁所述第二分线程池,以释放所述各个第二分线程。
[0010]进一步的,步骤三中,所述第一分线程池中的第一分线程数量为:N
thr1
=min(N
ent
,2N
cpu

1);其中,N
thr1
为第一分线程数量;N
ent
为实体数量;N
cpu
为仿真主机核心数。
[0011]进一步的,步骤七中,所述第二分线程池中的第二分线程池数量为:N
thr2
=min(N
even
,N
cpu

1);其中,N
thr2
为第二分线程数量;N
even
为实体数量;N
cpu
为仿真主机核心数。
[0012]进一步的,所述步骤十的具体实现过程包括:步骤1001、所述引擎服务主线程设置历史事件队列初始为空;步骤1002、所述引擎服务主线程判断所述当前仿真时刻是否处于所述时钟跳变时段集内,如是,则获取所述当前仿真时刻对应的时钟跳变时段,进入步骤1003;如否,则所述各个第二分线程并行从各自的分事件队列中逐个获取各自在所述当前仿真时刻对应的当前仿真作战任务,进入步骤1004;步骤1003、所述引擎服务主线程将所述当前仿真时刻对应的时钟跳变时段的结束时间设置为当前仿真时刻,返回步骤1002;步骤1004、所述各个第二分线程判断所述当前仿真时刻是否小于所述当前仿真作战任务的结束时刻,如是,则进入步骤1005;如否,则将所述当前仿真作战任务移动到所述历史事件队列中,进入步骤1006;步骤1005、所述各个第二分线程依次并行调用仿真程序和并行执行仿真,并将并行执行仿真过程和结果缓存;步骤1006、所述各个第二分线程判断各自的分事件队列中所有仿真作战任务是否均已执行仿真,如是,则挂起对应的所述第二分线程,进入步骤1007;如否,则所述各个第二分线程从各自的分事件队列中读取下一个仿真作战任务,返回步骤1005;步骤1007、所述引擎服务主线程判断所有第二分线程是否均为挂起状态,如本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于混合推进的多线程并行作战仿真方法,其特征在于,所述多线程并行作战仿真方法包括如下步骤:步骤一、创建一个引擎服务主线程;步骤二、所述引擎服务主线程获取作战方案中的实体数量;步骤三、所述引擎服务主线程根据仿真主机核心数和实体数量,创建一个第一分线程池;步骤四、所述第一分线程池中各个第一分线程并行执行加载各个实体信息和仿真作战任务,并将所述各个实体的实体信息和仿真作战任务分别存储于实体队列和事件队列;步骤五、所述引擎服务主线程销毁所述第一分线程池,以释放所述各个第一分线程;步骤六、所述引擎服务主线程获取所述事件队列中各个仿真作战任务的作战时间,以获取时钟跳变时段集;其中,所述时钟跳变时段集中各个时钟跳变时段为在对应的时钟跳变时段内没有仿真作战任务;步骤七、所述引擎服务主线程根据所述仿真主机核心数和事件队列的大小,创建一个第二分线程池;步骤八、所述引擎服务主线程将所述事件队列中各个仿真作战任务分配给所述第二分线程池中各个第二分线程,得到所述各个第二分线程的分事件队列;步骤九、所述引擎服务主线程设置仿真参数;并根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻;其中,所述仿真参数包括仿真时刻和仿真步长;步骤十、所述各个第二分线程根据所述当前仿真时刻,对所述各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至所述各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止;步骤十一、所述引擎服务主线程销毁所述第二分线程池,以释放所述各个第二分线程。2.根据权利要求1所述的多线程并行作战仿真方法,其特征在于,步骤三中,所述第一分线程池中的第一分线程数量为:N
thr1
=min(N
ent
,2N
cpu

1);其中,N
thr1
为第一分线程数量;N
ent
为实体数量;N
cpu
为仿真主机核心数。3.根据权利要求2所述的多线程并行作战仿真方法,其特征在于,步骤七中,所述第二分线程池中的第二分线程池数量为:N
thr2
=min(N
even
,N
cpu

1);其中,N
thr2
为第二分线程数量;N
even
为实体数量;N
cpu
为仿真主机核心数。4.根据权利要求1~3中任意一项所述的多线程并行作战仿真方法,其特征在于,所述步骤十的具体实现过程包括:步骤1001、所述引擎服务主线程设置历史事件队列初始为空;步骤1002、所述引擎服务主线程判断所述当前仿真时刻是否处于所述时钟跳变时段集内,如是,则获取所述当前仿真时刻对应的时钟跳变时段,进入步骤1003;如否,则所述各个第二分线程并行从各自的分事件队列中逐个获取各自在所述当前仿真时刻对应的当前仿真作战任务,进入步骤1004;
步骤1003、所述引擎服务主线程将所述当前仿真时刻对应的时钟跳变时段的结束时间设置为当前仿真时刻,返回步骤1002;步骤1004、所述各个第二分线程判断所述当前仿真时刻是否小于所述当前仿真作战任务的结束时刻,如是,则进入步骤1005;如否,则将所述当前仿真作战任务移动到所述历史事件队列中,进入步骤1006;步骤1005、所述各个第二分线程依次并行调用仿真程序和并行执行仿真,并将并行执行仿真过程和结果缓存;步骤1006、所述各个第二分线程判断各自的分事件队列中所有仿真作战任务是否均已执行仿真,如是,则挂起对应的所述第二分线程,进入步骤1007;如否,则所述各个第二分线程从各自的分事件队列中读取下一个仿真作战任务,返回步骤1005;步骤1007、所述引擎服务主线程判断所有第二分线程是否均为挂起状态,如是,则所述引擎服务主线程根据预先设定的仿真步长,计算下一步仿真时刻并赋给所述当前仿真时刻,返回步骤1002;如否,则所述引擎服务主线程等待。5.根据权利要求4所述的多线程并行作战仿真方法,其特征在于,所述步骤1005还包括:当在并行执行仿真过程中出现提前完成的仿真作战任务时,则将所述仿真作战任务移动到历史事件队列中。6.根据权利要求5所述的多线程并行作战仿真方法,其特征在于,所述步骤1005还包括:当在并行执行仿真作战任务时,所述各个第二分线程判断是否产生新实体,并在判断为是时,...

【专利技术属性】
技术研发人员:陈怀进齐锋金玮柯明星殷何卿龚燕陈皖玉
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1