專利名稱:仿真設(shè)備和仿真方法
技術(shù)領(lǐng)域:
本文中描述的實(shí)施例涉及如下處理技術(shù),該處理技術(shù)獲取有關(guān)性能或電力的仿真信息。
背景技術(shù):
在安裝有多個(gè)處理器(例如,中央處理單元(CPU))的多核配置中,針對(duì)每個(gè)核(CPU)的功能、性能、電力等進(jìn)行仿真處理,其具有高處理速度或高處理精度。第6,751,583B1號(hào)美國(guó)專利中公開(kāi)了相關(guān)技術(shù)。關(guān)于作為功能、性能或功耗的仿真目標(biāo)的目標(biāo)CPU,將在作為主CPU的操作中的目標(biāo)CPU的指令代碼(目標(biāo)代碼)轉(zhuǎn)換為主CPU的指令代碼(主代碼)。在該轉(zhuǎn)換中,可以使用解釋器方法或即時(shí)(JIT,Just-1n-Time)編譯器方法。在基于JIT編譯器方法的仿真中,目標(biāo)CPU的指令被主CPU的指令取代,其中,目標(biāo)CPU的指令出現(xiàn)在正執(zhí)行的程序中,主CPU的指令執(zhí)行仿真。所以,JIT編譯器方法中的處理可以比解釋器方法中的處理更快地執(zhí)行。當(dāng)每個(gè)單元針對(duì)每個(gè)時(shí)鐘獨(dú)立地運(yùn)行時(shí),每當(dāng)在流水線處理的控制下執(zhí)行處理時(shí),CPU的內(nèi)部狀態(tài)就改變,其中,在流水線處理中,同時(shí)執(zhí)行所輸入的指令。因此,可能停用所生成的主指令的重復(fù)使用,其中,所生成的主指令的重復(fù)使用是JIT編譯器方法的優(yōu)點(diǎn)。當(dāng)使用解釋器方法來(lái)仿真對(duì)流水線處理或亂序處理進(jìn)行控制的CPU的功能、性能或電力時(shí),處理速度可能變慢。當(dāng)使用JIT編譯器方法來(lái)仿真性能或電力時(shí),可以增加這樣的仿真代碼,該仿真代碼對(duì)應(yīng)于在流水線處理控制中涉及的各種內(nèi)部狀態(tài)。在性能仿真中,可將仿真代碼增加到主代碼,以適應(yīng)于與目標(biāo)CPU的延遲執(zhí)行對(duì)應(yīng)的定時(shí)。例如,當(dāng)要執(zhí)行加載(LD)指令的周期仿真時(shí),可將條件代碼增加到主代碼,以檢查發(fā)生高速緩存未命中或高速緩存命中的哪個(gè),或者檢查如果發(fā)生高速緩存未命中則是否存在代價(jià)周期。然而,為了保持高操作性,期望盡可能減少增加到功能代碼的用于性能仿真的代碼的量。
發(fā)明內(nèi)容
根據(jù)實(shí)施例的一個(gè)方面,一種仿真設(shè)備,包括代碼轉(zhuǎn)換部分;以及仿真執(zhí)行部分,其中,代碼轉(zhuǎn)換部分執(zhí)行將被主處理器控制的目標(biāo)處理器中的程序的代碼劃分為塊;將外部相關(guān)指令的執(zhí)行結(jié)果設(shè)定為預(yù)測(cè)結(jié)果,其中,外部相關(guān)指令取決于包括在塊中的外部環(huán)境;根據(jù)預(yù)測(cè)結(jié)果執(zhí)行功能仿真;根據(jù)包括在塊中的指令執(zhí)行定時(shí)信息和功能仿真結(jié)果,計(jì)算在預(yù)測(cè)結(jié)果的情況下的外部相關(guān)指令的執(zhí)行時(shí)間;以及根據(jù)功能仿真結(jié)果生成主代碼,該主代碼使主處理器執(zhí)行在預(yù)測(cè)結(jié)果的情況下的性能仿真,其中,仿真執(zhí)行部分執(zhí)行如果在主處理器執(zhí)行主代碼時(shí)的外部相關(guān)功能的執(zhí)行結(jié)果不同于在主處理器執(zhí)行主代碼時(shí)的預(yù)測(cè)結(jié)果,則通過(guò)使用基于外部相關(guān)指令的延遲時(shí)間和在外部相關(guān)功能前后執(zhí)行的指令的執(zhí)行時(shí)間的校正值,來(lái)校正外部相關(guān)指令的執(zhí)行時(shí)間;以及將校正后的外部相關(guān)指令的執(zhí)行時(shí)間設(shè)定為外部相關(guān)指令的執(zhí)行時(shí)間。根據(jù)仿真設(shè)備,可以執(zhí)行高速仿真。經(jīng)由權(quán)利要求中特別指出的元件和組合,將實(shí)現(xiàn)和獲得本發(fā)明的目標(biāo)和優(yōu)點(diǎn)。應(yīng)當(dāng)理解,如所請(qǐng)求保護(hù)的,前述的概括說(shuō)明和下面的詳細(xì)說(shuō)明都是例示性和說(shuō)明性的,而不是限制本發(fā)明。
圖1圖示例示性的仿真設(shè)備;圖2圖示例示性的指令;圖3圖示例示性的定時(shí)信息;圖4A和圖4B圖示指令的例示性的執(zhí)行定時(shí);圖5A圖示例示性的主代碼;圖5B圖示用于周期仿真的例示性代碼;圖6圖示校正部分的例示性處理;圖7A至圖7D圖示校正部分的例示性校正;圖8A至圖8D圖示校正部分的例示性校正;圖9A至圖9D圖示校正部分的例示性校正;圖10圖示代碼轉(zhuǎn)換部分的例示性處理;圖11圖示例示性的仿真;圖12圖示例示性的外部相關(guān)指令;圖13A至圖13C圖示目標(biāo)程序中的指令與主程序中的主指令的數(shù)目之間的例示性關(guān)系;圖14圖示代碼轉(zhuǎn)換部分的例示性處理;圖15圖示代碼轉(zhuǎn)換部分的例示性處理;圖16圖示例示性的仿真設(shè)備;以及圖17圖示電力仿真信息生成部分的例示性處理。
具體實(shí)施例方式圖1圖示例示性的仿真設(shè)備。仿真設(shè)備I可執(zhí)行目標(biāo)CPU的指令執(zhí)行的性能仿真,其中,目標(biāo)CPU控制流水線處理。目標(biāo)CPU可以是要仿真的CPU的控制模型。仿真設(shè)備I輸出每個(gè)指令的周期仿真信息作為目標(biāo)CPU的指令執(zhí)行的性能仿真的結(jié)果。例如,目標(biāo)CPU可為ARM架構(gòu)CPU。例如,對(duì)應(yīng)于主CPU的仿真設(shè)備I可為安裝有X86架構(gòu)CPU的計(jì)算機(jī)。仿真設(shè)備I包括代碼轉(zhuǎn)換部分11、仿真執(zhí)行部分12和仿真信息采集部分13。當(dāng)執(zhí)行目標(biāo)CPU的程序時(shí),代碼轉(zhuǎn)換部分11根據(jù)由目標(biāo)CPU執(zhí)行的程序代碼(例如目標(biāo)代碼)生成執(zhí)行仿真的主CPU的代碼(例如主代碼)。代碼轉(zhuǎn)換部分11包括塊劃分部分111、預(yù)測(cè)仿真執(zhí)行部分113和代碼生成部分115。塊劃分部分111將提供到仿真設(shè)備I的程序的目標(biāo)代碼劃分為規(guī)定塊。例如,規(guī)定塊可為基本塊(從分支到下一分支的代碼)或預(yù)定的任意代碼單元。圖2圖示例示性的指令。圖2中的指令可包括在塊中。如圖2中所示的,塊包括作為目標(biāo)代碼的三個(gè)指令“LD[rl],r2”(加載)、“MULTr3,r4,r5” (相乘)和“ADD r2,r5,r6”(相加)。例如,LD、MULT和ADD依次輸入到目標(biāo)CPU的流水線中,然后執(zhí)行。在這些指令中,rl至r6表示寄存器(地址)。預(yù)測(cè)仿真執(zhí)行部分113接收定時(shí)信息3和預(yù)測(cè)信息4,并且在基于執(zhí)行結(jié)果的情況下對(duì)輸入的塊執(zhí)行性能仿真。針對(duì)目標(biāo)代碼中的每個(gè)指令,定時(shí)信息3包括表示指令執(zhí)行中的每個(gè)處理(階段)與可用寄存器之間的對(duì)應(yīng)的信息,并且針對(duì)每個(gè)外部相關(guān)指令,定時(shí)信息3還包括與根據(jù)執(zhí)行結(jié)果確定的延遲時(shí)間對(duì)應(yīng)的代價(jià)代價(jià)時(shí)間(代價(jià)代價(jià)周期數(shù))。外部相關(guān)指令可包括在與外部環(huán)境有關(guān)的處理中涉及的指令,在加載指令、存儲(chǔ)指令等的執(zhí)行結(jié)果取決于目標(biāo)CPU以外的外部環(huán)境的處理(例如指令高速緩存、數(shù)據(jù)高速緩存或旁路轉(zhuǎn)換緩沖(TLB)的搜索處理)中涉及的指令,以及用于分支預(yù)測(cè)和用于將調(diào)用和返回進(jìn)行堆棧的指令。圖3圖示例示性的定時(shí)信息。定時(shí)信息可為圖1中所示的定時(shí)信息3。對(duì)于圖3中的定時(shí)信息3中的LD指令,第一處理元件(el)可使用源寄存器rsl(rl),而第二處理元件(e2)可使用目的寄存器rd (r2)。對(duì)于MULT指令,第一元件(el)可使用第一源寄存器rsl (r3),第二元件(e2)可使用第二源寄存器rs2 (r4),而第三處理元件(e3)可使用目的寄存器rd (r5)。對(duì)于ADD指令,第一元件(el)可使用第一源寄存器rsl (r2)和第二源寄存器rs2 (r5),而第二處理元件(e2)可使用目的寄存器rd (r6)。圖4A和圖4B圖示指令的例示性的執(zhí)行定時(shí)。圖4A和圖4B中的執(zhí)行定時(shí)可為執(zhí)行圖2所示的塊中的指令的定時(shí)。例如,如果LD指令的執(zhí)行開(kāi)始于定時(shí)t,則根據(jù)圖3中的定時(shí)信息3,在定時(shí)t+1將MULT指令輸入到流水線中,并且在定時(shí)t+2輸入ADD指令。由于ADD指令中的第一源寄存器(r2)和第二源寄存器(r5)被LD指令和MULT指令使用,所以在定時(shí)t+4之后開(kāi)始ADD指令的執(zhí)行,其中,在該定時(shí)t+4處已完成了 LD指令和MULT指令的執(zhí)行,由此生成等同于兩個(gè)周期的等待時(shí)間(兩個(gè)周期延遲)。因此,當(dāng)對(duì)圖2中的塊進(jìn)行仿真時(shí),如果LD指令的執(zhí)行結(jié)果為高速緩存命中,則塊的執(zhí)行時(shí)間可為如圖4A所示的六個(gè)周期。圖4B是當(dāng)圖2中的塊中的LD指令的執(zhí)行結(jié)果為高速緩存未命中時(shí)的時(shí)序圖。如果LD指令的執(zhí)行結(jié)果為高速緩存未命中,則重新執(zhí)行的時(shí)間段(例如對(duì)應(yīng)于六個(gè)周期的代價(jià)周期)加上定時(shí)信息3作為延遲時(shí)間。因此,第二處理元件(e2)的執(zhí)行延遲至IJ定時(shí)t+7。盡管在LD指令之后執(zhí)行的MULT指令不受延遲影響地執(zhí)行,但是ADD指令的執(zhí)行在定時(shí)t+8之后開(kāi)始,由此生成等同于四個(gè)周期的等待時(shí)間(四個(gè)周期延遲),其中,在定時(shí)t+8已完成了 LD指令的執(zhí)行。因此,當(dāng)對(duì)圖2中的塊中的指令進(jìn)行仿真時(shí),如果LD指令的執(zhí)行結(jié)果為高速緩存未命中,則執(zhí)行時(shí)間可為如圖4B中所示的10個(gè)周期。預(yù)測(cè)信息4定義將在目標(biāo)代碼中的外部相關(guān)指令的執(zhí)行中很大可能生成的執(zhí)行結(jié)果(預(yù)測(cè)結(jié)果)。例如,預(yù)測(cè)信息例如包括下面各項(xiàng)指令高速緩存預(yù)測(cè)=命中數(shù)據(jù)高速緩存預(yù)測(cè)=命中TLB搜索預(yù)測(cè)=命中分支預(yù)測(cè)預(yù)測(cè)=命中調(diào)用或返回預(yù)測(cè)=命中預(yù)測(cè)仿真執(zhí)行部分113根據(jù)預(yù)測(cè)信息4來(lái)設(shè)定包括在輸入塊中的外部相關(guān)指令的預(yù)測(cè)結(jié)果。預(yù)測(cè)仿真執(zhí)行部分113參考定時(shí)信息3,在以執(zhí)行結(jié)果為前提的情況下執(zhí)行指令(預(yù)測(cè)情況),并且對(duì)指令執(zhí)行進(jìn)行仿真。預(yù)測(cè)仿真執(zhí)行部分113輸出由塊中的每個(gè)指令花費(fèi)的執(zhí)行時(shí)間(所使用的周期數(shù))作為仿真結(jié)果。代碼生成部分115根據(jù)從預(yù)測(cè)仿真執(zhí)行部分113獲得的仿真結(jié)果,生成用來(lái)執(zhí)行在所設(shè)定的預(yù)測(cè)情況下的在指令執(zhí)行的時(shí)候的性能仿真的主代碼(主代碼被稱為用于性能仿真的主代碼),作為對(duì)應(yīng)于所處理的塊的主代碼。代碼生成部分115根據(jù)塊中的目標(biāo)代碼生成如下主代碼通過(guò)該主代碼,外部相關(guān)指令執(zhí)行在對(duì)應(yīng)于預(yù)測(cè)結(jié)果的預(yù)測(cè)情況下的指令;將指令的執(zhí)行時(shí)間相加;以及嵌入用于計(jì)算為處理該塊而花費(fèi)的時(shí)間的仿真代碼。例如,對(duì)于已將高速緩存命中設(shè)定為數(shù)據(jù)中的LD指令的預(yù)測(cè)結(jié)果的處理,代碼生成部115仿真當(dāng)塊中的LD指令訪問(wèn)命中的高速緩存結(jié)果時(shí)的處理。獲得在預(yù)測(cè)情況下的執(zhí)行時(shí)間。生成這樣的主代碼,該主代碼用于從如下校正計(jì)算獲得當(dāng)塊中的LD指令訪問(wèn)未命中的高速緩存結(jié)果時(shí)所花費(fèi)的執(zhí)行時(shí)間,其中,該校正計(jì)算使用在預(yù)測(cè)情況下的命中時(shí)的執(zhí)行時(shí)間的加或減刪除。仿真執(zhí)行部分12執(zhí)行由代碼生成部分115生成的主代碼,并且對(duì)由目標(biāo)CPU進(jìn)行的指令執(zhí)行的功能和性能進(jìn)行仿真,其中,目標(biāo)CPU執(zhí)行程序(目標(biāo)代碼)。仿真執(zhí)行部分12包括代碼執(zhí)行部分121和校正部分123。代碼執(zhí)行部分121使用主代碼來(lái)執(zhí)行程序(目標(biāo)代碼)。如果外部相關(guān)指令的執(zhí)行結(jié)果不同于程序執(zhí)行期間的預(yù)測(cè)結(jié)果(非預(yù)測(cè)情況),則校正部分123通過(guò)校正已在預(yù)測(cè)情況下獲得的執(zhí)行時(shí)間來(lái)獲得指令執(zhí)行時(shí)間。校正部分123使用給予外部相關(guān)指令的代價(jià)時(shí)間、由外部相關(guān)指令前后的指令所花費(fèi)的執(zhí)行時(shí)間、或先前指令的延遲時(shí)間等來(lái)執(zhí)行校正。仿真信息采集部分13采集日志信息(仿真信息)5作為性能仿真的執(zhí)行結(jié)果,其中日志信息(仿真信息)5包括指令的執(zhí)行時(shí)間。代碼轉(zhuǎn)換處理(I)仿真設(shè)備I中的代碼轉(zhuǎn)換部分11中的塊劃分部分111獲得目標(biāo)程序2的目標(biāo)代碼,將目標(biāo)代碼存儲(chǔ)在存儲(chǔ)單元(未示出)中,以及將存儲(chǔ)的目標(biāo)代碼劃分為塊。(2)預(yù)測(cè)仿真執(zhí)行部分113獲得有關(guān)要輸入的目標(biāo)程序2的定時(shí)信息3和預(yù)測(cè)信息4,并且將定時(shí)信息3和預(yù)測(cè)信息4存儲(chǔ)在存儲(chǔ)單元中。預(yù)測(cè)仿真執(zhí)行部分113根據(jù)預(yù)測(cè)信息4設(shè)定所劃分的塊中的每個(gè)外部相關(guān)指令的預(yù)測(cè)結(jié)果。例如,預(yù)測(cè)仿真執(zhí)行部分113將命中設(shè)定為L(zhǎng)D指令訪問(wèn)數(shù)據(jù)高速緩存的預(yù)測(cè)結(jié)果,其中LD指令是圖2所示的塊指令之一。(3)預(yù)測(cè)仿真執(zhí)行部分113對(duì)塊中的代碼進(jìn)行解釋,并且根據(jù)設(shè)定的執(zhí)行結(jié)果對(duì)指令執(zhí)行進(jìn)行仿真。例如,預(yù)測(cè)仿真執(zhí)行部分113對(duì)這樣的指令的執(zhí)行進(jìn)行仿真,對(duì)于這樣的指令,已如圖4A那樣設(shè)定了定時(shí)。(4)代碼生成部分115根據(jù)預(yù)測(cè)情況下的仿真結(jié)果,從目標(biāo)代碼生成主代碼。代碼生成部分115將用于周期仿真的代碼嵌入到通過(guò)轉(zhuǎn)換目標(biāo)代碼而獲得的主代碼(功能代碼)中,其中用于周期仿真的代碼用來(lái)執(zhí)行性能仿真(周期仿真)。圖5A圖示例示性的主代碼。在圖5A中,從目標(biāo)代碼生成用于功能仿真的主代碼。圖5B圖示用于周期仿真的例示性代碼。在圖5B中,將用于周期仿真的代碼嵌入到用于功能仿真的主代碼中。如圖5A所示,將目標(biāo)代碼Inst_A轉(zhuǎn)換為主代碼Host_Inst_AO_func和Host_Inst_Al_func,而將目標(biāo)代碼 Inst_B 轉(zhuǎn)換為主代碼 Host_Inst_BO_func、Host_Inst_Bl_func、Host_Inst_B2_func等。因此,生成了僅包括功能代碼的主代碼。將目標(biāo)代碼Inst_A中的用于周期仿真的代碼Host_Inst_A2_cycle和用于周期仿真的代碼HoSt_InSt_A3_cycle嵌入到僅包括功能代碼的主代碼中。類似地,將目標(biāo)代碼Inst_B中的用于周期仿真的代碼Host_Inst_B4_cycle和用于周期仿真的代碼Host_Inst_B5_cycle嵌入到僅包括功能代碼的主代碼中。用于周期仿真的代碼用于通過(guò)將指令的執(zhí)行時(shí)間(所使用的周期數(shù))表示為常量并且將指令的執(zhí)行時(shí)間相加,來(lái)獲得塊的處理時(shí)間。因此,獲得了用于表示塊執(zhí)行的進(jìn)程的信息。在主代碼中,用于除外部相關(guān)指令以外的指令周期仿真的代碼和功能代碼可以是已知代碼。可將用于外部相關(guān)指令的周期仿真的代碼提供為調(diào)用校正處理的幫助功能。仿真處理(I)仿真執(zhí)行部分12中的代碼執(zhí)行部分121使用由代碼轉(zhuǎn)換部分11生成的主代碼,來(lái)對(duì)目標(biāo)程序2的性能進(jìn)行仿真。代碼執(zhí)行部分121對(duì)目標(biāo)程序2中的指令的執(zhí)行進(jìn)行仿真,并且獲得由指令所花費(fèi)的執(zhí)行時(shí)間。(2)如果代碼執(zhí)行部分121在仿真期間檢測(cè)到外部相關(guān)指令,例如LD指令,則代碼執(zhí)行部分121判定執(zhí)行結(jié)果不同于預(yù)測(cè)結(jié)果。如果執(zhí)行結(jié)果不同于預(yù)測(cè)結(jié)果,則代碼執(zhí)行部分121請(qǐng)求激活校正部分123。例如,當(dāng)檢測(cè)到指令“LD[rl],r2”并且在訪問(wèn)數(shù)據(jù)高速緩存的預(yù)測(cè)結(jié)果(高速緩存命中)與執(zhí)行結(jié)果(高速緩存未命中)之間存在不匹配時(shí),調(diào)用校正部分123。(3)當(dāng)調(diào)用校正部分123時(shí),校正部分123被激活,并且采集所檢測(cè)到的指令“LD[rl],r2”的執(zhí)行時(shí)間(周期數(shù))。校正部分123可改變下一指令的執(zhí)行定時(shí)t+n。每當(dāng)外部相關(guān)指令的執(zhí)行結(jié)果不同于預(yù)測(cè)結(jié)果時(shí),校正部分123就校正指令的執(zhí)行時(shí)間。當(dāng)預(yù)測(cè)情況下的外部相關(guān)指令的執(zhí)行時(shí)間被表示為常量時(shí),校正部分123通過(guò)加上或減去外部相關(guān)指令的代價(jià)時(shí)間、在外部相關(guān)指令前后執(zhí)行的指令的執(zhí)行時(shí)間、或在外部相關(guān)指令之前執(zhí)行的指令的延遲時(shí)間,來(lái)計(jì)算預(yù)測(cè)情況下的外部相關(guān)指令的執(zhí)行時(shí)間。圖6圖示校正部分的例示性處理。校正部分123被實(shí)現(xiàn)為幫助功能模塊。例如,可將幫助功能“cache_ld(address,rep_delay, pre_delay) ” 而不是功能“cache_ld(address) ”嵌入到主代碼中,其執(zhí)行對(duì)LD指令訪問(wèn)高速緩存的每個(gè)執(zhí)行結(jié)果的仿真。幫助功能中的rep_delay的值可以是作為代價(jià)時(shí)間的一部分的暫緩時(shí)間,其中,在代價(jià)時(shí)間期間,由于延遲時(shí)間而不執(zhí)行處理,直至使用加載(LD)指令的返回值的下一指令被執(zhí)行為止。pre_delay的值表示從先前指令接收到的延遲時(shí)間。當(dāng)pre_delay的值為-1時(shí),表示先前指令沒(méi)有延遲。i^p_delay和pre_delay都是從時(shí)間信息3和性能仿真結(jié)果的靜態(tài)分析結(jié)果獲得的時(shí)間信息。在圖6中,當(dāng)current_time的值與preld_time的值之間的差超過(guò)pre_delay的值時(shí),校正部分123通過(guò)使用preld_time的值和直至當(dāng)前定時(shí)current_time為止的時(shí)間來(lái)調(diào)整延遲時(shí)間pre_delay,并且獲得可用的延遲時(shí)間avail_delay,其中,current_time表示當(dāng)前定時(shí),preld_time表示先前LD指令的執(zhí)行定時(shí),pre_delay表示先前LD指令的延遲。如果執(zhí)行結(jié)果是高 速緩存未命中,則表示預(yù)測(cè)結(jié)果錯(cuò)誤。因此,校正部分123將代價(jià)時(shí)間cache_miss_latency的值加到可用的延遲時(shí)間avail_delay上,并且根據(jù)暫緩時(shí)間rep_delay校正LD指令的執(zhí)行時(shí)間,其中,代價(jià)時(shí)間cache_miss_latency是當(dāng)存在高速緩存未命中時(shí)所花費(fèi)的時(shí)間。圖7A至圖7D、圖8A至圖8D和圖9A至圖9D圖示校正部分的例示性校正。圖7A至圖7D、圖8A至圖8D和圖9A至圖9D中的校正可為由圖1中的校正部分123對(duì)LD指令的執(zhí)行結(jié)果執(zhí)行的校正。圖7A至圖7C圖示當(dāng)在執(zhí)行一個(gè)高速緩存處理的情況下發(fā)生一個(gè)高速緩存未命中時(shí)執(zhí)行的校正。在圖7A至圖7D中,對(duì)以下列出的三個(gè)指令進(jìn)行仿真。LD [rl], r2: [rl] r2 ;MULT r3, r4, r5:r3 * r4 — r5 ;ADD r2, r5, r6:r2+r5 — r6圖7A圖示預(yù)測(cè)結(jié)果為高速緩存命中的指令執(zhí)行的時(shí)序圖。針對(duì)作為第三指令執(zhí)行的ADD指令生成了兩個(gè)周期延遲。圖7B圖示高速緩存處理結(jié)果為高速緩存未命中(其不同于預(yù)測(cè)結(jié)果)的指令執(zhí)行的時(shí)序圖。如果LD指令的執(zhí)行結(jié)果是高速緩存未命中,則生成等同于代價(jià)周期(6個(gè)周期)的延遲。因此,MULT指令被執(zhí)行而不受延遲的影響,但是ADD指令的執(zhí)行在等待,直至已執(zhí)行了 LD指令為止,由此延遲了 4個(gè)周期。圖7C圖示在校正部分123執(zhí)行了校正之后的指令執(zhí)行的時(shí)序圖。由于LD指令的執(zhí)行結(jié)果是高速緩存未命中(預(yù)測(cè)結(jié)果錯(cuò)誤),所以校正部分123通過(guò)將在高速緩存未命中的情況下所花費(fèi)的規(guī)定的代價(jià)時(shí)間(6個(gè)周期)加上剩余的執(zhí)行時(shí)間(2-1=1個(gè)周期),來(lái)獲得可用的延遲時(shí)間(7個(gè)周期)??捎玫难舆t時(shí)間可為最大的可能的延遲時(shí)間。校正部分123獲得下一指令MULT的執(zhí)行時(shí)間(3個(gè)周期),并且判定下一指令的執(zhí)行時(shí)間將不超過(guò)延遲時(shí)間。然后,校正部分123從可用的延遲時(shí)間中減去下一指令的執(zhí)行時(shí)間,以獲得減法結(jié)果(7-3=4個(gè)周期)作為這樣的時(shí)間(延遲時(shí)間),在該時(shí)間(延遲時(shí)間)期間,LD指令的延遲繼續(xù)。校正部分123從可用的延遲時(shí)間中減去以上延遲時(shí)間,并且獲得減法結(jié)果(3個(gè)周期)作為暫緩時(shí)間。暫緩時(shí)間可為這樣的時(shí)間,在該時(shí)間期間,將寬限給予用作代價(jià)的延遲。校正部分123 使用幫助功能 cache_ld(addr, rep_delay, pre_delay)返回 3 作為暫緩時(shí)間rep_delay,并且返回_1 (無(wú)延遲)作為先前指令的延遲時(shí)間pre_delay。作為校正的結(jié)果,將LD指令的執(zhí)行時(shí)間設(shè)定為通過(guò)對(duì)由執(zhí)行所花費(fèi)的時(shí)間和延遲時(shí)間求和而獲得的時(shí)間(1+4=5個(gè)周期),并且從執(zhí)行已完成處的定時(shí)h計(jì)算后續(xù)指令MULT和ADD的執(zhí)行時(shí)間。例如,通過(guò)將MULT指令的執(zhí)行時(shí)間(3個(gè)周期)和ADD指令的執(zhí)行時(shí)間(3個(gè)周期)簡(jiǎn)單地加上校正后的LD指令的執(zhí)行時(shí)間(5個(gè)周期),來(lái)獲得塊的執(zhí)行時(shí)間(周期數(shù)),其中,MULT指令和ADD指令的執(zhí)行時(shí)間是根據(jù)從預(yù)測(cè)仿真執(zhí)行部分113獲得的處理結(jié)果(基于預(yù)測(cè)結(jié)果的預(yù)測(cè)仿真結(jié)果)而獲得的。通過(guò)校正并且通過(guò)根據(jù)預(yù)測(cè)結(jié)果在仿真中獲得的執(zhí)行時(shí)間的相加,來(lái)高精確地獲得在高速緩存未命中的情況下的仿真中的執(zhí)行周期數(shù),其中,該校正包括執(zhí)行結(jié)果不同于預(yù)測(cè)結(jié)果的指令的執(zhí)行時(shí)間的相加或相減。圖7D圖示在高速緩存未命中的情況下的周期數(shù)中的誤差,其中,誤差是通過(guò)簡(jiǎn)單相加而獲得的。在圖7D中,由于加上了 LD指令的延遲時(shí)間,所以可能發(fā)生基于MULT指令的執(zhí)行定時(shí)的位移的誤差,其中,MULT指令的執(zhí)行是在LD指令的執(zhí)行期間完成的。圖8A至圖SC圖示校正部分的例示性校正。當(dāng)在執(zhí)行兩個(gè)高速緩存處理的情況下發(fā)生兩個(gè)高速緩存未命中時(shí),執(zhí)行圖8A至圖8C中所示的校正。在圖8A至圖8D中,對(duì)以下列出的5個(gè)指令進(jìn)行仿真。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圖示這樣的指令執(zhí)行的時(shí)序圖,在該指令執(zhí)行中,兩個(gè)高速緩存處理中的預(yù)測(cè)結(jié)果分別是高速緩存命中。以兩個(gè)LD指令之間設(shè)置的兩個(gè)周期(正常的一個(gè)周期和增加的一個(gè)周期)的間隔來(lái)執(zhí)行這兩個(gè)LD指令。圖SB圖示這樣的指令執(zhí)行的時(shí)序圖,在該指令執(zhí)行中,兩個(gè)高速緩存處理的結(jié)果是高速緩存未命中,其不同于預(yù)測(cè)結(jié)果。由于兩個(gè)LD指令中的每個(gè)導(dǎo)致高速緩存未命中,所以生成了對(duì)應(yīng)于代價(jià)周期(6個(gè)周期)的延遲。由于兩個(gè)LD指令的延遲時(shí)間交疊,所以MULT指令被執(zhí)行而不受延遲的影響。然而,兩個(gè)ADD指令的執(zhí)行被延遲直至已執(zhí)行了第二LD指令為止。
圖8C圖示在校正部分123已執(zhí)行了校正之后的指令執(zhí)行的時(shí)序圖。如圖SC所示,校正部分123在定時(shí)h處校正第一 LD指令的延遲時(shí)間,并且返回幫助功能 cache_ld(addr, 3, -1)。由于第二 LD指令的執(zhí)行結(jié)果在當(dāng)前定時(shí)h處為高速緩存未命中(預(yù)測(cè)結(jié)果錯(cuò)誤),所以校正部分123通過(guò)將6個(gè)代價(jià)周期加到LD指令的剩余執(zhí)行時(shí)間,來(lái)獲得可用延遲時(shí)間(1+6=7個(gè)周期)。校正部分123通過(guò)從可用延遲時(shí)間中減去直到當(dāng)前定時(shí)h為止所消耗的延遲時(shí)間,來(lái)獲得從當(dāng)前定時(shí)&起作為超出量而逝去的可用延遲時(shí)間3個(gè)周期(7-(6-2)=3),其中,延遲時(shí)間為“(當(dāng)前定時(shí)^-先前指令的執(zhí)行定時(shí)tj-間隔設(shè)定”。可將已作為超出量而逝去的可用延遲時(shí)間設(shè)定為第二 LD指令的執(zhí)行時(shí)間。校正部分123通過(guò)從作為超出量而逝去的可用延遲時(shí)間中減去原始執(zhí)行時(shí)間,來(lái)獲得先前指令的延遲時(shí)間“3-1=2個(gè)周期”。校正部分123通過(guò)從可用 延遲時(shí)間中減去直到當(dāng)前定時(shí)h為止所消耗的延遲時(shí)間和在當(dāng)前定時(shí)&處作為超出量而逝去的可用延遲時(shí)間之和,來(lái)獲得暫緩時(shí)間“7-(3+3)=1個(gè)周期”。校正部分123在定時(shí)&處校正第二LD指令的延遲時(shí)間,并且返回幫助功能cache_Id(addr,2, I)。把通過(guò)將校正值(3個(gè)周期)加到當(dāng)前定時(shí)h作為校正而獲得的定時(shí)設(shè)定為完成LD指令的執(zhí)行處的定時(shí)。從該定時(shí)起增加后續(xù)MULT指令和ADD指令的執(zhí)行時(shí)間。圖8D圖示在高速緩存未命中的情況下的周期數(shù)中的誤差,其中,該誤差是通過(guò)簡(jiǎn)單相加而獲得的。在圖8D中,由于加上了根據(jù)給予兩個(gè)LD指令的代價(jià)的延遲時(shí)間,所以可能導(dǎo)致誤差(9個(gè)周期)。盡管圖SC中所示的校正部分123的處理具有誤差(I個(gè)周期),但是可以高精確地獲得在高速緩存未命中的情況下的周期數(shù)。圖9A至圖9C圖示校正部分的例示性校正。當(dāng)在執(zhí)行兩個(gè)高速緩存處理的情況下發(fā)生一個(gè)高速緩存未命中時(shí),執(zhí)行圖9A至圖9C中所示的校正。在圖9A至圖9D中,如圖8A至圖8D所示地對(duì)5個(gè)指令進(jìn)行仿真。圖9A圖示這樣的指令執(zhí)行的時(shí)序圖,在該指令執(zhí)行中,兩個(gè)高速緩存處理中的預(yù)測(cè)結(jié)果是高速緩存命中。與圖8A —樣,以兩個(gè)LD指令之間的兩個(gè)周期(正常的一個(gè)周期和增加的一個(gè)周期)的間隔來(lái)執(zhí)行這兩個(gè)LD指令。圖9B圖示這樣的指令執(zhí)行的時(shí)序圖,在該指令執(zhí)行中,第一 LD指令的執(zhí)行結(jié)果是高速緩存未命中(其不同于預(yù)測(cè)結(jié)果),而第二 LD指令的執(zhí)行結(jié)果與預(yù)測(cè)結(jié)果相匹配(高速緩存命中)。兩個(gè)LD指令中的每個(gè)可導(dǎo)致等同于6個(gè)代價(jià)周期的延遲。由于兩個(gè)LD指令的延遲時(shí)間交疊,所以MULT指令被執(zhí)行而不受延遲的影響。然而,第二 ADD指令的執(zhí)行可被延遲直至已執(zhí)行了第二 LD指令為止。圖9C圖示在校正部分123已執(zhí)行了校正之后的指令執(zhí)行的時(shí)序圖。如圖9C所示,校正部分123在定時(shí)、處采集第一 LD指令的延遲時(shí)間,并且返回幫助功能 cache_ld (addr, 3, -1)。由于第二 LD指令的執(zhí)行結(jié)果在當(dāng)前定時(shí)h處是高速緩存命中(如預(yù)測(cè)結(jié)果所表示的),所以校正部分123判定從第二 LD指令的執(zhí)行開(kāi)始到當(dāng)前定時(shí)h的時(shí)間“t1-tf間隔設(shè)定(6-0-2=4個(gè)周期)”是否長(zhǎng)于LD指令的執(zhí)行時(shí)間(2個(gè)周期)。由于從第二 LD指令的執(zhí)行開(kāi)始到當(dāng)前定時(shí)h的時(shí)間長(zhǎng)于LD指令的執(zhí)行時(shí)間(2個(gè)周期),所以校正部分123將當(dāng)前定時(shí)h作為下一指令MULT的執(zhí)行定時(shí)。校正部分123將從第二 LD指令的執(zhí)行完成到當(dāng)前定時(shí)h的時(shí)間(2個(gè)周期)處理為下一指令的延遲時(shí)間,并且將先前指令的延遲時(shí)間pre_delay設(shè)定為2。校正部分123從第一 LD指令的可用延遲時(shí)間中減去直至當(dāng)前定時(shí)h為止所消耗的延遲時(shí)間和在當(dāng)前定時(shí)h處作為超出量而逝去的可用延遲時(shí)間之和“7-(6+0)=1個(gè)周期”,并且將暫緩ap_delay設(shè)定為I,其后校正部分123返回幫助功能cache_ld(addr, 1,2)。圖9D圖示在高速緩存未命中的情況下的周期數(shù)中的誤差,其中,該誤差是通過(guò)簡(jiǎn)單相加而獲得的。在圖9D中,由于加上了根據(jù)給予第一 LD指令的代價(jià)的延遲時(shí)間,所以可能導(dǎo)致誤差。圖10圖示代碼轉(zhuǎn)換部分的例示性處理??捎蓤D1中的仿真設(shè)備I中的代碼轉(zhuǎn)換部分11來(lái)執(zhí)行圖10中的代碼轉(zhuǎn)換處理。仿真設(shè)備I中的代碼轉(zhuǎn)換部分11中的塊劃分部分111將目標(biāo)程序的代碼(目標(biāo)代碼)劃分為規(guī)定的塊,并且輸入所劃分的塊(操作Si)。預(yù)測(cè)仿真執(zhí)行部分113分析每個(gè)塊中的指令,并且檢測(cè)外部相關(guān)指令(操作S2)。對(duì)于所有檢測(cè)到的指令,根據(jù)預(yù)測(cè)信息4將具有高可能性的執(zhí)行結(jié)果確定為預(yù)測(cè)情況(操作 S3)。預(yù)測(cè)仿真執(zhí)行部分113參考定時(shí)信息3,并且根據(jù)被設(shè)定為塊中所有指令的預(yù)測(cè)結(jié)果的執(zhí)行結(jié)果來(lái)執(zhí)行性能仿真(操作S4)。代碼生成部分115根據(jù)仿真結(jié)果生成用于性能仿真的主代碼,其中主代碼由仿真執(zhí)行部分12來(lái)執(zhí)行(操作S5)。作為操作SI至S5中的處理的結(jié)果,輸出主代碼,在該主代碼中,用來(lái)仿真目標(biāo)CPU的性能的代碼已被嵌入到所設(shè)定的執(zhí)行結(jié)果中的功能代碼中(預(yù)測(cè)情況)。圖11圖示例示性的仿真??捎蓤D1中所示的仿真設(shè)備I中的仿真執(zhí)行部分12來(lái)執(zhí)行圖11中的仿真。仿真設(shè)備I中的仿真執(zhí)行部分12中的代碼生成部分121執(zhí)行由代碼生成部分115生成的主代碼,并且執(zhí)行性能仿真(操作S10)。如果代碼執(zhí)行部分121在執(zhí)行期間檢測(cè)到外部相關(guān)指令(操作SI I ),則代碼執(zhí)行部分121判定外部相關(guān)指令的執(zhí)行結(jié)果是否與預(yù)測(cè)結(jié)果相同(操作S12)。如果外部相關(guān)指令的執(zhí)行結(jié)果與預(yù)測(cè)結(jié)果不相同(操作S12的結(jié)果為否),則調(diào)用校正部分123來(lái)校正外部相關(guān)指令的執(zhí)行時(shí)間(操作S13)。仿真信息采集部分13輸出對(duì)應(yīng)于目標(biāo)程序的所有主代碼的仿真的仿真信息5(操作 S14)。作為操作SlO至S14中的處理的結(jié)果,輸出有關(guān)目標(biāo)CPU的仿真信息(周期仿真信息)5,其中,目標(biāo)CPU執(zhí)行目標(biāo)程序2。圖12圖示例示性的外部相關(guān)指令。在圖12中,圖示了加載(LD)指令的預(yù)測(cè)結(jié)果的判定處理和校正處理。當(dāng)從正處理的塊中的指令中檢測(cè)到外部相關(guān)指令時(shí),代碼執(zhí)行部分121調(diào)用對(duì)應(yīng)于校正部分123的幫助功能(操作S20)。
代碼執(zhí)行部分121判定LD指令是否正請(qǐng)求高速緩存訪問(wèn)(操作S21)。如果正請(qǐng)求高速緩存訪問(wèn)(操作S21中的結(jié)果為是),則代碼執(zhí)行部分121對(duì)高速緩存訪問(wèn)進(jìn)行仿真(操作S22)。如果高速緩存訪問(wèn)的結(jié)果是高速緩存未命中(操作S23中的結(jié)果為“未命中”),則校正部分123采集LD指令的執(zhí)行時(shí)間(周期數(shù))(操作S24),并且輸出校正后的執(zhí)行時(shí)間(周期數(shù))(操作S25)。如果在操作S21中未請(qǐng)求高速緩存訪問(wèn)(操作S21中的結(jié)果為否),或者所請(qǐng)求的高速緩存訪問(wèn)導(dǎo)致高速緩存命中(操作S23的結(jié)果為“命中”),則校正部分123輸出未校正的預(yù)測(cè)執(zhí)行時(shí)間(周期數(shù))(操作S26)。仿真設(shè)備I中的代碼轉(zhuǎn)換部分11從目標(biāo)代碼中檢測(cè)外部相關(guān)指令,并且生成用于性能仿真的代碼,其包括用于調(diào)用幫助功能的主指令。例如,代碼轉(zhuǎn)換部分11響應(yīng)于除目標(biāo)代碼中的外部相關(guān)指令以外的指令,來(lái)生成用于性能計(jì)算的已知主代碼。用于性能計(jì)算的已知主代碼可包括以下列出的3個(gè)主指令。性能計(jì)算指令1:從存儲(chǔ)器中讀取當(dāng)前性能值(執(zhí)行時(shí)間)。性能計(jì)算指令2 :加上目標(biāo)指令的性能值。性能計(jì)算指令3 :將結(jié)果寫入到存儲(chǔ)器中。圖13A至圖13C圖示目標(biāo)程序中的指令與主程序中的許多主指令之間的例示性關(guān)系O圖13A中圖示的目標(biāo)程序包括指令i0、il和i2。例如,指令i2可以是外部相關(guān)指令。在圖13B所示的轉(zhuǎn)換后的主程序中,目標(biāo)指令iO和il中的每個(gè)已被轉(zhuǎn)換為主代碼,該主代碼包括一個(gè)主指令(功能代碼)和三個(gè)性能計(jì)算指令I(lǐng)至3,總共4個(gè)指令。指令i2已被轉(zhuǎn)換為用于性能仿真的代碼,用于性能仿真的代碼包括功能代碼(主指令I(lǐng)和2)和性能計(jì)算指令(幫助功能)。在對(duì)應(yīng)于除外部相關(guān)指令以外的指令的主代碼中,用于性能仿真的性能計(jì)算指令的數(shù)目大于對(duì)應(yīng)于目標(biāo)程序中的指令的功能的主指令的數(shù)目。所以,在用來(lái)執(zhí)行性能仿真所花費(fèi)的時(shí)間中,用來(lái)計(jì)算性能所花費(fèi)的時(shí)間變成主要的。例如,圖1所示的仿真設(shè)備I中的代碼轉(zhuǎn)換部分11從目標(biāo)代碼中檢測(cè)在性能計(jì)算中使用先前指令的性能值的指令類型(該指令將被稱為代碼生成源指令),并且生成主代碼(用于仿真的代碼),該主代碼包括對(duì)應(yīng)于所檢測(cè)到的代碼生成源指令的性能計(jì)算指令。對(duì)于除代碼生成源指令以外的指令,記錄性能值。代碼生成源指令可包括外部相關(guān)指令(LD指令,ST (存儲(chǔ))指令等)和根據(jù)CPU架構(gòu)而設(shè)置的性能信息獲取指令(x86中的tsc寄存器讀取指令和ARM周期計(jì)數(shù)寄存器讀取指令)。仿真設(shè)備I中的代碼轉(zhuǎn)換部分11接收用戶指定的目標(biāo)程序的性能值的測(cè)量范圍(以下被稱為跟蹤范圍),并且根據(jù)跟蹤范圍中包括的指令生成用于性能仿真的代碼。代碼轉(zhuǎn)換部分11從跟蹤范圍內(nèi)的指令中檢測(cè)代碼生成源指令,并且根據(jù)代碼生成源指令生成主代碼,在該主代碼中已嵌入了性能計(jì)算指令。仿真設(shè)備I的代碼轉(zhuǎn)換部分11保持表示用戶指定的跟蹤范圍的信息。表示跟蹤范圍的信息包括由用戶通過(guò)使用功能、目標(biāo)程序或系統(tǒng)調(diào)用而指定為單位范圍的范圍的開(kāi)始地址和結(jié)束地址。
代碼轉(zhuǎn)換部分11在仿真開(kāi)始之前或在正執(zhí)行仿真的同時(shí)接收所指定的跟蹤范圍。代碼轉(zhuǎn)換部分11保持所接收到的跟蹤范圍,或者更新要保持的跟蹤范圍的開(kāi)始地址和結(jié)束地址。代碼轉(zhuǎn)換部分11預(yù)先保持跟蹤范圍,并且接收這樣的命令,該命令用于使得能夠由在仿真期間執(zhí)行的用戶操縱來(lái)指定跟蹤范圍。代碼生成部分115在仿真開(kāi)始時(shí)停用要保持的跟蹤范圍的指定。當(dāng)接收到使得能夠指定跟蹤范圍的命令時(shí),代碼生成部分115使得能夠指定跟蹤范圍,并且從跟蹤范圍內(nèi)包括的指令中檢測(cè)代碼生成源指令。例如,圖1所示的仿真設(shè)備I中的代碼轉(zhuǎn)換部分11可執(zhí)行不同于圖10中所示的代碼轉(zhuǎn)換處理的代碼轉(zhuǎn)換處理??梢悦枋霾煌趫D10中的代碼轉(zhuǎn)換處理的處理。其它代碼處理和仿真處理可基本上與圖11至圖13中所示的處理相同或類似。仿真設(shè)備I中的代碼轉(zhuǎn)換部分11可保持檢測(cè)信息,該檢測(cè)信息預(yù)先標(biāo)識(shí)代碼生成源指令。在檢測(cè)信息中,描述了變?yōu)樯稍粗噶畹闹噶畹念愋?。如果檢測(cè)信息中已描述了外部相關(guān)指令或性能信息獲取指令,則代碼轉(zhuǎn)換部分11中的預(yù)測(cè)仿真執(zhí)行部分113根據(jù)檢測(cè)信息,從已被塊劃分部分111劃分的目標(biāo)程序的塊中檢測(cè)代碼生成源指令。代碼生成部分115生成主代碼,該主代碼包括通過(guò)轉(zhuǎn)換除代碼生成源指令以外的指令的功能而生成的主指令(功能代碼);并且記錄指令的執(zhí)行時(shí)間(周期數(shù))。代碼生成部分115生成主指令(功能代碼),在該主指令中,代碼生成源指令的功能已被轉(zhuǎn)換,并且主代碼包括性能計(jì)算指令。例如,所生成的主代碼可包括以下列出的主指令。性能計(jì)算指令1:讀取當(dāng)前性能值(執(zhí)行時(shí)間)性能計(jì)算指令2 :加上所記錄的在指令i2之前的指令iO和il的性能值(執(zhí)行時(shí)間)。性能計(jì)算指令3 :更新性能值。性能計(jì)算指令4 :為指令i2調(diào)用幫助功能,并且將指令i2的執(zhí)行時(shí)間加到性能值上。圖14圖示代碼轉(zhuǎn)換部分的例示性處理。可由圖1中的仿真設(shè)備I中的代碼轉(zhuǎn)換部分11來(lái)執(zhí)行圖14中的代碼轉(zhuǎn)換處理。仿真設(shè)備I中的代碼轉(zhuǎn)換部分11中的塊劃分部分111將目標(biāo)程序的代碼(目標(biāo)代碼)劃分為規(guī)定的塊,并且輸入所劃分的塊(操作S31)。預(yù)測(cè)仿真執(zhí)行部分113分析每個(gè)塊中的指令,并且檢測(cè)代碼生成源指令(操作S32)。代碼生成部分115根據(jù)檢測(cè)到的代碼生成源指令生成主代碼,在該主代碼中已嵌入了性能計(jì)算指令(操作S33 )。如果仿真設(shè)備I中的代碼轉(zhuǎn)換部分11已保持了表示跟蹤范圍的指定的開(kāi)始地址和結(jié)束地址,則代碼轉(zhuǎn)換部分11中的預(yù)測(cè)仿真執(zhí)行部分113根據(jù)跟蹤范圍的指定,從已被塊劃分部分111劃分的目標(biāo)程序的塊中檢測(cè)開(kāi)始地址。在已檢測(cè)到開(kāi)始地址之后,預(yù)測(cè)仿真執(zhí)行部分113繼續(xù)根據(jù)檢測(cè)信息從目標(biāo)程序的塊中檢測(cè)代碼生成源指令,直至預(yù)測(cè)仿真執(zhí)行部分113檢測(cè)到跟蹤范圍的結(jié)束地址為止。代碼生成部分115生成主指令(功能代碼),在該主指令(功能代碼)中,除代碼生成源指令以外的指令的功能已被轉(zhuǎn)換,并且記錄指令的執(zhí)行時(shí)間。代碼生成部分115生成主代碼,該主代碼包括性能計(jì)算指令和主指令(功能代碼),在該主指令(功能代碼)中,代碼生成源指令的功能已被轉(zhuǎn)換。圖15圖示代碼轉(zhuǎn)換部分的例示性處理??捎蓤D1所示的仿真設(shè)備I中的代碼轉(zhuǎn)換部分11來(lái)執(zhí)行圖15中的代碼轉(zhuǎn)換處理。仿真設(shè)備I中的代碼轉(zhuǎn)換部分11中的塊劃分部分111將目標(biāo)程序的代碼(目標(biāo)代碼)劃分為規(guī)定的塊,并且輸入所劃分的塊(操作S41)。預(yù)測(cè)仿真執(zhí)行部分113對(duì)塊進(jìn)行分析,并且檢測(cè)跟蹤范圍的開(kāi)始地址或結(jié)束地址(操作S42)。可從檢測(cè)到開(kāi)始地址時(shí)起直至檢測(cè)到結(jié)束地址為止重復(fù)操作S43和S44。預(yù)測(cè)仿真執(zhí)行部分113分析每個(gè)塊中的指令,并且檢測(cè)代碼生成源指令(操作S43)。代碼生成部分115根據(jù)所檢測(cè)到的代碼生成源指令生成主代碼,在該主代碼中已嵌入了性能計(jì)算指令(操作S44)。在仿真設(shè)備I中,可省略用于目標(biāo)程序中的一些指令的性能值計(jì)算的主指令的生成。因此,可減少用于仿真的主指令的數(shù)目,并且可減少仿真時(shí)間。由于省略了用于代碼轉(zhuǎn)換處理中的性能值計(jì)算的主指令的生成,所以可在保持所獲得的性能值的精確度的同時(shí)提高仿真速度。由于在仿真期間在用戶指定的跟蹤范圍內(nèi)測(cè)量目標(biāo)程序的性能,所以執(zhí)行有效率的仿真,并且減少仿真時(shí)間。用戶指定的跟蹤范圍的設(shè)定可應(yīng)用于圖10所示的代碼轉(zhuǎn)換處理。預(yù)測(cè)仿真執(zhí)行部分113對(duì)塊進(jìn)行分析, 并且在圖10中的操作SI和S2之間檢測(cè)跟蹤范圍的開(kāi)始地址或結(jié)束地址??稍诟櫡秶鷥?nèi)執(zhí)行操作S2至S5。圖16圖示例示性的仿真設(shè)備。除了圖1中所示的結(jié)構(gòu)之外,仿真設(shè)備I還包括電力仿真信息生成部分15。電力仿真信息生成部分15根據(jù)從仿真信息采集部分13獲得的仿真信息5和電力信息6,來(lái)計(jì)算在塊執(zhí)行期間消耗的電力,并且輸出電力仿真信息7。圖17圖示電力仿真信息生成部分的例示性處理。在圖17中,將電力仿真信息生成部15執(zhí)行為電力仿真功能,該電力仿真功能嵌入到用于性能仿真的主代碼中。由電力信息6中的LD指令、MULT指令、和ADD指令中的一個(gè)執(zhí)行所消耗的電力可分別為 4μ W、0. 5μ W和 O. 3 μ W。電力仿真功能Host_Inst_A_C_power根據(jù)每個(gè)指令在仿真中已執(zhí)行的次數(shù)來(lái)計(jì)算電力。圖1所示的仿真設(shè)備I可包括輸入設(shè)備(包括鍵盤和鼠標(biāo))、輸出設(shè)備(例如顯示器或打印機(jī))、和個(gè)人計(jì)算機(jī)(PC),其中,個(gè)人計(jì)算機(jī)具有計(jì)算單元(CPU)、臨時(shí)存儲(chǔ)裝置(例如動(dòng)態(tài)隨機(jī)訪問(wèn)存儲(chǔ)器(DRAM)或閃速存儲(chǔ)器)、永久存儲(chǔ)單元(例如硬盤驅(qū)動(dòng)器(HDD)或閃速存儲(chǔ)器)、和耦合到網(wǎng)絡(luò)N的網(wǎng)絡(luò)接口。仿真設(shè)備I執(zhí)行計(jì)算機(jī)可執(zhí)行的程序。將如下程序提供給仿真設(shè)備1,在該程序中,對(duì)由仿真設(shè)備I提供的功能的處理進(jìn)行編碼。PC執(zhí)行所提供的程序以執(zhí)行仿真。PC可從便攜式存儲(chǔ)介質(zhì)中讀取程序,并且可執(zhí)行該程序的處理??商孢x地,PC可接收從服務(wù)器計(jì)算機(jī)傳送的程序,并且每當(dāng)PC接收到程序時(shí),PC可執(zhí)行所接收到的程序的處理??赡芤褜⒊绦蛴涗浽谟捎?jì)算機(jī)可讀的存儲(chǔ)介質(zhì)中。圖1所示的仿真設(shè)備I執(zhí)行用于控制流水線處理的CPU的指令的高速性能仿真。在由仿真設(shè)備I中的代碼轉(zhuǎn)換部分11進(jìn)行的目標(biāo)CPU的程序的代碼轉(zhuǎn)換處理中,與在JIT編譯器方法中一樣地執(zhí)行功能仿真,在該功能仿真中,針對(duì)每個(gè)劃分的塊預(yù)測(cè)外部相關(guān)指令的執(zhí)行結(jié)果(預(yù)測(cè)情況),并且根據(jù)定時(shí)信息3將每個(gè)指令的執(zhí)行時(shí)間表示為常量。仿真設(shè)備I的代碼轉(zhuǎn)換部分11將用于校正預(yù)測(cè)情況下的指令的執(zhí)行時(shí)間的代碼嵌入到主代碼中,而不是將仿真執(zhí)行代碼嵌入到主代碼中,其中,該仿真執(zhí)行代碼用于獲得有關(guān)在除預(yù)測(cè)情況以外的情況下的執(zhí)行的性能仿真信息(周期仿真信息)。仿真設(shè)備I中的仿真執(zhí)行部分12執(zhí)行預(yù)測(cè)情況下的指令的性能仿真。取代非預(yù)測(cè)情況下的指令的仿真,例如根據(jù)非預(yù)測(cè)情況下的指令的延遲時(shí)間、或在該指令前后執(zhí)行的指令的執(zhí)行時(shí)間,來(lái)校正預(yù)測(cè)情況下的執(zhí)行時(shí)間。更少的用于仿真的代碼被加到功能代碼,減少了性能仿真處理中的負(fù)載,并且以高速執(zhí)行處理。仿真設(shè)備I根據(jù)預(yù)測(cè)情況執(zhí)行功能仿真。由于通過(guò)靜態(tài)分析處理獲得了一種情況(預(yù)測(cè)情況)下的每個(gè)指令的執(zhí)行時(shí)間,所以例如通過(guò)加上或減去預(yù)測(cè)情況下的執(zhí)行時(shí)間的代價(jià)時(shí)間、在該指令前后執(zhí)行的指令的執(zhí)行時(shí)間、或之前指令的延遲時(shí)間,來(lái)校正除預(yù)測(cè)情況以外的情況下的指令的執(zhí)行時(shí)間。仿真設(shè)備I以高速對(duì)包括CPU的系統(tǒng)的性能或電力進(jìn)行仿真,所以可以容易地評(píng)估、分析或預(yù)測(cè)整個(gè)大規(guī)模系統(tǒng)的性能或電力。仿真設(shè)備I根據(jù)電力信息和性能仿真信息,高速和準(zhǔn)確地對(duì)程序的功耗進(jìn)行仿真。由于不是在每種情況下都執(zhí)行性能仿真,所以減小了性能仿真處理中的負(fù)載,并且可以以高精確度執(zhí)行仿真。本文中記載的所有示例和條件語(yǔ)言旨在用于教導(dǎo)的目的,以幫助讀者理解由發(fā)明人為促進(jìn)現(xiàn)有技術(shù)而提出的本發(fā)明和構(gòu)思,并且應(yīng)當(dāng)被解釋為不是限制這樣具體記載的示例和條件,而且說(shuō)明書中這樣的示例的組織形式也不涉及本發(fā)明的優(yōu)劣的表示。盡管已詳細(xì)描述了本發(fā)明的實(shí)施例,但是應(yīng)該理解,可在不偏離本發(fā)明的精神和范圍的情況下,對(duì)本發(fā)明進(jìn)行各種修改、替代和變型。
權(quán)利要求
1.ー種仿真設(shè)備,包括 代碼轉(zhuǎn)換部分;以及 仿真執(zhí)行部分, 其中,所述代碼轉(zhuǎn)換部分執(zhí)行 將被主處理器控制的目標(biāo)處理器中的程序的代碼劃分為塊; 將外部相關(guān)指令的執(zhí)行結(jié)果設(shè)定為預(yù)測(cè)結(jié)果,其中所述外部相關(guān)指令取決于包括在塊中的外部環(huán)境; 根據(jù)所述預(yù)測(cè)結(jié)果執(zhí)行功能仿真; 根據(jù)包括在所述塊中的指令執(zhí)行定時(shí)信息和功能仿真結(jié)果,計(jì)算在所述預(yù)測(cè)結(jié)果的情況下的所述外部相關(guān)指令的執(zhí)行時(shí)間;以及 根據(jù)所述功能仿真結(jié)果生成主代碼,所述主代碼使得所述主處理器執(zhí)行在所述預(yù)測(cè)結(jié)果的情況下的性能仿真, 其中,所述仿真執(zhí)行部分執(zhí)行 如果在所述主處理器執(zhí)行所述主代碼時(shí)的所述外部相關(guān)功能的執(zhí)行結(jié)果不同于所述預(yù)測(cè)結(jié)果,則通過(guò)使用基于所述外部相關(guān)指令的延遲時(shí)間和在所述外部相關(guān)功能前后執(zhí)行的指令的執(zhí)行時(shí)間的校正值,來(lái)校正所述外部相關(guān)指令的執(zhí)行時(shí)間;以及 將校正后的所述外部相關(guān)指令的執(zhí)行時(shí)間設(shè)定為所述外部相關(guān)指令的執(zhí)行時(shí)間。
2.根據(jù)權(quán)利要求1所述的仿真設(shè)備,其中,所述目標(biāo)處理器控制流水線處理。
3.根據(jù)權(quán)利要求1所述的仿真設(shè)備,其中,當(dāng)要在所述外部相關(guān)指令之后執(zhí)行的下一指令的執(zhí)行時(shí)間沒(méi)有超過(guò)所述外部相關(guān)指令的所述延遲時(shí)間時(shí),所述仿真執(zhí)行部分使用所述下一指令的執(zhí)行時(shí)間作為所述校正值。
4.根據(jù)權(quán)利要求3所述的仿真設(shè)備,其中,所述仿真執(zhí)行部分從所述外部相關(guān)指令的所述延遲時(shí)間中減去所述校正值。
5.根據(jù)權(quán)利要求1所述的仿真設(shè)備,其中,所述仿真執(zhí)行部分從包括在所述塊中的所述指令中檢測(cè)這樣的指令,該指令使用前一指令的執(zhí)行時(shí)間來(lái)計(jì)算該指令的執(zhí)行時(shí)間,并且所述仿真執(zhí)行部分生成包括主指令的所述主代碼,其中,所述主指令計(jì)算所檢測(cè)到的指令的執(zhí)行時(shí)間。
6.根據(jù)權(quán)利要求1所述的仿真設(shè)備,還包括 電カ仿真信息生成部分,用于獲得電カ仿真信息,其中,所述電カ仿真信息包括由所述主代碼中的指令和所述功能仿真結(jié)果消耗的電力。
7.一種仿真方法,包括 由計(jì)算機(jī)處理器執(zhí)行如下操作 將被主處理器控制的目標(biāo)處理器中的程序的代碼劃分為塊; 將外部相關(guān)指令的執(zhí)行結(jié)果設(shè)定為預(yù)測(cè)結(jié)果,其中所述外部相關(guān)指令取決于包括在塊中的外部環(huán)境; 根據(jù)所述預(yù)測(cè)結(jié)果執(zhí)行功能仿真; 根據(jù)包括在所述塊中的指令執(zhí)行定時(shí)信息和功能仿真結(jié)果,計(jì)算在所述預(yù)測(cè)結(jié)果的情況下的所述外部相關(guān)指令的執(zhí)行時(shí)間; 根據(jù)所述功能仿真結(jié)果生成主代碼,所述主代碼使得所述主處理器執(zhí)行在所述預(yù)測(cè)結(jié)果的情況下的性能仿真;如果在所述主處理器執(zhí)行所述主代碼時(shí)的所述外部相關(guān)功能的執(zhí)行結(jié)果不同于所述預(yù)測(cè)結(jié)果,則通過(guò)使用基于所述外部相關(guān)指令的延遲時(shí)間和在所述外部相關(guān)功能前后執(zhí)行的指令的執(zhí)行時(shí)間的校正值,來(lái)校正所述外部相關(guān)指令的執(zhí)行時(shí)間;以及將校正后的所述外部相關(guān)指令的執(zhí)行時(shí)間設(shè)定為所述外部相關(guān)指令的執(zhí)行時(shí)間。
8.根據(jù)權(quán)利要求7所述的仿真方法,其中,所述目標(biāo)處理器控制流水線處理。
9.根據(jù)權(quán)利要求7所述的仿真方法,還包括當(dāng)要在所述外部相關(guān)指令之后執(zhí)行的下一指令的執(zhí)行時(shí)間沒(méi)有超過(guò)所述外部相關(guān)指令的所述延遲時(shí)間時(shí),使用所述下一指令的執(zhí)行時(shí)間作為所述校正值。
10.根據(jù)權(quán)利要求9所述的仿真方法,還包括從所述外部相關(guān)指令的所述延遲時(shí)間中減去以獲得所述校正值。
11.根據(jù)權(quán)利要求7所述的仿真方法,還包括從包括在所述塊中的所述指令中檢測(cè)這樣的指令,該指令使用前一指令的執(zhí)行時(shí)間來(lái)計(jì)算該指令的執(zhí)行時(shí)間;以及生成包括主指令的所述主代碼,其中,所述主指令計(jì)算所檢測(cè)到的指令的執(zhí)行時(shí)間。
全文摘要
提供了一種仿真設(shè)備和仿真方法,該仿真設(shè)備包括如下操作將目標(biāo)處理器中的程序的代碼劃分為塊;將取決于外部環(huán)境的外部相關(guān)指令的執(zhí)行結(jié)果設(shè)定為預(yù)測(cè)結(jié)果;根據(jù)預(yù)測(cè)結(jié)果執(zhí)行功能仿真;根據(jù)指令執(zhí)行定時(shí)信息和功能仿真結(jié)果來(lái)計(jì)算外部相關(guān)指令的執(zhí)行時(shí)間;根據(jù)功能仿真結(jié)果生成主代碼,該主代碼使得主處理器執(zhí)行性能仿真;如果在主處理器執(zhí)行主代碼時(shí)的外部相關(guān)功能的執(zhí)行結(jié)果不同于預(yù)測(cè)結(jié)果,則根據(jù)外部相關(guān)指令的延遲時(shí)間和在外部相關(guān)功能前后執(zhí)行的指令的執(zhí)行時(shí)間,來(lái)校正外部相關(guān)指令的執(zhí)行時(shí)間;以及將校正后的外部相關(guān)指令的執(zhí)行時(shí)間設(shè)定為外部相關(guān)指令的執(zhí)行時(shí)間。
文檔編號(hào)G06F9/455GK103049307SQ20121037798
公開(kāi)日2013年4月17日 申請(qǐng)日期2012年10月8日 優(yōu)先權(quán)日2011年10月12日
發(fā)明者桑村慎哉, 池敦 申請(qǐng)人:富士通株式會(huì)社