專利名稱:模擬裝置、方法以及程序的制作方法
技術領域:
本發(fā)明涉及針對被虛擬模型化的系統(tǒng)中的處理器的指令執(zhí)行,取得性能或者電力的模擬信息的處理技術。
背景技術:
在系統(tǒng)復雜化、一般為搭載多個處理器(例如CPU)的多核構成的當前狀況下,針對各核(CPU)的功能、性能、電力等的模擬處理,要求實現(xiàn)更高的處理速度和處理精度。在功能、性能、消耗電力的模擬中,作為將成為評價對象的目標CPU從在主CPU中動作時的目標CPU的指令代碼(目標代碼)向主CPU的指令代碼(主代碼)變換的手法,公知采用解釋器(interpreter)方式或者JIT (Just-1n-Time)編譯器(compiler)方式。在基于JIT編譯器方式的模擬中,針對作為模擬對象的目標CPU,將在執(zhí)行過程中的程序中出現(xiàn)的目標CPU的指令置換成執(zhí)行模擬的主CPU的指令,之后執(zhí)行該置換后的指令。因此,JIT編譯器方式的處理比解釋器方式的處理速度快,在CPU的功能模擬中,尤其在被要求高速性的情況下,采用了 JIT編譯方式。還提出了采用JIT編譯器方式的CPU的性能模擬。但是,在各單元能夠按時鐘獨立動作,并逐個投入指令且并列執(zhí)行的流水線(pipeline)處理的控制中,由于CPU的內部狀態(tài)在每次執(zhí)行處理時發(fā)生變化,所以不能活用反復利用暫時生成的主指令這一 JIT編譯器方式的優(yōu)點。因此,一般在針對控制流水線處理、亂序(out of order)處理那樣的CPU的性能模擬、電力模擬中,不能應用JIP編譯器方式。非專利文獻1:美國專利6,751,583B1如上述那樣,當在針對控制流水線處理、亂序處理的CPU的功能、性能、電力的模擬中采用解釋器方式時,一般處理速度非常慢,存在不能作為現(xiàn)實的手法來加以應用的問題。另外,在近來高速的CPU的情況下,當在功能模擬中采用了 JIT編譯器方式時,能夠設法以實用的速度進行處理。但是,當在性能、電力的模擬中采用了 JIT編譯器方式時,在目標CPU中處理前后的狀況因流水線的控制而是多樣的,由于需要追加與內部狀態(tài)對應的龐大模擬用代碼和執(zhí)行其指令,所以處理負擔非常大。并且,在性能模擬中,為了適應相對目標CPU中可預料到的執(zhí)行延遲的定時,也需要對主代碼追加龐大的模擬用代碼。例如,當執(zhí)行加載指令(LD:load)的循環(huán)模擬時,在基于該指令的高速緩存訪問中,會發(fā)生高速緩存缺失(cache miss)或者高速緩存命中(cachehit)中的任意一方,在高速緩存缺失的情況下,為了將所有定時計算在內來調查是否有應該考慮的懲罰循環(huán)(penalty circle)等,需要將這些條件記述追加到主代碼中。但另一方面,為了維持高的動作性,需要盡量抑制對功能代碼追加的性能模擬(循環(huán)模擬)用的代碼量。
發(fā)明內容
本發(fā)明的目的在于,提供一種能夠進行高速模擬的技術。本發(fā)明的一個方式公開的模擬裝置是對控制流水線處理的目標處理器執(zhí)行程序的指令執(zhí)行的模擬的模擬裝置,具備:1)代碼變換部,其進行下述三個處理:將上述程序的代碼分割成規(guī)定的塊,并將上述塊中所含的指令中該指令的執(zhí)行結果依賴于外部環(huán)境的外部依賴指令的處理的執(zhí)行結果設定為預測結果;進行以上述預測結果為前提的指令執(zhí)行的功能模擬,獲得對上述塊中所含的指令的執(zhí)行定時進行表示的定時信息,根據上述功能模擬的結果與上述定時信息,來計算上述預測結果中的外部依賴指令的執(zhí)行時間;和根據上述功能模擬的結果,生成使主處理器執(zhí)行以上述預測結果為前提的指令執(zhí)行的性能模擬的主代碼,其中,上述主處理器是使上述目標處理器動作的主處理器;2)模擬執(zhí)行部,當在上述主處理器執(zhí)行了上述生成出的主代碼的執(zhí)行結果中,該主代碼所含的外部依賴指令的執(zhí)行結果與上述預測結果不同時,以利用該外部依賴指令的規(guī)定的延遲時間和在上述外部依賴指令的前后執(zhí)行的指令的執(zhí)行時間而求出的修正值,來修正上述預測結果中的外部依賴指令的執(zhí)行時間,作為上述功能模擬中的該外部依賴指令的執(zhí)行時間。另外,本發(fā)明的另一個方式公開的模擬方法具備上述模擬裝置執(zhí)行的各處理步驟。并且,本發(fā)明的又一個方式公開的模擬程序使計算機執(zhí)行上述模擬方法。根據所公開的模擬裝置,能夠高速地進行模擬。
圖1是表示作為本發(fā)明的一個實施方式公開的模擬裝置的構成例的圖。圖2是表示塊中所含的指令的例子的圖。圖3是表示定時信息的例子的圖。圖4是表示圖2所示的指令執(zhí)行的定時例的圖。圖5是表示編入循環(huán)模擬用代碼的例子的圖。圖6是表示模擬裝置的修正部的處理動作的圖。圖7是表示模擬裝置的修正部針對LD指令的執(zhí)行結果的修正例的圖。圖8是表示模擬裝置的修正部針對LD指令的執(zhí)行結果的修正例的圖。圖9是表示修正部123針對LD指令的執(zhí)行結果的修正例的圖。圖10是模擬裝置的代碼變換部的概要處理流程圖。圖11是模擬裝置的模擬執(zhí)行部的概要處理流程圖。圖12是作為外部依賴指令的一個例子,表示針對加載(Id)指令的處理的預測結果的判定以及修正的處理流程例的圖。圖13是表示其他實施方式中的模擬裝置的構成例的圖。圖14是表示模擬裝置的電力模擬信息生成部的實施例的圖。
具體實施例方式圖1是表示本發(fā)明的一個實施方式公開的模擬裝置的構成例的圖。
模擬裝置I是對流水線處理進行控制的目標CPU中執(zhí)行指令執(zhí)行的性能模擬的裝置。目標CPU是成為模擬對象的CPU的控制模型。模擬裝置I輸出各指令的循環(huán)模擬信息作為目標CPU的指令執(zhí)行的性能模擬。這里,目標CPU例如是ARM體系結構的CPU。與主CPU相當?shù)哪M裝置I例如是搭載X86體系結構的CPU的計算機。模擬裝置I具有代碼變換部11、模擬執(zhí)行部12和模擬信息收集部13。代碼變換部11是在目標CPU執(zhí)行程序時,根據目標CPU執(zhí)行的程序的代碼(目標代碼),生成執(zhí)行模擬的主CPU的代碼(主代碼)的處理部。代碼變換部11具有塊分割部111、預測模擬執(zhí)行部113以及代碼生成部115。塊分割部111將模擬裝置I被輸入的程序的目標代碼分割成規(guī)定的塊。被分割的塊單位例如可以是一般的基本塊(basic block)(從分支到下一分支前的代碼)單位,或者也可以是預先決定的任意的代碼單位。圖2是表示塊中所含的指令的例子的圖。如圖2所示,某個塊中包含目標代碼的3個指令;(I) “LD rl, r2”(加載);(2)“MULT r3,r4,r5 (相乘)”;(3) “ADD r2,r5,r6 (相加)”的指令,以(I) (3)的順序投入到目標CPU的流水線來加以執(zhí)行。各指令的rl r6表示寄存器(地址)。預測模擬執(zhí)行部113是獲得定時信息3和預測信息4,來進行在以某個執(zhí)行結果為前提的條件下執(zhí)行被輸入的塊的性能模擬的處理部。定時信息3是針對目標代碼的各指令,表示指令執(zhí)行時的各處理要素(階段)與能夠使用的寄存器之間的對應關系的信息;和對按指令中的每個外部依賴指令決定與執(zhí)行結果對應的延遲時間的懲罰時間(懲罰循環(huán)數(shù))進行表示的信息。外部依賴指令是進行與外部環(huán)境有關的處理的指令,例如如加載指令或者存儲指令等那樣的,進行指令的執(zhí)行結果依賴于目標CPU外的外部環(huán)境那樣的處理、例如指令高速緩存、數(shù)據高速緩存、TLB檢索等,或分支預測、調用/返回的堆棧等處理的指令。圖3是表示定時信息3的例子的圖。在圖3所示的定時信息3中,針對LD指令,表示資源寄存器rsl (rl)為第I個處理要素(el)而能夠使用,地址寄存器rd (r2)為第2個處理要素(e2)而能夠使用。另外,在MULT指令中,表示第I資源寄存器rsl(r3)為第I個處理要素(el),第2資源寄存器rs2 (M)為第2個處理要素(e2),地址寄存器rd (r5)為第3個處理要素(e3),能夠分別使用。另外,在ADD指令中,表示第I資源寄存器rsl (r2)、第2資源寄存器rs2(r5)為第I個處理要素(el)而能夠使用,地址寄存器rd (r6)為第2個處理要素(e2)而能夠使用。圖4是表示圖2所示的塊的各指令的執(zhí)行定時例的圖。根據圖3所示的定時信息3,關于向流水線投入各指令的定時,如果LD指令的執(zhí)行開始設為定時t,則MULT指令為定時t + 1,ADD指令為定時t + 2。由于ADD指令的第I資源寄存器(r2)與第2資源寄存器(r5)被LD指令和MULT指令使用,所以ADD指令的開始為LD指令與MULT指令的執(zhí)行完成的定時t + 4以后,產生2個循環(huán)量的待機時間(2個循環(huán)量的遲延)。
因此,如圖4 (A)所示可知,當模擬了圖2所示的塊時,在LD指令的執(zhí)行結果為高速緩存命中的實例(case)下,塊的執(zhí)行時間為6個循環(huán)。圖4 (B)表示了圖2所示的塊的LD指令的執(zhí)行結果為高速緩存缺失時的定時例。如果LD指令的結果為高速緩存缺失,則由于作為懲罰,對定時信息3設定了被認為足夠再次執(zhí)行的任意時間(這里為6個循環(huán)量),所以該懲罰循環(huán)被追加為延遲時間。因此,第2個處理要素(e2)的執(zhí)行延遲到定時t + 7。緊接著LD指令執(zhí)行的MULT指令不受延遲的影響被直接執(zhí)行,但ADD指令在LD指令的執(zhí)行完成的定時t + 8以后,產生4個循環(huán)量的待機時間(4個循環(huán)量的遲延)。因此,如圖4 (B)所示可知,當模擬了圖2所示的塊的指令執(zhí)行時,在LD指令的執(zhí)行結果為高速緩存缺失的狀況下,執(zhí)行時間為10個循環(huán)。預測信息4是在目標代碼的外部依賴指令的處理中,決定了產生的概率高的執(zhí)行結果(預測結果)的信息。由預測信息例如決定“指令高速緩存:預測=命中,數(shù)據高速緩存:預測=命中,TLB檢索:預測=命中,分支預測:預測=命中,調用/返回:預測=命中,…。預測模擬執(zhí)行部113根據上述的預測信息4,來設定被輸入的塊中所含的外部依賴指令的預測結果,并參照定時信息3,執(zhí)行以所`設定的預測結果為前提的情況(預測實例)的指令,來模擬指令執(zhí)行的發(fā)展情況。預測模擬執(zhí)行部113求出塊中所含的各指令的執(zhí)行時間(所要循環(huán)數(shù))作為模擬結果。代碼生成部115是根據預測模擬執(zhí)行部113的模擬結果,生成用于進行所設定的預測實例下的指令執(zhí)行時的性能模擬的主代碼(性能模擬用主代碼),作為與處理后的塊對應的主代碼的處理部。代碼生成部115根據塊的目標代碼,生成外部依賴指令為預測結果的預測實例時的進行指令執(zhí)行的主代碼,進而加上各指令的執(zhí)行時間,來編入進行對塊的處理時間加以計算的處理的模擬用代碼。例如,代碼生成部115針對設定了 “高速緩存命中”作為數(shù)據的LD指令的預測結果的處理,模擬該塊內的基于LD指令的高速緩存訪問為“命中”時的處理執(zhí)行,求出該預測實例下的執(zhí)行時間,并生成通過使用了預測實例的“命中”時的執(zhí)行時間加法/減法的修正計算而求出基于LD指令的高速緩存訪問為“缺失”時的執(zhí)行時間的處理的主代碼。模擬執(zhí)行部12代是執(zhí)行碼生成部115生成的主代碼,進行執(zhí)行程序(目標代碼)的目標CPU的指令執(zhí)行的功能以及性能模擬的處理部。模擬執(zhí)行部12具有代碼執(zhí)行部121和修正部123。代碼執(zhí)行部121是使用主代碼來執(zhí)行程序(目標代碼)的處理部。修正部123是在程序的執(zhí)行過程中外部依賴指令的執(zhí)行結果與所設定的預測結果不同時(預測外實例),對已經求出的預料實例下的執(zhí)行時間進行修正來求出該指令的執(zhí)行時間的處理部。修正部123使用對外部依賴指令賦予的懲罰時間、在外部依賴指令的前后執(zhí)行的指令的執(zhí)行時間、前一個指令的延遲時間等來進行修正。另外,修正處理的詳細內容將后述。模擬信息收集部13是收集包括各指令的執(zhí)行時間的日志信息(模擬信息)5作為性能模擬的執(zhí)行結果的處理部。以下,對模擬裝置I的處理流程進行說明。〔代碼變換處理〕(I)模擬裝置I的代碼變換部11的塊分割部111獲得目標程序2的目標代碼并保持到存儲部中(圖1中未圖示),將所保持的目標代碼分割成任意的塊(參照圖2)。(2)預測模擬執(zhí)行部113獲得與被輸入的目標程序2有關的定時信息3、預測信息4并保存到存儲部中。然后,預測模擬執(zhí)行部113根據預測信息,針對分割后的塊的外部依賴指令分別設定預測結果。例如,作為圖2所示的塊的指令中LD指令的數(shù)據高速緩存的預測結果,預測模擬執(zhí)行部113設定“命中”。(3)預測模擬執(zhí)行部113對塊的代碼進行解釋,模擬以所設定的預測結果為前提時的指令執(zhí)行。即,預測模擬執(zhí)行部113模擬圖4 (A)所示的定時例的指令執(zhí)行。(4)接下來,代碼生成部115根據預測實例的模擬結果,從目標代碼生成主代碼。并且,代碼生成部115對從目標代碼變換后的主代碼(僅功能代碼)編入用于執(zhí)行性能模擬(循環(huán)模擬)的循環(huán)模擬用代碼。圖5 (A)是表示從目標代碼生成功能模擬的主代碼的例子的圖,圖5 (B)是表示對功能模擬的主代碼編入循環(huán)模擬用代碼的例子的圖。如圖5 (A)所示,目標代碼Inst — A被變換成主代碼Host — Inst—AO — func、Host — Inst — Al — func,目標代碼 Inst — B 被變換成主代碼 Host — Inst — BO — func、Host — Inst — BI — func、Host — Inst — B2 — func、...,生成只有功能代碼的主代碼。并且,對只有功能代碼的主代碼分別編入目標代碼Inst —A的循環(huán)模擬用代碼Host — Inst — A2 — cycle、Host — Inst — A3 — cycle,目標代碼 Inst — B 的循環(huán)模擬用代碼 Host — Inst — B4 — cycle、Host — Inst — B5 — cycle。循環(huán)模擬用代碼是將各指令的執(zhí)行時間(所要循環(huán)數(shù))常量化,將各指令的執(zhí)行時間合計來求出塊的處理時間的代碼。由此,能夠獲得表示塊執(zhí)行中的進展情況的信息。這里,由于主代碼中的功能代碼、外部依賴指令以外的指令的循環(huán)模擬用代碼能夠使用已知的代碼來實施,所以省略具體例的說明。外部依賴指令的循環(huán)模擬用代碼作為調出修正處理的輔助(helper)函數(shù)被準備。針對輔助函數(shù)將后述?!材M處理〕(I)模擬執(zhí)行部12的代碼執(zhí)行部121使用代碼變換部11生成的主代碼,來進行目標程序2的性能模擬。代碼執(zhí)行部121模擬目標程序2的指令執(zhí)行,不斷獲得各指令的執(zhí)行時間。(2)當在模擬的執(zhí)行中檢測到外部依賴指令(例如LD指令)時,代碼執(zhí)行部121判定其執(zhí)行結果與所設定的預測結果是否不同,在執(zhí)行結果與預測結果不同的情況下,請求啟動修正部123。例如,在檢測出指令“LD,rl, r2”,數(shù)據高速緩存的預測結果(高速緩存命中)與實際的執(zhí)行結果(高速緩存缺失)不同的情況下,調出修正部123。
(3)修正部123接受調出而起動,對檢測出的指令“LD,rl, r2”的執(zhí)行時間(循環(huán)數(shù))進行修正。并且,修正部123通過該修正,還變更下一指令的執(zhí)行定時t + η。每當外部依賴指令的執(zhí)行結果與預測結果不同時,修正部123便修正指令的執(zhí)行時間。這里,由于預測實例下的外部依賴指令的執(zhí)行時間已被常量化,所以修正部123,可通過簡單地將針對該指令的懲罰時間、前后執(zhí)行的指令的執(zhí)行時間、之前處理的指令的延遲時間等的值相加或相減來計算預測外實例下的外部依賴指令的執(zhí)行時間。圖6是表示修正部123的處理動作的圖。修正部123作為輔助函數(shù)模塊被實施。在本實施方式中,例如通過取代按LD指令的高速緩存的每個執(zhí)行結果來進行模擬的以往的函數(shù)“cache — Id (address)”,而將輔助函數(shù)“cache — Id (address, rep —delay, pre — delay)”裝到主代碼來實現(xiàn)。輔助函數(shù)的“rep —delay”是在使用該加載(Id)指令的返回值的下一指令的執(zhí)行之前,未被作為懲罰時間中的延遲時間而處理的時間(延期時間)?!皃re —delay”是從前一個指令接收的延遲時間?!耙?I”表示之前的指令沒有延遲?!皉印— delay”與“pre —delay”是根據性能模擬結果與定時信息3的靜態(tài)分析處理的結果而得到的時間信息。在圖6所示的動作例中,修正部123在當前定時current — time與前一個Id指令的執(zhí)行定時preld — time之差超過前一個Id指令的延遲時間量pre — delay時,以前一個Id指令的執(zhí)行定時preld — time到當前定時current — time的時間來調整延遲時間pre — delay,求出有效延遲時間avail — delay。接下來,若執(zhí)行結果為高速緩存缺失,則預測結果錯誤,修正部123對有效延遲時間avail — delay加上高速緩存缺失時的懲罰時間cache—miss — latency,根據延期時間rep — delay來修正LD指令的執(zhí)行時間。圖7 圖9是表示修正部123針對LD指令的執(zhí)行結果的修正例的圖。圖7是用于對在執(zhí)行一個高速緩存處理的實例下產生了一個高速緩存缺失時的修正例進行說明的圖。在圖7的例子中,執(zhí)行以下3個指令的模擬。“ Id [rl ], r2: [rl ] — r2 ;mult r3, r4, r5:r3 * r4 — r5 ;add r2, r5, r6:r2 十 r5 — r6”圖7 (A)是表示預測結果為“高速緩存命中”時的指令執(zhí)行定時的圖例的圖。在該預測實例下,被第3個執(zhí)行的add指令產生了 2個循環(huán)遲延。圖7 (B)是表示與預測結果不同的“高速緩存缺失”時的指令執(zhí)行定時的圖例的圖。在該預測錯誤的實例下,如果Id指令的執(zhí)行結果是高速緩存缺失,則產生懲罰循環(huán)(6個循環(huán))量的延遲。因此,雖然mult指令不受延遲的影響地被執(zhí)行,但由于add指令的執(zhí)行等待Id指令的完成,所以延遲4個循環(huán)量。圖7 (C)是表示由修正部123修正后的指令執(zhí)行時間圖的例子的圖。由于Id指令的執(zhí)行結果為高速緩存缺失(預測結果的錯誤),所以修正部123對剩余的執(zhí)行時間(2 -1 = 1個循環(huán))加上規(guī)定的高速緩存缺失時的懲罰時間(6個循環(huán))來作為有效延遲時間(7個循環(huán))。有效延遲時間成為最大的延遲時間。
并且,修正部123獲得下一 mult指令的執(zhí)行時間(3個循環(huán)),判定為下一指令的執(zhí)行時間未超過延遲時間,將從有效延遲時間減去了下一指令的執(zhí)行時間而得到的時間(7 - 3 = 4個循環(huán))作為Id指令的發(fā)生了延遲的執(zhí)行時間(延遲時間)。另外,修正部123將從有效延遲時間減去了上述的延遲時間而得到的時間(3個循環(huán))設為延期時間。延期時間是作為懲罰的延遲被延期后的時間。修正部123 通過輔助函數(shù) cache — Id (addr, rep — delay, pre — delay),返回延期時間rep — delay = 3、前指令的延遲時間pre — delay = — I (無延遲)。通過該修正,Id指令的執(zhí)行時間成為將所執(zhí)行的時間與延遲時間相加的執(zhí)行時間(1 + 4 = 5個循環(huán)),可根據執(zhí)行完成的定時&計算后續(xù)的mult指令、add指令的執(zhí)行時間。S卩,通過對修正后的Id指令的執(zhí)行時間(5個循環(huán))簡單地加上在預測模擬執(zhí)行部113的處理結果(基于預測結果的預測模擬的結果)中求出的mult指令與add指令各自的執(zhí)行時間(3個循環(huán),3個循環(huán)),便能得到該塊的執(zhí)行時間(循環(huán)數(shù))。因此,通過進行基于僅將執(zhí)行結果與預測不同的指令的執(zhí)行時間相加或者相減的修正處理,針對其他指令,加上基于預測結果的在模擬時求出的執(zhí)行時間,便還能高精度地求出高速緩存缺失時的模擬的執(zhí)行循環(huán)數(shù)。圖7 (D)是為了與模擬裝置I的處理進行比較,而表示現(xiàn)有技術的通過單純的加法來求出高速緩存缺失時的循環(huán)數(shù)時的誤差的大小的圖。在圖7 (D)的情況下,可知由于直接加上Id指令的延遲時間,所以實際上產生了因在Id指令的執(zhí)行中完成執(zhí)行的mult指令的執(zhí)行定時的偏差而引起的誤差。圖8是用于對在執(zhí)行兩個高速緩存處理的實例下產生了兩個高速緩存缺失時的修正例進行說明的圖。在圖8的例子中,執(zhí)行以下5個指令的模擬?!癐d [rl], r2: [rl] — r2 ;Id [r3], r4: [r3] — r4 ;mult r5, r6, r7:r5 * r6 — r7 ;add r2, r4, r2:r2 + r4 — r2 ;add r2, rl, r2:r2 十 r7 — r2”圖8 (A)是表示兩個高速緩存處理中的預測結果為“高速緩存命中”時的指令執(zhí)行定時的圖例的圖。在該預測實例下,兩個Id指令被隔開2個循環(huán)量(通常的I個循環(huán)+附加的I個循環(huán))來執(zhí)行。圖8 (B)是表示兩個高速緩存處理兩方是與預測結果不同的“高速緩存缺失”時的指令執(zhí)行定時的圖例的圖。在該預測錯誤的實例下,兩個Id指令各自中為高速緩存缺失,產生懲罰循環(huán)(6個循環(huán))量的延遲。但是,兩個Id指令的延遲時間是重疊的時間,mult指令也不受延遲的影響地被執(zhí)行,兩個add指令的執(zhí)行延遲到第2個Id指令的完成。圖8 (C)是表示由修正部123修正后的指令執(zhí)行時間圖的例子的圖。如使用圖7說明那樣,修正部123在定時h修正第I個Id指令的延遲時間,返回輔助函數(shù) cache — Id (addr, 3, — I)。接下來,在當前定時h,由于第2個Id指令的執(zhí)行結果為高速緩存缺失(預測結果的錯誤),所以修正部123對該Id指令的剩余的執(zhí)行時間加上懲罰循環(huán)(6),成為有效延遲時間(I + 6 = 7個循環(huán))。修正部123從有效延遲時間減去在當前定時h之前消耗的延遲時間《當前定時h —前指令的執(zhí)行定時h >—所設定的間隔),求出從當前定時h超過的有效延遲時間(7-(6- 2) = 3個循環(huán)),將該超過的有效延遲時間作為第2個Id指令的執(zhí)行時間。并且,修正部123從超過的有效延遲時間減去本來的執(zhí)行時間(3 — I = 2個循環(huán)),作為前指令的延遲時間。另外,修正部123從有效延遲時間減去在當前定時h之前消耗的延遲時間與在當前定時h超過的有效延遲時間的合計(7 -(3 + 3)= I個循環(huán)),作為延期時間。修正部123在定時&修正了第2個Id指令的延遲時間后,返回輔助函數(shù)cache —Id (addr,2,1)。通過該修正,對當前定時h附加了修正值(3個循環(huán))的定時成為Id指令的執(zhí)行完成的定時,從該定時起不斷加上以后的mult指令、add指令的執(zhí)行時間。圖8 (D)是為了與模擬裝置I的處理進行比較,而表示現(xiàn)有技術的通過單純的加法求出高速緩存缺失時的循環(huán)數(shù)時的誤差的大小的圖。在圖8 (D)的情況下,可知由于直接加上對兩個Id指令分別賦予的基于懲罰的延遲時間,所以產生了大的誤差(9個循環(huán))。可知在圖8 (C)所示的修正部123的處理中,與圖8 (B)所示那樣準確地模擬的情況相比,也存在誤差(I個循環(huán)),但與以往手法相比,非常高精度地求出。圖9是用于對在執(zhí)行兩個高速緩存處理的實例下產生了一個高速緩存缺失時的修正例進行說明的圖。在圖9的例子中,執(zhí)行與圖8中表示的說明例同樣的5個指令的模擬。圖9 (A)是表示兩個高速緩存處理中的預測結果為“高速緩存命中”時的指令執(zhí)行定時的圖例的圖。在該預測實例下,與圖8 (A)的情況同樣,兩個Id指令被隔開2個循環(huán)量(通常的I個循環(huán)+附加的I個循環(huán))而執(zhí)行。圖9 (B)是表示第I個Id指令為與預測結果不同的“高速緩存缺失”,第2個Id指令的結果為預測結果(高速緩存命中)時的指令執(zhí)行定時的圖例的圖。在該預測錯誤的實例下,兩個Id指令分別產生懲罰循環(huán)(6個循環(huán))量的延遲。但是,兩個Id指令的延遲時間是重疊的時間,mult指令也不受延遲的影響地被執(zhí)行,兩個add指令的執(zhí)行延遲到第2個Id指令的完成。圖9 (C)是表示由修正部123修正后的指令執(zhí)行時間圖的例子的圖。如使用圖7說明那樣,修正部123在定時h修正第I個Id指令的延遲時間,返回輔助函數(shù) cache — Id (addr, 3, — I)。接下來,在當前定時t1;由于第2個Id指令的執(zhí)行結果為高速緩存命中(預測結果),所以修正部123判斷從該Id指令的執(zhí)行開始到當前定時h的時間< h - t0 一所設定的間隔(6-0-2 = 4個循環(huán))> 是否大于該Id指令的執(zhí)行時間(2個循環(huán))。由于從第2個Id指令的執(zhí)行開始到當前定時h的時間大于該Id指令的執(zhí)行時間(2個循環(huán)),所以修正部123將當前定時h設為接下來的mult指令的執(zhí)行定時。而且,修正部123將從第2個Id指令的執(zhí)行完成到當前定時tl的時間(2個循環(huán))處理成針對下一指令的延遲時間,設為前指令的延遲時間pre —delay = 2。另外,修正部123從第I個Id指令的有效延遲時間減去在當前定時h之前消耗的延遲時間與在當前定時h超過的有效延遲時間的合計(7 -(6 + 0) = 1個循環(huán)),作為延期時間rep — delay=1,并返回輔助函數(shù) cache — Id (addr, I, 2)。圖9 (D)是為了與模擬裝置I的處理進行比較,而表示現(xiàn)有技術的通過單純的加法求出高速緩存缺失時的循環(huán)數(shù)時的誤差的大小的圖。在圖9 (D)的情況下,可知由于直接加上了第I個Id指令的因懲罰引起的延遲時間,所以產生了誤差。圖10是模擬裝置I的代碼變換部11的概要處理流程圖。在模擬裝置I中,代碼變換部11的塊分割部111將目標程序的代碼(目標指令)分割成規(guī)定單位的塊并輸入(步驟Si)。預測模擬執(zhí)行部113對塊的指令進行分析,來檢測外部依賴指令(步驟S2),針對檢測出的所有指令,根據預測信息4來決定概率高的執(zhí)行結果作為預測實例(步驟S3)。并且,預測模擬執(zhí)行部113參照定時信息3,針對塊的各指令執(zhí)行以設定為預測結果的執(zhí)行結果為前提的性能模擬(步驟S4)。代碼生成部115根據模擬結果,來生成模擬執(zhí)行部12執(zhí)行的性能模擬用主代碼(步驟S5)。通過以上的步驟SI S5的處理,輸出對所設定的執(zhí)行結果的情況(預測實例)下的功能代碼編入了模擬目標CPU的性能的代碼的主代碼。圖11是模擬裝置I的模擬執(zhí)行部12的概要處理流程圖。在模擬裝置I中,模擬執(zhí)行部12的代碼執(zhí)行部121執(zhí)行代碼生成部115生成的主代碼,進行性能模擬(步驟S10)。若在執(zhí)行中檢測出外部依賴指令(步驟S11),則代碼執(zhí)行部121判定該指令的執(zhí)行結果與被設定為預測結果的內容是否相同(步驟S12)。僅在外部依賴指令的執(zhí)行結果與所設定的預測結果不相同的情況下(步驟S12的“否”),調出修正部123,修正部123對該外部依賴指令的執(zhí)行時間進行修正(步驟S13)。然后,模擬信息收集部13輸出與目標程序相當?shù)闹鞔a所有的模擬處理的模擬信息5 (步驟S14)。通過以上的步驟SlO S14的處理步驟,輸出執(zhí)行目標程序2的目標CPU的模擬信息(循環(huán)模擬信息)5。圖12是作為外部依賴指令的一個例子,表示加載(Id)指令的處理的預測結果的判定以及修正的處理流程例的圖。當從處理中的塊的指令檢測出外部依賴指令后,代碼執(zhí)行部121調出與修正部123相當?shù)妮o助函數(shù)(步驟S20)。代碼執(zhí)行部121判定在Id指令中是否要求了高速緩存訪問(步驟S21),如果要求了高速緩存訪問(步驟S21的“是”),則模擬高速緩存訪問(步驟S22)。如果高速緩存訪問的結果是“高速緩存缺失”(步驟S23的“缺失”),則修正部1231d進行指令的執(zhí)行時間(循環(huán)數(shù))的修正(步驟S24),輸出修正后的執(zhí)行時間(循環(huán)數(shù))(步驟S25)。當在步驟S21中未要求高速緩存訪問時(步驟S21的“否”),或者所要求的高速緩存訪問是“高速緩存命中”(步驟S23的“命中”),則修正部123輸出未修正的所預測的執(zhí)行時間(循環(huán)數(shù))(步驟S26)。圖13是表示其他實施方式中的模擬裝置I的構成例的圖。
模擬裝置I在圖1所示的構成例中還具備電力模擬信息生成部15。電力模擬信息生成部15是獲得電力信息6,根據模擬信息收集部13輸出的模擬信息5,來計算塊執(zhí)行時的消耗電力,作為電力模擬信息7進行輸出的處理部。圖14是表示將電力模擬信息生成部15作為編入到性能模擬用的主代碼的函數(shù)(電力模擬函數(shù))實施時的例子的圖。作為電力信息6,LD指令、MULT指令、ADD指令執(zhí)行I次的消耗電力分別被設定為4u [W]、0.5u [W]、0.3u [ff]0電力模擬函數(shù)Host — Inst — A 一 C — power基于在模擬中執(zhí)行了的各指令的執(zhí)行次數(shù),來計算電力。接下來,對模擬裝置I的硬件構成例進行說明。模擬裝置I能夠由具有運算裝置(CPU)、暫時存儲裝置(DRAM、閃存等)、永久性存儲裝置(HDD、閃存等)、以及與網絡N的網絡接口的計算機PC、輸入裝置(鍵盤、鼠標等)和輸出裝置(顯示器、打印機等)實施。另外,模擬裝置I能夠通過計算機PC可執(zhí)行的程序來實施。該情況下,可提供記述有模擬裝置I應該具有的功能的處理內容的程序。通過由計算機PC執(zhí)行所提供的程序,可在計算機PC上實現(xiàn)上述說明的模擬裝置I的處理功能。此外,計算機PC也可以從移動式記錄介質直接讀取程序,按照該程序執(zhí)行處理。另外,計算機PC也可以在被服務器計算機傳輸程序時,依次按照接收到的程序執(zhí)行處理。并且,該程序可以預先記錄在計算機PC可讀取的記錄介質中。如以上說明那樣,根據模擬裝置1,能夠高速進行對流水線處理進行控制的CPU的指令執(zhí)行的性能模擬。對模擬裝置I而言,在如JIT編譯器方式那樣目標CPU的程序的代碼變換處理中,代碼變換部11按分割后的每個塊對預測了外部依賴指令的執(zhí)行結果時(預測實例)的執(zhí)行,進行功能模擬,根據定時信息3將各指令的執(zhí)行時間常量化。在模擬裝置I的代碼變換部11中,取代將用于獲得預測實例以外的執(zhí)行的性能模擬信息(循環(huán)模擬信息)的模擬執(zhí)行代碼編入到主代碼,而編入預測實例下的進行指令的執(zhí)行時間的修正處理的代碼。另外,在模擬裝置I的模擬執(zhí)行部12中,針對預測實例時的指令執(zhí)行性能模擬,取代預測外實例下的模擬,而使用針對該指令的延遲時間、前后執(zhí)行的指令的執(zhí)行時間等,來修正預測實例下的執(zhí)行時間,獲得外部依賴指令的執(zhí)行時間。因此,與以往相比,能夠減少對功能代碼追加的模擬用代碼量,能夠在抑制性能模擬處理的負擔增大的同時,高速地進行模擬。另外,在模擬裝置I中,通過以預測實例為前提進行功能模擬,由此通過靜態(tài)分析處理獲得一個實例(預測實例)下的各指令的執(zhí)行時間,通過將預測實例下的執(zhí)行時間與懲罰時間、前后執(zhí)行的指令的執(zhí)行時間、之前的指令的延遲時間等相加或者相減來修正預測實例以外的實例下的指令的執(zhí)行時間。根據模擬裝置1,能夠高速實時包括CPU的系統(tǒng)的性能、電力的模擬,能夠容易地進行以往難以在現(xiàn)實中執(zhí)行的大規(guī)模的系統(tǒng)整體的性能、電力的評價與解析、預測等。并且,根據模擬裝置I,能夠根據電力信息與性能模擬信息來高速且高精度地進行程序的消耗電力模擬。因此,起到不需要進行各實例下的性能模擬,便能夠在抑制性能模擬處理的負擔增大的同時,高精度地進行模擬這一效果。附圖標記說明:1-模擬裝置;11_代碼變換部;111_塊分割部;113_預測模擬執(zhí)行部;115_代碼生成部;12-模擬執(zhí)行部;121-代碼執(zhí)行部;123-修正部;13-模擬信息收集部;15_電力模擬信息生成郃;2~目標程序;3_定時信息;4_預測信息;5_模擬信息;6_電力信息;7_電力模擬信息。
權利要求
1.一種模擬裝置,對控制流水線處理的目標處理器執(zhí)行程序的指令執(zhí)行的模擬,其特征在于, 具備代碼變換部和模擬執(zhí)行部, 上述代碼變換部進行下述三個處理: 將上述程序的代碼分割成規(guī)定的塊,并將上述塊中所含的指令中該指令的執(zhí)行結果依賴于外部環(huán)境的外部依賴指令的處理的執(zhí)行結果設定為預測結果; 進行以上述預測結果為前提的指令執(zhí)行的功能模擬,獲得對上述塊中所含的指令的執(zhí)行定時進行表示的定時信息,根據上述功能模擬的結果與上述定時信息,來計算上述預測結果中的外部依賴指令的執(zhí)行時間;和 根據上述功能模擬的結果,生成使主處理器執(zhí)行以上述預測結果為前提的指令執(zhí)行的性能模擬的主代碼,其中,上述主處理器是使上述目標處理器動作的主處理器, 當在上述主處理器執(zhí)行了上述生成出的主代碼后的執(zhí)行結果中,該主代碼所含的外部依賴指令的執(zhí)行結果與上述預測結果不同時,上述模擬執(zhí)行部以利用該外部依賴指令的規(guī)定的延遲時間和在上述外部依賴指令的前后執(zhí)行的指令的執(zhí)行時間而求出的修正值,來修正上述預測結果中的外部依賴指令的執(zhí)行時間,作為上述功能模擬中的該外部依賴指令的執(zhí)行時間。
2.根據權利要求1所述的模擬裝置,其特征在于, 在上述外部依賴指令之后下一個被執(zhí)行的下一指令的執(zhí)行時間沒有超過對上述外部依賴指令附加的延遲時間時,上述模擬執(zhí)行部進行將上述下一指令的執(zhí)行時間作為上述修正值而從上述外部依賴指令的延遲時間減去的處理。
3.根據權利要求1或2所述的模擬裝置,其特征在于, 具備電力模擬信息生成部,上述電力模擬信息生成部獲得決定了上述主代碼的指令集的各指令的每執(zhí)行一次的消耗電力量的電力信息,根據上述電力信息與上述功能模擬的結果,來求出上述塊的執(zhí)行時的電力模擬信息。
4.一種模擬方法,對控制流水線處理的目標處理器執(zhí)行程序的指令執(zhí)行的模擬,其特征在于,由主CPU執(zhí)行下述處理過程: 將上述程序的代碼分割成規(guī)定的塊,并將上述塊中所含的指令中該指令的執(zhí)行結果依賴于外部環(huán)境的外部依賴指令的處理的執(zhí)行結果設定為預測結果; 進行以上述預測結果為前提的指令執(zhí)行的功能模擬,獲得對上述塊中所含的指令的執(zhí)行定時進行表示的定時信息,根據上述功能模擬的結果與上述定時信息,來計算上述預測結果中的外部依賴指令的執(zhí)行時間; 根據上述功能模擬的結果,生成使主處理器執(zhí)行以上述預測結果為前提的指令執(zhí)行的性能模擬的主代碼,其中,上述主處理器是使上述目標處理器動作的主處理器; 當在上述主處理器執(zhí)行了上述生成出的主代碼后的執(zhí)行結果中,該主代碼所含的外部依賴指令的執(zhí)行結果與上述預測結果不同時,以利用該外部依賴指令的規(guī)定的延遲時間和在上述外部依賴指令的前后執(zhí)行的指令的執(zhí)行時間而求出的修正值,來修正上述預測結果中的外部依賴指令的執(zhí)行時間,作為上述功能模擬中的該外部依賴指令的執(zhí)行時間。
5.一種模擬程序,用于對控制流水線處理的目標處理器執(zhí)行程序的指令執(zhí)行的模擬,其特征在于,使主CPU執(zhí)行 下述處理:將上述程序的代碼分割成規(guī)定的塊,并將上述塊中所含的指令中該指令的執(zhí)行結果依賴于外部環(huán)境的外部依賴指令的處理的執(zhí)行結果設定為預測結果; 進行以上述預測結果為前提的指令執(zhí)行的功能模擬,獲得對上述塊中所含的指令的執(zhí)行定時進行表示的定時信息,根據上述功能模擬的結果與上述定時信息,來計算上述預測結果中的外部依賴指令的執(zhí)行時間; 根據上述功能模擬的結果,生成使主處理器執(zhí)行以上述預測結果為前提的指令執(zhí)行的性能模擬的主代碼,其中,上述主處理器是使上述目標處理器動作的主處理器; 當在上述主處理器執(zhí)行了上述生成出的主代碼后的執(zhí)行結果中,該主代碼所含的外部依賴指令的執(zhí)行結果與上述預測結果不同時,以利用該外部依賴指令的規(guī)定的延遲時間和在上述外部依賴指令的前后執(zhí)行的指令的執(zhí)行時間而求出的修正值,來修正上述預測結果中的外部依賴指令 的執(zhí)行時間,作為上述功能模擬中的該外部依賴指令的執(zhí)行時間。
全文摘要
能夠高速且高精度地執(zhí)行對流水線處理進行控制的CPU的性能模擬。模擬裝置(1)的代碼變換部(11)在目標CPU執(zhí)行程序時以分割后的各塊檢測受到外部環(huán)境影響的外部依賴指令,預測外部依賴指令的執(zhí)行結果,并模擬預測結果下的指令執(zhí)行,根據其模擬結果來生成編入了性能模擬用代碼的主代碼。模擬執(zhí)行部(12)利用主代碼針對程序的預測結果下的指令執(zhí)行進行性能模擬,當在執(zhí)行中外部依賴指令的執(zhí)行結果與預測結果的設定不同時,使用在該指令前后執(zhí)行的指令的執(zhí)行時間等對預測結果下的指令的執(zhí)行時間進行修正。模擬信息收集部(13)收集并輸出性能模擬信息。
文檔編號G06F9/455GK103154890SQ20108006949
公開日2013年6月12日 申請日期2010年10月12日 優(yōu)先權日2010年10月12日
發(fā)明者池敦, 大衛(wèi)·撒奇 申請人:富士通株式會社