專利名稱:用以提高仿真器性能的虛擬代碼的選擇性預編譯的制作方法
用以提高仿真器性能的虛擬代碼的選擇性預編譯發(fā)明領域本發(fā)明一般涉及軟件仿真領域,尤其涉及虛擬代碼的選擇性預編譯和內聯(lián)。 發(fā)明技術當諸如視頻游戲的軟件應用程序被編譯時,它通常被轉換成虛擬代碼,諸如 提供對應用程序的描述以及該應用程序如何來運行的指令的中間仿真二進制碼。軟 件仿真器在應用程序被執(zhí)行之前的某個時刻對軟件應用程序的中間二進制碼執(zhí)行 二進制翻譯。二進制翻譯指將中間二進制碼轉換成專用于將執(zhí)行該代碼的處理器類 型的機器可執(zhí)行二進制碼的過程。然后,可執(zhí)行二進制碼準備好由針對其已進行格 式化的處理器來執(zhí)行。一種這樣的二進制翻譯方法稱為"及時(just-in-time) " ( "JIT" ) 二進制 翻譯,由其名字所暗示,它是恰好在代碼被執(zhí)行之前進行的軟件代碼的二進制翻譯。 結果,可在各種處理器和計算平臺上使用特定中間二進制碼,因為成功運行代碼所 需進行的處理器專用改變不會發(fā)生直至恰好在執(zhí)行之前。JIT翻譯還提供了相對快 速的加載和引導時間,因為在啟動期間不進行二進制翻譯。遺憾的是,在運行時,JIT翻譯可對代碼的執(zhí)行產生不利影響。例如,針對代 碼內的大多數(shù)平均復雜的圖形函數(shù),典型的游戲系統(tǒng)可能在運行時執(zhí)行JIT翻譯而 不對代碼的執(zhí)行產生不利影響(即,不影響圖形渲染)。然而,如果遇到特別復雜 的圖形函數(shù)一諸如涉及大段人工智能("AI")的圖形函數(shù)一則可能不存在足以 可用于執(zhí)行函數(shù)翻譯和代碼執(zhí)行的處理器資源。因此,在回放期間,用戶可能注意 到代碼執(zhí)行中如明顯的"閃爍"或"結巴(stutter)"的瞬間暫停。隨著程序設計 員堅持不懈地為圖形逼真度而努力,這些延遲變得越來越令人不快。另一種翻譯方法涉及軟件預編譯器的使用。預編譯器對表示執(zhí)行之前的軟件 應用程序代碼的整個靜態(tài)中間二進制碼執(zhí)行二進制翻譯。通常在啟動過程期間軟件 被加載時(在"加載時間")進行翻譯。雖然預編譯器的使用提供了運行時較快速、 無中斷的執(zhí)行,但是當預編譯器執(zhí)行二進制翻譯時的初始加載時間被延長。因而,用戶可能體驗過度長的系統(tǒng)引導時間,因此,通常不對較大的程序使用預編譯器。 在運行時存在與執(zhí)行機器可執(zhí)行二進制碼中的相對較簡單的函數(shù)相關的另一 問題。例如,許多函數(shù)涉及從代碼主體到子例程的調用。對子例程的調用以及從該 子例程的返回(稱為"上下文切換")需要處理時間。對于大多數(shù)函數(shù),上下文切 換所需的處理時間與執(zhí)行函數(shù)本身所需的處理時間相比可被忽略。然而,如果函數(shù) 非常小,則上下文切換所需的處理時間可能在函數(shù)所需的總執(zhí)行時間中占據相當大 的百分比。結果,這種函數(shù)作為子例程的執(zhí)行的效率比如果簡單地在代碼的主體內 執(zhí)行該函數(shù)要低。此低效率由于被上下文切換占據了過多的處理時間的,可對JIT 翻譯以及代碼執(zhí)行的性能產生不利影響。雖然執(zhí)行這樣的函數(shù)作為子例程可能是低 效率的,但是這種函數(shù)通常充當軟件開發(fā)者的便利手段。因而,簡單地創(chuàng)建所有這 些函數(shù)均位于其主體中的代碼并非所期望的。因此,需要一種克服了上述缺點和缺陷的機制。本發(fā)明滿足了這種需要。發(fā)明概述鑒于上述缺點和缺陷,提供了一種方法和計算機可讀介質,它們對仿真二進 制碼執(zhí)行預引導掃描以檢測高于預定復雜度閾值的函數(shù)。然后,在啟動過程期間, 預編譯檢測到的函數(shù)。預引導掃描還可檢測低于第二預定復雜度閾值的函數(shù)??蓪?檢測到的函數(shù)與代碼主體內聯(lián)放置。然后,可在運行時執(zhí)行及時翻譯,其中預編譯 函數(shù)可被直接執(zhí)行而無需進一步翻譯,并且可執(zhí)行移入內聯(lián)的任何函數(shù)而無需上下 文切換。附圖的簡要描述
圖1是其中可實現(xiàn)本發(fā)明的方面的示例計算環(huán)境;圖2是示出了根據本發(fā)明的實施例的示例方法的流程圖;圖3是示出了根據本發(fā)明的實施例的示例代碼流程的框圖;以及圖4A-B是示出了根據本發(fā)明的實施例的代碼流程的示例更改的框圖。示例性實施例的詳細描述按照以滿足法規(guī)要求的特征來描述本發(fā)明的主題。然而,描述本身并非旨在 限制本專利的范圍。相反,發(fā)明人構想所要求保護的主題還可以其它方式來體現(xiàn), 以包括連同其它現(xiàn)有或將來技術的不同步驟或類似于本文獻中所述的要素。此外,盡管這里可使用術語"步驟"來意味著所用方法的不同方面,但是該術語不應當被 解釋為隱含本文所公開的各種步驟之中或之間的任何特定次序,除非或除明確描述 了各個步驟的次序之外。示例計算環(huán)境圖1示出了其中可實現(xiàn)本發(fā)明的合適計算系統(tǒng)環(huán)境100的一個示例。計算系 統(tǒng)環(huán)境100僅作為合適的計算環(huán)境的一個示例,而非旨在對本發(fā)明的使用范圍或功能提出任何限制。計算環(huán)境100也不應當被解釋為對示例性操作環(huán)境100中所示組件的任一個或組合具有任何依賴或要求。本發(fā)明可與許多其它通用或專用計算系統(tǒng)環(huán)境或配置一起運行??蛇m合用于本發(fā)明的眾所周知的計算系統(tǒng)、環(huán)境和/或配置的示例包括但不限于個人計算機、 服務器計算機、手持型或膝上型設備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機頂盒、可編程消費者電子產品、網絡PC、小型機、大型計算機、包括上述系統(tǒng)或設備的任意種類的分布式計算環(huán)境等。可在由計算機執(zhí)行的諸如程序模塊的計算機可執(zhí)行指令的通用環(huán)境中描述本 發(fā)明。通常,程序模塊包括執(zhí)行特定任務或實現(xiàn)特定抽象數(shù)據類型的例程、程序、 對象、組件、數(shù)據結構等。也可在其中通過經由通信網絡鏈接的遠程處理設備執(zhí)行 任務的分布式計算環(huán)境中實踐本發(fā)明。在分布式計算環(huán)境中,程序模塊和其它數(shù)據 可位于包括存儲器存儲設備的本地或遠程計算機存儲介質中。參看圖1,用于實現(xiàn)本發(fā)明的示例性系統(tǒng)包括計算機110形式的通用計算設備。計算機110的組件可包括但不限于處理單元120;系統(tǒng)存儲器130;以及將包括系統(tǒng)存儲器在內的各種系統(tǒng)元件耦合到處理單元120的系統(tǒng)總線121。系統(tǒng)總 線121可以是若干類型總線結構中的任意一種,包括存儲器總線或存儲器控制器、 外圍總線以及使用各種總線體系結構中的任一種的局域總線。作為示例而非限制, 這些架構包括工業(yè)標準結構(ISA)總線、微通道結構(MCA)總線、增強型ISA(EISA)總線、視頻電子標準協(xié)會(VESA)局部總線、以及也稱為附夾板(Mezzanine)總線的外設部件互連(PCI)總線。計算機110通常包括各種計算機可讀介質。計算機可讀介質可以是可由計算 機110訪問的任何可用介質,包括易失性和非易失性介質、可移動和不可移動介質。 作為示例而非限制,計算機可讀介質可包括計算機存儲介質和通信介質。計算機存 儲介質包括以存儲諸如計算機可讀指令、數(shù)據結構、程序模塊或其它數(shù)據的信息的任意方法和技術實現(xiàn)的易失性和非易失性、可移動和不可移動介質。計算機存儲介
質包括但不限于RAM、 ROM、 EEPROM、閃存或其它存儲器技術、CD-ROM、 數(shù)字多功能盤(DVD)或其它光盤存儲、磁帶盒、磁帶、磁盤存儲器或其它磁存 儲設備、或者可被用來存儲所需信息并可由計算機110訪問的任意其它介質。通信 介質通常以諸如載波或其它傳送機制的已調制數(shù)據信號的方式體現(xiàn)計算機可讀指 令、數(shù)據結構、程序模塊或者其它數(shù)據,并且包括任意信息傳輸介質。術語"已調 制數(shù)據信號"是指以在信號中編碼信息的方式設置或改變其特性中的一個或多個的 信號。作為示例而非限制,通信介質包括諸如有線網絡或直接線連接的有線介質、 以及諸如聲波、RF、紅外線和其它無線介質的無線介質。以上任一種組合應當也 可被包括在計算機可讀介質的范圍內。
系統(tǒng)存儲器130包括諸如只讀存儲器(ROM) 131和隨機存取存儲器(RAM) 132的易失性和/或非易失性存儲器形式的計算機存儲介質。包含有助于諸如在啟動 期間在計算機110內的元件之間傳遞信息的基本例程的基本輸入/輸出系統(tǒng)(BIOS) 133通常被存儲在ROM 131中。RAM 132通常包含可由處理單元120立即訪問和 /或當前正操作的數(shù)據和/或程序模塊。作為示例而非限制,圖1示出了操作系統(tǒng)134、 應用程序135、其它程序模塊136和程序數(shù)據137。
計算機110也可包括其它可移動/不可移動、易失性/非易失性計算機存儲介質。 僅作為示例,圖1示出了對不可移動的非易失性磁性介質讀寫的硬盤驅動器140、 對可移動的非易失性磁盤152讀寫的磁盤驅動器151、以及對諸如CD ROM或其 它光學介質的可移動的非易失性光盤156讀寫的光盤驅動器155。可被用在示例性 操作環(huán)境中的其它可移動/不可移動、易失性/非易失性計算機存儲介質包括但不限 于磁帶盒、閃存卡、數(shù)字多功能盤、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等。 硬盤驅動器141通常經由諸如接口 140的不可移動存儲器接口連接到系統(tǒng)總線 121,而磁盤驅動器151和光盤驅動器155通常經由諸如接口 150的可移動存儲器 接口連接到系統(tǒng)總線121。
以上討論并在圖1中示出的驅動器以及與它們相關聯(lián)的計算機存儲介質為計 算機110提供了對計算機可讀指令、數(shù)據結構、程序模塊和其它數(shù)據的存儲。例如, 在圖1中,硬盤驅動器141被示為存儲操作系統(tǒng)144、應用程序145、其它程序模 塊146以及程序數(shù)據147。注意這些組件可與操作系統(tǒng)134、應用程序135、其 它程序模塊136和程序數(shù)據137相同或不同。這里,操作系統(tǒng)144、應用程序145、 其它程序模塊146和程序數(shù)據147被賦予不同附圖標記,以便說明至少它們是不同的副本。用戶可通過諸如鍵盤162和通常指的是鼠標、跟蹤球或觸摸板的定點設備
161向計算機20輸入命令和信息。其它輸入設備(未示出)可包括麥克風、操縱 桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀等。這些和其它輸入設備常常經由耦合于 系統(tǒng)總線的用戶輸入接口 160連接到處理單元120,但也可通過諸如并行端口、游 戲端口或通用串行總線(USB)的其它接口和總線結構連接。監(jiān)視器191或其它類 型的顯示設備也經由諸如視頻接口 190的接口連接到系統(tǒng)總線121。除監(jiān)視器之外, 計算機還可包括諸如揚聲器197和打印機196的其它外圍輸出設備,它們可經由輸 出外圍接口 l卯連接。
計算機110可工作在使用到諸如遠程計算機180的一個或多個遠程計算機的 邏輯連接的網絡化環(huán)境中。遠程計算機180可以是個人計算機、服務器、路由器、 網絡PC、對等設備或其它公共網絡節(jié)點,并且通常包括以上就計算機IIO所描述 的組件中的許多或所有組件,盡管圖1僅示出了存儲器存儲設備181。圖1中所示 的邏輯連接包括局域網(LAN) 171和廣域網(WAN) 173,但也可包括其它網絡。 這些網絡環(huán)境在辦公室、企業(yè)范圍計算機網絡、內聯(lián)網和因特網中是普遍的。
當用在LAN網絡環(huán)境中時,計算機110經由網絡接口或適配器170連接到 LAN 171。當用在WAN網絡環(huán)境中時,計算機110通常包括調制解調器172或在 諸如因特網的WAN 173上建立通信的其它裝置?;驗閮戎檬交驗橥庵檬降恼{制解 調器172可經由用戶輸入接口 160或其它適當?shù)臋C制連接到系統(tǒng)總線121。在網絡 化環(huán)境中,關于計算機110所述的程序模塊或其一部分可被存儲在遠程存儲器存儲 設備中。作為示例而非限制,圖1將遠程應用程序185示為駐留在存儲器設備181 上。應當理解,所示網絡連接僅是示例性的,并且也可使用在計算機之間建立通信 鏈接的其它裝置。
示例實施例
在以下的討論中,認為關于代碼仿真和二進制翻譯的細節(jié)對于本領域技術人 員是公知的。因此,為了清晰和說明的目的,這里很大程度上略去了這些細節(jié)。另 外,這里使用涉及游戲軟件上下文中的圖形渲染的示例實施例僅為了說明的目的, 而非旨在將本發(fā)明限于任何這種實施例。
本發(fā)明的實施例選擇性地組合JIT翻譯和預編譯技術以在軟件應用程序的代 碼執(zhí)行期間避免暫停??蓪@種代碼的仿真二進制碼執(zhí)行預引導掃描,以檢測該二 進制碼內的復雜函數(shù)。在軟件的引導過程期間,實施例預編譯檢測到的復雜函數(shù)。在運行時,JIT翻譯技術用于二進制碼的其它部分,而可直接執(zhí)行經預編譯的函數(shù) 而無需進一步的翻譯。另外,在此預引導掃描期間,實施例可檢測極簡單函數(shù),并 選擇性地將它們重新定位到代碼的主體(在這里稱為"內聯(lián)"的過程)。在運行時, 可避免將否則執(zhí)行函數(shù)所必需的上下文切換。對實施例的預引導掃描可增加執(zhí)行初始引導過程所需的時間量。然而,由于 可選擇性地實施預編譯和內聯(lián)操作,所以引導時間的增加可被控制成保持在可接受 的限度內。因而,可改進代碼執(zhí)行以在不用過分延長應用的引導時間的情況下避免 顯著的暫?!,F(xiàn)在參看圖2,它示出了實施例的示例方法200。在步驟201,例如掃描諸如 視頻游戲的中間二進制碼的仿真代碼??墒褂萌魏晤愋偷膾呙铏C制。例如,在2005 年5月12日提交的、題為"Function-Level Just隱in-Time Translation Engine with Multiple Pass Optimization (具有多遍優(yōu)化的函數(shù)級及時時翻譯引擎)的共同轉讓的 美國申請No.11/128,699描述了這樣一種掃描方法,該申請通過引用全部結合于此。 掃描可涉及例如根據對于本領域技術人員而言應知的相對指令移置技術來在整個 仿真代碼流中移動指令指針等。當掃描在整個仿真代碼中進行時,確定函數(shù)邊界以 確立仿真代碼內的每個函數(shù)的復雜度。這里所用的術語"復雜度"指編譯和/或執(zhí) 行函數(shù)所需的處理時間或資源的任何量度。例如,可根據函數(shù)大小(例如,代碼行 的數(shù)量等)、處理難度等來測量復雜度。對涉及通過函數(shù)指針或絕對尋址的另一形 式來引用的函數(shù)的實例,可使用對這些函數(shù)的二進制專用引用來使以下的步驟211 的預編譯能夠進行。在完成步驟201的掃描之后,在步驟203,就是否檢測到一個或多個復雜函數(shù) 作出判定。如上所述,什么構成"復雜"函數(shù)可基于任何準則。另外,可選擇預定 閾值,從而僅超出該閾值的函數(shù)被判定為復雜。如上所述,預定閾值可按照代碼行 作出。因而,如果函數(shù)包含比閾值代碼行數(shù)目多的代碼行,則函數(shù)被判定為復雜。 閾值可基于任何數(shù)量的因素來預先確定。例如,以下將討論的步驟205的預編譯可 增加應用程序的總啟動時間。開發(fā)員等可能希望將由于這些預編譯而導致的啟動時 間的增加保持在某一限度內。因而,例如可選擇閾值以便可在該時間限度內預編譯 盡可能多的被判定為復雜的函數(shù)。如果步驟203的判定結果為沒有函數(shù)是復雜的,則方法200可前進到任選步 驟207。如果步驟203的判定結果為一個或多個函數(shù)是復雜的,則在步驟205編譯 這些復雜函數(shù)——這在此處被稱為"預編譯",因為此編譯發(fā)生在執(zhí)行代碼之前(以及在任何JIT翻譯之前)。根據實施例, 一旦己根據步驟205對函數(shù)進行預編譯,則它即準備好被執(zhí)行而無需進一步進行處理。在任選步驟207,就是否檢測到一個或多個"簡單"函數(shù)作出判定。與復雜函 數(shù)的情形一樣,什么構成簡單函數(shù)可基于任何準則。例如,簡單函數(shù)可被定義為代 碼行數(shù)目比閾值數(shù)目小的子例程。例如,可基于與執(zhí)行子例程所需的處理時間相比 的上下文切換所需的處理時間來選擇閾值。還可考慮附加的因素,包括專用程序應 用因素。例如,特定的子例程的代碼行數(shù)目可能小于閾值數(shù)目,但可能在整個應用程 序代碼中出現(xiàn)眾多次。函數(shù)的內聯(lián)可涉及本質上將該函數(shù)內的代碼行拷貝到代碼的 主體來替代相應的函數(shù)調用。因而,在執(zhí)行期間,函數(shù)代碼可被內聯(lián)編譯或執(zhí)行而 無需與該代碼所起源的子例程來回上下文切換。這樣的拷貝由于所復制的數(shù)據而可 增加應用程序的總大小。結果,在應用程序中出現(xiàn)眾多次的子例程可需要進行如此 多的復制,以致因內聯(lián)函數(shù)所獲得的處理好處可能由于增加的存儲需求、內聯(lián)大量 函數(shù)所需的過多的處理時間等而抵銷。結果,這些函數(shù)可能不被判定為簡單,即使 它們根據閾值是合格的。在任選步驟207,如果一個或多個函數(shù)被確定為簡單,則在任選步驟209,函 數(shù)被與應用程序代碼的主體內聯(lián)放置。如上所述,內聯(lián)放置代碼可能需要從子例程 等拷貝代碼并使用該子例程代碼來替代在主體中的相應的函數(shù)調用。圖4A-B示出 了將在以下討論的內聯(lián)放置函數(shù)的效果的圖示。如果步驟207的判定是在任選步驟 207沒有函數(shù)被判定為簡單,則方法200直接前進到步驟211。在步驟211 ,仿真代碼的JIT翻譯通過運行時引擎等連同代碼的執(zhí)行一起進行。 如上所述,因為復雜函數(shù)已在步驟205被預編譯,這些函數(shù)不需要在步驟211翻譯, 并且可被直接執(zhí)行。另外,對在步驟209被內聯(lián)放置的任何函數(shù),無需執(zhí)行上下文 切換。如上所述,用于判定函數(shù)是復雜還是簡單的(由此該函數(shù)分別應當被預編譯 還是內聯(lián)放置)閾值和因素可基于各種因素,包括但不限于應用程序的所期望的引 導時間。因而,應當理解,實施例允許開發(fā)員等來確定由此預編譯和/或內聯(lián)導致 的運行時好處與引導時間的相應增加之間的可接受的折衷。圖3表示根據實施例的示例代碼流程。函數(shù)310a-d表示應用程序的虛擬代碼 的主體300內的函數(shù)。在運行時期間,函數(shù)310a使用JIT翻譯進程320a來翻譯。 代碼流程由從函數(shù)310a通向JIT翻譯進程320a的箭頭A來表示,接著, 一旦JIT翻譯進程320完成,箭頭B指示隨后執(zhí)行函數(shù)310a。然后,仿真二進制碼經由箭 頭C前進到函數(shù)310b。函數(shù)310b還按箭頭A表示由進程320b進行JIT翻譯,并 且按箭頭B表示來執(zhí)行。然而, 一旦二進制到達預編譯函數(shù)310c,則無需JIT翻 譯,因為已根據例如圖2的步驟205進行了翻譯的預編譯函數(shù)310c準備好被執(zhí)行。 這些對于預編譯函數(shù)310d也是成立的。因而,可了解到圖3提供了根據實施例可 能發(fā)生的經更改的JIT翻譯進程的圖示。圖4A-B根據如上結合以上連同圖2的任選步驟209 —起討論的代碼的內聯(lián)的 示例代碼流程。參看圖4A,函數(shù)410a-b位于應用程序的主體400內。如箭頭A所 示,從函數(shù)410a-b分別調用函數(shù)子例程420a-b,并且如箭頭B所示,子例程420a-b 的結果返回到函數(shù)410a-b。如可從圖4A中了解到,子例程420b被指定為"簡單", 這指示例如其代碼行數(shù)目小于閾值數(shù)目,與以上結合圖2的步驟207所述的一樣。 主體400內從函數(shù)410a到410b的代碼流程由箭頭C來表示?,F(xiàn)在參看圖4B,函數(shù)410a和子例程420a與以上結合圖4A所討論的一樣。 然而,可見,函數(shù)410b不包含對子例程420b的調用。相反,函數(shù)410b前進到已 被放置在代碼的主體400中的子例程420b。因而,為子例程420b避免了由箭頭A 和B指示的調用和返回。子例程420'表示由于其代碼已被拷貝到代碼的主體400 而未被使用的原始子例程420b所占據的存儲器。雖然已結合各個附圖的實施例描述了本發(fā)明,但是應當理解,可使用其它類 似實施例,而且可對所述實施例作出更改和附加以執(zhí)行本發(fā)明的相同功能而不與之 背離。因此,本發(fā)明不應當限于任何單個實施例,而相反應當根據所附權利要求的 廣度和范圍來解釋。
權利要求
1.一種方法,包括掃描具有至少一個函數(shù)的虛擬代碼;在所述掃描期間判定所述至少一個函數(shù)是否超出第一預定閾值;如果所述至少一個函數(shù)超出所述第一預定閾值,則預編譯所述函數(shù);以及對所述虛擬代碼執(zhí)行及時翻譯。
2. 如權利要求1所述的方法,其特征在于,所述預定閾值對應于預定復雜度 級別。
3. 如權利要求2所述的方法,其特征在于,所述復雜度級別對應于代碼行的 預定數(shù)目。
4. 如權利要求1所述的方法,其特征在于,還包括在啟動過程期間加載所述 虛擬代碼,并且其中所述掃描步驟是在所述加載步驟之前執(zhí)行的。
5. 如權利要求1所述的方法,其特征在于,所述預編譯步驟延長虛擬代碼啟 動周期一持續(xù)時間,并且其中所述第一預定閾值基于所述持續(xù)時間。
6. 如權利要求1所述的方法,其特征在于,所述虛擬代碼具有主體和至少一 個子例程,并且還包括判定所述至少一個子例程具有小于第二預定閾值的復雜度;以及 將所述至少一個子例程放置在所述虛擬代碼的所述主體中。
7. 如權利要求6所述的方法,其特征在于,所述至少一個子例程具有代碼行, 以及其中所述主體具有對應于所述子例程的函數(shù)調用,并且其中所述放置步驟包括 從所述至少一個子例程拷貝所述代碼行并使用所述代碼行替代所述虛擬代碼的所 述主體中的所述函數(shù)調用。
8. 如權利要求7所述的方法,其特征在于,還包括多個子例程,并且其中僅 當所述子例程的數(shù)量小于第三預定閾值時,才執(zhí)行所述放置步驟。
9. 如權利要求l所述的方法,其特征在于,所述虛擬代碼實現(xiàn)圖形渲染軟件。
10. —種方法,包括對軟件應用的仿真二進制碼執(zhí)行預引導掃描;對所述二進制碼內超出第一預定閾值的第一函數(shù)進行標識;對所述二進制碼內需要上下文切換來執(zhí)行并小于第二預定閾值的第二函數(shù)進行標識;預編譯所述第一函數(shù);將所述第二函數(shù)內聯(lián)放置在所述仿真二進制的主體中;以及 對所述仿真二進制碼執(zhí)行及時翻譯。
11. 如權利要求IO所述的方法,其特征在于,所述及時翻譯生成適于由預定 處理器執(zhí)行的第二二進制碼。
12. 如權利要求11所述的方法,其特征在于,還包括執(zhí)行所述經翻譯的二進 制碼。
13. 如權利要求IO所述的方法,其特征在于,所述及時翻譯在所述軟件應用程序的運行時執(zhí)行。
14. 如權利要求10所述的方法,其特征在于,所述軟件應用程序是游戲軟件。
15. 如權利要求10所述的方法,其特征在于,所述第一和第二函數(shù)與圖形渲 染相關。
16. —種具有用于執(zhí)行一種方法的計算機可執(zhí)行指令的計算機可讀介質,所述 方法包括掃描具有至少一個函數(shù)的虛擬代碼;判定所述至少一個函數(shù)是否超出第一預定閾值;如果所述至少一個函數(shù)超出所述第一預定閾值,則預編譯所述函數(shù);以及 對所述虛擬代碼執(zhí)行及時翻譯。
17. 如權利要求16所述的計算機可讀介質,其特征在于,所述方法還包括在 啟動過程期間加載所述虛擬代碼,并且其中所述掃描步驟是在所述加載步驟之前執(zhí) 行的。
18. 如權利要求16所述的計算機可讀介質,其特征在于,所述預編譯步驟延 長虛擬代碼啟動周期一持續(xù)時間,并且其中所述第一預定復雜度閾值基于所述持續(xù) 時間。
19. 如權利要求16所述的計算機可讀介質,其特征在于,所述虛擬代碼具有 主體和至少一個子例程,并且還包括判定所述至少一個子例程具有小于第二預定復雜度閾值的復雜度;以及 將所述至少一個子例程放置在所述虛擬代碼的所述主體中。
20. 如權利要求19所述的計算機可讀介質,其特征在于,所述至少一個子例 程具有代碼行,以及其中所述主體具有對應于所述子例程的函數(shù)調用,并且其中所述放置步驟包括從所述至少一個子例程拷貝所述代碼行并使用所述代碼行替代所 述虛擬代碼的所述主體中的所述函數(shù)調用。
全文摘要
一種方法和計算機可讀介質對仿真二進制碼執(zhí)行預引導掃描以檢測高于預定復雜度閾值的函數(shù)。然后,可在啟動過程期間預編譯檢測到的函數(shù)。預引導掃描還可檢測低于第二預定復雜度閾值的函數(shù)。檢測到的函數(shù)可被內聯(lián)放置在代碼主體中;然后,可在運行時執(zhí)行及時翻譯。
文檔編號G06F9/45GK101238438SQ200680024664
公開日2008年8月6日 申請日期2006年6月30日 優(yōu)先權日2005年7月8日
發(fā)明者V·譚 申請人:微軟公司