[0042] 启动仿真开始计时,执行开始,第一事件向事件队列中插入第二事件并开始调度;
[0043] 然后调度结束事件,完成后停止计时,计算调度所有事件的数量,计算时间推进效率。
[0044] 可选的,该方法还包括步骤S150:根据仿真测试的结果对仿真引擎进行优化。
[0045] 可选的,在步骤S130中,在进行测试准备多个事件时,使得事件数量保证每次处理所需时间在具有软件测试通常公认的足够时间以上;
[0046] 并且,为保证计时的有效性,根据实际情况可调整事件数量,对于步骤130和步骤140,可以多次测试取平均值。
[0047] 可选的,对于某个测试指标,步骤S130和步骤S140执行多遍,以获取平均结果。
[0048] 可选的,测试中应该有多个仿真实体,用于产生和处理事件,实体数量应保证潜在的并行化需求。
[0049] 一种存储介质,用于存储计算机可执行指令,
[0050] 其中所述计算机可执行指令在被处理器执行时执行
权利要求1-8中的任意一项所述的方法。
[0051] 本发明不仅提供了针对引擎自身的基础性能评价指标,还具有如下优点:
[0052] 1、可以在并行与串行之间兼容和切换;
[0053] 2、参与性能测试的模型逻辑复杂度极低(几乎为零),排除仿真模型性能对于引擎性能测试的影响;
[0054] 3、测试指标主要针对仿真引擎重要衡量性能即事件调度的时间协调,能代表引擎的基础性能,具备客观性;
[0055] 4、指标的测试方法可在不同仿真引擎上实现,具备可实施性。
附图说明
[0056] 图1是根据本发明具体
实施例的仿真引擎的性能测试方法的
流程图;
[0057] 图2是根据本发明对于同步事件调度效率进行测试的具体步骤;
[0058] 图3是根据本发明对于随机事件调度效率进行测试的具体步骤;
[0059] 图4是根据本发明对于事件队列管理效率进行测试的具体步骤;
[0060] 图5是根据本发明对于时间推进效率进行测试的具体步骤;
[0061] 图6是根据本发明具体实施例的时间推进效率测试结果;
[0062] 图7是根据本发明具体实施例的时间推进效率的另一个测试结果。
具体实施方式
[0063] 下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
[0064] 这些过程、流程、逻辑
块、功能等,一般被认为是达到理想或者预期的结果的步骤或指示的自洽序列。步骤一般包括物理量的物理操纵。通常情况下,尽管不一定是,这些数量常采取电、磁、光学或量子
信号等形式,它们能够被储存,转让,合并,比较,并以其他方式被计算机或
数据处理系统所控制。事实证明,有时候为了方便起见,鉴于共享的原因,把这些信号称作为位、波、
波形、流、值、元素、符号、字母、术语、数字等类似的名称,在
计算机程序或软件中称之为代码(可能是目标代码,源代码或二进制代码)。
[0065] 在本发明中,对于术语定义如下:
[0066] 事件:或仿真事件,是指仿真中需要处理或完成的一些功能,事件具有与之对应的仿真时间,两个不同仿真时间的事件的处理对应着仿真时间的推进,考虑到仿真的因果律要求,事件必须按时间的先后顺序进行处理,即调度。
[0067] 事件队列:对事件的管理方式,通常将多个事件按照仿真时间先后顺序在队列中进行管理,新产生的事件按照仿真时间插入到队列中,仿真引擎按照时间大小顺序调度(执行)事件所对应的功能,同时对应着仿真时间的推进。
[0068] 仿真时间:或逻辑时间,在仿真中使用的一种时间描述方式,仅具有数值意义,一般从0开始递增,可通过数值大小比较先后顺序。
[0069] 物理时间:或自然时间、墙钟时间,是指通常自然连续流逝的时间,是本方法所述性能的主要体现,在后续文字中,常用时间代指物理时间。
[0070] 被仿真对象:即仿真实体,在实际的仿真中一般是事件主要的产生者和处理者。
[0071] 为了克服上述问题,本发明设计了以同步事件调度效率、随机事件调度效率、事件队列管理效率、时间推进效率为指标的测量步骤及方法,其针对以性能的核心要素——事件为主而设计的各项指标,可以充分体现引擎的基础能力,以及在并行化计算方式上效率的高低。
[0072] 本发明根据并行离散时间仿真引擎设立了四个主要指标,围着事件为中心,考虑调度、管理和时间推进,所述的调度是指引擎按照事件的仿真时间顺序调用事件处理方法,根据事件的仿真时间的不同又可分为同步事件调度和随机事件调度。
[0073] 同步事件调度是指事件的仿真时间相同,因此引擎在调用时无需推进仿真时间,也不存在仿真时间协调,该指标单纯反映了引擎的调用效率;随机事件调度是指事件的仿真时间随机分布,因此引擎在调用时需要推进仿真时间,当并行化时需要在多个并行之间协调仿真时间,该指标反映了引擎的事件调用和时间协调的效率。
[0074] 其中同步事件调度性能指的是对于特定数量个仿真时间相同的事件,仿真引擎完成调度的时间,可以定义:单位时间调度的仿真时间相同事件的数量,单位为(个/秒)。
[0075] 随机事件调度性能是指对于特定数量个仿真时间随机分布的事件,仿真引擎完成调度的时间,可以定义:单位时间调度的时间随机分布事件的数量,单位为(个/秒)。
[0076] 所述的管理是指向事件队列中插入事件的效率,由于插入的事件需要按照仿真时间进行排序,并且插入事件是仿真中高频发生的行为,因此也是性能的重要影响因素,体现了事件队列的数据结构设计和管理方法。
[0077] 其中事件队列管理性能指的是:向已有特定数量个随机事件的队列中插入n个(n>=1)事件所需的时间,可以定义为:单位时间向事件队列中插入仿真时间随机分布的事件数量,单位为(个/秒)。
[0078] 所述的仿真时间推进是指随着调度事件的仿真时间变化,代表的仿真时间递增情况,是综合事件调度、管理的综合性指标。该指标可以使用仿真时间推进效率进行衡量。
[0079] 其中,时间推进效率指的是:对于已有特定数量个随机事件,且运行过程中插入n个(n>=1)事件,引擎处理完所有事件所需的时间,可以定义为:向调度指定数量个随机事件(事件1)队列所需的时间,其中事件队列(事件1)处理方法为插入仿真时间随机的事件(事件2),事件2处理方法为空,单位为(个/秒)。
[0080] 参见图1,示出了根据本发明具体实施例的仿真引擎的性能测试方法,包括如下步骤:
[0081] 步骤S110:建立并生成仿真模型,并使用管理应用所需的信息配置所述仿真模型;
[0082] 步骤S120:使用同步事件调度性能、随机事件调度性能、事件队列管理性能、和时间推进效率中的一个或多个作为指标对仿真引擎进行测试,
[0083] 所述同步时间调度性能指的是对于特定数量个仿真时间相同的事件,仿真引擎完成调度的时间,可以定义:单位时间调度的仿真时间相同的事件的数量,
[0084] 所述随机事件调度性能是指对于特定数量个仿真时间随机分布的事件,仿真引擎完成调度的时间,可以定义:单位时间调度的仿真时间随机分布的事件的数量,[0085] 所述事件队列管理性能指的是:向已有特定数量个随机事件的队列中插入n个(n>=1)事件所需的时间,可以定义为:单位时间向事件队列中插入仿真时间随机分布的事件的数量,
[0086] 所述时间推进效率指的是:对于已有特定数量个随机事件,且运行过程中插入n个(n>=1)事件,引擎处理完所有事件所需的时间,可以定义为:调度指定数量个随机事件(事件1)队列所需的时间,其中事件队列(事件1)处理方法为插入仿真时间随机的事件(事件2),事件2处理方法为空,定义为空是为了避免采用事件1时会继续产生新的事件,从而使总调度事件数量具有不确定性的情况,单位为(个/秒)。
[0087] 步骤S130:分别根据所选定的性能指标,准备仿真推演事件队列,设定事件的数量、事件的仿真推进时间和自身实体时间。
[0088] 步骤S140:根据所选定的性能指标,启动仿真并开始测试,直至处理完成或者计时完成;
[0089] 因此,在本发明中,在步骤S120中选定指标,分别循环运行步骤S130和步骤S140,对多个性能指标进行测试,从而以事件为中心,客观的衡量仿真模型的性能。
[0090] 进一步的,还可以包括步骤S150:根据仿真测试的结果对仿真引擎进行优化。
[0091] 因此,能够利用该测试方法的结果根据所需要的指标,对仿真引擎进行优化。
[0092] 进一步的,针对每个性能指标仿真事件队列的准备,以及仿真测试的步骤可以有不同的具体步骤,每个指标的解释以及具体的实现步骤如下。
[0093] 1.同步事件调度性能测试方法
[0094] 同步事件调度性能:对于特定数量个仿真时间相同的事件,仿真引擎完成调度的时间。
[0095] 针对典型的仿真场景,考虑N个被仿真对象,设计在0时刻初始化事件,针对本测试指标,仿真实体不再提交事件,初始化事件一次性提交n个同步事件,然后考察完成引擎调度所有事件的时间。
[0096] N>1,考虑在并行化的情况下,可能按照被仿真对象划分并行任务,因此1个以上的被仿真对象具有针对并行和串行执行仿真引擎测量的通用性。
[0097] 注意事项:实体执行的仿真事件处理逻辑复杂度均为零。
[0098] 参见图2,示出了对于同步事件调度效率进行测试的具体步骤,即对应步骤S130和S140:
[0099] 事件队列中准备好开始和结束两个事件,仿真时间分别为0和T,T>0,开始事件的处理为向事件队列中插入同一仿真时间t的n个事件,事件处理为空,0
[0100] 启动仿真,仿真引擎调度开始事件,向队列中插入事件,完成后开始计时,由仿真引擎调度事件队列中的事件;
[0101] 调度完所有事件,最后一个事件为结束事件,停止计时,计算调度性能。为保证计时的有效性,根据实际情况可调整事件数量n;在实施时可多次测试获取平均值;下同。
[0102] 注意事项:由于可能的并行化手段,实体数量等因素要满足并行化的前提条件。
[0103] 2.随机事件调度性能测试方法
[0104] 随机事件调度性能:对于特定数量个仿真时间随机分布的事件,仿真引擎完成调度的时间。
[0105] 针对典型的仿真场景,考虑N个被仿真对象,设计安排0时刻初始化事件,针对本测试指标,仿真实体不再提交事件,初始化事件一次性提交针对N个仿真实体的n个随机事件,考察仿真引擎完成所有事件调度的时间。
[0106] 注意事项:实体执行的仿真事件处理逻辑复杂度均为零。
[0107] 参见图3,示出了对于随机事件调度效率进行测试的具体步骤,即对应步骤S130和S140:
[0108] 事件队列中准备好开始和结束两个事件,仿真时间分别为0和T,T>0,开始事件的处理为向事件队列中插入仿真时间t随机分布的n个事件,0
[0109] 启动仿真,仿真引擎调度开始事件,向队列中插入随机事件,完成后开始计时,由仿真引擎调度事件队列中的事件;
[0110] 调度完所有事件,最后一个事件为结束事件,停止计时,计算调度性能。
[0111] 注意事项:由于随机事件时间的差异性,仿真引擎必须保证从小到大按照时间顺序调度事件;由于可能的并行化手段,实体数量等因素要满足并行化的前提条件;相对于同步事件调度,随机事件调度会更慢。
[0112] 3.事件队列管理性能测试方法
[0113] 事件队列管理性能:指向已有特定数量个随机事件的队列中插入n个(n>=1)事件所需的时间。
[0114] 针对典型仿真场景,考虑N个被仿真对象,设计安排0时刻初始化事件,T时刻结束事件,初始化事件向事件队列中插入仿真时间t(t>T,且随机分布)的n个事件(事件处理为空),考察仿真引擎执行初始化事件(即插入随机事件)的性能(插入n个事件与执行时间的关系)。
[0115] 参见图4,示出了对于事件队列管理效率进行测试的具体步骤,即对应步骤S130和S140:
[0116] 事件队列中准备好开始和结束两个事件,仿真时间分别为0和T,T>0,开始事件的处理为向事件队列中插入仿真时间t随机分布的n个事件,t>T,事件处理为空,结束事件的处理为结束仿真;
[0117] 启动仿真开始计时,仿真引擎调度开始事件,向队列中插入随机事件,要求插入事件的时间按照时间顺序从小到大排序;
[0118] 然后调度结束事件,由于所插入的事件,其时间都大于结束事件的时间,因此不被调度,停止计时,计算插入的事件的数量,计算队列管理性能。
[0119] 4时间推进效率性能测试方法
[0120] 时间推进效率指对于已有特定数量个随机事件,且运行过程中插入n个(n>=1)事件,引擎处理完所有事件所需的时间。时间推进效率是仿真引擎的核心指标之一,直接反映仿真运行速度。
[0121] 针对典型的仿真场景,考虑N个被仿真对象,设计安排0时刻初始化事件和T时刻的结束事件,初始化事件用于给被仿真对象产生一定数量的随机事件(事件1,满足0
[0122] 注意事项:实体执行的仿真事件处理逻辑复杂度为零;
[0123] 参见图5,示出了对于时间推进效率进行测试的具体步骤,即对应步骤S130和S140:
[0124] 事件队列中准备好开始和结束两个事件,仿真时间分别为0和T,T>0,开始事件的处理为向事件队列中插入仿真时间t随机分布的n个第一事件,0
[0125] 第一事件的处理为向事件队列中插入1个第二事件,t第一事件
[0126] 启动仿真开始计时,执行开始,第一事件向事件队列中插入第二事件并开始调度;
[0127] 然后调度结束事件,完成后停止计时,计算调度所有事件的数量,计算时间推进效率。
[0128] 因此,本发明所涉及的测量指标以及测量方法屏蔽了模型算法复杂度的影响,能够充分体现并行化对于仿真引擎效率的影响,为客观评价并行离散事件仿真引擎性能,对比不同实现方法的效果提供了量化依据。
[0129] 以时间推进效率指标为例,下面为具体实施过程。
[0130] 1.测试内容:时间推进效率(时间推进效率是仿真引擎的核心指标之一,直接影响仿真运行速度。在事件队列已经安排好的情况下,时间推进等同于事件调度效率。考虑到产生事件的行为,时间推进效率将等于两者的综合。
[0131] 2.在测试过程中可能发生的变化参数:1)执行事件总数;2)被仿真对象个数;3)所影响的被仿真对象个数;4)事件产生的时间;5)参与运行的线程数量;
[0132] 3.被仿真对象执行的仿真事件均为空事件;
[0133] 4.测试机器配置:处理器:Inter(R)Xeon(R)CPU E5-2620v2@2.10GHZ 2.10GHZ(2处理器,24核);内存:32.0GB;
操作系统:Windows 2008R2 64位;
硬盘:固态硬盘500GB[0134] 参见图6,和图7分别是涉及时间推进效率的测试结果的示意图。
[0135] 目前传统的引擎测试模型对于并行离散事件仿真引擎的性能定量指标分析及测量方法还存在很大不足,尤其是针对引擎自身的基础性能指标方面,缺乏客观科学的标准与方法。
[0136] 本发明提出的四个测试指标不但解决了以上问题,且相对于传统的测试方法具备以下优势:
[0137] 1、可以在并行与串行之间兼容和切换;
[0138] 2、参与性能测试的模型逻辑复杂度极低(几乎为零),排除仿真模型性能对于引擎性能测试的影响;
[0139] 3、测试指标主要针对仿真引擎重要衡量性能即事件调度的时间协调,能代表引擎的基础性能,具备客观性;
[0140] 4、指标的测试方法可在不同仿真引擎上实现,具备可实施性。
[0141] 本发明进一步公开了一种存储介质,用于存储计算机可执行指令,
[0142] 所述计算机可执行指令在被处理器执行时执行上述的方法。
[0143] 如本领域技术人员将意识到的,本发明的各个方面可以被实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以采取如下形式:完全硬件实施方式、完全软件实施方式(包括
固件、常驻软件、微代码等)或者在本文中通常可以都称为“
电路”、“模块”或“系统”的将软件方面与硬件方面相结合的实施方式。此外,本发明的方面可以采取如下形式:在一个或多个计算机可读介质中实现的计算机程序产品,计算机可读介质具有在其上实现的计算机可读程序代码。
[0144] 可以利用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是如(但不限于)
电子的、磁的、光学的、电磁的、红外的或
半导体系统、设备或装置,或者前述的任意适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)将包括以下各项:具有一根或多根电线的电气连接、便携式计算机
软盘、硬盘、随机存取
存储器(RAM)、
只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪速存储器)、光纤、便携式光盘只读存储器(CD-ROM)、光存储装置、磁存储装置或前述的任意适当的组合。在本文件的上下文中,计算机可读存储介质可以为能够包含或存储由指令执行系统、设备或装置使用的程序或结合指令执行系统、设备或装置使用的程序的任意有形介质。
[0145] 计算机可读信号介质可以包括传播的数据信号,所述传播的数据信号具有在其中如在基带中或作为载波的一部分实现的计算机可读程序代码。这样的传播的信号可以采用多种形式中的任何形式,包括但不限于:电磁的、光学的或其任何适当的组合。计算机可读信号介质可以是以下任意计算机可读介质:不是计算机可读存储介质,并且可以对由指令执行系统、设备或装置使用的或结合指令执行系统、设备或装置使用的程序进行通信、传播或传输。
[0146] 可以使用包括但不限于无线、有线、光纤
电缆、RF等或前述的任意适当组合的任意合适的介质来传送实现在计算机可读介质上的程序代码。
[0147] 用于执行针对本发明各方面的操作的计算机程序代码可以以一种或多种编程语言的任意组合来编写,所述编程语言包括:面向对象的编程语言如Java、Smalltalk、C++等;以及常规过程编程语言如“C”编程语言或类似的编程语言。程序代码可以作为独立
软件包完全地在用户计算机上、部分地在用户计算机上执行;部分地在用户计算机上且部分地在远程计算机上执行;或者完全地在远程计算机或
服务器上执行。在后一种情况下,可以将远程计算机通过包括局域网(LAN)或广域网(WAN)的任意类型的网络连接至用户计算机,或者可以与外部计算机进行连接(例如通过使用因特网服务供应商的因特网)。
[0148] 还可以将这些计算机程序指令存储在可以指导计算机、其它可编程数据处理设备或其它装置以特定方式运行的计算机可读介质中,使得在计算机可读介质中存储的指令产生包括实现在流程图和/或
框图块或块中指定的功能/动作的指令的制品。
[0149] 计算机程序指令还可以被加载至计算机、其它可编程数据处理设备或其它装置上,以使在计算机、其它可编程设备或其它装置上执行一系列可操作步骤来产生计算机实现的过程,使得在计算机或其它可编程设备上执行的指令提供用于实现在流程图和/或框图块或块中指定的功能/动作的过程。
[0150] 以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何
修改、等同替换、改进等,均应包含在本发明的保护范围之内。