模拟装置、方法以及程序.pdf

上传人:大师****2 文档编号:1569491 上传时间:2018-06-25 格式:PDF 页数:27 大小:4.83MB
返回 下载 相关 举报
摘要
申请专利号:

CN201080069496.8

申请日:

2010.10.12

公开号:

CN103154890A

公开日:

2013.06.12

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 9/455申请日:20101012|||公开

IPC分类号:

G06F9/455; G06F9/38; G06F11/28

主分类号:

G06F9/455

申请人:

富士通株式会社

发明人:

池敦; 大卫·撒奇

地址:

日本神奈川县

优先权:

专利代理机构:

北京集佳知识产权代理有限公司 11227

代理人:

舒艳君;李洋

PDF下载: PDF下载
内容摘要

能够高速且高精度地执行对流水线处理进行控制的CPU的性能模拟。模拟装置(1)的代码变换部(11)在目标CPU执行程序时以分割后的各块检测受到外部环境影响的外部依赖指令,预测外部依赖指令的执行结果,并模拟预测结果下的指令执行,根据其模拟结果来生成编入了性能模拟用代码的主代码。模拟执行部(12)利用主代码针对程序的预测结果下的指令执行进行性能模拟,当在执行中外部依赖指令的执行结果与预测结果的设定不同时,使用在该指令前后执行的指令的执行时间等对预测结果下的指令的执行时间进行修正。模拟信息收集部(13)收集并输出性能模拟信息。

权利要求书

权利要求书一种模拟装置,对控制流水线处理的目标处理器执行程序的指令执行的模拟,其特征在于,
具备代码变换部和模拟执行部,
上述代码变换部进行下述三个处理:
将上述程序的代码分割成规定的块,并将上述块中所含的指令中该指令的执行结果依赖于外部环境的外部依赖指令的处理的执行结果设定为预测结果;
进行以上述预测结果为前提的指令执行的功能模拟,获得对上述块中所含的指令的执行定时进行表示的定时信息,根据上述功能模拟的结果与上述定时信息,来计算上述预测结果中的外部依赖指令的执行时间;和
根据上述功能模拟的结果,生成使主处理器执行以上述预测结果为前提的指令执行的性能模拟的主代码,其中,上述主处理器是使上述目标处理器动作的主处理器,
当在上述主处理器执行了上述生成出的主代码后的执行结果中,该主代码所含的外部依赖指令的执行结果与上述预测结果不同时,上述模拟执行部以利用该外部依赖指令的规定的延迟时间和在上述外部依赖指令的前后执行的指令的执行时间而求出的修正值,来修正上述预测结果中的外部依赖指令的执行时间,作为上述功能模拟中的该外部依赖指令的执行时间。
根据权利要求1所述的模拟装置,其特征在于,
在上述外部依赖指令之后下一个被执行的下一指令的执行时间没有超过对上述外部依赖指令附加的延迟时间时,上述模拟执行部进行将上述下一指令的执行时间作为上述修正值而从上述外部依赖指令的延迟时间减去的处理。
根据权利要求1或2所述的模拟装置,其特征在于,
具备电力模拟信息生成部,上述电力模拟信息生成部获得决定了上述主代码的指令集的各指令的每执行一次的消耗电力量的电力信息,根据上述电力信息与上述功能模拟的结果,来求出上述块的执行时的电力模拟信息。
一种模拟方法,对控制流水线处理的目标处理器执行程序的指令执行的模拟,其特征在于,由主CPU执行下述处理过程:
将上述程序的代码分割成规定的块,并将上述块中所含的指令中该指令的执行结果依赖于外部环境的外部依赖指令的处理的执行结果设定为预测结果;
进行以上述预测结果为前提的指令执行的功能模拟,获得对上述块中所含的指令的执行定时进行表示的定时信息,根据上述功能模拟的结果与上述定时信息,来计算上述预测结果中的外部依赖指令的执行时间;
根据上述功能模拟的结果,生成使主处理器执行以上述预测结果为前提的指令执行的性能模拟的主代码,其中,上述主处理器是使上述目标处理器动作的主处理器;
当在上述主处理器执行了上述生成出的主代码后的执行结果中,该主代码所含的外部依赖指令的执行结果与上述预测结果不同时,以利用该外部依赖指令的规定的延迟时间和在上述外部依赖指令的前后执行的指令的执行时间而求出的修正值,来修正上述预测结果中的外部依赖指令的执行时间,作为上述功能模拟中的该外部依赖指令的执行时间。
一种模拟程序,用于对控制流水线处理的目标处理器执行程序的指令执行的模拟,其特征在于,使主CPU执行下述处理:
将上述程序的代码分割成规定的块,并将上述块中所含的指令中该指令的执行结果依赖于外部环境的外部依赖指令的处理的执行结果设定为预测结果;
进行以上述预测结果为前提的指令执行的功能模拟,获得对上述块中所含的指令的执行定时进行表示的定时信息,根据上述功能模拟的结果与上述定时信息,来计算上述预测结果中的外部依赖指令的执行时间;
根据上述功能模拟的结果,生成使主处理器执行以上述预测结果为前提的指令执行的性能模拟的主代码,其中,上述主处理器是使上述目标处理器动作的主处理器;
当在上述主处理器执行了上述生成出的主代码后的执行结果中,该主代码所含的外部依赖指令的执行结果与上述预测结果不同时,以利用该外部依赖指令的规定的延迟时间和在上述外部依赖指令的前后执行的指令的执行时间而求出的修正值,来修正上述预测结果中的外部依赖指令的执行时间,作为上述功能模拟中的该外部依赖指令的执行时间。

说明书

