CN114757057B - 一种基于混合推进的多线程并行作战仿真方法和系统 - Google Patents
一种基于混合推进的多线程并行作战仿真方法和系统 Download PDFInfo
- Publication number
- CN114757057B CN114757057B CN202210664895.3A CN202210664895A CN114757057B CN 114757057 B CN114757057 B CN 114757057B CN 202210664895 A CN202210664895 A CN 202210664895A CN 114757057 B CN114757057 B CN 114757057B
- Authority
- CN
- China
- Prior art keywords
- simulation
- sub
- thread
- combat
- time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02T—CLIMATE CHANGE MITIGATION TECHNOLOGIES RELATED TO TRANSPORTATION
- Y02T90/00—Enabling technologies or technologies with a potential or indirect contribution to GHG emissions mitigation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Train Traffic Observation, Control, And Security (AREA)
- Testing Of Engines (AREA)
Abstract
本发明公开一种基于混合推进的多线程并行作战仿真方法和系统。方法包括:创建引擎服务主线程;引擎服务主线程获取作战方案中的实体数量,创建第一分线程池;各个第一分线程并行执行加载各个实体信息和仿真作战任务,分别存储于实体队列和事件队列;引擎服务主线程销毁第一分线程池,获取获取时钟跳变时段集;引擎服务主线程创建第二分线程池,并将各个仿真作战任务分配给第二分线程池中各个第二分线程;引擎服务主线程设置仿真参数,并确定当前仿真时刻;各个第二分线程对对应的分事件队列中各个仿真作战任务并行执行仿真,直至仿真作战任务为止;引擎服务主线程销毁第二分线程池。本发明能够实现时间驱动和事件驱动的混合推进机制,仿真效率高。
Description
技术领域
本发明属于作战仿真技术领域,具体涉及一种基于混合推进的多线程并行作战仿真方法和系统。
背景技术
仿真是随时间演化实现模型的方法和过程。仿真技术的应用已有很久的历史,计算机的出现极大促进了仿真技术的发展。当前,仿真技术的应用日益广泛,在军事、科研、生产、娱乐等各个领域,正发挥着越来越重要的作用。关于仿真的分类,可以有多种方法。如按照模型的类型,可分为连续仿真、离散时间仿真和离散事件仿真;按逻辑时间与墙钟时间的关系可分为实时仿真、比例实时仿真和尽可能快的仿真;按仿真系统的运行方式可分为串行仿真和并行/分布仿真等。串行仿真是以一个线程或进程,逐个模拟事件链表内各行动过程,计算行动效能和结果,生成态势信息。根据并行的方式不同,并行仿真可以分为分布式并行仿真和共享内存式并行仿真。分布式并行仿真依靠分布式交互技术,在网络内多台计算机上,同时模拟事件队列内各行动过程,计算行动效能和结果,生成态势信息。共享内存式仿真依赖于计算机多核处理器,利用多线程技术,在同一台计算机内实施模拟。
离散事件仿真(Discrete Event Simulation,DES)是随时间演化实现离散事件系统模型的仿真。离散事件系统的状态改变都是由事件的发生引起的。事件的发生没有持续性,而是在一个时间点,瞬间完成。从仿真推进机制上,可分为时间驱动和事件驱动。在时间驱动的离散事件仿真中,仿真时间分为一串等长的时间步,仿真时间从一个时间步向下一个时间步推进。在事件驱动的离散事件仿真中,仿真时间从一个事件的发生时刻,推进到下一个事件的发生时刻,仿真时间推进具有跳跃性。
在作战仿真领域,仿真过程属于离散事件仿真的范畴,当前多数文献采用时间推进机制,如CN111597035A公开的基于多线程的时间推进方法,不足之处是仅使用多线程进行作战仿真推进,在加载作战方案/仿真方案时,没有使用多线程,当作战方案/仿真方案数据量较大时,用于加载的时间成本在整个仿真时间的比重将增加,而且创建的多线程生命周期为整个仿真引擎运行全过程,造成仿真主机的计算和存储资源的不必要开支。CN107193639A公开的一种支持联合作战的多核并行仿真引擎系统,采用分布式并行方式,但依赖一个包括多台仿真主机的计算机网络,仿真效率受到消息传递、时间统一和网络延迟等因素影响,而且仅依靠单台仿真主机不能实现仿真过程。因此,现有的作战仿真存在如下不足:
1、当仿真方案数据量较大时,传统的单线程加载与解析仿真方案,耗时较大,延迟现象明显。
2、当仿真事件执行时间段的并集没有覆盖所有仿真时间的时候,采用时间推进机制,因每一次都要遍历和判断所有事件,将导致过多的时间和算力开支,降低仿真效率。
3、当仿真事件或者仿真方案数量并没有达到大规模的体量时,采用分布式并行,并不一定能够提高太多的仿真效率。
发明内容
本发明的目的之一,在于提供一种基于混合推进的多线程并行作战仿真方法,该多线程并行作战仿真方法能够实现时间驱动和事件驱动的混合推进机制,适用大规模的仿真事件,仿真效率高,且不需要考虑网络延迟、时间统一等分布式并行效率的延迟因素。
本发明的目的之二,在于提供一种基于混合推进的多线程并行作战仿真系统。
为了达到上述目的之一,本发明采用如下技术方案实现:
一种基于混合推进的多线程并行作战仿真方法,所述多线程并行作战仿真方法包括如下步骤:
步骤一、创建一个引擎服务主线程;
步骤二、所述引擎服务主线程获取作战方案中的实体数量;
步骤三、所述引擎服务主线程根据仿真主机核心数和实体数量,创建一个第一分线程池;
步骤四、所述第一分线程池中各个第一分线程并行执行加载各个实体信息和仿真作战任务,并将所述各个实体的实体信息和仿真作战任务分别存储于实体队列和事件队列;
步骤五、所述引擎服务主线程销毁所述第一分线程池,以释放所述各个第一分线程;
步骤六、所述引擎服务主线程获取所述事件队列中各个仿真作战任务的作战时间,以获取时钟跳变时段集;
其中,所述时钟跳变时段集中各个时钟跳变时段为在对应的时钟跳变时段内没有仿真作战任务;
步骤七、所述引擎服务主线程根据所述仿真主机核心数和事件队列的大小,创建一个第二分线程池;
步骤八、所述引擎服务主线程将所述事件队列中各个仿真作战任务分配给所述第二分线程池中各个第二分线程,得到所述各个第二分线程的分事件队列;
步骤九、所述引擎服务主线程设置仿真参数;并根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻;
其中,所述仿真参数包括仿真时刻和仿真步长;
步骤十、所述各个第二分线程根据所述当前仿真时刻,对所述各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至所述各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止;
步骤十一、所述引擎服务主线程销毁所述第二分线程池,以释放所述各个第二分线程。
进一步的,步骤三中,所述第一分线程池中的第一分线程数量为:
Nthr1=min(Nent,2Ncpu-1);
其中,Nthr1为第一分线程数量;Nent为实体数量;Ncpu为仿真主机核心数。进一步的,步骤七中,所述第二分线程池中的第二分线程池数量为:
Nthr2=min(Neven,Ncpu-1);
其中,Nthr2为第二分线程数量;Neven为事件队列中的事件数量;Ncpu为仿真主机核心数。
进一步的,所述步骤十的具体实现过程包括:
步骤1001、所述引擎服务主线程设置历史事件队列初始为空;
步骤1002、所述引擎服务主线程判断所述当前仿真时刻是否处于所述时钟跳变时段集内,如是,则获取所述当前仿真时刻对应的时钟跳变时段,进入步骤1003;如否,则所述各个第二分线程并行从各自的分事件队列中逐个获取各自在所述当前仿真时刻对应的当前仿真作战任务,进入步骤1004;
步骤1003、所述引擎服务主线程将所述当前仿真时刻对应的时钟跳变时段的结束时间设置为当前仿真时刻,返回步骤1002;
步骤1004、所述各个第二分线程判断所述当前仿真时刻是否小于所述当前仿真作战任务的结束时刻,如是,则进入步骤1005;如否,则将所述当前仿真作战任务移动到所述历史事件队列中,进入步骤1006;
步骤1005、所述各个第二分线程依次并行调用仿真程序和并行执行仿真,并将并行执行仿真过程和结果缓存;
步骤1006、所述各个第二分线程判断各自的分事件队列中所有仿真作战任务是否均已执行仿真,如是,则挂起对应的所述第二分线程,进入步骤1007;如否,则所述各个第二分线程从各自的分事件队列中读取下一个仿真作战任务,返回步骤1005;
步骤1007、所述引擎服务主线程判断所有第二分线程是否均为挂起状态,如是,则所述引擎服务主线程根据预先设定的仿真步长,计算下一步仿真时刻并赋给所述当前仿真时刻,返回步骤1002;如否,则所述引擎服务主线程等待。
进一步的,所述步骤1005还包括:
当在并行执行仿真过程中出现提前完成的仿真作战任务时,则将所述仿真作战任务移动到历史事件队列中。
进一步的,所述步骤1005还包括:
当在并行执行仿真作战任务时,所述各个第二分线程判断是否产生新实体,并在判断为是时,将所述新实体补入到所述实体队列中;
所述各个第二分线程判断所述新实体是否有需要执行的仿真作战任务,并在判断为是时,将所述新实体对应的仿真作战任务补入到对应的分事件队列中;
所述各个第二分线程获取所述新实体对应的仿真作战任务的作战时间,以更新所述时钟跳变时段集。
为了达到上述目的之二,本发明采用如下技术方案实现:
一种基于混合推进的多线程并行作战仿真系统,所述多线程并行作战仿真系统包括:
第一创建模块,用于创建一个引擎服务主线程;
第一获取模块,用于所述引擎服务主线程获取作战方案中的实体数量;
第二创建模块,用于根据仿真主机核心数和实体数量,创建一个第一分线程池;
并行执行加载模块,用于第一分线程池中各个第一分线程并行执行加载各个实体信息和仿真作战任务,并将所述各个实体的实体信息和仿真作战任务分别存储于实体队列和事件队列;
第一销毁释放模块,用于所述引擎服务主线程销毁所述第一分线程池,以释放所述各个第一分线程;
第二获取模块,用于所述引擎服务主线程获取所述事件队列中各个仿真作战任务的作战时间,以获取时钟跳变时段集;
其中,所述时钟跳变时段集中各个时钟跳变时段为在对应的时钟跳变时段内没有仿真作战任务;
第三创建模块,用于所述引擎服务主线程根据所述仿真主机核心数和事件队列的大小,创建一个第二分线程池;
分配模块,用于所述引擎服务主线程将所述事件队列中各个仿真作战任务分配给所述第二分线程池中各个第二分线程,得到所述各个第二分线程的分事件队列;
设置模块,用于所述引擎服务主线程设置仿真参数;并根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻;
其中,所述仿真参数包括仿真时刻和仿真步长;
并行执行仿真模块,用于所述各个第二分线程池根据所述当前仿真时刻,对所述各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至所述各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止;
第二销毁释放模块,用于所述引擎服务主线程销毁所述第二分线程池,以释放所述各个第二分线程。
进一步的,所述并行执行仿真模块包括:
第一设置子模块,用于所述引擎服务主线程设置历史事件队列初始为空;
第一判断子模块,用于所述引擎服务主线程判断所述当前仿真时刻是否处于所述时钟跳变时段集内,如是,则获取所述当前仿真时刻对应的时钟跳变时段并传输给第二设置子模块;如否,则所述各个第二分线程并行从各自的分事件队列中逐个获取各自在所述当前仿真时刻对应的当前仿真作战任务,并将所述当前仿真时刻传输给第二判断子模块;
所述第二设置子模块,用于所述引擎服务主线程将所述当前仿真时刻对应的时钟跳变时段的结束时间设置为当前仿真时刻并传输给所述第一判断子模块;
所述第二判断子模块,用于所述各个第二分线程判断所述当前仿真时刻是否小于所述当前仿真作战任务的结束时刻,如是,则将所述当前仿真作战任务传输给并行调用子模块;如否,则将所述当前仿真作战任务移动到所述历史事件队列中,并所述当前仿真时刻传输给第三判断子模块;
所述并行调用子模块,用于所述各个第二分线程依次并行调用仿真程序和并行执行仿真,并将并行执行仿真过程和结果缓存;
所述第三判断子模块,用于所述各个第二分线程判断各自的分事件队列中所有仿真作战任务是否均已执行仿真,如是,则挂起对应的所述第二分线程并传输给第四判断子模块;如否,则所述各个第二分线程从各自的分事件队列中读取下一个仿真作战任务并传输给所述并行调用子模块;
所述第四判断子模块,用于所述引擎服务主线程判断所有第二分线程是否均为挂起状态,如是,则所述引擎服务主线程根据预先设定的仿真步长,计算下一步仿真时刻并赋给所述当前仿真时刻,并传输给所述第一判断子模块;如否,则所述引擎服务主线程等待。
进一步的,所述并行调用子模块,还用于当在并行执行仿真过程中出现提前完成的仿真作战任务时,则将所述仿真作战任务移动到历史事件队列中。
进一步的,所述并行调用子模块还包括:
第五判断子模块,用于当在并行执行仿真作战任务时,所述各个第二分线程判断是否产生新实体,并在判断为是时,将所述新实体补入到所述实体队列中;
第六判断子模块,用于所述各个第二分线程判断所述新实体是否有需要执行的仿真作战任务,并在判断为是时,将所述新实体对应的仿真作战任务补入到对应的分事件队列中;
确定子模块,用于所述引擎服务主线程获取所述新实体对应的仿真作战任务的作战时间,以更新所述时钟跳变时段集。
本发明的有益效果:
本发明通过引擎服务主线程创建的第一分线程池中的每个第一分线程,对各个实体信息和仿真作战任务并行执行加载,实现了多线程并行加载与解析仿真作战方案,提高了较大数据量的仿真方案加载与解析速度;本发明通过引擎服务主线程仿真参数和时钟跳变时段集,实时生成当前仿真时刻,推进仿真进程,通过引擎服务主线程将所述事件队列中各个仿真作战任务分配给第二分线程池中各个第二分线程,得到各个第二分线程的分事件队列;各个第二分线程根据当前仿真时刻,对各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止,实现了时间和事件的混合推进机制,有效地减少了算力开支,节约了时间成本,提升了离散事件仿真效率,适用大规模事件的仿真,且不需要考虑网络延迟、时间统一等分布式并行效率的延迟因素;本发明通过第一分线程,实现了实体信息和仿真作战任务的灵活加载,避免了所有实体信息和仿真作战任务的一次性加载,提高了作战仿真准备的效率,减少了不必要的内存开支。
附图说明
图1为本发明的基于混合推进的多线程并行作战仿真流程示意图。
具体实施方式
以下结合附图对本发明的具体实施方式作出详细说明。
本实施例给出了一种基于混合推进的多线程并行作战仿真方法,参考图1,该多线程并行作战仿真方法包括如下步骤:
步骤一、创建一个引擎服务主线程。
开始仿真时,本实施例首先创建一个引擎服务主线程(Main Thread),以控制整个作战仿真过程的仿真时钟,推进整个作战仿真过程。
步骤二、所述引擎服务主线程获取作战方案中的实体数量。
本实施例的引擎服务主线程从作战方案中选取待仿真的作战方案并抽取出实体数量。
步骤三、所述引擎服务主线程根据仿真主机核心数和实体数量,创建一个第一分线程池。
本实施例的引擎服务主线程根据仿真主机核心数以及实体数量,创建一个第一分线程池。第一分线程池中的第一分线程数量为:
Nthr1=min(Nent,2Ncpu-1);
其中,Nthr1为第一分线程数量;Nent为实体数量;Ncpu为仿真主机核心数。
本实施例中的实体包括火炮、飞机、通信电台、雷达、导引头以及各种类型的指挥机构。
步骤四、所述第一分线程池中各个第一分线程并行执行加载各个实体信息和仿真作战任务,并将所述各个实体的实体信息和仿真作战任务分别存储于实体队列和事件队列。
本实施例的引擎服务主线程将作战方案加载任务,交由第一分线程池中各个第一分线程并行执行,生成仿真实体信息(实体信息)和事件实例(即仿真作战任务),分别存储于实体队列和事件队列。
本实施例的实体信息包括位置(经度、纬度和高度)、姿态信息(水平方向、俯仰方向)、雷达截面积、受损状态信息、子实体和父实体等。
本实施例的仿真作战任务包括机动、爆炸、光学侦察、电子对抗侦察、通信干扰、雷达干扰和光电干扰以及情报融合、目标选择和任务分配,仿真作战任务信息包括行动开始时间、行动结束时间、行动开始触发模式、行动开始触发参数、行动结束触发模式和行动结束触发模式。
步骤五、所述引擎服务主线程销毁所述第一分线程池,以释放所述各个第一分线程。
当各个第一分线程并行执行加载任务执行完成后,本实施例的引擎服务主线程销毁第一分线程池,释放各个第一分线程和内存资源。
步骤六、所述引擎服务主线程获取所述事件队列中各个仿真作战任务的作战时间,以获取时钟跳变时段集。
本实施例的引擎服务主线程检索事件队列,生成时钟跳变时段集。本实施例的时钟跳变时段集中各个时钟跳变时段为在对应的时钟跳变时段内没有仿真作战任务。如作战方案中包括5个实体,红方包括2个实体,1个指挥机构和1个兵力实体,蓝方包括4个实体,2个指挥机构和2个兵力实体。双方指挥机构均无作战行动,双方兵力实体作战行动信息如下:
××飞机:第一个仿真作战任务为机动,开始时间1000秘,结束时间6000秒;第二个仿真作战任务为雷达干扰,开始时间1200秒,结束时间5800秒。
AN/FPS-117:第一个仿真作战任务为雷达探测:开始时间900秒,结束时间3000秒。
GE-592:第一个仿真作战任务为雷达探测:开始时间6500秒,结束时间8000秒。
通过上述行动开始、结束时间的并集,仿真任务的时间段为:1000秒-6000秒,6500秒-8000秒,时钟跳变时间段为:0秒-900秒,6000秒-6500秒。
步骤七、所述引擎服务主线程根据所述仿真主机核心数和事件队列的大小,创建一个第二分线程池。
本实施例由引擎服务主线控制,根据仿真主机核心数和事件队列的大小,创建一个第二线程池,推进仿真时钟。第二分线程池中的第二分线程池数量为:
Nthr2=min(Neven,Ncpu-1);
其中,Nthr2为第二分线程数量;Neven为事件队列中的事件数量;Ncpu为仿真主机核心数。
步骤八、所述引擎服务主线程将所述事件队列中各个仿真作战任务分配给所述第二分线程池中各个第二分线程,得到所述各个第二分线程的分事件队列。
引擎服务主线程将事件队列内事件每一个仿真步长的仿真作战任务,交由第二线程池内各个第二分线程执行。
步骤九、所述引擎服务主线程设置仿真参数;并根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻。
本实施例的仿真参数包括仿真时刻和仿真步长。引擎服务主线程根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻和当前仿真步长。
步骤十、所述各个第二分线程根据所述当前仿真时刻,对所述各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至所述各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止。
本实施例的各个第二分线程并行执行当前仿真步长的仿真作战任务,直至仿真暂停或结束。具体实现过程包括:
步骤1001、所述引擎服务主线程设置历史事件队列初始为空;
步骤1002、所述引擎服务主线程判断所述当前仿真时刻是否处于所述时钟跳变时段集内,如是,则获取所述当前仿真时刻对应的时钟跳变时段,进入步骤1003;如否,则所述各个第二分线程并行从各自的分事件队列中逐个获取各自在所述当前仿真时刻对应的当前仿真作战任务,进入步骤1004;
如走第1步,当前仿真时刻为5秒,处于第1个跳变时间段,则直接将仿真时刻跳变为900秒。
步骤1003、所述引擎服务主线程将所述当前仿真时刻对应的时钟跳变时段的结束时间设置为当前仿真时刻,返回步骤1002;
步骤1004、所述各个第二分线程判断所述当前仿真时刻是否小于所述当前仿真作战任务的结束时刻,如是,则进入步骤1005;如否,则将所述当前仿真作战任务移动到所述历史事件队列中,进入步骤1006;
步骤1005、所述各个第二分线程依次并行调用仿真程序和并行执行仿真,并将并行执行仿真过程和结果缓存;
步骤1006、所述各个第二分线程判断各自的分事件队列中所有仿真作战任务是否均已执行仿真,如是,则挂起对应的所述第二分线程,进入步骤1007;如否,则所述各个第二分线程从各自的分事件队列中读取下一个仿真作战任务,返回步骤1005;
本实施例的仿真作战任务是否均已执行仿真的判断方式包括结束时间和事件执行情况,如弹道导弹对某机场打击,开始和结束时间分别为100秒和2000秒,但在第1600秒时,弹道导弹已经飞抵机场,并完成轰炸,需要将结束时间和事件相结合来判断。
步骤1007、所述引擎服务主线程判断所有第二分线程是否均为挂起状态,如是,则所述引擎服务主线程根据预先设定的仿真步长,计算下一步仿真时刻并赋给所述当前仿真时刻,返回步骤1002;如否,则所述引擎服务主线程等待。
本实施例中的步骤1005还包括:
当在并行执行仿真过程中出现提前完成的仿真作战任务时,则将所述仿真作战任务移动到历史事件队列中。
在每一步长的仿真过程中,实时更新事件队列和时钟跳变时段。
本实施例中,步骤1005还包括:
1、当在并行执行仿真作战任务时,所述各个第二分线程判断是否产生新实体,并在判断为是时,将所述新实体补入到所述实体队列中。
如战斗机挂载的空空导弹不是单独的实体,不在实体队列内,在战斗机将空空导弹发射之后,成为单独的实体,需要补充入实体队列。
2、所述各个第二分线程判断所述新实体是否有需要执行的仿真作战任务,并在判断为是时,将所述新实体对应的仿真作战任务补入到对应的分事件队列中。
如战斗机刚开始有机动任务,但由于航程限制或者机动时间限制,到达最大航程或机动结束时间,根据作战方案的设置,可以触发返航事件(即返航任务),返航事件不是时间触发性质,不在事件队列内,被触发之后,将返航任务补充入分事件队列。
3、所述各个第二分线程获取所述新实体对应的仿真作战任务的作战时间,以更新所述时钟跳变时段集。
另外,当需要公布态势信息时,引擎服务主线程对外公布仿真过程所产生的仿真态势和控制报文。
步骤十一、所述引擎服务主线程销毁所述第二分线程池,以释放所述各个第二分线程。
当仿真结束时,销毁第二分线程池,释放各个第二分线程和内存资源。
本实施例通过引擎服务主线程创建的第一分线程池中的每个第一分线程,对各个实体信息和仿真作战任务并行执行加载,实现了多线程并行加载与解析仿真作战方案,提高了较大数据量的仿真方案加载与解析速度;本发明通过引擎服务主线程仿真参数和时钟跳变时段集,实时生成当前仿真时刻,推进仿真进程,通过引擎服务主线程将所述事件队列中各个仿真作战任务分配给第二分线程池中各个第二分线程,得到各个第二分线程的分事件队列;各个第二分线程根据当前仿真时刻,对各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止,实现了时间和事件的混合推进机制,有效地减少了算力开支,节约了时间成本,提升了离散事件仿真效率,适用大规模事件的仿真,且不需要考虑网络延迟、时间统一等分布式并行效率的延迟因素;本实施例通过第一分线程,实现了实体信息和仿真作战任务的灵活加载,避免了所有实体信息和仿真作战任务的一次性加载,提高了作战仿真准备的效率,减少了不必要的内存开支。
本实施例可以采用下面实施例给出的基于混合推进的多线程并行作战仿真系统实现:
另一实施例给出了一种基于混合推进的多线程并行作战仿真系统,该多线程并行作战仿真系统包括:
第一创建模块,用于创建一个引擎服务主线程;
第一获取模块,用于所述引擎服务主线程获取作战方案中的实体数量;
第二创建模块,用于根据仿真主机核心数和实体数量,创建一个第一分线程池;
并行执行加载模块,用于第一分线程池中各个第一分线程并行执行加载各个实体的实体信息和仿真作战任务,并将所述各个实体的实体信息和仿真作战任务分别存储于实体队列和事件队列;
第一销毁释放模块,用于所述引擎服务主线程销毁所述第一分线程池,以释放所述各个第一分线程;
第二获取模块,用于所述引擎服务主线程获取所述事件队列中各个仿真作战任务的作战时间,以获取时钟跳变时段集;
所述时钟跳变时段集中各个时钟跳变时段为在对应的时钟跳变时段内没有仿真作战任务;
第三创建模块,用于所述引擎服务主线程根据所述仿真主机核心数和事件队列的大小,创建一个第二分线程池;
分配模块,用于所述引擎服务主线程将所述事件队列中各个仿真作战任务分配给所述第二分线程池中各个第二分线程,得到所述各个第二分线程的分事件队列;
设置模块,用于所述引擎服务主线程设置仿真参数;并根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻;述仿真参数包括仿真时刻和仿真步长;
并行执行仿真模块,用于所述各个第二分线程池根据所述当前仿真时刻,对所述各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至所述各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止。
并行执行仿真模块包括:
第一设置子模块,用于所述引擎服务主线程设置历史事件队列初始为空;
第一判断子模块,用于所述引擎服务主线程判断所述当前仿真时刻是否处于所述时钟跳变时段集内,如是,则获取所述当前仿真时刻对应的时钟跳变时段并传输给第二设置子模块;如否,则所述各个第二分线程并行从各自的分事件队列中逐个获取各自在所述当前仿真时刻对应的当前仿真作战任务,并将所述当前仿真时刻传输给第二判断子模块;
所述第二设置子模块,用于所述引擎服务主线程将所述当前仿真时刻对应的时钟跳变时段的结束时间设置为当前仿真时刻并传输给所述第一判断子模块;
所述第二判断子模块,用于所述各个第二分线程判断所述当前仿真时刻是否小于所述当前仿真作战任务的结束时刻,如是,则将所述当前仿真作战任务传输给并行调用子模块;如否,则将所述当前仿真作战任务移动到所述历史事件队列中,并所述当前仿真时刻传输给第三判断子模块;
所述并行调用子模块,用于所述各个第二分线程依次并行调用仿真程序和并行执行仿真,并将并行执行仿真过程和结果缓存;
所述第三判断子模块,用于所述各个第二分线程判断各自的分事件队列中所有仿真作战任务是否均已执行仿真,如是,则挂起对应的所述第二分线程并传输给第四判断子模块;如否,则所述各个第二分线程从各自的分事件队列中读取下一个仿真作战任务并传输给所述并行调用子模块;
所述第四判断子模块,用于所述引擎服务主线程判断所有第二分线程是否均为挂起状态,如是,则所述引擎服务主线程根据预先设定的仿真步长,计算下一步仿真时刻并赋给所述当前仿真时刻,并传输给所述第一判断子模块;如否,则所述引擎服务主线程等待。
所述并行调用子模块,还用于当在并行执行仿真过程中出现提前完成的仿真作战任务时,则将所述仿真作战任务移动到历史事件队列中。
所述并行调用子模块还包括:
第五判断子模块,用于当在并行执行仿真作战任务时,所述各个第二分线程判断是否产生新实体,并在判断为是时,将所述新实体补入到所述实体队列中;
第六判断子模块,用于所述各个第二分线程判断所述新实体是否有需要执行的仿真作战任务,并在判断为是时,将所述新实体对应的仿真作战任务补入到对应的分事件队列中;
确定子模块,用于所述引擎服务主线程获取所述新实体对应的仿真作战任务的作战时间,以更新所述时钟跳变时段集。
第二销毁释放模块,用于所述引擎服务主线程销毁所述第二分线程池,以释放所述各个第二分线程。
上述实施例所涉及到的专业术语和公式均可通用,这里不在赘述。
以上实施方式仅用以说明本发明实施例的技术方案而非限制,尽管参照以上较佳实施方式对本发明实施例进行了详细说明,本领域的普通技术人员应当理解,可以对本发明实施例的技术方案进行修改或等同替换都不应脱离本发明实施例的技术方案的精神和范围。
Claims (10)
1.一种基于混合推进的多线程并行作战仿真方法,其特征在于,所述多线程并行作战仿真方法包括如下步骤:
步骤一、创建一个引擎服务主线程;
步骤二、所述引擎服务主线程获取作战方案中的实体数量;
步骤三、所述引擎服务主线程根据仿真主机核心数和实体数量,创建一个第一分线程池;
步骤四、所述第一分线程池中各个第一分线程并行执行加载各个实体信息和仿真作战任务,并将所述各个实体的实体信息和仿真作战任务分别存储于实体队列和事件队列;
步骤五、所述引擎服务主线程销毁所述第一分线程池,以释放所述各个第一分线程;
步骤六、所述引擎服务主线程获取所述事件队列中各个仿真作战任务的作战时间,以获取时钟跳变时段集;
其中,所述时钟跳变时段集中各个时钟跳变时段为在对应的时钟跳变时段内没有仿真作战任务;
步骤七、所述引擎服务主线程根据所述仿真主机核心数和事件队列的大小,创建一个第二分线程池;
步骤八、所述引擎服务主线程将所述事件队列中各个仿真作战任务分配给所述第二分线程池中各个第二分线程,得到所述各个第二分线程的分事件队列;步骤九、所述引擎服务主线程设置仿真参数;并根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻;
其中,所述仿真参数包括仿真时刻和仿真步长;
步骤十、所述各个第二分线程根据所述当前仿真时刻,对所述各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至所述各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止;
步骤十一、所述引擎服务主线程销毁所述第二分线程池,以释放所述各个第二分线程。
2.根据权利要求1所述的多线程并行作战仿真方法,其特征在于,步骤三中,所述第一分线程池中的第一分线程数量为:
Nthr1=min(Nent,2Ncpu-1);
其中,Nthr1为第一分线程数量;Nent为实体数量;Ncpu为仿真主机核心数。
3.根据权利要求2所述的多线程并行作战仿真方法,其特征在于,步骤七中,所述第二分线程池中的第二分线程池数量为:
Nthr2=min(Neven,Ncpu-1);
其中,Nthr2为第二分线程数量;Neven为事件队列中的事件数量;Ncpu为仿真主机核心数。
4.根据权利要求1~3中任意一项所述的多线程并行作战仿真方法,其特征在于,所述步骤十的具体实现过程包括:
步骤1001、所述引擎服务主线程设置历史事件队列初始为空;
步骤1002、所述引擎服务主线程判断所述当前仿真时刻是否处于所述时钟跳变时段集内,如是,则获取所述当前仿真时刻对应的时钟跳变时段,进入步骤1003;如否,则所述各个第二分线程并行从各自的分事件队列中逐个获取各自在所述当前仿真时刻对应的当前仿真作战任务,进入步骤1004;
步骤1003、所述引擎服务主线程将所述当前仿真时刻对应的时钟跳变时段的结束时间设置为当前仿真时刻,返回步骤1002;
步骤1004、所述各个第二分线程判断所述当前仿真时刻是否小于所述当前仿真作战任务的结束时刻,如是,则进入步骤1005;如否,则将所述当前仿真作战任务移动到所述历史事件队列中,进入步骤1006;
步骤1005、所述各个第二分线程依次并行调用仿真程序和并行执行仿真,并将并行执行仿真过程和结果缓存;
步骤1006、所述各个第二分线程判断各自的分事件队列中所有仿真作战任务是否均已执行仿真,如是,则挂起对应的所述第二分线程,进入步骤1007;如否,则所述各个第二分线程从各自的分事件队列中读取下一个仿真作战任务,返回步骤1005;
步骤1007、所述引擎服务主线程判断所有第二分线程是否均为挂起状态,如是,则所述引擎服务主线程根据预先设定的仿真步长,计算下一步仿真时刻并赋给所述当前仿真时刻,返回步骤1002;如否,则所述引擎服务主线程等待。
5.根据权利要求4所述的多线程并行作战仿真方法,其特征在于,所述步骤1005还包括:
当在并行执行仿真过程中出现提前完成的仿真作战任务时,则将所述仿真作战任务移动到历史事件队列中。
6.根据权利要求5所述的多线程并行作战仿真方法,其特征在于,所述步骤1005还包括:
当在并行执行仿真作战任务时,所述各个第二分线程判断是否产生新实体,并在判断为是时,将所述新实体补入到所述实体队列中;
所述各个第二分线程判断所述新实体是否有需要执行的仿真作战任务,并在判断为是时,将所述新实体对应的仿真作战任务补入到对应的分事件队列中;
所述各个第二分线程获取所述新实体对应的仿真作战任务的作战时间,以更新所述时钟跳变时段集。
7.一种基于混合推进的多线程并行作战仿真系统,其特征在于,所述多线程并行作战仿真系统包括:
第一创建模块,用于创建一个引擎服务主线程;
第一获取模块,用于所述引擎服务主线程获取作战方案中的实体数量;
第二创建模块,用于根据仿真主机核心数和实体数量,创建一个第一分线程池;
并行执行加载模块,用于第一分线程池中各个第一分线程并行执行加载各个实体信息和仿真作战任务,并将所述各个实体的实体信息和仿真作战任务分别存储于实体队列和事件队列;
第一销毁释放模块,用于所述引擎服务主线程销毁所述第一分线程池,以释放所述各个第一分线程;
第二获取模块,用于所述引擎服务主线程获取所述事件队列中各个仿真作战任务的作战时间,以获取时钟跳变时段集;
其中,所述时钟跳变时段集中各个时钟跳变时段为在对应的时钟跳变时段内没有仿真作战任务;
第三创建模块,用于所述引擎服务主线程根据所述仿真主机核心数和事件队列的大小,创建一个第二分线程池;
分配模块,用于所述引擎服务主线程将所述事件队列中各个仿真作战任务分配给所述第二分线程池中各个第二分线程,得到所述各个第二分线程的分事件队列;
设置模块,用于所述引擎服务主线程设置仿真参数;并根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻;
其中,所述仿真参数包括仿真时刻和仿真步长;
并行执行仿真模块,用于所述各个第二分线程池根据所述当前仿真时刻,对所述各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至所述各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止;
第二销毁释放模块,用于所述引擎服务主线程销毁所述第二分线程池,以释放所述各个第二分线程。
8.根据权利要求7所述的多线程并行作战仿真系统,其特征在于,所述并行执行仿真模块包括:
第一设置子模块,用于所述引擎服务主线程设置历史事件队列初始为空;
第一判断子模块,用于所述引擎服务主线程判断所述当前仿真时刻是否处于所述时钟跳变时段集内,如是,则获取所述当前仿真时刻对应的时钟跳变时段并传输给第二设置子模块;如否,则所述各个第二分线程并行从各自的分事件队列中逐个获取各自在所述当前仿真时刻对应的当前仿真作战任务,并将所述当前仿真时刻传输给第二判断子模块;
所述第二设置子模块,用于所述引擎服务主线程将所述当前仿真时刻对应的时钟跳变时段的结束时间设置为当前仿真时刻并传输给所述第一判断子模块;
所述第二判断子模块,用于所述各个第二分线程判断所述当前仿真时刻是否小于所述当前仿真作战任务的结束时刻,如是,则将所述当前仿真作战任务传输给并行调用子模块;如否,则将所述当前仿真作战任务移动到所述历史事件队列中,并所述当前仿真时刻传输给第三判断子模块;
所述并行调用子模块,用于所述各个第二分线程依次并行调用仿真程序和并行执行仿真,并将并行执行仿真过程和结果缓存;
所述第三判断子模块,用于所述各个第二分线程判断各自的分事件队列中所有仿真作战任务是否均已执行仿真,如是,则挂起对应的所述第二分线程并传输给第四判断子模块;如否,则所述各个第二分线程从各自的分事件队列中读取下一个仿真作战任务并传输给所述并行调用子模块;
所述第四判断子模块,用于所述引擎服务主线程判断所有第二分线程是否均为挂起状态,如是,则所述引擎服务主线程根据预先设定的仿真步长,计算下一步仿真时刻并赋给所述当前仿真时刻,并传输给所述第一判断子模块;如否,则所述引擎服务主线程等待。
9.根据权利要求8所述的多线程并行作战仿真系统,其特征在于,所述并行调用子模块,还用于当在并行执行仿真过程中出现提前完成的仿真作战任务时,则将所述仿真作战任务移动到历史事件队列中。
10.根据权利要求8所述的多线程并行作战仿真系统,其特征在于,所述并行调用子模块还包括:
第五判断子模块,用于当在并行执行仿真作战任务时,所述各个第二分线程判断是否产生新实体,并在判断为是时,将所述新实体补入到所述实体队列中;
第六判断子模块,用于所述各个第二分线程判断所述新实体是否有需要执行的仿真作战任务,并在判断为是时,将所述新实体对应的仿真作战任务补入到对应的分事件队列中;
确定子模块,用于所述引擎服务主线程获取所述新实体对应的仿真作战任务的作战时间,以更新所述时钟跳变时段集。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210664895.3A CN114757057B (zh) | 2022-06-14 | 2022-06-14 | 一种基于混合推进的多线程并行作战仿真方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210664895.3A CN114757057B (zh) | 2022-06-14 | 2022-06-14 | 一种基于混合推进的多线程并行作战仿真方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114757057A CN114757057A (zh) | 2022-07-15 |
CN114757057B true CN114757057B (zh) | 2022-08-23 |
Family
ID=82336921
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210664895.3A Active CN114757057B (zh) | 2022-06-14 | 2022-06-14 | 一种基于混合推进的多线程并行作战仿真方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114757057B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116521339B (zh) * | 2023-04-26 | 2024-07-05 | 中国人民解放军92942部队 | 一种面向多用户并发访问的信号级仿真实现方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103377082A (zh) * | 2012-04-27 | 2013-10-30 | 国际商业机器公司 | 对离散事件仿真进行调度的方法和装置 |
CN107193639A (zh) * | 2017-06-05 | 2017-09-22 | 北京航空航天大学 | 一种支持联合作战的多核并行仿真引擎系统 |
CN107315889A (zh) * | 2017-07-12 | 2017-11-03 | 北京华如科技股份有限公司 | 仿真引擎的性能测试方法及存储介质 |
CN111177893A (zh) * | 2019-12-11 | 2020-05-19 | 中电普信(北京)科技发展有限公司 | 基于多线程的并行离散仿真事件驱动方法及装置 |
CN111597035A (zh) * | 2020-04-15 | 2020-08-28 | 北京仿真中心 | 基于多线程的仿真引擎时间推进方法及系统 |
CN113312802A (zh) * | 2021-07-29 | 2021-08-27 | 中国人民解放军国防科技大学 | 一种基于异构系统的联合仿真方法和装置 |
-
2022
- 2022-06-14 CN CN202210664895.3A patent/CN114757057B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103377082A (zh) * | 2012-04-27 | 2013-10-30 | 国际商业机器公司 | 对离散事件仿真进行调度的方法和装置 |
CN107193639A (zh) * | 2017-06-05 | 2017-09-22 | 北京航空航天大学 | 一种支持联合作战的多核并行仿真引擎系统 |
CN107315889A (zh) * | 2017-07-12 | 2017-11-03 | 北京华如科技股份有限公司 | 仿真引擎的性能测试方法及存储介质 |
CN111177893A (zh) * | 2019-12-11 | 2020-05-19 | 中电普信(北京)科技发展有限公司 | 基于多线程的并行离散仿真事件驱动方法及装置 |
CN111597035A (zh) * | 2020-04-15 | 2020-08-28 | 北京仿真中心 | 基于多线程的仿真引擎时间推进方法及系统 |
CN113312802A (zh) * | 2021-07-29 | 2021-08-27 | 中国人民解放军国防科技大学 | 一种基于异构系统的联合仿真方法和装置 |
Non-Patent Citations (2)
Title |
---|
"一种基于作战编成并行仿真方法及其实现";谭亚新等;《系统仿真学报》;20191130;全文 * |
平行仿真技术在指控系统中的应用构想;窦林涛等;《指挥控制与仿真》;20170215(第01期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114757057A (zh) | 2022-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107193639B (zh) | 一种支持联合作战的多核并行仿真引擎系统 | |
CN112295229B (zh) | 一种智能博弈对抗平台 | |
CN105653789B (zh) | 一种异构仿真方法 | |
CN113705102B (zh) | 海空集群对抗的推演仿真系统及方法、设备、存储介质 | |
CN113791634A (zh) | 一种基于多智能体强化学习的多机空战决策方法 | |
CN114757057B (zh) | 一种基于混合推进的多线程并行作战仿真方法和系统 | |
CN114326827B (zh) | 一种无人机集群多任务动态分配方法及系统 | |
CN112619162B (zh) | 一种资源对象管理方法、装置、电子设备和存储介质 | |
CN112287521A (zh) | 一种智能作战装备决策平台 | |
CN118171572A (zh) | 无人机集群演进式的仿真训练方法、系统、介质及设备 | |
Hall et al. | Joint MEASURE: Distributed simulation issues in a mission effectiveness analytic simulator | |
CN114662213A (zh) | 一种基于模型的可视化导弹突防概率验证方法及装置 | |
Wang et al. | Research on naval air defense intelligent operations on deep reinforcement learning | |
CN109116990B (zh) | 一种移动控制的方法、装置、设备及计算机可读存储介质 | |
Pan et al. | Modeling and Enhancement of General Dynamics F-16 Fighting Falcon Missile Launching System Based on Petri Nets | |
Wallace et al. | Timing and its Implementation in a Language, Communication, and Systems Integration SDK and Platform for Intelligent Entities and Robotics | |
Li et al. | A study on the behavior modeling method of helicopter force | |
Wang | The design of scene simulation system based on MFC programming framework | |
CN112699603A (zh) | 一种面向机器学习的超快速空战仿真方法及系统 | |
Stytz et al. | An architecture to support large numbers of computer-generated actors for distributed virtual environments | |
CN118350066A (zh) | 面向服务的多核并行仿真训练引擎及其仿真处理方法 | |
Zhou et al. | Swarm UAV scene simulation based on differential flatness and swarm intelligence | |
Yuan et al. | Research on 3D Simulation Technology of Multi-fragment Damage Assessment Based on Distributed Computing | |
Temte | Object-oriented design and ballistics software | |
Nenno Jr et al. | Corps Support Weapon System C3I Simulator |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |