专利名称:仿真设备和仿真方法
技术领域:
本文中描述的实施例涉及如下处理技术,该处理技术获取有关性能或电力的仿真信息。
背景技术:
在安装有多个处理器(例如,中央处理单元(CPU))的多核配置中,针对每个核(CPU)的功能、性能、电力等进行仿真处理,其具有高处理速度或高处理精度。第6,751,583B1号美国专利中公开了相关技术。关于作为功能、性能或功耗的仿真目标的目标CPU,将在作为主CPU的操作中的目标CPU的指令代码(目标代码)转换为主CPU的指令代码(主代码)。在该转换中,可以使用解释器方法或即时(JIT,Just-1n-Time)编译器方法。在基于JIT编译器方法的仿真中,目标CPU的指令被主CPU的指令取代,其中,目标CPU的指令出现在正执行的程序中,主CPU的指令执行仿真。所以,JIT编译器方法中的处理可以比解释器方法中的处理更快地执行。当每个单元针对每个时钟独立地运行时,每当在流水线处理的控制下执行处理时,CPU的内部状态就改变,其中,在流水线处理中,同时执行所输入的指令。因此,可能停用所生成的主指令的重复使用,其中,所生成的主指令的重复使用是JIT编译器方法的优点。当使用解释器方法来仿真对流水线处理或乱序处理进行控制的CPU的功能、性能或电力时,处理速度可能变慢。当使用JIT编译器方法来仿真性能或电力时,可以增加这样的仿真代码,该仿真代码对应于在流水线处理控制中涉及的各种内部状态。在性能仿真中,可将仿真代码增加到主代码,以适应于与目标CPU的延迟执行对应的定时。例如,当要执行加载(LD)指令的周期仿真时,可将条件代码增加到主代码,以检查发生高速缓存未命中或高速缓存命中的哪个,或者检查如果发生高速缓存未命中则是否存在代价周期。然而,为了保持高操作性,期望尽可能减少增加到功能代码的用于性能仿真的代码的量。
发明内容
根据实施例的一个方面,一种仿真设备,包括代码转换部分;以及仿真执行部分,其中,代码转换部分执行将被主处理器控制的目标处理器中的程序的代码划分为块;将外部相关指令的执行结果设定为预测结果,其中,外部相关指令取决于包括在块中的外部环境;根据预测结果执行功能仿真;根据包括在块中的指令执行定时信息和功能仿真结果,计算在预测结果的情况下的外部相关指令的执行时间;以及根据功能仿真结果生成主代码,该主代码使主处理器执行在预测结果的情况下的性能仿真,其中,仿真执行部分执行如果在主处理器执行主代码时的外部相关功能的执行结果不同于在主处理器执行主代码时的预测结果,则通过使用基于外部相关指令的延迟时间和在外部相关功能前后执行的指令的执行时间的校正值,来校正外部相关指令的执行时间;以及将校正后的外部相关指令的执行时间设定为外部相关指令的执行时间。根据仿真设备,可以执行高速仿真。经由权利要求中特别指出的元件和组合,将实现和获得本发明的目标和优点。应当理解,如所请求保护的,前述的概括说明和下面的详细说明都是例示性和说明性的,而不是限制本发明。
图1图示例示性的仿真设备;图2图示例示性的指令;图3图示例示性的定时信息;图4A和图4B图示指令的例示性的执行定时;图5A图示例示性的主代码;图5B图示用于周期仿真的例示性代码;图6图示校正部分的例示性处理;图7A至图7D图示校正部分的例示性校正;图8A至图8D图示校正部分的例示性校正;图9A至图9D图示校正部分的例示性校正;图10图示代码转换部分的例示性处理;图11图示例示性的仿真;图12图示例示性的外部相关指令;图13A至图13C图示目标程序中的指令与主程序中的主指令的数目之间的例示性关系;图14图示代码转换部分的例示性处理;图15图示代码转换部分的例示性处理;图16图示例示性的仿真设备;以及图17图示电力仿真信息生成部分的例示性处理。
具体实施例方式图1图示例示性的仿真设备。仿真设备I可执行目标CPU的指令执行的性能仿真,其中,目标CPU控制流水线处理。目标CPU可以是要仿真的CPU的控制模型。仿真设备I输出每个指令的周期仿真信息作为目标CPU的指令执行的性能仿真的结果。例如,目标CPU可为ARM架构CPU。例如,对应于主CPU的仿真设备I可为安装有X86架构CPU的计算机。仿真设备I包括代码转换部分11、仿真执行部分12和仿真信息采集部分13。当执行目标CPU的程序时,代码转换部分11根据由目标CPU执行的程序代码(例如目标代码)生成执行仿真的主CPU的代码(例如主代码)。代码转换部分11包括块划分部分111、预测仿真执行部分113和代码生成部分115。块划分部分111将提供到仿真设备I的程序的目标代码划分为规定块。例如,规定块可为基本块(从分支到下一分支的代码)或预定的任意代码单元。图2图示例示性的指令。图2中的指令可包括在块中。如图2中所示的,块包括作为目标代码的三个指令“LD[rl],r2”(加载)、“MULTr3,r4,r5” (相乘)和“ADD r2,r5,r6”(相加)。例如,LD、MULT和ADD依次输入到目标CPU的流水线中,然后执行。在这些指令中,rl至r6表示寄存器(地址)。预测仿真执行部分113接收定时信息3和预测信息4,并且在基于执行结果的情况下对输入的块执行性能仿真。针对目标代码中的每个指令,定时信息3包括表示指令执行中的每个处理(阶段)与可用寄存器之间的对应的信息,并且针对每个外部相关指令,定时信息3还包括与根据执行结果确定的延迟时间对应的代价代价时间(代价代价周期数)。外部相关指令可包括在与外部环境有关的处理中涉及的指令,在加载指令、存储指令等的执行结果取决于目标CPU以外的外部环境的处理(例如指令高速缓存、数据高速缓存或旁路转换缓冲(TLB)的搜索处理)中涉及的指令,以及用于分支预测和用于将调用和返回进行堆栈的指令。图3图示例示性的定时信息。定时信息可为图1中所示的定时信息3。对于图3中的定时信息3中的LD指令,第一处理元件(el)可使用源寄存器rsl(rl),而第二处理元件(e2)可使用目的寄存器rd (r2)。对于MULT指令,第一元件(el)可使用第一源寄存器rsl (r3),第二元件(e2)可使用第二源寄存器rs2 (r4),而第三处理元件(e3)可使用目的寄存器rd (r5)。对于ADD指令,第一元件(el)可使用第一源寄存器rsl (r2)和第二源寄存器rs2 (r5),而第二处理元件(e2)可使用目的寄存器rd (r6)。图4A和图4B图示指令的例示性的执行定时。图4A和图4B中的执行定时可为执行图2所示的块中的指令的定时。例如,如果LD指令的执行开始于定时t,则根据图3中的定时信息3,在定时t+1将MULT指令输入到流水线中,并且在定时t+2输入ADD指令。由于ADD指令中的第一源寄存器(r2)和第二源寄存器(r5)被LD指令和MULT指令使用,所以在定时t+4之后开始ADD指令的执行,其中,在该定时t+4处已完成了 LD指令和MULT指令的执行,由此生成等同于两个周期的等待时间(两个周期延迟)。因此,当对图2中的块进行仿真时,如果LD指令的执行结果为高速缓存命中,则块的执行时间可为如图4A所示的六个周期。图4B是当图2中的块中的LD指令的执行结果为高速缓存未命中时的时序图。如果LD指令的执行结果为高速缓存未命中,则重新执行的时间段(例如对应于六个周期的代价周期)加上定时信息3作为延迟时间。因此,第二处理元件(e2)的执行延迟至IJ定时t+7。尽管在LD指令之后执行的MULT指令不受延迟影响地执行,但是ADD指令的执行在定时t+8之后开始,由此生成等同于四个周期的等待时间(四个周期延迟),其中,在定时t+8已完成了 LD指令的执行。因此,当对图2中的块中的指令进行仿真时,如果LD指令的执行结果为高速缓存未命中,则执行时间可为如图4B中所示的10个周期。预测信息4定义将在目标代码中的外部相关指令的执行中很大可能生成的执行结果(预测结果)。例如,预测信息例如包括下面各项指令高速缓存预测=命中数据高速缓存预测=命中TLB搜索预测=命中分支预测预测=命中调用或返回预测=命中预测仿真执行部分113根据预测信息4来设定包括在输入块中的外部相关指令的预测结果。预测仿真执行部分113参考定时信息3,在以执行结果为前提的情况下执行指令(预测情况),并且对指令执行进行仿真。预测仿真执行部分113输出由块中的每个指令花费的执行时间(所使用的周期数)作为仿真结果。代码生成部分115根据从预测仿真执行部分113获得的仿真结果,生成用来执行在所设定的预测情况下的在指令执行的时候的性能仿真的主代码(主代码被称为用于性能仿真的主代码),作为对应于所处理的块的主代码。代码生成部分115根据块中的目标代码生成如下主代码通过该主代码,外部相关指令执行在对应于预测结果的预测情况下的指令;将指令的执行时间相加;以及嵌入用于计算为处理该块而花费的时间的仿真代码。例如,对于已将高速缓存命中设定为数据中的LD指令的预测结果的处理,代码生成部115仿真当块中的LD指令访问命中的高速缓存结果时的处理。获得在预测情况下的执行时间。生成这样的主代码,该主代码用于从如下校正计算获得当块中的LD指令访问未命中的高速缓存结果时所花费的执行时间,其中,该校正计算使用在预测情况下的命中时的执行时间的加或减删除。仿真执行部分12执行由代码生成部分115生成的主代码,并且对由目标CPU进行的指令执行的功能和性能进行仿真,其中,目标CPU执行程序(目标代码)。仿真执行部分12包括代码执行部分121和校正部分123。代码执行部分121使用主代码来执行程序(目标代码)。如果外部相关指令的执行结果不同于程序执行期间的预测结果(非预测情况),则校正部分123通过校正已在预测情况下获得的执行时间来获得指令执行时间。校正部分123使用给予外部相关指令的代价时间、由外部相关指令前后的指令所花费的执行时间、或先前指令的延迟时间等来执行校正。仿真信息采集部分13采集日志信息(仿真信息)5作为性能仿真的执行结果,其中日志信息(仿真信息)5包括指令的执行时间。代码转换处理(I)仿真设备I中的代码转换部分11中的块划分部分111获得目标程序2的目标代码,将目标代码存储在存储单元(未示出)中,以及将存储的目标代码划分为块。(2)预测仿真执行部分113获得有关要输入的目标程序2的定时信息3和预测信息4,并且将定时信息3和预测信息4存储在存储单元中。预测仿真执行部分113根据预测信息4设定所划分的块中的每个外部相关指令的预测结果。例如,预测仿真执行部分113将命中设定为LD指令访问数据高速缓存的预测结果,其中LD指令是图2所示的块指令之一。(3)预测仿真执行部分113对块中的代码进行解释,并且根据设定的执行结果对指令执行进行仿真。例如,预测仿真执行部分113对这样的指令的执行进行仿真,对于这样的指令,已如图4A那样设定了定时。(4)代码生成部分115根据预测情况下的仿真结果,从目标代码生成主代码。代码生成部分115将用于周期仿真的代码嵌入到通过转换目标代码而获得的主代码(功能代码)中,其中用于周期仿真的代码用来执行性能仿真(周期仿真)。图5A图示例示性的主代码。在图5A中,从目标代码生成用于功能仿真的主代码。图5B图示用于周期仿真的例示性代码。在图5B中,将用于周期仿真的代码嵌入到用于功能仿真的主代码中。如图5A所示,将目标代码Inst_A转换为主代码Host_Inst_AO_func和Host_Inst_Al_func,而将目标代码 Inst_B 转换为主代码 Host_Inst_BO_func、Host_Inst_Bl_func、Host_Inst_B2_func等。因此,生成了仅包括功能代码的主代码。将目标代码Inst_A中的用于周期仿真的代码Host_Inst_A2_cycle和用于周期仿真的代码HoSt_InSt_A3_cycle嵌入到仅包括功能代码的主代码中。类似地,将目标代码Inst_B中的用于周期仿真的代码Host_Inst_B4_cycle和用于周期仿真的代码Host_Inst_B5_cycle嵌入到仅包括功能代码的主代码中。用于周期仿真的代码用于通过将指令的执行时间(所使用的周期数)表示为常量并且将指令的执行时间相加,来获得块的处理时间。因此,获得了用于表示块执行的进程的信息。在主代码中,用于除外部相关指令以外的指令周期仿真的代码和功能代码可以是已知代码。可将用于外部相关指令的周期仿真的代码提供为调用校正处理的帮助功能。仿真处理(I)仿真执行部分12中的代码执行部分121使用由代码转换部分11生成的主代码,来对目标程序2的性能进行仿真。代码执行部分121对目标程序2中的指令的执行进行仿真,并且获得由指令所花费的执行时间。(2)如果代码执行部分121在仿真期间检测到外部相关指令,例如LD指令,则代码执行部分121判定执行结果不同于预测结果。如果执行结果不同于预测结果,则代码执行部分121请求激活校正部分123。例如,当检测到指令“LD[rl],r2”并且在访问数据高速缓存的预测结果(高速缓存命中)与执行结果(高速缓存未命中)之间存在不匹配时,调用校正部分123。(3)当调用校正部分123时,校正部分123被激活,并且采集所检测到的指令“LD[rl],r2”的执行时间(周期数)。校正部分123可改变下一指令的执行定时t+n。每当外部相关指令的执行结果不同于预测结果时,校正部分123就校正指令的执行时间。当预测情况下的外部相关指令的执行时间被表示为常量时,校正部分123通过加上或减去外部相关指令的代价时间、在外部相关指令前后执行的指令的执行时间、或在外部相关指令之前执行的指令的延迟时间,来计算预测情况下的外部相关指令的执行时间。图6图示校正部分的例示性处理。校正部分123被实现为帮助功能模块。例如,可将帮助功能“cache_ld(address,rep_delay, pre_delay) ” 而不是功能“cache_ld(address) ”嵌入到主代码中,其执行对LD指令访问高速缓存的每个执行结果的仿真。帮助功能中的rep_delay的值可以是作为代价时间的一部分的暂缓时间,其中,在代价时间期间,由于延迟时间而不执行处理,直至使用加载(LD)指令的返回值的下一指令被执行为止。pre_delay的值表示从先前指令接收到的延迟时间。当pre_delay的值为-1时,表示先前指令没有延迟。i^p_delay和pre_delay都是从时间信息3和性能仿真结果的静态分析结果获得的时间信息。在图6中,当current_time的值与preld_time的值之间的差超过pre_delay的值时,校正部分123通过使用preld_time的值和直至当前定时current_time为止的时间来调整延迟时间pre_delay,并且获得可用的延迟时间avail_delay,其中,current_time表示当前定时,preld_time表示先前LD指令的执行定时,pre_delay表示先前LD指令的延迟。如果执行结果是高 速缓存未命中,则表示预测结果错误。因此,校正部分123将代价时间cache_miss_latency的值加到可用的延迟时间avail_delay上,并且根据暂缓时间rep_delay校正LD指令的执行时间,其中,代价时间cache_miss_latency是当存在高速缓存未命中时所花费的时间。图7A至图7D、图8A至图8D和图9A至图9D图示校正部分的例示性校正。图7A至图7D、图8A至图8D和图9A至图9D中的校正可为由图1中的校正部分123对LD指令的执行结果执行的校正。图7A至图7C图示当在执行一个高速缓存处理的情况下发生一个高速缓存未命中时执行的校正。在图7A至图7D中,对以下列出的三个指令进行仿真。LD [rl], r2: [rl] r2 ;MULT r3, r4, r5:r3 * r4 — r5 ;ADD r2, r5, r6:r2+r5 — r6图7A图示预测结果为高速缓存命中的指令执行的时序图。针对作为第三指令执行的ADD指令生成了两个周期延迟。图7B图示高速缓存处理结果为高速缓存未命中(其不同于预测结果)的指令执行的时序图。如果LD指令的执行结果是高速缓存未命中,则生成等同于代价周期(6个周期)的延迟。因此,MULT指令被执行而不受延迟的影响,但是ADD指令的执行在等待,直至已执行了 LD指令为止,由此延迟了 4个周期。图7C图示在校正部分123执行了校正之后的指令执行的时序图。由于LD指令的执行结果是高速缓存未命中(预测结果错误),所以校正部分123通过将在高速缓存未命中的情况下所花费的规定的代价时间(6个周期)加上剩余的执行时间(2-1=1个周期),来获得可用的延迟时间(7个周期)。可用的延迟时间可为最大的可能的延迟时间。校正部分123获得下一指令MULT的执行时间(3个周期),并且判定下一指令的执行时间将不超过延迟时间。然后,校正部分123从可用的延迟时间中减去下一指令的执行时间,以获得减法结果(7-3=4个周期)作为这样的时间(延迟时间),在该时间(延迟时间)期间,LD指令的延迟继续。校正部分123从可用的延迟时间中减去以上延迟时间,并且获得减法结果(3个周期)作为暂缓时间。暂缓时间可为这样的时间,在该时间期间,将宽限给予用作代价的延迟。校正部分123 使用帮助功能 cache_ld(addr, rep_delay, pre_delay)返回 3 作为暂缓时间rep_delay,并且返回_1 (无延迟)作为先前指令的延迟时间pre_delay。作为校正的结果,将LD指令的执行时间设定为通过对由执行所花费的时间和延迟时间求和而获得的时间(1+4=5个周期),并且从执行已完成处的定时h计算后续指令MULT和ADD的执行时间。例如,通过将MULT指令的执行时间(3个周期)和ADD指令的执行时间(3个周期)简单地加上校正后的LD指令的执行时间(5个周期),来获得块的执行时间(周期数),其中,MULT指令和ADD指令的执行时间是根据从预测仿真执行部分113获得的处理结果(基于预测结果的预测仿真结果)而获得的。通过校正并且通过根据预测结果在仿真中获得的执行时间的相加,来高精确地获得在高速缓存未命中的情况下的仿真中的执行周期数,其中,该校正包括执行结果不同于预测结果的指令的执行时间的相加或相减。图7D图示在高速缓存未命中的情况下的周期数中的误差,其中,误差是通过简单相加而获得的。在图7D中,由于加上了 LD指令的延迟时间,所以可能发生基于MULT指令的执行定时的位移的误差,其中,MULT指令的执行是在LD指令的执行期间完成的。图8A至图SC图示校正部分的例示性校正。当在执行两个高速缓存处理的情况下发生两个高速缓存未命中时,执行图8A至图8C中所示的校正。在图8A至图8D中,对以下列出的5个指令进行仿真。LD [rl], r2: [rl] r2 ;LD[r3], r4: [r3] — r4 ;MULT r5, r6, r7: r5 * r6 — r7 ;ADD r2, r4, r2:r2+r4 r2 ;ADD r2, r7, r2:r2+r7 r2 ;图8A图示这样的指令执行的时序图,在该指令执行中,两个高速缓存处理中的预测结果分别是高速缓存命中。以两个LD指令之间设置的两个周期(正常的一个周期和增加的一个周期)的间隔来执行这两个LD指令。图SB图示这样的指令执行的时序图,在该指令执行中,两个高速缓存处理的结果是高速缓存未命中,其不同于预测结果。由于两个LD指令中的每个导致高速缓存未命中,所以生成了对应于代价周期(6个周期)的延迟。由于两个LD指令的延迟时间交叠,所以MULT指令被执行而不受延迟的影响。然而,两个ADD指令的执行被延迟直至已执行了第二LD指令为止。
图8C图示在校正部分123已执行了校正之后的指令执行的时序图。如图SC所示,校正部分123在定时h处校正第一 LD指令的延迟时间,并且返回帮助功能 cache_ld(addr, 3, -1)。由于第二 LD指令的执行结果在当前定时h处为高速缓存未命中(预测结果错误),所以校正部分123通过将6个代价周期加到LD指令的剩余执行时间,来获得可用延迟时间(1+6=7个周期)。校正部分123通过从可用延迟时间中减去直到当前定时h为止所消耗的延迟时间,来获得从当前定时&起作为超出量而逝去的可用延迟时间3个周期(7-(6-2)=3),其中,延迟时间为“(当前定时^-先前指令的执行定时tj-间隔设定”。可将已作为超出量而逝去的可用延迟时间设定为第二 LD指令的执行时间。校正部分123通过从作为超出量而逝去的可用延迟时间中减去原始执行时间,来获得先前指令的延迟时间“3-1=2个周期”。校正部分123通过从可用 延迟时间中减去直到当前定时h为止所消耗的延迟时间和在当前定时&处作为超出量而逝去的可用延迟时间之和,来获得暂缓时间“7-(3+3)=1个周期”。校正部分123在定时&处校正第二LD指令的延迟时间,并且返回帮助功能cache_Id(addr,2, I)。把通过将校正值(3个周期)加到当前定时h作为校正而获得的定时设定为完成LD指令的执行处的定时。从该定时起增加后续MULT指令和ADD指令的执行时间。图8D图示在高速缓存未命中的情况下的周期数中的误差,其中,该误差是通过简单相加而获得的。在图8D中,由于加上了根据给予两个LD指令的代价的延迟时间,所以可能导致误差(9个周期)。尽管图SC中所示的校正部分123的处理具有误差(I个周期),但是可以高精确地获得在高速缓存未命中的情况下的周期数。图9A至图9C图示校正部分的例示性校正。当在执行两个高速缓存处理的情况下发生一个高速缓存未命中时,执行图9A至图9C中所示的校正。在图9A至图9D中,如图8A至图8D所示地对5个指令进行仿真。图9A图示这样的指令执行的时序图,在该指令执行中,两个高速缓存处理中的预测结果是高速缓存命中。与图8A —样,以两个LD指令之间的两个周期(正常的一个周期和增加的一个周期)的间隔来执行这两个LD指令。图9B图示这样的指令执行的时序图,在该指令执行中,第一 LD指令的执行结果是高速缓存未命中(其不同于预测结果),而第二 LD指令的执行结果与预测结果相匹配(高速缓存命中)。两个LD指令中的每个可导致等同于6个代价周期的延迟。由于两个LD指令的延迟时间交叠,所以MULT指令被执行而不受延迟的影响。然而,第二 ADD指令的执行可被延迟直至已执行了第二 LD指令为止。图9C图示在校正部分123已执行了校正之后的指令执行的时序图。如图9C所示,校正部分123在定时、处采集第一 LD指令的延迟时间,并且返回帮助功能 cache_ld (addr, 3, -1)。由于第二 LD指令的执行结果在当前定时h处是高速缓存命中(如预测结果所表示的),所以校正部分123判定从第二 LD指令的执行开始到当前定时h的时间“t1-tf间隔设定(6-0-2=4个周期)”是否长于LD指令的执行时间(2个周期)。由于从第二 LD指令的执行开始到当前定时h的时间长于LD指令的执行时间(2个周期),所以校正部分123将当前定时h作为下一指令MULT的执行定时。校正部分123将从第二 LD指令的执行完成到当前定时h的时间(2个周期)处理为下一指令的延迟时间,并且将先前指令的延迟时间pre_delay设定为2。校正部分123从第一 LD指令的可用延迟时间中减去直至当前定时h为止所消耗的延迟时间和在当前定时h处作为超出量而逝去的可用延迟时间之和“7-(6+0)=1个周期”,并且将暂缓ap_delay设定为I,其后校正部分123返回帮助功能cache_ld(addr, 1,2)。图9D图示在高速缓存未命中的情况下的周期数中的误差,其中,该误差是通过简单相加而获得的。在图9D中,由于加上了根据给予第一 LD指令的代价的延迟时间,所以可能导致误差。图10图示代码转换部分的例示性处理。可由图1中的仿真设备I中的代码转换部分11来执行图10中的代码转换处理。仿真设备I中的代码转换部分11中的块划分部分111将目标程序的代码(目标代码)划分为规定的块,并且输入所划分的块(操作Si)。预测仿真执行部分113分析每个块中的指令,并且检测外部相关指令(操作S2)。对于所有检测到的指令,根据预测信息4将具有高可能性的执行结果确定为预测情况(操作 S3)。预测仿真执行部分113参考定时信息3,并且根据被设定为块中所有指令的预测结果的执行结果来执行性能仿真(操作S4)。代码生成部分115根据仿真结果生成用于性能仿真的主代码,其中主代码由仿真执行部分12来执行(操作S5)。作为操作SI至S5中的处理的结果,输出主代码,在该主代码中,用来仿真目标CPU的性能的代码已被嵌入到所设定的执行结果中的功能代码中(预测情况)。图11图示例示性的仿真。可由图1中所示的仿真设备I中的仿真执行部分12来执行图11中的仿真。仿真设备I中的仿真执行部分12中的代码生成部分121执行由代码生成部分115生成的主代码,并且执行性能仿真(操作S10)。如果代码执行部分121在执行期间检测到外部相关指令(操作SI I ),则代码执行部分121判定外部相关指令的执行结果是否与预测结果相同(操作S12)。如果外部相关指令的执行结果与预测结果不相同(操作S12的结果为否),则调用校正部分123来校正外部相关指令的执行时间(操作S13)。仿真信息采集部分13输出对应于目标程序的所有主代码的仿真的仿真信息5(操作 S14)。作为操作SlO至S14中的处理的结果,输出有关目标CPU的仿真信息(周期仿真信息)5,其中,目标CPU执行目标程序2。图12图示例示性的外部相关指令。在图12中,图示了加载(LD)指令的预测结果的判定处理和校正处理。当从正处理的块中的指令中检测到外部相关指令时,代码执行部分121调用对应于校正部分123的帮助功能(操作S20)。
代码执行部分121判定LD指令是否正请求高速缓存访问(操作S21)。如果正请求高速缓存访问(操作S21中的结果为是),则代码执行部分121对高速缓存访问进行仿真(操作S22)。如果高速缓存访问的结果是高速缓存未命中(操作S23中的结果为“未命中”),则校正部分123采集LD指令的执行时间(周期数)(操作S24),并且输出校正后的执行时间(周期数)(操作S25)。如果在操作S21中未请求高速缓存访问(操作S21中的结果为否),或者所请求的高速缓存访问导致高速缓存命中(操作S23的结果为“命中”),则校正部分123输出未校正的预测执行时间(周期数)(操作S26)。仿真设备I中的代码转换部分11从目标代码中检测外部相关指令,并且生成用于性能仿真的代码,其包括用于调用帮助功能的主指令。例如,代码转换部分11响应于除目标代码中的外部相关指令以外的指令,来生成用于性能计算的已知主代码。用于性能计算的已知主代码可包括以下列出的3个主指令。性能计算指令1:从存储器中读取当前性能值(执行时间)。性能计算指令2 :加上目标指令的性能值。性能计算指令3 :将结果写入到存储器中。图13A至图13C图示目标程序中的指令与主程序中的许多主指令之间的例示性关系O图13A中图示的目标程序包括指令i0、il和i2。例如,指令i2可以是外部相关指令。在图13B所示的转换后的主程序中,目标指令iO和il中的每个已被转换为主代码,该主代码包括一个主指令(功能代码)和三个性能计算指令I至3,总共4个指令。指令i2已被转换为用于性能仿真的代码,用于性能仿真的代码包括功能代码(主指令I和2)和性能计算指令(帮助功能)。在对应于除外部相关指令以外的指令的主代码中,用于性能仿真的性能计算指令的数目大于对应于目标程序中的指令的功能的主指令的数目。所以,在用来执行性能仿真所花费的时间中,用来计算性能所花费的时间变成主要的。例如,图1所示的仿真设备I中的代码转换部分11从目标代码中检测在性能计算中使用先前指令的性能值的指令类型(该指令将被称为代码生成源指令),并且生成主代码(用于仿真的代码),该主代码包括对应于所检测到的代码生成源指令的性能计算指令。对于除代码生成源指令以外的指令,记录性能值。代码生成源指令可包括外部相关指令(LD指令,ST (存储)指令等)和根据CPU架构而设置的性能信息获取指令(x86中的tsc寄存器读取指令和ARM周期计数寄存器读取指令)。仿真设备I中的代码转换部分11接收用户指定的目标程序的性能值的测量范围(以下被称为跟踪范围),并且根据跟踪范围中包括的指令生成用于性能仿真的代码。代码转换部分11从跟踪范围内的指令中检测代码生成源指令,并且根据代码生成源指令生成主代码,在该主代码中已嵌入了性能计算指令。仿真设备I的代码转换部分11保持表示用户指定的跟踪范围的信息。表示跟踪范围的信息包括由用户通过使用功能、目标程序或系统调用而指定为单位范围的范围的开始地址和结束地址。
代码转换部分11在仿真开始之前或在正执行仿真的同时接收所指定的跟踪范围。代码转换部分11保持所接收到的跟踪范围,或者更新要保持的跟踪范围的开始地址和结束地址。代码转换部分11预先保持跟踪范围,并且接收这样的命令,该命令用于使得能够由在仿真期间执行的用户操纵来指定跟踪范围。代码生成部分115在仿真开始时停用要保持的跟踪范围的指定。当接收到使得能够指定跟踪范围的命令时,代码生成部分115使得能够指定跟踪范围,并且从跟踪范围内包括的指令中检测代码生成源指令。例如,图1所示的仿真设备I中的代码转换部分11可执行不同于图10中所示的代码转换处理的代码转换处理。可以描述不同于图10中的代码转换处理的处理。其它代码处理和仿真处理可基本上与图11至图13中所示的处理相同或类似。仿真设备I中的代码转换部分11可保持检测信息,该检测信息预先标识代码生成源指令。在检测信息中,描述了变为生成源指令的指令的类型。如果检测信息中已描述了外部相关指令或性能信息获取指令,则代码转换部分11中的预测仿真执行部分113根据检测信息,从已被块划分部分111划分的目标程序的块中检测代码生成源指令。代码生成部分115生成主代码,该主代码包括通过转换除代码生成源指令以外的指令的功能而生成的主指令(功能代码);并且记录指令的执行时间(周期数)。代码生成部分115生成主指令(功能代码),在该主指令中,代码生成源指令的功能已被转换,并且主代码包括性能计算指令。例如,所生成的主代码可包括以下列出的主指令。性能计算指令1:读取当前性能值(执行时间)性能计算指令2 :加上所记录的在指令i2之前的指令iO和il的性能值(执行时间)。性能计算指令3 :更新性能值。性能计算指令4 :为指令i2调用帮助功能,并且将指令i2的执行时间加到性能值上。图14图示代码转换部分的例示性处理。可由图1中的仿真设备I中的代码转换部分11来执行图14中的代码转换处理。仿真设备I中的代码转换部分11中的块划分部分111将目标程序的代码(目标代码)划分为规定的块,并且输入所划分的块(操作S31)。预测仿真执行部分113分析每个块中的指令,并且检测代码生成源指令(操作S32)。代码生成部分115根据检测到的代码生成源指令生成主代码,在该主代码中已嵌入了性能计算指令(操作S33 )。如果仿真设备I中的代码转换部分11已保持了表示跟踪范围的指定的开始地址和结束地址,则代码转换部分11中的预测仿真执行部分113根据跟踪范围的指定,从已被块划分部分111划分的目标程序的块中检测开始地址。在已检测到开始地址之后,预测仿真执行部分113继续根据检测信息从目标程序的块中检测代码生成源指令,直至预测仿真执行部分113检测到跟踪范围的结束地址为止。代码生成部分115生成主指令(功能代码),在该主指令(功能代码)中,除代码生成源指令以外的指令的功能已被转换,并且记录指令的执行时间。代码生成部分115生成主代码,该主代码包括性能计算指令和主指令(功能代码),在该主指令(功能代码)中,代码生成源指令的功能已被转换。图15图示代码转换部分的例示性处理。可由图1所示的仿真设备I中的代码转换部分11来执行图15中的代码转换处理。仿真设备I中的代码转换部分11中的块划分部分111将目标程序的代码(目标代码)划分为规定的块,并且输入所划分的块(操作S41)。预测仿真执行部分113对块进行分析,并且检测跟踪范围的开始地址或结束地址(操作S42)。可从检测到开始地址时起直至检测到结束地址为止重复操作S43和S44。预测仿真执行部分113分析每个块中的指令,并且检测代码生成源指令(操作S43)。代码生成部分115根据所检测到的代码生成源指令生成主代码,在该主代码中已嵌入了性能计算指令(操作S44)。在仿真设备I中,可省略用于目标程序中的一些指令的性能值计算的主指令的生成。因此,可减少用于仿真的主指令的数目,并且可减少仿真时间。由于省略了用于代码转换处理中的性能值计算的主指令的生成,所以可在保持所获得的性能值的精确度的同时提高仿真速度。由于在仿真期间在用户指定的跟踪范围内测量目标程序的性能,所以执行有效率的仿真,并且减少仿真时间。用户指定的跟踪范围的设定可应用于图10所示的代码转换处理。预测仿真执行部分113对块进行分析, 并且在图10中的操作SI和S2之间检测跟踪范围的开始地址或结束地址。可在跟踪范围内执行操作S2至S5。图16图示例示性的仿真设备。除了图1中所示的结构之外,仿真设备I还包括电力仿真信息生成部分15。电力仿真信息生成部分15根据从仿真信息采集部分13获得的仿真信息5和电力信息6,来计算在块执行期间消耗的电力,并且输出电力仿真信息7。图17图示电力仿真信息生成部分的例示性处理。在图17中,将电力仿真信息生成部15执行为电力仿真功能,该电力仿真功能嵌入到用于性能仿真的主代码中。由电力信息6中的LD指令、MULT指令、和ADD指令中的一个执行所消耗的电力可分别为 4μ W、0. 5μ W和 O. 3 μ W。电力仿真功能Host_Inst_A_C_power根据每个指令在仿真中已执行的次数来计算电力。图1所示的仿真设备I可包括输入设备(包括键盘和鼠标)、输出设备(例如显示器或打印机)、和个人计算机(PC),其中,个人计算机具有计算单元(CPU)、临时存储装置(例如动态随机访问存储器(DRAM)或闪速存储器)、永久存储单元(例如硬盘驱动器(HDD)或闪速存储器)、和耦合到网络N的网络接口。仿真设备I执行计算机可执行的程序。将如下程序提供给仿真设备1,在该程序中,对由仿真设备I提供的功能的处理进行编码。PC执行所提供的程序以执行仿真。PC可从便携式存储介质中读取程序,并且可执行该程序的处理。可替选地,PC可接收从服务器计算机传送的程序,并且每当PC接收到程序时,PC可执行所接收到的程序的处理。可能已将程序记录在由计算机可读的存储介质中。图1所示的仿真设备I执行用于控制流水线处理的CPU的指令的高速性能仿真。在由仿真设备I中的代码转换部分11进行的目标CPU的程序的代码转换处理中,与在JIT编译器方法中一样地执行功能仿真,在该功能仿真中,针对每个划分的块预测外部相关指令的执行结果(预测情况),并且根据定时信息3将每个指令的执行时间表示为常量。仿真设备I的代码转换部分11将用于校正预测情况下的指令的执行时间的代码嵌入到主代码中,而不是将仿真执行代码嵌入到主代码中,其中,该仿真执行代码用于获得有关在除预测情况以外的情况下的执行的性能仿真信息(周期仿真信息)。仿真设备I中的仿真执行部分12执行预测情况下的指令的性能仿真。取代非预测情况下的指令的仿真,例如根据非预测情况下的指令的延迟时间、或在该指令前后执行的指令的执行时间,来校正预测情况下的执行时间。更少的用于仿真的代码被加到功能代码,减少了性能仿真处理中的负载,并且以高速执行处理。仿真设备I根据预测情况执行功能仿真。由于通过静态分析处理获得了一种情况(预测情况)下的每个指令的执行时间,所以例如通过加上或减去预测情况下的执行时间的代价时间、在该指令前后执行的指令的执行时间、或之前指令的延迟时间,来校正除预测情况以外的情况下的指令的执行时间。仿真设备I以高速对包括CPU的系统的性能或电力进行仿真,所以可以容易地评估、分析或预测整个大规模系统的性能或电力。仿真设备I根据电力信息和性能仿真信息,高速和准确地对程序的功耗进行仿真。由于不是在每种情况下都执行性能仿真,所以减小了性能仿真处理中的负载,并且可以以高精确度执行仿真。本文中记载的所有示例和条件语言旨在用于教导的目的,以帮助读者理解由发明人为促进现有技术而提出的本发明和构思,并且应当被解释为不是限制这样具体记载的示例和条件,而且说明书中这样的示例的组织形式也不涉及本发明的优劣的表示。尽管已详细描述了本发明的实施例,但是应该理解,可在不偏离本发明的精神和范围的情况下,对本发明进行各种修改、替代和变型。
权利要求
1.ー种仿真设备,包括 代码转换部分;以及 仿真执行部分, 其中,所述代码转换部分执行 将被主处理器控制的目标处理器中的程序的代码划分为块; 将外部相关指令的执行结果设定为预测结果,其中所述外部相关指令取决于包括在块中的外部环境; 根据所述预测结果执行功能仿真; 根据包括在所述块中的指令执行定时信息和功能仿真结果,计算在所述预测结果的情况下的所述外部相关指令的执行时间;以及 根据所述功能仿真结果生成主代码,所述主代码使得所述主处理器执行在所述预测结果的情况下的性能仿真, 其中,所述仿真执行部分执行 如果在所述主处理器执行所述主代码时的所述外部相关功能的执行结果不同于所述预测結果,则通过使用基于所述外部相关指令的延迟时间和在所述外部相关功能前后执行的指令的执行时间的校正值,来校正所述外部相关指令的执行时间;以及 将校正后的所述外部相关指令的执行时间设定为所述外部相关指令的执行时间。
2.根据权利要求1所述的仿真设备,其中,所述目标处理器控制流水线处理。
3.根据权利要求1所述的仿真设备,其中,当要在所述外部相关指令之后执行的下一指令的执行时间没有超过所述外部相关指令的所述延迟时间时,所述仿真执行部分使用所述下一指令的执行时间作为所述校正值。
4.根据权利要求3所述的仿真设备,其中,所述仿真执行部分从所述外部相关指令的所述延迟时间中减去所述校正值。
5.根据权利要求1所述的仿真设备,其中,所述仿真执行部分从包括在所述块中的所述指令中检测这样的指令,该指令使用前一指令的执行时间来计算该指令的执行时间,并且所述仿真执行部分生成包括主指令的所述主代码,其中,所述主指令计算所检测到的指令的执行时间。
6.根据权利要求1所述的仿真设备,还包括 电カ仿真信息生成部分,用于获得电カ仿真信息,其中,所述电カ仿真信息包括由所述主代码中的指令和所述功能仿真结果消耗的电力。
7.一种仿真方法,包括 由计算机处理器执行如下操作 将被主处理器控制的目标处理器中的程序的代码划分为块; 将外部相关指令的执行结果设定为预测结果,其中所述外部相关指令取决于包括在块中的外部环境; 根据所述预测结果执行功能仿真; 根据包括在所述块中的指令执行定时信息和功能仿真结果,计算在所述预测结果的情况下的所述外部相关指令的执行时间; 根据所述功能仿真结果生成主代码,所述主代码使得所述主处理器执行在所述预测结果的情况下的性能仿真;如果在所述主处理器执行所述主代码时的所述外部相关功能的执行结果不同于所述预测结果,则通过使用基于所述外部相关指令的延迟时间和在所述外部相关功能前后执行的指令的执行时间的校正值,来校正所述外部相关指令的执行时间;以及将校正后的所述外部相关指令的执行时间设定为所述外部相关指令的执行时间。
8.根据权利要求7所述的仿真方法,其中,所述目标处理器控制流水线处理。
9.根据权利要求7所述的仿真方法,还包括当要在所述外部相关指令之后执行的下一指令的执行时间没有超过所述外部相关指令的所述延迟时间时,使用所述下一指令的执行时间作为所述校正值。
10.根据权利要求9所述的仿真方法,还包括从所述外部相关指令的所述延迟时间中减去以获得所述校正值。
11.根据权利要求7所述的仿真方法,还包括从包括在所述块中的所述指令中检测这样的指令,该指令使用前一指令的执行时间来计算该指令的执行时间;以及生成包括主指令的所述主代码,其中,所述主指令计算所检测到的指令的执行时间。
全文摘要
提供了一种仿真设备和仿真方法,该仿真设备包括如下操作将目标处理器中的程序的代码划分为块;将取决于外部环境的外部相关指令的执行结果设定为预测结果;根据预测结果执行功能仿真;根据指令执行定时信息和功能仿真结果来计算外部相关指令的执行时间;根据功能仿真结果生成主代码,该主代码使得主处理器执行性能仿真;如果在主处理器执行主代码时的外部相关功能的执行结果不同于预测结果,则根据外部相关指令的延迟时间和在外部相关功能前后执行的指令的执行时间,来校正外部相关指令的执行时间;以及将校正后的外部相关指令的执行时间设定为外部相关指令的执行时间。
文档编号G06F9/455GK103049307SQ20121037798
公开日2013年4月17日 申请日期2012年10月8日 优先权日2011年10月12日
发明者桑村慎哉, 池敦 申请人:富士通株式会社