说明书模拟装置、方法以及程序
技术领域
本发明涉及针对被虚拟模型化的系统中的处理器的指令执行,取得性能或者电力的模拟信息的处理技术。
背景技术
在系统复杂化、一般为搭载多个处理器(例如CPU)的多核构成的当前状况下,针对各核(CPU)的功能、性能、电力等的模拟处理,要求实现更高的处理速度和处理精度。
在功能、性能、消耗电力的模拟中,作为将成为评价对象的目标CPU从在主CPU中动作时的目标CPU的指令代码(目标代码)向主CPU的指令代码(主代码)变换的手法,公知采用解释器(interpreter)方式或者JIT(Just‑in‑Time)编译器(compiler)方式。
在基于JIT编译器方式的模拟中,针对作为模拟对象的目标CPU,将在执行过程中的程序中出现的目标CPU的指令置换成执行模拟的主CPU的指令,之后执行该置换后的指令。因此,JIT编译器方式的处理比解释器方式的处理速度快,在CPU的功能模拟中,尤其在被要求高速性的情况下,采用了JIT编译方式。
还提出了采用JIT编译器方式的CPU的性能模拟。
但是,在各单元能够按时钟独立动作,并逐个投入指令且并列执行的流水线(pipeline)处理的控制中,由于CPU的内部状态在每次执行处理时发生变化,所以不能活用反复利用暂时生成的主指令这一JIT编译器方式的优点。
因此,一般在针对控制流水线处理、乱序(out of order)处理那样的CPU的性能模拟、电力模拟中,不能应用JIP编译器方式。
非专利文献1:美国专利6,751,583B1
如上述那样,当在针对控制流水线处理、乱序处理的CPU的功能、性能、电力的模拟中采用解释器方式时,一般处理速度非常慢,存在不能作为现实的手法来加以应用的问题。
另外,在近来高速的CPU的情况下,当在功能模拟中采用了JIT编译器方式时,能够设法以实用的速度进行处理。
但是,当在性能、电力的模拟中采用了JIT编译器方式时,在目标CPU中处理前后的状况因流水线的控制而是多样的,由于需要追加与内部状态对应的庞大模拟用代码和执行其指令,所以处理负担非常大。
并且,在性能模拟中,为了适应相对目标CPU中可预料到的执行延迟的定时,也需要对主代码追加庞大的模拟用代码。例如,当执行加载指令(LD:load)的循环模拟时,在基于该指令的高速缓存访问中,会发生高速缓存缺失(cache miss)或者高速缓存命中(cache hit)中的任意一方,在高速缓存缺失的情况下,为了将所有定时计算在内来调查是否有应该考虑的惩罚循环(penalty circle)等,需要将这些条件记述追加到主代码中。
但另一方面,为了维持高的动作性,需要尽量抑制对功能代码追加的性能模拟(循环模拟)用的代码量。
发明内容
本发明的目的在于,提供一种能够进行高速模拟的技术。
本发明的一个方式公开的模拟装置是对控制流水线处理的目标处理器执行程序的指令执行的模拟的模拟装置,具备:1)代码变换部,其进行下述三个处理:将上述程序的代码分割成规定的块,并将上述块中所含的指令中该指令的执行结果依赖于外部环境的外部依赖指令的处理的执行结果设定为预测结果;进行以上述预测结果为前提的指令执行的功能模拟,获得对上述块中所含的指令的执行定时进行表示的定时信息,根据上述功能模拟的结果与上述定时信息,来计算上述预测结果中的外部依赖指令的执行时间;和根据上述功能模拟的结果,生成使主处理器执行以上述预测结果为前提的指令执行的性能模拟的主代码,其中,上述主处理器是使上述目标处理器动作的主处理器;2)模拟执行部,当在上述主处理器执行了上述生成出的主代码的执行结果中,该主代码所含的外部依赖指令的执行结果与上述预测结果不同时,以利用该外部依赖指令的规定的延迟时间和在上述外部依赖指令的前后执行的指令的执行时间而求出的修正值,来修正上述预测结果中的外部依赖指令的执行时间,作为上述功能模拟中的该外部依赖指令的执行时间。
另外,本发明的另一个方式公开的模拟方法具备上述模拟装置执行的各处理步骤。
并且,本发明的又一个方式公开的模拟程序使计算机执行上述模拟方法。
根据所公开的模拟装置,能够高速地进行模拟。
附图说明
图1是表示作为本发明的一个实施方式公开的模拟装置的构成例的图。
图2是表示块中所含的指令的例子的图。
图3是表示定时信息的例子的图。
图4是表示图2所示的指令执行的定时例的图。
图5是表示编入循环模拟用代码的例子的图。
图6是表示模拟装置的修正部的处理动作的图。
图7是表示模拟装置的修正部针对LD指令的执行结果的修正例的图。
图8是表示模拟装置的修正部针对LD指令的执行结果的修正例的图。
图9是表示修正部123针对LD指令的执行结果的修正例的图。
图10是模拟装置的代码变换部的概要处理流程图。
图11是模拟装置的模拟执行部的概要处理流程图。
图12是作为外部依赖指令的一个例子,表示针对加载(ld)指令的处理的预测结果的判定以及修正的处理流程例的图。
图13是表示其他实施方式中的模拟装置的构成例的图。
图14是表示模拟装置的电力模拟信息生成部的实施例的图。
具体实施方式
图1是表示本发明的一个实施方式公开的模拟装置的构成例的图。
模拟装置1是对流水线处理进行控制的目标CPU中执行指令执行的性能模拟的装置。
目标CPU是成为模拟对象的CPU的控制模型。模拟装置1输出各指令的循环模拟信息作为目标CPU的指令执行的性能模拟。
这里,目标CPU例如是ARM体系结构的CPU。与主CPU相当的模拟装置1例如是搭载X86体系结构的CPU的计算机。
模拟装置1具有代码变换部11、模拟执行部12和模拟信息收集部13。
代码变换部11是在目标CPU执行程序时,根据目标CPU执行的程序的代码(目标代码),生成执行模拟的主CPU的代码(主代码)的处理部。
代码变换部11具有块分割部111、预测模拟执行部113以及代码生成部115。
块分割部111将模拟装置1被输入的程序的目标代码分割成规定的块。被分割的块单位例如可以是一般的基本块(basic block)(从分支到下一分支前的代码)单位,或者也可以是预先决定的任意的代码单位。
图2是表示块中所含的指令的例子的图。
如图2所示,某个块中包含目标代码的3个指令;(1)“LD r1,r2”(加载);(2)“MULT r3,r4,r5(相乘)”;(3)“ADD r2,r5,r6(相加)”的指令,以(1)~(3)的顺序投入到目标CPU的流水线来加以执行。各指令的r1~r6表示寄存器(地址)。
预测模拟执行部113是获得定时信息3和预测信息4,来进行在以某个执行结果为前提的条件下执行被输入的块的性能模拟的处理部。
定时信息3是针对目标代码的各指令,表示指令执行时的各处理要素(阶段)与能够使用的寄存器之间的对应关系的信息;和对按指令中的每个外部依赖指令决定与执行结果对应的延迟时间的惩罚时间(惩罚循环数)进行表示的信息。
外部依赖指令是进行与外部环境有关的处理的指令,例如如加载指令或者存储指令等那样的,进行指令的执行结果依赖于目标CPU外的外部环境那样的处理、例如指令高速缓存、数据高速缓存、TLB检索等,或分支预测、调用/返回的堆栈等处理的指令。
图3是表示定时信息3的例子的图。
在图3所示的定时信息3中,针对LD指令,表示资源寄存器rs1(r1)为第1个处理要素(e1)而能够使用,地址寄存器rd(r2)为第2个处理要素(e2)而能够使用。
另外,在MULT指令中,表示第1资源寄存器rs1(r3)为第1个处理要素(e1),第2资源寄存器rs2(r4)为第2个处理要素(e2),地址寄存器rd(r5)为第3个处理要素(e3),能够分别使用。另外,在ADD指令中,表示第1资源寄存器rs1(r2)、第2资源寄存器rs2(r5)为第1个处理要素(e1)而能够使用,地址寄存器rd(r6)为第2个处理要素(e2)而能够使用。
图4是表示图2所示的块的各指令的执行定时例的图。
根据图3所示的定时信息3,关于向流水线投入各指令的定时,如果LD指令的执行开始设为定时t,则MULT指令为定时t+1,ADD指令为定时t+2。
由于ADD指令的第1资源寄存器(r2)与第2资源寄存器(r5)被LD指令和MULT指令使用,所以ADD指令的开始为LD指令与MULT指令的执行完成的定时t+4以后,产生2个循环量的待机时间(2个循环量的迟延)。
因此,如图4(A)所示可知,当模拟了图2所示的块时,在LD指令的执行结果为高速缓存命中的实例(case)下,块的执行时间为6个循环。
图4(B)表示了图2所示的块的LD指令的执行结果为高速缓存缺失时的定时例。
如果LD指令的结果为高速缓存缺失,则由于作为惩罚,对定时信息3设定了被认为足够再次执行的任意时间(这里为6个循环量),所以该惩罚循环被追加为延迟时间。因此,第2个处理要素(e2)的执行延迟到定时t+7。紧接着LD指令执行的MULT指令不受延迟的影响被直接执行,但ADD指令在LD指令的执行完成的定时t+8以后,产生4个循环量的待机时间(4个循环量的迟延)。
因此,如图4(B)所示可知,当模拟了图2所示的块的指令执行时,在LD指令的执行结果为高速缓存缺失的状况下,执行时间为10个循环。
预测信息4是在目标代码的外部依赖指令的处理中,决定了产生的概率高的执行结果(预测结果)的信息。由预测信息例如决定
“指令高速缓存:预测=命中,
数据高速缓存:预测=命中,
TLB检索:预测=命中,
分支预测:预测=命中,
调用/返回:预测=命中,…。
预测模拟执行部113根据上述的预测信息4,来设定被输入的块中所含的外部依赖指令的预测结果,并参照定时信息3,执行以所设定的预测结果为前提的情况(预测实例)的指令,来模拟指令执行的发展情况。预测模拟执行部113求出块中所含的各指令的执行时间(所要循环数)作为模拟结果。
代码生成部115是根据预测模拟执行部113的模拟结果,生成用于进行所设定的预测实例下的指令执行时的性能模拟的主代码(性能模拟用主代码),作为与处理后的块对应的主代码的处理部。
代码生成部115根据块的目标代码,生成外部依赖指令为预测结果的预测实例时的进行指令执行的主代码,进而加上各指令的执行时间,来编入进行对块的处理时间加以计算的处理的模拟用代码。
例如,代码生成部115针对设定了“高速缓存命中”作为数据的LD指令的预测结果的处理,模拟该块内的基于LD指令的高速缓存访问为“命中”时的处理执行,求出该预测实例下的执行时间,并生成通过使用了预测实例的“命中”时的执行时间加法/减法的修正计算而求出基于LD指令的高速缓存访问为“缺失”时的执行时间的处理的主代码。
模拟执行部12代是执行码生成部115生成的主代码,进行执行程序(目标代码)的目标CPU的指令执行的功能以及性能模拟的处理部。
模拟执行部12具有代码执行部121和修正部123。
代码执行部121是使用主代码来执行程序(目标代码)的处理部。
修正部123是在程序的执行过程中外部依赖指令的执行结果与所设定的预测结果不同时(预测外实例),对已经求出的预料实例下的执行时间进行修正来求出该指令的执行时间的处理部。
修正部123使用对外部依赖指令赋予的惩罚时间、在外部依赖指令的前后执行的指令的执行时间、前一个指令的延迟时间等来进行修正。另外,修正处理的详细内容将后述。
模拟信息收集部13是收集包括各指令的执行时间的日志信息(模拟信息)5作为性能模拟的执行结果的处理部。
以下,对模拟装置1的处理流程进行说明。
〔代码变换处理〕
(1)模拟装置1的代码变换部11的块分割部111获得目标程序2的目标代码并保持到存储部中(图1中未图示),将所保持的目标代码分割成任意的块(参照图2)。
(2)预测模拟执行部113获得与被输入的目标程序2有关的定时信息3、预测信息4并保存到存储部中。
然后,预测模拟执行部113根据预测信息,针对分割后的块的外部依赖指令分别设定预测结果。例如,作为图2所示的块的指令中LD指令的数据高速缓存的预测结果,预测模拟执行部113设定“命中”。
(3)预测模拟执行部113对块的代码进行解释,模拟以所设定的预测结果为前提时的指令执行。即,预测模拟执行部113模拟图4(A)所示的定时例的指令执行。
(4)接下来,代码生成部115根据预测实例的模拟结果,从目标代码生成主代码。并且,代码生成部115对从目标代码变换后的主代码(仅功能代码)编入用于执行性能模拟(循环模拟)的循环模拟用代码。
图5(A)是表示从目标代码生成功能模拟的主代码的例子的图,图5(B)是表示对功能模拟的主代码编入循环模拟用代码的例子的图。
如图5(A)所示,目标代码Inst_A被变换成主代码Host_Inst_A0_func、Host_Inst_A1_func,目标代码Inst_B被变换成主代码Host_Inst_B0_func、Host_Inst_B1_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。
循环模拟用代码是将各指令的执行时间(所要循环数)常量化,将各指令的执行时间合计来求出块的处理时间的代码。由此,能够获得表示块执行中的进展情况的信息。
这里,由于主代码中的功能代码、外部依赖指令以外的指令的循环模拟用代码能够使用已知的代码来实施,所以省略具体例的说明。外部依赖指令的循环模拟用代码作为调出修正处理的辅助(helper)函数被准备。针对辅助函数将后述。
〔模拟处理〕
(1)模拟执行部12的代码执行部121使用代码变换部11生成的主代码,来进行目标程序2的性能模拟。
代码执行部121模拟目标程序2的指令执行,不断获得各指令的执行时间。
(2)当在模拟的执行中检测到外部依赖指令(例如LD指令)时,代码执行部121判定其执行结果与所设定的预测结果是否不同,在执行结果与预测结果不同的情况下,请求启动修正部123。例如,在检测出指令“LD,r1,r2”,数据高速缓存的预测结果(高速缓存命中)与实际的执行结果(高速缓存缺失)不同的情况下,调出修正部123。
(3)修正部123接受调出而起动,对检测出的指令“LD,r1,r2”的执行时间(循环数)进行修正。并且,修正部123通过该修正,还变更下一指令的执行定时t+n。
每当外部依赖指令的执行结果与预测结果不同时,修正部123便修正指令的执行时间。这里,由于预测实例下的外部依赖指令的执行时间已被常量化,所以修正部123,可通过简单地将针对该指令的惩罚时间、前后执行的指令的执行时间、之前处理的指令的延迟时间等的值相加或相减来计算预测外实例下的外部依赖指令的执行时间。
图6是表示修正部123的处理动作的图。
修正部123作为辅助函数模块被实施。
在本实施方式中,例如通过取代按LD指令的高速缓存的每个执行结果来进行模拟的以往的函数“cache_ld(address)”,而将辅助函数“cache_ld(address,rep_delay,pre_delay)”装到主代码来实现。
辅助函数的“rep_delay”是在使用该加载(ld)指令的返回值的下一指令的执行之前,未被作为惩罚时间中的延迟时间而处理的时间(延期时间)。“pre_delay”是从前一个指令接收的延迟时间。“-1”表示之前的指令没有延迟。“rep_delay”与“pre_delay”是根据性能模拟结果与定时信息3的静态分析处理的结果而得到的时间信息。
在图6所示的动作例中,修正部123在当前定时current_time与前一个ld指令的执行定时preld_time之差超过前一个ld指令的延迟时间量pre_delay时,以前一个ld指令的执行定时preld_time到当前定时current_time的时间来调整延迟时间pre_delay,求出有效延迟时间avail_delay。
接下来,若执行结果为高速缓存缺失,则预测结果错误,修正部123对有效延迟时间avail_delay加上高速缓存缺失时的惩罚时间cache_miss_latency,根据延期时间rep_delay来修正LD指令的执行时间。
图7~图9是表示修正部123针对LD指令的执行结果的修正例的图。
图7是用于对在执行一个高速缓存处理的实例下产生了一个高速缓存缺失时的修正例进行说明的图。
在图7的例子中,执行以下3个指令的模拟。
“ld[r1],r2:[r1]→r2;
mult r3,r4,r5:r3*r4→r5;
add r2,r5,r6:r2+r5→r6”
图7(A)是表示预测结果为“高速缓存命中”时的指令执行定时的图例的图。在该预测实例下,被第3个执行的add指令产生了2个循环迟延。
图7(B)是表示与预测结果不同的“高速缓存缺失”时的指令执行定时的图例的图。在该预测错误的实例下,如果ld指令的执行结果是高速缓存缺失,则产生惩罚循环(6个循环)量的延迟。因此,虽然mult指令不受延迟的影响地被执行,但由于add指令的执行等待ld指令的完成,所以延迟4个循环量。
图7(C)是表示由修正部123修正后的指令执行时间图的例子的图。
由于ld指令的执行结果为高速缓存缺失(预测结果的错误),所以修正部123对剩余的执行时间(2-1=1个循环)加上规定的高速缓存缺失时的惩罚时间(6个循环)来作为有效延迟时间(7个循环)。有效延迟时间成为最大的延迟时间。
并且,修正部123获得下一mult指令的执行时间(3个循环),判定为下一指令的执行时间未超过延迟时间,将从有效延迟时间减去了下一指令的执行时间而得到的时间(7-3=4个循环)作为ld指令的发生了延迟的执行时间(延迟时间)。
另外,修正部123将从有效延迟时间减去了上述的延迟时间而得到的时间(3个循环)设为延期时间。延期时间是作为惩罚的延迟被延期后的时间。
修正部123通过辅助函数cache_ld(addr,rep_delay,pre_delay),返回延期时间rep_delay=3、前指令的延迟时间pre_delay=-1(无延迟)。
通过该修正,ld指令的执行时间成为将所执行的时间与延迟时间相加的执行时间(1+4=5个循环),可根据执行完成的定时t1计算后续的mult指令、add指令的执行时间。
即,通过对修正后的ld指令的执行时间(5个循环)简单地加上在预测模拟执行部113的处理结果(基于预测结果的预测模拟的结果)中求出的mult指令与add指令各自的执行时间(3个循环,3个循环),便能得到该块的执行时间(循环数)。
因此,通过进行基于仅将执行结果与预测不同的指令的执行时间相加或者相减的修正处理,针对其他指令,加上基于预测结果的在模拟时求出的执行时间,便还能高精度地求出高速缓存缺失时的模拟的执行循环数。
图7(D)是为了与模拟装置1的处理进行比较,而表示现有技术的通过单纯的加法来求出高速缓存缺失时的循环数时的误差的大小的图。在图7(D)的情况下,可知由于直接加上ld指令的延迟时间,所以实际上产生了因在ld指令的执行中完成执行的mult指令的执行定时的偏差而引起的误差。
图8是用于对在执行两个高速缓存处理的实例下产生了两个高速缓存缺失时的修正例进行说明的图。
在图8的例子中,执行以下5个指令的模拟。
“ld[r1],r2:[r1]→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”
图8(A)是表示两个高速缓存处理中的预测结果为“高速缓存命中”时的指令执行定时的图例的图。在该预测实例下,两个ld指令被隔开2个循环量(通常的1个循环+附加的1个循环)来执行。
图8(B)是表示两个高速缓存处理两方是与预测结果不同的“高速缓存缺失”时的指令执行定时的图例的图。在该预测错误的实例下,两个ld指令各自中为高速缓存缺失,产生惩罚循环(6个循环)量的延迟。但是,两个ld指令的延迟时间是重叠的时间,mult指令也不受延迟的影响地被执行,两个add指令的执行延迟到第2个ld指令的完成。
图8(C)是表示由修正部123修正后的指令执行时间图的例子的图。
如使用图7说明那样,修正部123在定时t0修正第1个ld指令的延迟时间,返回辅助函数cache_ld(addr,3,-1)。
接下来,在当前定时t1,由于第2个ld指令的执行结果为高速缓存缺失(预测结果的错误),所以修正部123对该ld指令的剩余的执行时间加上惩罚循环(6),成为有效延迟时间(1+6=7个循环)。
修正部123从有效延迟时间减去在当前定时t1之前消耗的延迟时间(<当前定时t1-前指令的执行定时t0>-所设定的间隔),求出从当前定时t1超过的有效延迟时间(7-(6-2)=3个循环),将该超过的有效延迟时间作为第2个ld指令的执行时间。
并且,修正部123从超过的有效延迟时间减去本来的执行时间(3-1=2个循环),作为前指令的延迟时间。
另外,修正部123从有效延迟时间减去在当前定时t1之前消耗的延迟时间与在当前定时t1超过的有效延迟时间的合计(7-(3+3)=1个循环),作为延期时间。
修正部123在定时t1修正了第2个ld指令的延迟时间后,返回辅助函数cache_ld(addr,2,1)。
通过该修正,对当前定时t1附加了修正值(3个循环)的定时成为ld指令的执行完成的定时,从该定时起不断加上以后的mult指令、add指令的执行时间。
图8(D)是为了与模拟装置1的处理进行比较,而表示现有技术的通过单纯的加法求出高速缓存缺失时的循环数时的误差的大小的图。在图8(D)的情况下,可知由于直接加上对两个ld指令分别赋予的基于惩罚的延迟时间,所以产生了大的误差(9个循环)。可知在图8(C)所示的修正部123的处理中,与图8(B)所示那样准确地模拟的情况相比,也存在误差(1个循环),但与以往手法相比,非常高精度地求出。
图9是用于对在执行两个高速缓存处理的实例下产生了一个高速缓存缺失时的修正例进行说明的图。在图9的例子中,执行与图8中表示的说明例同样的5个指令的模拟。
图9(A)是表示两个高速缓存处理中的预测结果为“高速缓存命中”时的指令执行定时的图例的图。在该预测实例下,与图8(A)的情况同样,两个ld指令被隔开2个循环量(通常的1个循环+附加的1个循环)而执行。
图9(B)是表示第1个ld指令为与预测结果不同的“高速缓存缺失”,第2个ld指令的结果为预测结果(高速缓存命中)时的指令执行定时的图例的图。在该预测错误的实例下,两个ld指令分别产生惩罚循环(6个循环)量的延迟。但是,两个ld指令的延迟时间是重叠的时间,mult指令也不受延迟的影响地被执行,两个add指令的执行延迟到第2个ld指令的完成。
图9(C)是表示由修正部123修正后的指令执行时间图的例子的图。
如使用图7说明那样,修正部123在定时t0修正第1个ld指令的延迟时间,返回辅助函数cache_ld(addr,3,-1)。
接下来,在当前定时t1,由于第2个ld指令的执行结果为高速缓存命中(预测结果),所以修正部123判断从该ld指令的执行开始到当前定时t1的时间<t1-t0-所设定的间隔(6-0-2=4个循环)>是否大于该ld指令的执行时间(2个循环)。
由于从第2个ld指令的执行开始到当前定时t1的时间大于该ld指令的执行时间(2个循环),所以修正部123将当前定时t1设为接下来的mult指令的执行定时。
而且,修正部123将从第2个ld指令的执行完成到当前定时t1的时间(2个循环)处理成针对下一指令的延迟时间,设为前指令的延迟时间pre_delay=2。另外,修正部123从第1个ld指令的有效延迟时间减去在当前定时t1之前消耗的延迟时间与在当前定时t1超过的有效延迟时间的合计(7-(6+0)=1个循环),作为延期时间rep_delay=1,并返回辅助函数cache_ld(addr,1,2)。
图9(D)是为了与模拟装置1的处理进行比较,而表示现有技术的通过单纯的加法求出高速缓存缺失时的循环数时的误差的大小的图。在图9(D)的情况下,可知由于直接加上了第1个ld指令的因惩罚引起的延迟时间,所以产生了误差。
图10是模拟装置1的代码变换部11的概要处理流程图。
在模拟装置1中,代码变换部11的块分割部111将目标程序的代码(目标指令)分割成规定单位的块并输入(步骤S1)。
预测模拟执行部113对块的指令进行分析,来检测外部依赖指令(步骤S2),针对检测出的所有指令,根据预测信息4来决定概率高的执行结果作为预测实例(步骤S3)。
并且,预测模拟执行部113参照定时信息3,针对块的各指令执行以设定为预测结果的执行结果为前提的性能模拟(步骤S4)。
代码生成部115根据模拟结果,来生成模拟执行部12执行的性能模拟用主代码(步骤S5)。
通过以上的步骤S1~S5的处理,输出对所设定的执行结果的情况(预测实例)下的功能代码编入了模拟目标CPU的性能的代码的主代码。
图11是模拟装置1的模拟执行部12的概要处理流程图。
在模拟装置1中,模拟执行部12的代码执行部121执行代码生成部115生成的主代码,进行性能模拟(步骤S10)。若在执行中检测出外部依赖指令(步骤S11),则代码执行部121判定该指令的执行结果与被设定为预测结果的内容是否相同(步骤S12)。仅在外部依赖指令的执行结果与所设定的预测结果不相同的情况下(步骤S12的“否”),调出修正部123,修正部123对该外部依赖指令的执行时间进行修正(步骤S13)。
然后,模拟信息收集部13输出与目标程序相当的主代码所有的模拟处理的模拟信息5(步骤S14)。
通过以上的步骤S10~S14的处理步骤,输出执行目标程序2的目标CPU的模拟信息(循环模拟信息)5。
图12是作为外部依赖指令的一个例子,表示加载(ld)指令的处理的预测结果的判定以及修正的处理流程例的图。
当从处理中的块的指令检测出外部依赖指令后,代码执行部121调出与修正部123相当的辅助函数(步骤S20)。
代码执行部121判定在ld指令中是否要求了高速缓存访问(步骤S21),如果要求了高速缓存访问(步骤S21的“是”),则模拟高速缓存访问(步骤S22)。如果高速缓存访问的结果是“高速缓存缺失”(步骤S23的“缺失”),则修正部123ld进行指令的执行时间(循环数)的修正(步骤S24),输出修正后的执行时间(循环数)(步骤S25)。
当在步骤S21中未要求高速缓存访问时(步骤S21的“否”),或者所要求的高速缓存访问是“高速缓存命中”(步骤S23的“命中”),则修正部123输出未修正的所预测的执行时间(循环数)(步骤S26)。
图13是表示其他实施方式中的模拟装置1的构成例的图。
模拟装置1在图1所示的构成例中还具备电力模拟信息生成部15。
电力模拟信息生成部15是获得电力信息6,根据模拟信息收集部13输出的模拟信息5,来计算块执行时的消耗电力,作为电力模拟信息7进行输出的处理部。
图14是表示将电力模拟信息生成部15作为编入到性能模拟用的主代码的函数(电力模拟函数)实施时的例子的图。
作为电力信息6,LD指令、MULT指令、ADD指令执行1次的消耗电力分别被设定为4u[W]、0.5u[W]、0.3u[W]。
电力模拟函数Host_Inst_A-C_power基于在模拟中执行了的各指令的执行次数,来计算电力。
接下来,对模拟装置1的硬件构成例进行说明。
模拟装置1能够由具有运算装置(CPU)、暂时存储装置(DRAM、闪存等)、永久性存储装置(HDD、闪存等)、以及与网络N的网络接口的计算机PC、输入装置(键盘、鼠标等)和输出装置(显示器、打印机等)实施。
另外,模拟装置1能够通过计算机PC可执行的程序来实施。该情况下,可提供记述有模拟装置1应该具有的功能的处理内容的程序。通过由计算机PC执行所提供的程序,可在计算机PC上实现上述说明的模拟装置1的处理功能。
此外,计算机PC也可以从移动式记录介质直接读取程序,按照该程序执行处理。另外,计算机PC也可以在被服务器计算机传输程序时,依次按照接收到的程序执行处理。
并且,该程序可以预先记录在计算机PC可读取的记录介质中。
如以上说明那样,根据模拟装置1,能够高速进行对流水线处理进行控制的CPU的指令执行的性能模拟。
对模拟装置1而言,在如JIT编译器方式那样目标CPU的程序的代码变换处理中,代码变换部11按分割后的每个块对预测了外部依赖指令的执行结果时(预测实例)的执行,进行功能模拟,根据定时信息3将各指令的执行时间常量化。
在模拟装置1的代码变换部11中,取代将用于获得预测实例以外的执行的性能模拟信息(循环模拟信息)的模拟执行代码编入到主代码,而编入预测实例下的进行指令的执行时间的修正处理的代码。
另外,在模拟装置1的模拟执行部12中,针对预测实例时的指令执行性能模拟,取代预测外实例下的模拟,而使用针对该指令的延迟时间、前后执行的指令的执行时间等,来修正预测实例下的执行时间,获得外部依赖指令的执行时间。
因此,与以往相比,能够减少对功能代码追加的模拟用代码量,能够在抑制性能模拟处理的负担增大的同时,高速地进行模拟。
另外,在模拟装置1中,通过以预测实例为前提进行功能模拟,由此通过静态分析处理获得一个实例(预测实例)下的各指令的执行时间,通过将预测实例下的执行时间与惩罚时间、前后执行的指令的执行时间、之前的指令的延迟时间等相加或者相减来修正预测实例以外的实例下的指令的执行时间。
根据模拟装置1,能够高速实时包括CPU的系统的性能、电力的模拟,能够容易地进行以往难以在现实中执行的大规模的系统整体的性能、电力的评价与解析、预测等。
并且,根据模拟装置1,能够根据电力信息与性能模拟信息来高速且高精度地进行程序的消耗电力模拟。
因此,起到不需要进行各实例下的性能模拟,便能够在抑制性能模拟处理的负担增大的同时,高精度地进行模拟这一效果。
附图标记说明:
1‑模拟装置;11‑代码变换部;111‑块分割部;113‑预测模拟执行部;115‑代码生成部;12‑模拟执行部;121‑代码执行部;123‑修正部;13‑模拟信息收集部;15‑电力模拟信息生成部;2‑目标程序;3‑定时信息;4‑预测信息;5‑模拟信息;6‑电力信息;7‑电力模拟信息。

模拟装置、方法以及程序.pdf_第1页
第1页 / 共27页
模拟装置、方法以及程序.pdf_第2页
第2页 / 共27页
模拟装置、方法以及程序.pdf_第3页
第3页 / 共27页
点击查看更多>>
资源描述

《模拟装置、方法以及程序.pdf》由会员分享,可在线阅读,更多相关《模拟装置、方法以及程序.pdf(27页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 103154890 A(43)申请公布日 2013.06.12CN103154890A*CN103154890A*(21)申请号 201080069496.8(22)申请日 2010.10.12G06F 9/455(2006.01)G06F 9/38(2006.01)G06F 11/28(2006.01)(71)申请人富士通株式会社地址日本神奈川县(72)发明人池敦 大卫撒奇(74)专利代理机构北京集佳知识产权代理有限公司 11227代理人舒艳君 李洋(54) 发明名称模拟装置、方法以及程序(57) 摘要能够高速且高精度地执行对流水线处理进行控制的CPU的性能模拟。模。

2、拟装置(1)的代码变换部(11)在目标CPU执行程序时以分割后的各块检测受到外部环境影响的外部依赖指令,预测外部依赖指令的执行结果,并模拟预测结果下的指令执行,根据其模拟结果来生成编入了性能模拟用代码的主代码。模拟执行部(12)利用主代码针对程序的预测结果下的指令执行进行性能模拟,当在执行中外部依赖指令的执行结果与预测结果的设定不同时,使用在该指令前后执行的指令的执行时间等对预测结果下的指令的执行时间进行修正。模拟信息收集部(13)收集并输出性能模拟信息。(85)PCT申请进入国家阶段日2013.04.08(86)PCT申请的申请数据PCT/JP2010/067866 2010.10.12(8。

3、7)PCT申请的公布数据WO2012/049728 JA 2012.04.19(51)Int.Cl.权利要求书2页 说明书11页 附图13页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书2页 说明书11页 附图13页(10)申请公布号 CN 103154890 ACN 103154890 A1/2页21.一种模拟装置,对控制流水线处理的目标处理器执行程序的指令执行的模拟,其特征在于,具备代码变换部和模拟执行部,上述代码变换部进行下述三个处理:将上述程序的代码分割成规定的块,并将上述块中所含的指令中该指令的执行结果依赖于外部环境的外部依赖指令的处理的执行结果设定为预测结果;进。

4、行以上述预测结果为前提的指令执行的功能模拟,获得对上述块中所含的指令的执行定时进行表示的定时信息,根据上述功能模拟的结果与上述定时信息,来计算上述预测结果中的外部依赖指令的执行时间;和根据上述功能模拟的结果,生成使主处理器执行以上述预测结果为前提的指令执行的性能模拟的主代码,其中,上述主处理器是使上述目标处理器动作的主处理器,当在上述主处理器执行了上述生成出的主代码后的执行结果中,该主代码所含的外部依赖指令的执行结果与上述预测结果不同时,上述模拟执行部以利用该外部依赖指令的规定的延迟时间和在上述外部依赖指令的前后执行的指令的执行时间而求出的修正值,来修正上述预测结果中的外部依赖指令的执行时间,。

5、作为上述功能模拟中的该外部依赖指令的执行时间。2.根据权利要求1所述的模拟装置,其特征在于,在上述外部依赖指令之后下一个被执行的下一指令的执行时间没有超过对上述外部依赖指令附加的延迟时间时,上述模拟执行部进行将上述下一指令的执行时间作为上述修正值而从上述外部依赖指令的延迟时间减去的处理。3.根据权利要求1或2所述的模拟装置,其特征在于,具备电力模拟信息生成部,上述电力模拟信息生成部获得决定了上述主代码的指令集的各指令的每执行一次的消耗电力量的电力信息,根据上述电力信息与上述功能模拟的结果,来求出上述块的执行时的电力模拟信息。4.一种模拟方法,对控制流水线处理的目标处理器执行程序的指令执行的模拟。

6、,其特征在于,由主CPU执行下述处理过程:将上述程序的代码分割成规定的块,并将上述块中所含的指令中该指令的执行结果依赖于外部环境的外部依赖指令的处理的执行结果设定为预测结果;进行以上述预测结果为前提的指令执行的功能模拟,获得对上述块中所含的指令的执行定时进行表示的定时信息,根据上述功能模拟的结果与上述定时信息,来计算上述预测结果中的外部依赖指令的执行时间;根据上述功能模拟的结果,生成使主处理器执行以上述预测结果为前提的指令执行的性能模拟的主代码,其中,上述主处理器是使上述目标处理器动作的主处理器;当在上述主处理器执行了上述生成出的主代码后的执行结果中,该主代码所含的外部依赖指令的执行结果与上述。

7、预测结果不同时,以利用该外部依赖指令的规定的延迟时间和在上述外部依赖指令的前后执行的指令的执行时间而求出的修正值,来修正上述预测结果中的外部依赖指令的执行时间,作为上述功能模拟中的该外部依赖指令的执行时间。5.一种模拟程序,用于对控制流水线处理的目标处理器执行程序的指令执行的模拟,其特征在于,使主CPU执行下述处理:权 利 要 求 书CN 103154890 A2/2页3将上述程序的代码分割成规定的块,并将上述块中所含的指令中该指令的执行结果依赖于外部环境的外部依赖指令的处理的执行结果设定为预测结果;进行以上述预测结果为前提的指令执行的功能模拟,获得对上述块中所含的指令的执行定时进行表示的定时。

8、信息,根据上述功能模拟的结果与上述定时信息,来计算上述预测结果中的外部依赖指令的执行时间;根据上述功能模拟的结果,生成使主处理器执行以上述预测结果为前提的指令执行的性能模拟的主代码,其中,上述主处理器是使上述目标处理器动作的主处理器;当在上述主处理器执行了上述生成出的主代码后的执行结果中,该主代码所含的外部依赖指令的执行结果与上述预测结果不同时,以利用该外部依赖指令的规定的延迟时间和在上述外部依赖指令的前后执行的指令的执行时间而求出的修正值,来修正上述预测结果中的外部依赖指令的执行时间,作为上述功能模拟中的该外部依赖指令的执行时间。权 利 要 求 书CN 103154890 A1/11页4模拟。

9、装置、 方法以及程序技术领域0001 本发明涉及针对被虚拟模型化的系统中的处理器的指令执行,取得性能或者电力的模拟信息的处理技术。背景技术0002 在系统复杂化、一般为搭载多个处理器(例如CPU)的多核构成的当前状况下,针对各核(CPU)的功能、性能、电力等的模拟处理,要求实现更高的处理速度和处理精度。0003 在功能、性能、消耗电力的模拟中,作为将成为评价对象的目标CPU从在主CPU中动作时的目标CPU的指令代码(目标代码)向主CPU的指令代码(主代码)变换的手法,公知采用解释器(interpreter)方式或者JIT(Just-in-Time)编译器(compiler)方式。0004 在基。

10、于JIT编译器方式的模拟中,针对作为模拟对象的目标CPU,将在执行过程中的程序中出现的目标CPU的指令置换成执行模拟的主CPU的指令,之后执行该置换后的指令。因此,JIT编译器方式的处理比解释器方式的处理速度快,在CPU的功能模拟中,尤其在被要求高速性的情况下,采用了JIT编译方式。0005 还提出了采用JIT编译器方式的CPU的性能模拟。0006 但是,在各单元能够按时钟独立动作,并逐个投入指令且并列执行的流水线(pipeline)处理的控制中,由于CPU的内部状态在每次执行处理时发生变化,所以不能活用反复利用暂时生成的主指令这一JIT编译器方式的优点。0007 因此,一般在针对控制流水线处。

11、理、乱序(out of order)处理那样的CPU的性能模拟、电力模拟中,不能应用JIP编译器方式。0008 非专利文献1:美国专利6,751,583B10009 如上述那样,当在针对控制流水线处理、乱序处理的CPU的功能、性能、电力的模拟中采用解释器方式时,一般处理速度非常慢,存在不能作为现实的手法来加以应用的问题。0010 另外,在近来高速的CPU的情况下,当在功能模拟中采用了JIT编译器方式时,能够设法以实用的速度进行处理。0011 但是,当在性能、电力的模拟中采用了JIT编译器方式时,在目标CPU中处理前后的状况因流水线的控制而是多样的,由于需要追加与内部状态对应的庞大模拟用代码和执。

12、行其指令,所以处理负担非常大。0012 并且,在性能模拟中,为了适应相对目标CPU中可预料到的执行延迟的定时,也需要对主代码追加庞大的模拟用代码。例如,当执行加载指令(LD:load)的循环模拟时,在基于该指令的高速缓存访问中,会发生高速缓存缺失(cache miss)或者高速缓存命中(cache hit)中的任意一方,在高速缓存缺失的情况下,为了将所有定时计算在内来调查是否有应该考虑的惩罚循环(penalty circle)等,需要将这些条件记述追加到主代码中。0013 但另一方面,为了维持高的动作性,需要尽量抑制对功能代码追加的性能模拟(循环模拟)用的代码量。说 明 书CN 1031548。

13、90 A2/11页5发明内容0014 本发明的目的在于,提供一种能够进行高速模拟的技术。0015 本发明的一个方式公开的模拟装置是对控制流水线处理的目标处理器执行程序的指令执行的模拟的模拟装置,具备:1)代码变换部,其进行下述三个处理:将上述程序的代码分割成规定的块,并将上述块中所含的指令中该指令的执行结果依赖于外部环境的外部依赖指令的处理的执行结果设定为预测结果;进行以上述预测结果为前提的指令执行的功能模拟,获得对上述块中所含的指令的执行定时进行表示的定时信息,根据上述功能模拟的结果与上述定时信息,来计算上述预测结果中的外部依赖指令的执行时间;和根据上述功能模拟的结果,生成使主处理器执行以上。

14、述预测结果为前提的指令执行的性能模拟的主代码,其中,上述主处理器是使上述目标处理器动作的主处理器;2)模拟执行部,当在上述主处理器执行了上述生成出的主代码的执行结果中,该主代码所含的外部依赖指令的执行结果与上述预测结果不同时,以利用该外部依赖指令的规定的延迟时间和在上述外部依赖指令的前后执行的指令的执行时间而求出的修正值,来修正上述预测结果中的外部依赖指令的执行时间,作为上述功能模拟中的该外部依赖指令的执行时间。0016 另外,本发明的另一个方式公开的模拟方法具备上述模拟装置执行的各处理步骤。0017 并且,本发明的又一个方式公开的模拟程序使计算机执行上述模拟方法。0018 根据所公开的模拟装。

15、置,能够高速地进行模拟。附图说明0019 图1是表示作为本发明的一个实施方式公开的模拟装置的构成例的图。0020 图2是表示块中所含的指令的例子的图。0021 图3是表示定时信息的例子的图。0022 图4是表示图2所示的指令执行的定时例的图。0023 图5是表示编入循环模拟用代码的例子的图。0024 图6是表示模拟装置的修正部的处理动作的图。0025 图7是表示模拟装置的修正部针对LD指令的执行结果的修正例的图。0026 图8是表示模拟装置的修正部针对LD指令的执行结果的修正例的图。0027 图9是表示修正部123针对LD指令的执行结果的修正例的图。0028 图10是模拟装置的代码变换部的概要。

16、处理流程图。0029 图11是模拟装置的模拟执行部的概要处理流程图。0030 图12是作为外部依赖指令的一个例子,表示针对加载(ld)指令的处理的预测结果的判定以及修正的处理流程例的图。0031 图13是表示其他实施方式中的模拟装置的构成例的图。0032 图14是表示模拟装置的电力模拟信息生成部的实施例的图。具体实施方式0033 图1是表示本发明的一个实施方式公开的模拟装置的构成例的图。说 明 书CN 103154890 A3/11页60034 模拟装置1是对流水线处理进行控制的目标CPU中执行指令执行的性能模拟的装置。0035 目标CPU是成为模拟对象的CPU的控制模型。模拟装置1输出各指令。

17、的循环模拟信息作为目标CPU的指令执行的性能模拟。0036 这里,目标CPU例如是ARM体系结构的CPU。与主CPU相当的模拟装置1例如是搭载X86体系结构的CPU的计算机。0037 模拟装置1具有代码变换部11、模拟执行部12和模拟信息收集部13。0038 代码变换部11是在目标CPU执行程序时,根据目标CPU执行的程序的代码(目标代码),生成执行模拟的主CPU的代码(主代码)的处理部。0039 代码变换部11具有块分割部111、预测模拟执行部113以及代码生成部115。0040 块分割部111将模拟装置1被输入的程序的目标代码分割成规定的块。被分割的块单位例如可以是一般的基本块(basic。

18、 block)(从分支到下一分支前的代码)单位,或者也可以是预先决定的任意的代码单位。0041 图2是表示块中所含的指令的例子的图。0042 如图2所示,某个块中包含目标代码的3个指令;(1)“LD r1,r2”(加载);(2)“MULT r3,r4,r5(相乘)”;(3)“ADD r2,r5,r6(相加)”的指令,以(1)(3)的顺序投入到目标CPU的流水线来加以执行。各指令的r1r6表示寄存器(地址)。0043 预测模拟执行部113是获得定时信息3和预测信息4,来进行在以某个执行结果为前提的条件下执行被输入的块的性能模拟的处理部。0044 定时信息3是针对目标代码的各指令,表示指令执行时的。

19、各处理要素(阶段)与能够使用的寄存器之间的对应关系的信息;和对按指令中的每个外部依赖指令决定与执行结果对应的延迟时间的惩罚时间(惩罚循环数)进行表示的信息。0045 外部依赖指令是进行与外部环境有关的处理的指令,例如如加载指令或者存储指令等那样的,进行指令的执行结果依赖于目标CPU外的外部环境那样的处理、例如指令高速缓存、数据高速缓存、TLB检索等,或分支预测、调用返回的堆栈等处理的指令。0046 图3是表示定时信息3的例子的图。0047 在图3所示的定时信息3中,针对LD指令,表示资源寄存器rs1(r1)为第1个处理要素(e1)而能够使用,地址寄存器rd(r2)为第2个处理要素(e2)而能够。

20、使用。0048 另外,在MULT指令中,表示第1资源寄存器rs1(r3)为第1个处理要素(e1),第2资源寄存器rs2(r4)为第2个处理要素(e2),地址寄存器rd(r5)为第3个处理要素(e3),能够分别使用。另外,在ADD指令中,表示第1资源寄存器rs1(r2)、第2资源寄存器rs2(r5)为第1个处理要素(e1)而能够使用,地址寄存器rd(r6)为第2个处理要素(e2)而能够使用。0049 图4是表示图2所示的块的各指令的执行定时例的图。0050 根据图3所示的定时信息3,关于向流水线投入各指令的定时,如果LD指令的执行开始设为定时t,则MULT指令为定时t1,ADD指令为定时t2。0。

21、051 由于ADD指令的第1资源寄存器(r2)与第2资源寄存器(r5)被LD指令和MULT指令使用,所以ADD指令的开始为LD指令与MULT指令的执行完成的定时t4以后,产生2个循环量的待机时间(2个循环量的迟延)。说 明 书CN 103154890 A4/11页70052 因此,如图4(A)所示可知,当模拟了图2所示的块时,在LD指令的执行结果为高速缓存命中的实例(case)下,块的执行时间为6个循环。0053 图4(B)表示了图2所示的块的LD指令的执行结果为高速缓存缺失时的定时例。0054 如果LD指令的结果为高速缓存缺失,则由于作为惩罚,对定时信息3设定了被认为足够再次执行的任意时间(。

22、这里为6个循环量),所以该惩罚循环被追加为延迟时间。因此,第2个处理要素(e2)的执行延迟到定时t7。紧接着LD指令执行的MULT指令不受延迟的影响被直接执行,但ADD指令在LD指令的执行完成的定时t8以后,产生4个循环量的待机时间(4个循环量的迟延)。0055 因此,如图4(B)所示可知,当模拟了图2所示的块的指令执行时,在LD指令的执行结果为高速缓存缺失的状况下,执行时间为10个循环。0056 预测信息4是在目标代码的外部依赖指令的处理中,决定了产生的概率高的执行结果(预测结果)的信息。由预测信息例如决定0057 “指令高速缓存:预测命中,0058 数据高速缓存:预测命中,0059 TLB。

23、检索:预测命中,0060 分支预测:预测命中,0061 调用返回:预测命中,。0062 预测模拟执行部113根据上述的预测信息4,来设定被输入的块中所含的外部依赖指令的预测结果,并参照定时信息3,执行以所设定的预测结果为前提的情况(预测实例)的指令,来模拟指令执行的发展情况。预测模拟执行部113求出块中所含的各指令的执行时间(所要循环数)作为模拟结果。0063 代码生成部115是根据预测模拟执行部113的模拟结果,生成用于进行所设定的预测实例下的指令执行时的性能模拟的主代码(性能模拟用主代码),作为与处理后的块对应的主代码的处理部。0064 代码生成部115根据块的目标代码,生成外部依赖指令为。

24、预测结果的预测实例时的进行指令执行的主代码,进而加上各指令的执行时间,来编入进行对块的处理时间加以计算的处理的模拟用代码。0065 例如,代码生成部115针对设定了“高速缓存命中”作为数据的LD指令的预测结果的处理,模拟该块内的基于LD指令的高速缓存访问为“命中”时的处理执行,求出该预测实例下的执行时间,并生成通过使用了预测实例的“命中”时的执行时间加法减法的修正计算而求出基于LD指令的高速缓存访问为“缺失”时的执行时间的处理的主代码。0066 模拟执行部12代是执行码生成部115生成的主代码,进行执行程序(目标代码)的目标CPU的指令执行的功能以及性能模拟的处理部。0067 模拟执行部12具。

25、有代码执行部121和修正部123。0068 代码执行部121是使用主代码来执行程序(目标代码)的处理部。0069 修正部123是在程序的执行过程中外部依赖指令的执行结果与所设定的预测结果不同时(预测外实例),对已经求出的预料实例下的执行时间进行修正来求出该指令的执行时间的处理部。0070 修正部123使用对外部依赖指令赋予的惩罚时间、在外部依赖指令的前后执行的说 明 书CN 103154890 A5/11页8指令的执行时间、前一个指令的延迟时间等来进行修正。另外,修正处理的详细内容将后述。0071 模拟信息收集部13是收集包括各指令的执行时间的日志信息(模拟信息)5作为性能模拟的执行结果的处理。

26、部。0072 以下,对模拟装置1的处理流程进行说明。0073 代码变换处理0074 (1)模拟装置1的代码变换部11的块分割部111获得目标程序2的目标代码并保持到存储部中(图1中未图示),将所保持的目标代码分割成任意的块(参照图2)。0075 (2)预测模拟执行部113获得与被输入的目标程序2有关的定时信息3、预测信息4并保存到存储部中。0076 然后,预测模拟执行部113根据预测信息,针对分割后的块的外部依赖指令分别设定预测结果。例如,作为图2所示的块的指令中LD指令的数据高速缓存的预测结果,预测模拟执行部113设定“命中”。0077 (3)预测模拟执行部113对块的代码进行解释,模拟以所。

27、设定的预测结果为前提时的指令执行。即,预测模拟执行部113模拟图4(A)所示的定时例的指令执行。0078 (4)接下来,代码生成部115根据预测实例的模拟结果,从目标代码生成主代码。并且,代码生成部115对从目标代码变换后的主代码(仅功能代码)编入用于执行性能模拟(循环模拟)的循环模拟用代码。0079 图5(A)是表示从目标代码生成功能模拟的主代码的例子的图,图5(B)是表示对功能模拟的主代码编入循环模拟用代码的例子的图。0080 如图5(A)所示,目标代码InstA被变换成主代码HostInstA0func、HostInstA1func,目标代码InstB被变换成主代码HostInstB0f。

