发明名称 一种虚拟试验运行控制方法
摘要 本发明公开了一种虚拟试验运行控制方法,目的是解决虚拟试验的并行控制问题。技术方案是构建由主控节点和计算节点组成的虚拟试验运行控制系统,主控节点上安装主控软件、主控适配器、数据库,计算节点上安装模型适配器和模型;主控软件进行初始化工作并创建消息缓冲区;主控软件的循环分支起始运行模型启动模块生成同步点数组,并启动仿真块的所有循环分支起始运行模型;主控软件的消息处理和虚拟试验运行控制模块根据从消息缓冲区读取的消息对虚拟试验运行进行控制;仿真块调度控制模块执行仿真块调度控制。本发明可解决不同时间段运行不同模型、不同步长计算的模型之间正确交互信息的问题,保证了虚拟试验的正确性,提高了运行效率。<pb pnum="1" />
申请公布号 CN106134474B 申请公布日期 2014.10.22
申请号 CN201218001015.1 申请日期 2012.04.17
申请人 中国人民解放军国防科学技术大学 发明人 姚益平;蒋志文;鄢来斌;彭绍亮;刘步权;曲庆军;曾亮;蔡勋;朱峰
分类号 G06F9/455(2006.01)I 主分类号 G06F9/455(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 一种虚拟试验运行控制方法,其特征在于包括以下步骤:第一步,构建虚拟试验运行控制系统,该系统由多个节点构成,每个节点均是计算机,指定一个节点为主控节点,其它节点为计算节点,主控节点与每个计算节点相连;主控节点上安装有主控软件、主控适配器、数据库,数据库中包含虚拟试验运行控制表、初始化参数表、参数表,每个计算节点上安装有一个模型适配器和若干个模型;虚拟试验运行控制表是用于虚拟试验运行控制的数据库表,每个表项包括下列域:模型名、仿真块号、循环分支号、起始运行模型标志、下一模型名、步长、起始时间、结束时间、IP地址、模型状态、初始化标志、同步线程创建标志、模型执行文件名;其中,模型名域存放模型的名字;仿真块号域存放模型所在仿真块的序号,从1开始编号;循环分支号域存放模型所在循环分支的序号,每个仿真块的循环分支号都从1开始编号;起始运行模型标志域表示模型是否为循环分支的起始运行模型,如模型为循环分支的起始运行模型,其起始运行模型标志域为1,否则其起始运行模型标志域为0;下一模型名域存放下一个模型的名字;步长域存放模型计算的步长、起始时间域存放模型的起始运行时间;结束时间域存放模型的结束运行时间;IP地址域存放模型所在节点的IP地址;模型状态域表示模型是否已启动,模型启动后其模型状态域置为1,否则其模型状态域为0;初始化标志域表示模型是否已用初始化参数进行了初始化,模型初始化完成后其初始化标志域置为1,否则其初始化标志域为0;同步线程创建标志域表示模型所在循环分支的同步线程是否已创建,同步线程创建标志域的缺省值为0,某个循环分支的同步线程<pb pnum="1" />创建后,该循环分支对应的所有模型的同步线程创建标志域均置为1;模型执行文件名域存放模型执行文件的路径和文件名;初始化参数表是用于对模型的参数进行初始化的数据库表,初始化参数表的表项有模型名、参数名、参数类型、参数值这四个域;模型名域存放模型的名字,参数名域存放参数的名字;参数类型域存放参数的数据类型;参数值域存放参数的值;参数表是存放模型的参数的数据库表,表项有模型名、参数名、参数类型、参数值、更新标志这五个域;模型名域存放模型的名字;参数名域存放参数的名字;参数类型域存放参数的数据类型;参数值域存放参数的值;更新标志域表示参数是否更新,更新标志表项的缺省值为0,参数更新后,该参数对应的更新标志置为1,该参数使用后对应的更新标志由置为0;虚拟试验运行控制表、初始化参数表、参数表在虚拟试验运行前由用户创建,虚拟试验运行控制表中的模型名、仿真块号、循环分支号、起始运行模型标志、下一模型名、步长、起始时间、结束时间、IP地址、模型执行文件名域,初始化参数表的所有域,参数表中的模型名、参数名、参数类型域均由用户输入,未人工输入的域缺省值为0;主控软件是对虚拟试验进行控制的软件,由初始化模块、循环分支起始运行模型启动模块、消息处理和虚拟试验运行控制模块、仿真块调度控制模块组成;主控适配器是管理主控节点与计算节点通信的软件,由第一数据发送模块、第一数据接收模块组成;模型适配器是管理计算节点与主控节点通信及模型启动和退出的软件,由第二数据接收模块、第二数据发送模块组成;<pb pnum="2" />初始化模块与循环分支起始运行模型启动模块、虚拟试验运行控制表、参数表相连;初始化模块从虚拟试验运行控制表获取虚拟试验第1个仿真块的循环分支个数,即仿真块号域为1时循环分支号域的最大值,并将该循环分支个数送给循环分支起始运行模型启动模块;将仿真块号送给循环分支起始运行模型启动模块;将虚拟试验运行控制表中模型状态域和同步线程创建标志域均置为0;将初始化标志域置为1;将第1仿真块的起始运行模型的初始化标志域置为0,即将所有仿真块号域为1和起始运行模型标志为1时的所有初始化标志域置为0;将参数表的更新标志域全部置为0;循环分支起始运行模型启动模块与初始化模块、消息处理和虚拟试验运行控制模块、仿真块调度控制模块、第一数据发送模块、虚拟试验运行控制表相连;循环分支起始运行模型启动模块最初从初始化模块获取仿真块号和仿真块的循环分支个数,在仿真块调度控制模块运行后,则从仿真块调度控制模块获取仿真块号和仿真块的循环分支个数;循环分支起始运行模型启动模块一方面将收到的仿真块号和仿真块的循环分支个数发送给消息处理和虚拟试验运行控制模块,一方面根据仿真块号和仿真块的循环分支个数从虚拟试验运行控制表的步长域获得当前仿真块的所有循环分支的步长,生成用于当前仿真块内各个循环分支之间的同步控制的同步点数组TBSZ[],并将TBSZ[]送消息处理和虚拟试验运行控制模块,TBSZ[]的元素是当前仿真块内各个循环分支完成一次计算后需进行同步控制的时间;同时,循环分支起始运行模型启动模块根据仿真块号、循环分支号从虚拟试验运行控制表获得起始运行<pb pnum="3" />模型标志为1的仿真块的循环分支起始运行模型的模型名、模型执行文件名和模型所在节点的IP地址,将循环分支起始运行模型的模型名和模型执行文件名组合成循环分支起始运行模型的模型启动指令,将循环分支起始运行模型的模型启动指令和模型所在节点的IP地址发送给第一数据发送模块;消息处理和虚拟试验运行控制模块与循环分支起始运行模型启动模块、仿真块调度控制模块、第一数据发送模块、第一数据接收模块、虚拟试验运行控制表、初始化参数表、参数表相连;消息处理和虚拟试验运行控制模块从循环分支起始运行模型启动模块获得同步点数组TBSZ[]用于同步控制,从循环分支起始运行模型启动模块获得仿真块号送仿真块调度控制模块;从第一数据接收模块获得消息,从消息中获得模型名,该模型名设为M_name1;当消息是模型启动成功消息时,根据模型名从虚拟试验运行控制表的循环分支号域、IP地址域、初始化标志域获得模型的循环分支号、所在节点的IP地址和初始化标志,当初始化标志为0时,从初始化参数表的参数名域和参数值域获得模型的所有参数名和参数值组合成参数数据包;当初始化标志为1时,从参数表的参数名域和参数值域获得模型的所有参数名和参数值组合成参数数据包;将模型名、仿真时间和参数数据包组合成模型开始计算指令,将模型开始计算指令送第一数据发送模块;当消息是模型已完成一次计算时,从消息中获得模型输出的所有参数名和参数值,送参数表,并置对应的更新标志域的值为1;从虚拟试验运行控制表获得模型的下一个模型的模型名,该模型名设为M_name2,当M_name2未启动时,从虚拟试验运行控制表的模型执行文件名域和IP地址域获得M_name2的模型执行文件名和所在节点的IP地址,将模型名M_name2和模<pb pnum="4" />型执行文件名组合成除循环分支起始运行模型以外的模型的模型启动指令,将该模型启动指令和M_name2所在节点的IP地址发送给第一数据发送模块;当仿真块完成所有模型计算时,消息处理和虚拟试验运行控制模块从虚拟试验运行控制表的模型名域和IP地址域获得模型名和模型所在节点的IP地址,将模型名组合成模型退出指令,将模型退出指令和模型所在节点的IP地址发送给第一数据发送模块;仿真块调度控制模块与循环分支起始运行模型启动模块、消息处理和虚拟试验运行控制模块、虚拟试验运行控制表相连;仿真块调度控制模块从消息处理和虚拟试验运行控制模块获得仿真块号k,从虚拟试验运行控制表获得仿真块号域为k+1表项的起始时间和循环分支个数,并将仿真块号k+1和仿真块号域为k+1表项的循环分支个数送循环分支起始运行模型启动模块;第一数据发送模块与循环分支起始运行模型启动模块、消息处理和虚拟试验运行控制模块、所有计算节点的第二数据接收模块相连;从循环分支起始运行模型启动模块获得循环分支起始运行模型的模型启动指令,根据循环分支起始运行模型所在节点的IP地址将循环分支起始运行模型的模型启动指令送循环分支起始运行模型所在计算节点的第二数据接收模块;从消息处理和虚拟试验运行控制模块获得除循环分支起始运行模型以外的模型的模型启动指令、模型退出指令、模型开始计算指令,根据循环分支起始运行模型以外的模型所在节点的IP地址将除循环分支起始运行模型以外的模型的模型启动指令、模型退出指令、模型开始计算指令送除循环分支起始运行模型以外的模型所在计算节点的第二数据接收模块;<pb pnum="5" />第二数据接收模块与所在计算节点第二数据发送模块及若干个模型相连,并与主控节点的第一数据发送模块相连;从第一数据发送模块接收模型启动指令、模型退出指令、模型开始计算指令,使模型启动或退出,将模型开始计算指令送给模型,并使模型执行一次计算;将模型启动成功、模型启动失败、模型退出成功、模型退出失败的消息送所在计算节点第二数据发送模块;第二数据发送模块与所在计算节点的第二数据接收模块及若干个模型相连,同时与主控节点的第一数据接收模块相连,第二数据发送模块接收来自所在计算节点第二数据接收模块的模型启动成功、模型启动失败、模型退出成功、模型退出失败的消息,从所在计算节点的若干个模型接收模型已完成一次计算消息和模型计算异常消息,将这些消息送主控节点的第一数据接收模块;模型已完成一次计算消息由模型名和模型输出的所有参数名和参数值组合成;模型是进行模型计算的软件,模型与所在计算节点的第二数据接收模块、第二数据发送模块相连,模型根据从所在计算节点的第二数据接收模块接收模型启动指令启动,根据模型退出指令退出,根据接收的模型开始计算指令执行一次计算,并将模型已完成一次计算消息及模型计算异常消息送所在计算节点第二数据发送模块;第二步主控节点运行主控软件,初始化模块按步骤2.1‑2.3进行虚拟试验初始化工作,同时,第一数据接收模块按步骤2.4创建消息缓冲区;具体方法如下:2.1将虚拟试验运行控制表中模型状态域和同步线程创建标志域全部置为<pb pnum="6" />0;将参数表的更新标志域全部置为0;将初始化标志域置全部为1;设置使所有同步控制线程退出的标志exitflag=0;2.2令仿真块号k=1;查询虚拟试验运行控制表,获得仿真块号域为k时循环分支号域的最大值,并将该最大值赋给第k仿真块的循环分支个数NUM_LP,NUM_LP≥1;置虚拟试验运行控制表中仿真块号域为1和起始运行模型标志为1时的所有初始化标志域为0;2.3查询虚拟试验运行控制表,获得所有表项的仿真块号域的最大值,将该最大值赋给虚拟试验的仿真块的个数NUM_SB,NUM_SB≥1;2.4第一数据接收模块申请一片内存作为消息缓冲区用于存放来自所有计算节点的消息;第三步,循环分支起始运行模型启动模块生成第k仿真块的同步点数组,并启动第k仿真块的所有循环分支起始运行模型,步骤如下:3.1将变量i设置为1;将运行结束的循环分支个数endlpnum设置为0;3.2查询虚拟试验运行控制表,获得仿真块号域的值为k时结束时间域的值,将结束时间域的值赋给第k个仿真块的结束时间TEND;3.3查询虚拟试验运行控制表,获得仿真块号域的值为k、循环分支号域的值为1到NUM_LP时步长域的值,将这些值赋值给步长数组L[],L[j]为第j个循环分支的步长,1≤j≤NUM_LP;3.4根据仿真块内各个循环分支之间的步长两两成倍数关系,生成第k个仿真块的同步点数组TBSZ[],方法是:将步长数组L[]的各元素按从小到大的顺序排序,令排序后第二个值,即第二小的步长为SL,TBSZ[]的元素是SL,2*SL,……,n*SL,TBSZ[]的元素个数为n=[TEND/SL],TBSZ[n]=n*SL;<pb pnum="7" />3.5设置第i个循环分支的同步点数组TBSZ[]的索引值Tbinx[i]=0,设置第i个循环分支的同步标志Tbflag[i]=0;3.6查询虚拟试验运行控制表,获得仿真块号域的值为k、循环分支号域的值为i时的起始时间域的值,将起始时间域的值赋给T[i];3.7查询虚拟试验运行控制表,获得第k个仿真块的第i个循环分支的起始模型的模型名、模型执行文件名和所在节点的IP地址;具体方法是:获得仿真块号域的值为k、循环分支号域的值为i、起始运行模型标志域的值为1时的模型名域的值、模型执行文件名域的值和IP地址域的值,将模型名域的值赋给M_name,将模型执行文件名域的值赋给exefile,将IP地址域的值赋给ip_addr;3.8将模型名M_name和模型执行文件名exefile组合成模型启动指令,将ip_addr和模型启动指令发送给第一数据发送模块;3.9采用模型启动方法用ip_addr和模型启动指令作为实际参数启动模型,方法是:3.9.1第一数据发送模块根据ip_addr将模型启动指令发送给模型所在计算节点;3.9.2模型所在计算节点的第二数据接收模块在收到模型启动指令后启动模型,并将启动情况发送给模型所在计算节点的第二数据发送模块,启动情况有:模型启动成功、模型启动失败;3.9.3模型所在计算节点的第二数据发送模块接收到启动情况后,将启动情况分别转变成模型启动成功消息、模型启动失败消息,并将该消息发送给第一数据接收模块;3.9.4第一数据接收模块在收到模型启动成功消息或模型启动失败消息<pb pnum="8" />后,将该消息保存到消息缓冲区;3.10置i=i+1,指向下一个循环分支;判定i≤NUM_LP是否成立,若成立,表示对第k个仿真块的所有循环分支的起始运行模型的启动还未完成,转3.5,否则执行第四步;第四步:消息处理和虚拟试验运行控制模块从消息缓冲区读取消息,根据消息类型对虚拟试验运行进行控制,具体步骤如下:4.1判定消息缓冲区是否为空,若为空,转4.1,等待;若不为空,从消息缓冲区获得一个消息;4.2当消息是模型启动成功消息时,转4.6;否则,执行4.3;4.3当消息是模型启动失败消息时,报告错误,转5.5;否则,执行4.4;4.4当消息是模型已完成一次计算时,转4.14;否则,执行4.5;4.5当消息是模型退出成功时,转4.38;否则,表示模型退出失败或计算异常,报告错误,转5.5;4.6从消息中获得模型名,将该模型名赋给M_name1;查询虚拟试验运行控制表,将模型名域为M_name1的表项的模型状态域的值置为1,表示该模型已启动;4.7查询虚拟试验运行控制表,获得模型名域为M_name1的表项的循环分支号域的值、IP地址域的值、初始化标志域的值,将该循环分支号域的值赋给i1,将IP地址域的值赋给ip_addr,将初始化标志域的值赋给ini_flag;如果ini_flag为0,表示需给M_name1模型传递初始化参数,执行4.8;否则,表示需给M_name1模型传递参数,转4.9;4.8查询初始化参数表,获得模型名域为M_name1时的所有参数名域和参<pb pnum="9" />数值域的值并组合成参数数据包,转4.11;4.9查询参数表,如果模型名域为M_name1时所有更新标志域的值全为1,表示M_name1模型从其它模型来的所有参数已到齐,执行4.10;否则,将M_name1和仿真时间T[i1]加入等待参数模型链表;转4.1;4.10查询参数表,获得模型名域为M_name1时的所有参数名域和参数值域的值并组合成参数数据包;4.11将开始计算指令标志、模型名M_name1、仿真时间T[i1]和参数数据包组合成模型开始计算指令,将该指令发送给第一数据发送模块;4.12用ip_addr和模型开始计算指令作为实际参数使模型执行一次计算,方法是:4.12.1第一数据发送模块根据ip_addr将模型开始计算指令发送给模型所在计算节点的第二数据接收模块;4.12.2模型所在计算节点的第二数据接收模块接收开始计算指令,并发送给模型;4.12.3模型根据接收到的参数数据包执行一次计算,模型计算完成后,将模型名、模型已完成一次计算的消息类型及模型所有输出的参数名和参数值组合成模型已完成一次计算消息,并发送给模型所在计算节点的第二数据发送模块;4.12.4模型所在计算节点的第二数据发送模块将模型已完成一次计算消息发送给第一数据接收模块;4.12.5第一数据接收模块在收到模型已完成一次计算消息后,将该消息保<pb pnum="10" />存到消息缓冲区;4.13转4.1;4.14从消息中获得M_name1模型输出的所有参数名和参数值,更新参数表中这些参数名对应的参数值域,并置对应的更新标志域的值为1;4.15若等待参数模型链表为空,转4.21;否则,从等待参数模型链表头获得一个模型名和仿真时间,将该模型名赋给W_name;4.16查询参数表,如果模型名域为W_name时所有更新标志域的值全为1,表示W_name模型从其它模型来的所有参数已到齐,将W_name对应表项从等待参数模型链表删除,执行4.17;否则,转4.20;4.17查询参数表,获得模型名域为W_name时的所有参数名域和参数值域的值并组合成参数数据包;4.18用开始计算指令标志、模型名W_name、仿真时间和参数数据包组合成模型开始计算指令;将该指令发送给第一数据发送模块;4.19用ip_addr和模型开始计算指令作为实际参数采用4.12所述的使模型执行一次计算方法使W_name模型执行一次计算;4.20从等待参数模型链表获得下一个模型名和相应的仿真时间,若下一个模型名为空,说明等待参数模型链表查询完毕,执行4.21;否则,将该模型名赋给W_name;转4.16;4.21查询虚拟试验运行控制表,获得模型名域为M_name1时的下一模型名域的值,将下一模型名域的值赋给M_name2;4.22查询虚拟试验运行控制表,获得模型名域的值为M_name2时起始运<pb pnum="11" />行模型标志域的值、IP地址域的值、模型状态域的值、同步线程创建标志域的值和模型执行文件名域的值,将起始运行模型标志域的值赋给st_flag、IP地址域的值赋给ip_addr、模型状态域的值赋给state、同步线程创建标志域的值赋给th_flag;将模型执行文件名域的值赋给exefile;4.23若st_flag为0,表示M_name2模型不是第k个仿真块的循环分支i1的起始模型,执行4.24;若st_flag为1,表示M_name2模型是第k个仿真块的循环分支i1的起始模型,在M_name1模型完成一次计算后,循环分支i1的所有模型已完成了一次计算,转4.29;4.24如state为0,表示M_name2模型未启动,执行4.25;如state为1,表示M_name2模型已启动,转4.27;4.25将模型启动标志、模型名M_name2和模型执行文件名exefile组合成模型启动指令,并发送给第一数据发送模块;4.26用ip_addr和模型启动指令作为实际参数采用第3.9步所述的模型启动方法启动M_name2模型;转4.1;4.27查询参数表,获得模型名域为M_name2时的所有参数名域和参数值域的值并生成参数数据包;4.28用开始计算指令标志、模型名M_name2、仿真时间和参数数据包组合成模型开始计算指令;将该指令发送给第一数据发送模块;4.29用ip_addr和模型开始计算指令作为实际参数采用4.12所述的使模型执行一次计算方法使M_name2模型执行一次计算;转4.1;4.30若(T[i1]+L[i1])>TEND,表示循环分支i1的所有模型的计算任务<pb pnum="12" />已经完成,转4.34;否则,执行4.31;4.31置循环分支i1的同步标志TBflag[i1]=1,表示循环分支i1的所有模型已完成了一次计算,需运行同步控制线程S<sub>i1</sub>进行同步控制;4.32若th_flag为1,表示同步控制线程S<sub>i1</sub>已创建,转4.1;若th_flag为0,表示同步控制线程S<sub>i1</sub>未创建,执行4.33;4.33,创建并运行同步控制线程S<sub>i1</sub>,i1为循环分支号,i1是同步控制线程S<sub>i1</sub>的参数;转4.1;同步控制线程S<sub>i1</sub>的执行过程如下:4.33.1如果TBflag[i1]>0,表示循环分支i1需进行同步操作,执行4.33.2;否则,如果exitflag=0,转4.33.1等待,如果exitflag=1,退出同步控制线程;4.33.2用循环分支i1的同步点数组索引值Tbinx[i1]从同步点数组获得当前同步点TBD,即TBD=TBSZ[Tbinx[i1]];令TBflag[i1]=0;4.33.3如果(T[i1]+L[i1])<TBD,表示循环分支i1的计算未达到同步点,不执行同步处理,转4.33.14;否则执行4.33.4;4.33.4如果(T[i1]+L[i1])=TBD,转4.33.8,否则,循环分支i1的计算超过了同步点,执行4.33.5;4.33.5将i1放入等待链表;令同步控制线程Si1的等待标志Wflag[i1]=1;4.33.6将循环分支i1的同步点数组的索引值指向下一个同步点,方法是:采用T[i1]+L[i1]作为同步点值查找TBSZ[],得到TBSZ[]的索引值x,0≤x<n,n是TBSZ[]的元素个数,令Tbinx[i1]=x;4.33.7转4.33.11;4.33.8将循环分支号i1放入同步链表,表示循环分支i1的计算达到同步点,需等待其它循环分支的计算达到同步点;令同步控制线程Si1的等待标<pb pnum="13" />志Wflag[i1]=0;4.33.9检查等待链表,将等待链表中处于当前同步点的所有循环分支号放入同步链表,并将该循环分支号从等待链表中删除;具体方法是:循环检查等待链表的所有循环分支号j1,1≤j1≤NUM_LP,如果(T[j1]+L[j1])=TBD,表示j1处于当前同步点,将j1放入同步链表,并将j1从等待链表中删除;4.33.10循环检查仿真块k的循环分支号j2,1≤j2≤NUM_LP,如存在j2不在同步链表中且T[j2]+L[j2]<=TBD,令同步控制线程Si1的等待标志Wflag[i1]=1;4.33.11如果Wflag[i1]>0,转4.33.11等待,否则执行4.33.12;4.33.12循环检查同步链表,对于同步链表的所有循环分支号j1,令Wflag[j1]=0;4.33.13将循环分支号i1从同步链表删除;令Tbinx[i1]=Tbinx[i1]+1,指向循环分支号i1的下一个同步点;4.33.14令T[i1]=T[i1]+L[i1],表示使仿真时间推进一个步长;4.33.15查询虚拟试验运行控制表,获得仿真块号域为k、循环分支号域为i1、起始运行模型标志域为1时的模型名域的值、IP地址域的值,将模型名域的值赋给M_name_s,将IP地址域的值赋给ip_addr_s;4.33.16查询参数表,获得模型名域为M_name_s时的所有参数名域和参数值域的值并组合成参数数据包;4.33.17将开始计算指令标志、模型名M_name_s、仿真时间T[i1]和参数数据包组合成模型开始计算指令,将该指令发送给第一数据发送模块;<pb pnum="14" />4.33.18用ip_addr和模型开始计算指令作为实际参数采用4.12所述的使模型执行一次计算方法使M_name_s模型执行一次计算;转4.33.1;4.34置运行结束的循环分支个数endlpnum=endlpnum+1;4.35判断endlpnum<NUM_LP是否成立,若成立,转4.1;若不成立,执行4.36;4.36使仿真块k的所有模型退出;4.37令exitflag=1使所有同步控制线程退出;转4.1;4.38从消息中获得模型名,将该模型名赋给M_name1;查询虚拟试验运行控制表,置模型名域的值为M_name1时模型状态域的值为0,表示M_name1已退出;4.39如果仿真块号域的值为k时所有模型状态域的值全为0且endlpnum≥NUM_LP,表明第k仿真块已经完成计算且所有模型都已退出,转第五步,否则转4.1;第五步:仿真块调度控制模块执行仿真块调度控制,具体步骤如下:5.1令k=k+1,使得仿真块号增1;5.2如k<NUM_SB,表示还有仿真块未运行,执行5.3,否则转5.5;5.3查询虚拟试验运行控制表,获得仿真块号域的值为k时循环分支号域的最大值,将循环分支号域的最大值赋给第k个仿真块的循环分支个数NUM_LP,NUM_LP≥1;5.4令i=1;转第三步;5.5仿真结束,退出。<pb pnum="15" />
地址 410073 湖南省长沙市砚瓦池正街47号中国人民解放军国防科学技术大学计算机学院