28、unc、HostInstB1func、HostInstB2func、,生成只有功能代码的主代码。0081 并且,对只有功能代码的主代码分别编入目标代码InstA的循环模拟用代码HostInstA2cycle、HostInstA3cycle,目标代码InstB的循环模拟用代码HostInstB4cycle、HostInstB5cycle。0082 循环模拟用代码是将各指令的执行时间(所要循环数)常量化,将各指令的执行时间合计来求出块的处理时间的代码。由此,能够获得表示块执行中的进展情况的信息。0083 这里,由于主代码中的功能代码、外部依赖指令以外的指令的循环模拟用代码能够使用已知的代码来实施,。

29、所以省略具体例的说明。外部依赖指令的循环模拟用代码作为调出修正处理的辅助(helper)函数被准备。针对辅助函数将后述。0084 模拟处理0085 (1)模拟执行部12的代码执行部121使用代码变换部11生成的主代码,来进行目标程序2的性能模拟。0086 代码执行部121模拟目标程序2的指令执行,不断获得各指令的执行时间。0087 (2)当在模拟的执行中检测到外部依赖指令(例如LD指令)时,代码执行部121判定其执行结果与所设定的预测结果是否不同,在执行结果与预测结果不同的情况下,请求启动修正部123。例如,在检测出指令“LD,r1,r2”,数据高速缓存的预测结果(高速缓存命中)与实际的执行结。

30、果(高速缓存缺失)不同的情况下,调出修正部123。说 明 书CN 103154890 A6/11页90088 (3)修正部123接受调出而起动,对检测出的指令“LD,r1,r2”的执行时间(循环数)进行修正。并且,修正部123通过该修正,还变更下一指令的执行定时tn。0089 每当外部依赖指令的执行结果与预测结果不同时,修正部123便修正指令的执行时间。这里,由于预测实例下的外部依赖指令的执行时间已被常量化,所以修正部123,可通过简单地将针对该指令的惩罚时间、前后执行的指令的执行时间、之前处理的指令的延迟时间等的值相加或相减来计算预测外实例下的外部依赖指令的执行时间。0090 图6是表示修正。

31、部123的处理动作的图。0091 修正部123作为辅助函数模块被实施。0092 在本实施方式中,例如通过取代按LD指令的高速缓存的每个执行结果来进行模拟的以往的函数“cacheld(address)”,而将辅助函数“cacheld(address,repdelay,predelay)”装到主代码来实现。0093 辅助函数的“repdelay”是在使用该加载(ld)指令的返回值的下一指令的执行之前,未被作为惩罚时间中的延迟时间而处理的时间(延期时间)。“predelay”是从前一个指令接收的延迟时间。“1”表示之前的指令没有延迟。“repdelay”与“predelay”是根据性能模拟结果与定时。

32、信息3的静态分析处理的结果而得到的时间信息。0094 在图6所示的动作例中,修正部123在当前定时currenttime与前一个ld指令的执行定时preldtime之差超过前一个ld指令的延迟时间量predelay时,以前一个ld指令的执行定时preldtime到当前定时currenttime的时间来调整延迟时间predelay,求出有效延迟时间availdelay。0095 接下来,若执行结果为高速缓存缺失,则预测结果错误,修正部123对有效延迟时间availdelay加上高速缓存缺失时的惩罚时间cachemisslatency,根据延期时间repdelay来修正LD指令的执行时间。0096。

33、 图7图9是表示修正部123针对LD指令的执行结果的修正例的图。0097 图7是用于对在执行一个高速缓存处理的实例下产生了一个高速缓存缺失时的修正例进行说明的图。0098 在图7的例子中,执行以下3个指令的模拟。0099 “ldr1,r2:r1r2;0100 mult r3,r4,r5:r3r4r5;0101 add r2,r5,r6:r2r5r6”0102 图7(A)是表示预测结果为“高速缓存命中”时的指令执行定时的图例的图。在该预测实例下,被第3个执行的add指令产生了2个循环迟延。0103 图7(B)是表示与预测结果不同的“高速缓存缺失”时的指令执行定时的图例的图。在该预测错误的实例下,。

34、如果ld指令的执行结果是高速缓存缺失,则产生惩罚循环(6个循环)量的延迟。因此,虽然mult指令不受延迟的影响地被执行,但由于add指令的执行等待ld指令的完成,所以延迟4个循环量。0104 图7(C)是表示由修正部123修正后的指令执行时间图的例子的图。0105 由于ld指令的执行结果为高速缓存缺失(预测结果的错误),所以修正部123对剩余的执行时间(211个循环)加上规定的高速缓存缺失时的惩罚时间(6个循环)来作为有效延迟时间(7个循环)。有效延迟时间成为最大的延迟时间。说 明 书CN 103154890 A7/11页100106 并且,修正部123获得下一mult指令的执行时间(3个循环。

35、),判定为下一指令的执行时间未超过延迟时间,将从有效延迟时间减去了下一指令的执行时间而得到的时间(734个循环)作为ld指令的发生了延迟的执行时间(延迟时间)。0107 另外,修正部123将从有效延迟时间减去了上述的延迟时间而得到的时间(3个循环)设为延期时间。延期时间是作为惩罚的延迟被延期后的时间。0108 修正部123通过辅助函数cacheld(addr,repdelay,predelay),返回延期时间repdelay3、前指令的延迟时间predelay1(无延迟)。0109 通过该修正,ld指令的执行时间成为将所执行的时间与延迟时间相加的执行时间(145个循环),可根据执行完成的定时t。

36、1计算后续的mult指令、add指令的执行时间。0110 即,通过对修正后的ld指令的执行时间(5个循环)简单地加上在预测模拟执行部113的处理结果(基于预测结果的预测模拟的结果)中求出的mult指令与add指令各自的执行时间(3个循环,3个循环),便能得到该块的执行时间(循环数)。0111 因此,通过进行基于仅将执行结果与预测不同的指令的执行时间相加或者相减的修正处理,针对其他指令,加上基于预测结果的在模拟时求出的执行时间,便还能高精度地求出高速缓存缺失时的模拟的执行循环数。0112 图7(D)是为了与模拟装置1的处理进行比较,而表示现有技术的通过单纯的加法来求出高速缓存缺失时的循环数时的误。

37、差的大小的图。在图7(D)的情况下,可知由于直接加上ld指令的延迟时间,所以实际上产生了因在ld指令的执行中完成执行的mult指令的执行定时的偏差而引起的误差。0113 图8是用于对在执行两个高速缓存处理的实例下产生了两个高速缓存缺失时的修正例进行说明的图。0114 在图8的例子中,执行以下5个指令的模拟。0115 “ldr1,r2:r1r2;0116 ldr3,r4:r3r4;0117 mult r5,r6,r7:r5r6r7;0118 add r2,r4,r2:r2r4r2;0119 add r2,r7,r2:r2r7r2”0120 图8(A)是表示两个高速缓存处理中的预测结果为“高速缓存。

38、命中”时的指令执行定时的图例的图。在该预测实例下,两个ld指令被隔开2个循环量(通常的1个循环附加的1个循环)来执行。0121 图8(B)是表示两个高速缓存处理两方是与预测结果不同的“高速缓存缺失”时的指令执行定时的图例的图。在该预测错误的实例下,两个ld指令各自中为高速缓存缺失,产生惩罚循环(6个循环)量的延迟。但是,两个ld指令的延迟时间是重叠的时间,mult指令也不受延迟的影响地被执行,两个add指令的执行延迟到第2个ld指令的完成。0122 图8(C)是表示由修正部123修正后的指令执行时间图的例子的图。0123 如使用图7说明那样,修正部123在定时t0修正第1个ld指令的延迟时间,返回辅助函数cacheld(addr,3,1)。0124 接下来,在当前定时t1,由于第2个ld指令的执行结果为高速缓存缺失(预测结果说 明 书CN 103154890 A10。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1