在運(yùn)行時(shí)處綁定可執(zhí)行代碼的制作方法
【專利摘要】本發(fā)明涉及用于在運(yùn)行時(shí)處綁定可執(zhí)行代碼的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。本發(fā)明的實(shí)施例包括對(duì)代碼指定方面的后綁定以改善執(zhí)行性能。運(yùn)行時(shí)基于運(yùn)行時(shí)信息動(dòng)態(tài)地綁定較低級(jí)代碼以優(yōu)化較高級(jí)算法的執(zhí)行。對(duì)執(zhí)行性能有必要(例如,較高)影響的較高級(jí)算法的方面可以是后綁定的目標(biāo)。通過使用對(duì)具有必要執(zhí)行性能影響的方面的后綁定可以用最小的運(yùn)行時(shí)間成本實(shí)現(xiàn)改善的性能。
【專利說明】在運(yùn)行時(shí)處綁定可執(zhí)行代碼
[0001]背景
[0002]1.背景和相關(guān)技術(shù)
[0003]計(jì)算機(jī)系統(tǒng)及相關(guān)技術(shù)影響社會(huì)的許多方面。的確,計(jì)算機(jī)系統(tǒng)處理信息的能力已轉(zhuǎn)變了人們生活和工作的方式?,F(xiàn)在,計(jì)算機(jī)系統(tǒng)通常執(zhí)行在計(jì)算機(jī)系統(tǒng)出現(xiàn)以前手動(dòng)執(zhí)行的許多任務(wù)(例如,文字處理、日程安排、帳目管理等)。最近,計(jì)算機(jī)系統(tǒng)彼此耦合并耦合到其他電子設(shè)備以形成計(jì)算機(jī)系統(tǒng)及其他電子設(shè)備可在其上傳輸電子數(shù)據(jù)的有線和無線計(jì)算機(jī)網(wǎng)絡(luò)。因此,許多計(jì)算任務(wù)的執(zhí)行分布在多個(gè)不同的計(jì)算機(jī)系統(tǒng)和/或多個(gè)不同的計(jì)算環(huán)境中。
[0004]一種用于生成可執(zhí)行代碼的機(jī)制是編譯。在編譯時(shí),編譯器接收以較高級(jí)編程語言編寫的算法的源碼級(jí)描述。編譯器的任務(wù)在于從源碼級(jí)描述生成用于目標(biāo)環(huán)境的可執(zhí)行代碼。在運(yùn)行時(shí)處,可執(zhí)行代碼在目標(biāo)環(huán)境中運(yùn)行。
[0005]通常,在編譯時(shí)僅有與算法輸入有關(guān)的部分粗略信息可用。由此,編譯器無法作出與算法輸入的許多方面(諸如,舉例而言,輸入的大小)有關(guān)的任何假設(shè)。如此,編譯器通常生成能夠在運(yùn)行時(shí)處處理所有可能輸入的可執(zhí)行代碼。遺憾地是,所編譯的可執(zhí)行代碼的生成是以非最優(yōu)的性能為代價(jià)的。例如,在執(zhí)行期間,一些執(zhí)行的指令對(duì)于指定輸入而言可能是冗余的,并且可能消耗比處理特定輸入所需的更多的系統(tǒng)資源(諸如存儲(chǔ)器和寄存器)。
[0006]用于執(zhí)行代碼的另一機(jī)制是解釋。解釋器接收以較高級(jí)編程語言編寫的算法并且解釋該算法以供直接執(zhí)行。經(jīng)解釋的語言可在某種程度上處理經(jīng)編譯的代碼的非最優(yōu)性能。但是,每次運(yùn)行都重新解釋該算法的影響常常會(huì)超過生成更優(yōu)化代碼的好處。
[0007]即時(shí)(JIT)編譯技術(shù)包括從編譯器輸出的中間代碼到目標(biāo)機(jī)器可執(zhí)行代碼的運(yùn)行時(shí)轉(zhuǎn)換。作為此運(yùn)行時(shí)轉(zhuǎn)換(或即時(shí)編譯)的一部分,可以使用各種優(yōu)化來生成并執(zhí)行針對(duì)執(zhí)行期間觀察到的特定輸入的更高效的執(zhí)行代碼。然而,基于JIT的系統(tǒng)在運(yùn)行時(shí)編譯全部代碼,從而會(huì)付出較大的運(yùn)行時(shí)開銷或轉(zhuǎn)換。
[0008]簡(jiǎn)要概沭
[0009]本發(fā)明涉及用于在運(yùn)行時(shí)綁定可執(zhí)行代碼的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。本發(fā)明的實(shí)施例包括供編譯器和運(yùn)行時(shí)進(jìn)行互操作以基于運(yùn)行時(shí)信息來實(shí)現(xiàn)改善的代碼性能的各種機(jī)制。較高級(jí)源代碼的語句和表達(dá)式被訪問。檢測(cè)到較高級(jí)源代碼包括至少一個(gè)指定方面,針對(duì)該方面,相應(yīng)的代表性較低級(jí)指令的執(zhí)行效率基于執(zhí)行期間接收到的輸入數(shù)據(jù)的配置變化到必要的程度。
[0010]所訪問的較高級(jí)源代碼的語句和表達(dá)式被編譯成較低級(jí)代碼的代表性較低級(jí)指令。編譯包括為該至少一個(gè)指定方面編譯多個(gè)不同的代表性較低級(jí)指令。多個(gè)不同的代表性較低級(jí)指令中的每一個(gè)被配置成正確地實(shí)現(xiàn)該至少一個(gè)指定方面的意圖。多個(gè)不同的代表性較低級(jí)指令中的至少一個(gè)代表性較低級(jí)指令基于接收到的輸入數(shù)據(jù)的不同配置針對(duì)執(zhí)行效率被優(yōu)化。
[0011]較低級(jí)指令的執(zhí)行在運(yùn)行時(shí)處被配置。分析將被提供到較高級(jí)源代碼的至少一個(gè)指定方面的輸入數(shù)據(jù)的配置。確定為執(zhí)行而基于所提供的輸入數(shù)據(jù)的配置來優(yōu)化選自多個(gè)不同的代表性較低級(jí)指令的指定的代表性較低級(jí)指令。指定的較低級(jí)指令被綁定到可執(zhí)行代碼以實(shí)現(xiàn)較高級(jí)源代碼的至少一個(gè)指定方面的意圖。
[0012]提供本概述是為了以簡(jiǎn)化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一些概念。本概述不旨在標(biāo)識(shí)出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。
[0013]在隨后的描述中闡述,并且部分地將從本說明書中顯而易見,或可以通過本發(fā)明的實(shí)施來獲知。本發(fā)明的特征和優(yōu)點(diǎn)可通過在所附權(quán)利要求書中特別指出的工具和組合來實(shí)現(xiàn)和獲得。本發(fā)明的這些以及其他特征、優(yōu)點(diǎn)和特征將根據(jù)以下描述和所附權(quán)利要求而變得更顯而易見,或者可通過如此后闡述的對(duì)本發(fā)明的實(shí)踐而獲知。
[0014]附圖簡(jiǎn)沭
[0015]為了描述可以獲得本發(fā)明的上文所列舉的及其他優(yōu)點(diǎn)和特征的方式,將通過參考附圖中所示的本發(fā)明的各具體實(shí)施例來呈現(xiàn)上文簡(jiǎn)要描述的本發(fā)明的更具體的描述??梢岳斫猓@些附圖僅描述本發(fā)明的典型實(shí)施例,從而不被認(rèn)為是對(duì)其范圍的限制,本發(fā)明將通過使用附圖用附加特征和細(xì)節(jié)來描述和說明,在附圖中:
[0016]圖1A示出了促成在運(yùn)行時(shí)處綁定可執(zhí)行代碼的示例計(jì)算機(jī)架構(gòu)。
[0017]圖1B示出使用較低級(jí)代碼的多個(gè)版本來在運(yùn)行時(shí)處綁定可執(zhí)行代碼。
[0018]圖1C示出使用抽象接口來在運(yùn)行時(shí)處綁定可執(zhí)行代碼。
[0019]圖2示出了用于在運(yùn)行時(shí)處綁定可執(zhí)行代碼的示例方法的流程圖。
[0020]詳細(xì)描沭
[0021]本發(fā)明涉及用于在運(yùn)行時(shí)綁定可執(zhí)行代碼的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。本發(fā)明的實(shí)施例包括供編譯器和運(yùn)行時(shí)進(jìn)行互操作以基于運(yùn)行時(shí)信息來實(shí)現(xiàn)改善的代碼性能的各種機(jī)制。較高級(jí)源代碼的語句和表達(dá)式被訪問。檢測(cè)到較高級(jí)源代碼包括至少一個(gè)指定方面,針對(duì)該指定方面,相應(yīng)的代表性較低級(jí)指令的執(zhí)行效率基于執(zhí)行期間接收到的輸入數(shù)據(jù)的配置變化到必要的程度。
[0022]所訪問的較高級(jí)源代碼的語句和表達(dá)式被編譯成較低級(jí)代碼的代表性較低級(jí)指令。編譯包括為該至少一個(gè)指定方面編譯多個(gè)不同的代表性較低級(jí)指令。多個(gè)不同的代表性較低級(jí)指令中的每一個(gè)被配置以正確地實(shí)現(xiàn)該至少一個(gè)指定方面的意圖。多個(gè)不同的代表性較低級(jí)指令中的至少一個(gè)代表性較低級(jí)指令基于接收到的輸入數(shù)據(jù)的不同配置針對(duì)執(zhí)行效率被優(yōu)化。
[0023]較低級(jí)指令的執(zhí)行在運(yùn)行時(shí)處被配置。分析將被提供到較高級(jí)源代碼的至少一個(gè)指定方面的輸入數(shù)據(jù)的配置。確定為執(zhí)行而基于所提供的輸入數(shù)據(jù)的配置來優(yōu)化選自多個(gè)不同的代表性較低級(jí)指令的指定的代表性較低級(jí)指令。指定的較低級(jí)指令被綁定到可執(zhí)行代碼以實(shí)現(xiàn)較高級(jí)源代碼的至少一個(gè)指定方面的意圖。
[0024]本發(fā)明的各實(shí)施例可包括或利用專用或通用計(jì)算機(jī),該專用或通用計(jì)算機(jī)包括諸如舉例而言一個(gè)或多個(gè)處理器和系統(tǒng)存儲(chǔ)器的計(jì)算機(jī)硬件,如以下更詳細(xì)討論的。本發(fā)明范圍內(nèi)的各實(shí)施例還包括用于承載或存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計(jì)算機(jī)可讀介質(zhì)。這樣的計(jì)算機(jī)可讀介質(zhì)可以是可由通用或?qū)S糜?jì)算機(jī)系統(tǒng)訪問的任何可用介質(zhì)。存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)。承載計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實(shí)施例可包括至少兩種顯著不同的計(jì)算機(jī)可讀介質(zhì):計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)和傳輸介質(zhì)。
[0025]計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)包括RAM、ROM、EEPROM、CD-ROM、固態(tài)驅(qū)動(dòng)器(SSD )(如基于RAM)、閃存、相變存儲(chǔ)器(PCM)、其他類型的存儲(chǔ)器、其他光盤存儲(chǔ)、磁盤存儲(chǔ)或其他磁存儲(chǔ)設(shè)備、或可用于存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜?jì)算機(jī)訪問的任何其他介質(zhì)。
[0026]“網(wǎng)絡(luò)”被定義為允許在計(jì)算機(jī)系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳輸電子數(shù)據(jù)的一個(gè)或多個(gè)數(shù)據(jù)鏈路。當(dāng)信息通過網(wǎng)絡(luò)或另一個(gè)通信連接(硬連線、無線、或者硬連線或無線的組合)傳輸或提供給計(jì)算機(jī)時(shí),該計(jì)算機(jī)將該連接適當(dāng)?shù)匾暈閭鬏斀橘|(zhì)。傳輸介質(zhì)可包括可用于攜帶計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜?jì)算機(jī)訪問的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。上述的組合也應(yīng)被包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。
[0027]此外,在到達(dá)各種計(jì)算機(jī)系統(tǒng)組件之后,計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置可從傳輸介質(zhì)自動(dòng)傳輸?shù)接?jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)(或反之亦然)。例如,通過網(wǎng)絡(luò)或數(shù)據(jù)鏈接接收到的計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可被緩存在網(wǎng)絡(luò)接口模塊(例如,“NIC”)內(nèi)的RAM中,然后最終被傳輸?shù)接?jì)算機(jī)系統(tǒng)RAM和/或計(jì)算機(jī)系統(tǒng)處的較不易失性的計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)。因而,應(yīng)當(dāng)理解,計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)可被包括在還利用(甚至主要利用)傳輸介質(zhì)的計(jì)算機(jī)系統(tǒng)組件中。
[0028]計(jì)算機(jī)可執(zhí)行指令例如包括,當(dāng)在處理器處執(zhí)行時(shí)使通用計(jì)算機(jī)、專用計(jì)算機(jī)、或?qū)S锰幚碓O(shè)備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。計(jì)算機(jī)可執(zhí)行指令例如可以是二進(jìn)制代碼、諸如匯編語言之類的中間格式指令或者甚至是源代碼。盡管用結(jié)構(gòu)特征和/或方法動(dòng)作專用的語言描述了本主題,但可以理解,所附權(quán)利要求書中定義的主題不必限于上述特征或動(dòng)作。更具體而言,上述特征和動(dòng)作是作為實(shí)現(xiàn)權(quán)利要求的示例形式而公開的。
[0029]本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可以在具有許多類型的計(jì)算機(jī)系統(tǒng)配置的網(wǎng)絡(luò)計(jì)算環(huán)境中實(shí)踐,這些計(jì)算機(jī)系統(tǒng)配置包括具有以下一個(gè)或多個(gè)的組合:個(gè)人計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、消息處理器、手持式設(shè)備、多處理器系統(tǒng)(包括有一個(gè)或多個(gè)中央處理單元(“CPUs”)以及例如圖形處理單元(“GPUs”)或加速器的一個(gè)或多個(gè)協(xié)作處理器的系統(tǒng))、基于微處理器的或可編程消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、移動(dòng)電話、PDA、尋呼機(jī)、路由器、交換機(jī)等等。本發(fā)明也可在其中通過網(wǎng)絡(luò)鏈接(或者通過硬連線數(shù)據(jù)鏈路、無線數(shù)據(jù)鏈路,或者通過硬連線和無線數(shù)據(jù)鏈路的組合)的本地和遠(yuǎn)程計(jì)算機(jī)系統(tǒng)兩者都執(zhí)行任務(wù)的分布式系統(tǒng)環(huán)境中實(shí)施。在分布式系統(tǒng)環(huán)境中,程序模塊可以位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備二者中。
[0030]本發(fā)明的實(shí)施例包括對(duì)指定代碼方面的后綁定以改善執(zhí)行性能。運(yùn)行時(shí)基于運(yùn)行時(shí)信息動(dòng)態(tài)地綁定較低級(jí)代碼以優(yōu)化較高級(jí)算法的執(zhí)行。對(duì)執(zhí)行性能有必要(例如,較高)影響的較高級(jí)算法的各方面可以是后綁定的目標(biāo)。通過對(duì)對(duì)執(zhí)行性能有必要影響的各方面使用后綁定可以用最小的運(yùn)行時(shí)間成本實(shí)現(xiàn)改善的性能。
[0031]可以使用各種各樣的動(dòng)態(tài)綁定技術(shù)。在一些實(shí)施例中,為較高級(jí)方面生成可執(zhí)行代碼的多個(gè)不同版本。這多個(gè)不同版本中的每一個(gè)包括正確地實(shí)現(xiàn)該較高級(jí)方面的較低級(jí)代碼。為執(zhí)行而基于與該較高級(jí)方面相對(duì)應(yīng)的輸入數(shù)據(jù)的不同配置來優(yōu)化多個(gè)不同版本中的每一個(gè)。在運(yùn)行時(shí),基于接收到的輸入數(shù)據(jù)選擇較低級(jí)代碼的經(jīng)優(yōu)化版本。
[0032]在其他實(shí)施例中,生成用于較高級(jí)方面的抽象接口。在運(yùn)行時(shí)處,較高級(jí)方面經(jīng)優(yōu)化的具體實(shí)現(xiàn)是基于接收到的輸入數(shù)據(jù)被綁定至抽象接口的。
[0033]多種多樣的不同的較高級(jí)方面可能對(duì)可執(zhí)行代碼性能具有必要影響,包括但不限于:緩沖器混疊和邏輯線程索引映射。本發(fā)明的各實(shí)施例可用于通過在運(yùn)行時(shí)處基于運(yùn)行時(shí)輸入數(shù)據(jù)綁定可執(zhí)行代碼,來優(yōu)化這些以及其他較高級(jí)方面的執(zhí)行。
[0034]圖1示出了促成在運(yùn)行時(shí)處綁定可執(zhí)行代碼的示例計(jì)算機(jī)架構(gòu)100。參考圖1,計(jì)算機(jī)架構(gòu)100包括編譯器109和運(yùn)行時(shí)103。所描繪的組件中的每一個(gè)通過系統(tǒng)總線(或作為系統(tǒng)總線的一部分)和/或諸如例如局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”)以及甚至因特網(wǎng)等網(wǎng)絡(luò)(或作為網(wǎng)絡(luò)的一部分)彼此連接。因此,所描繪的組件中的每一個(gè)以及任何其他連接的計(jì)算機(jī)系統(tǒng)和它們的組件都能夠創(chuàng)建消息相關(guān)數(shù)據(jù)并通過系統(tǒng)總線和/或網(wǎng)絡(luò)交換消息相關(guān)數(shù)據(jù)(例如,網(wǎng)際協(xié)議(“IP”)數(shù)據(jù)報(bào)和利用IP數(shù)據(jù)報(bào)的其他更高層協(xié)議,諸如傳輸控制協(xié)議(“TCP,,)、超文本傳輸協(xié)議(“HTTP”)、簡(jiǎn)單郵件傳輸協(xié)議(“SMTP,,)等)。
[0035]如所描繪的,編譯器109包括代碼分析器101 (例如,編譯器前端)和代碼生成器102 (例如,編譯器后端)。代碼分析器101被配置成接收較高級(jí)代碼(例如,用C++,擴(kuò)展用于并行環(huán)境的C++,Visual Basic等等編寫)的語句和表達(dá)式。代碼分析器101可以分析較高級(jí)代碼的語句和表達(dá)式以標(biāo)識(shí)對(duì)代表性較低級(jí)指令的性能有必要影響的方面。例如,代碼分析器101可確定緩沖器使用(其可被混疊或不被混疊)對(duì)性能有必要影響,或確定物理到邏輯線程映射(其可為直接或間接)對(duì)性能有必要影響?;谶\(yùn)行時(shí)數(shù)據(jù)輸入,表示標(biāo)識(shí)出的方面的經(jīng)優(yōu)化的較低級(jí)代碼可以變化。如此,代碼分析器101向代碼生成器102指示標(biāo)識(shí)出的任何方面。
[0036]代碼生成器102被配置成接收較高級(jí)代碼的語句和表達(dá)式以及對(duì)代表性較低級(jí)指令的性能有必要影響的標(biāo)識(shí)出的方面。代碼生成器102可以從語句和表達(dá)式以及標(biāo)識(shí)出的方面生成正確地實(shí)現(xiàn)必要方面的多個(gè)不同的較低級(jí)指令(例如,DirectX/高級(jí)著色器語言(“HLSL”)字節(jié)碼)??梢葬槍?duì)接收到的運(yùn)行時(shí)數(shù)據(jù)的指定配置而優(yōu)化多個(gè)不同的較低級(jí)指令中的每一個(gè)。例如,當(dāng)使用緩沖器時(shí),可以針對(duì)非混疊的緩沖器訪問而優(yōu)化較低級(jí)代碼的一個(gè)版本,而較低級(jí)代碼的另一個(gè)版本對(duì)于在輸入/輸出緩沖器間實(shí)現(xiàn)通用混疊情景而言可以是非最優(yōu)的。類似地,當(dāng)使用物理到邏輯線程映射時(shí),可以針對(duì)直接映射而優(yōu)化較低級(jí)代碼的一個(gè)版本,而較低級(jí)代碼的另一個(gè)版本可被提供來處理更通用但效率更低的間接映射情況。
[0037]一般而言,運(yùn)行時(shí)103被配置成執(zhí)行較低級(jí)代碼來實(shí)現(xiàn)較高級(jí)代碼的語句和表達(dá)式的意圖。如所描述的,運(yùn)行時(shí)103包括輸入分析器104。分析器104被配置成確定要被提供來標(biāo)識(shí)方面的輸入數(shù)據(jù)的配置。輸入分析器104可確定為運(yùn)行時(shí)103中的執(zhí)行而基于輸入數(shù)據(jù)的配置優(yōu)化指定的較低級(jí)指令。例如,可以為混疊或非混疊的緩沖器訪問或者直接或間接的物理到邏輯線程映射選擇代表性較低級(jí)代碼。運(yùn)行時(shí)103可以將指定的較低級(jí)指令綁定到可執(zhí)行代碼以供在運(yùn)行時(shí)103中執(zhí)行。
[0038]圖2示出了用于在運(yùn)行時(shí)處綁定可執(zhí)行代碼的示例方法200的流程圖。方法200將參考計(jì)算機(jī)架構(gòu)100的組件和數(shù)據(jù)來描述。
[0039]方法200包括訪問較高級(jí)源代碼的語句和表達(dá)式的動(dòng)作(動(dòng)作201 )。例如,代碼分析器101可以訪問較高級(jí)代碼111 (例如,擴(kuò)展用于并行環(huán)境的C++)的語句和表達(dá)式112。方法200包括檢測(cè)較高級(jí)源代碼包括至少一個(gè)指定方面的動(dòng)作,針對(duì)該指定方面,相應(yīng)的代表性較低級(jí)指令的執(zhí)行效率基于執(zhí)行期間接收到的輸入數(shù)據(jù)的配置變化到必要的程度(動(dòng)作202)。例如,代碼分析器101可以檢測(cè)到代碼方面114基于對(duì)代碼方面114的輸入的配置影響代表性較低級(jí)指令的執(zhí)行效率到必要程度。
[0040]代碼分析器101向代碼生成器102指示代碼方面114。編譯器接收代碼方面114的指示。代碼生成器102還訪問較高級(jí)代碼111。
[0041]方法200包括把所訪問的較高級(jí)源代碼的語句和表達(dá)式編譯成較低級(jí)代碼的代表性較低級(jí)指令的動(dòng)作(動(dòng)作203)。例如,代碼生成器102把語句和表達(dá)式112編譯成較低級(jí)代碼(例如,DirectX/高級(jí)著色器語言(“HLSL”)字節(jié)碼)的代表性指令。
[0042]動(dòng)作203包括針對(duì)至少一個(gè)指定方面編譯多個(gè)不同的代表性較低級(jí)指令的動(dòng)作,多個(gè)不同的代表性較低級(jí)指令中的每一個(gè)被配置成正確地實(shí)現(xiàn)該至少一個(gè)指定方面的意圖,多個(gè)不同的代表性較低級(jí)指令中的至少一個(gè)基于接收到的輸入數(shù)據(jù)的不同配置針對(duì)執(zhí)行效率被進(jìn)行優(yōu)化(動(dòng)作204)。例如,代碼生成器102可以把語句表達(dá)式112編譯成代表性指令122A和122B。代表性指令122A和122B中的每一個(gè)被配置成針對(duì)不同的輸入數(shù)據(jù)配置正確地實(shí)現(xiàn)代碼方面114的意圖。針對(duì)執(zhí)行效率基于用于代碼方面114的不同輸入配置來優(yōu)化代表性指令122A和122B中的每一個(gè)。
[0043]在一些實(shí)施例中,生成較低級(jí)指令的一個(gè)或多個(gè)經(jīng)優(yōu)化的版本和更加通用的“一攬子(“catch all”)”版本。針對(duì)一特定情形(諸如,舉例而言,輸入的指定配置)優(yōu)化一個(gè)或多個(gè)經(jīng)優(yōu)化的版本中的每一個(gè)。一攬子版本處理所有其他情況。由此,該一個(gè)或多個(gè)經(jīng)優(yōu)化的版本以及該一攬子版本可以共同地處理來自原始算法的任何可能的情況。方法200包括配置較低級(jí)指令在運(yùn)行時(shí)處的執(zhí)行的動(dòng)作(動(dòng)作205)。例如,運(yùn)行時(shí)103配置可執(zhí)行代碼106在運(yùn)行時(shí)處的執(zhí)行。動(dòng)作205包括分析將被提供到較高級(jí)源代碼的至少一個(gè)指定方面的輸入數(shù)據(jù)的配置的動(dòng)作(動(dòng)作206)。例如,輸入分析器104可以分析(將要被提供給代碼方面114的)輸入數(shù)據(jù)107。
[0044]動(dòng)作205包括確定為執(zhí)行而基于所提供的輸入數(shù)據(jù)的配置來優(yōu)化選自多個(gè)不同的代表性較低級(jí)指令的指定的代表性較低級(jí)指令的動(dòng)作(動(dòng)作207)。例如,輸入分析器104(或運(yùn)行時(shí)103中的一些其他模塊)可以確定代表性指令122B基于輸入數(shù)據(jù)107的配置針對(duì)執(zhí)行被優(yōu)化。
[0045]動(dòng)作205包括把指定的較低級(jí)指令綁定到可執(zhí)行代碼以實(shí)現(xiàn)較高級(jí)源代碼的至少一個(gè)指定方面的意圖的動(dòng)作(動(dòng)作208)。
[0046]例如,運(yùn)行時(shí)103可以將代表性代碼122B綁定108到可執(zhí)行代碼106以實(shí)現(xiàn)代碼方面114的意圖。
[0047]可以用各種方法生成多個(gè)不同的代表性較低級(jí)指令。在運(yùn)行時(shí)綁定代表性較低級(jí)指令也可以改變。轉(zhuǎn)至圖1B,圖1B示出使用較低級(jí)代碼的多個(gè)版本來在運(yùn)行時(shí)綁定可執(zhí)行代碼。如圖1B所描述的,代碼生成器102生成包括代表性指令122A的較低級(jí)代碼121A和包括代表性指令122B的較低級(jí)代碼121B。在運(yùn)行時(shí),基于對(duì)輸入數(shù)據(jù)107的分析,運(yùn)行時(shí)103可以將較低級(jí)代碼121B作為可執(zhí)行代碼106來啟動(dòng)109。
[0048]使用較低級(jí)代碼的多個(gè)版本的實(shí)施例包括從擴(kuò)展用于并行環(huán)境的C++代碼生成多個(gè)HLSL著色器。例如,在緩沖器堆疊的情況下,代碼生成器102可以生成假設(shè)在運(yùn)行時(shí)不存在堆疊(且沒有針對(duì)堆疊優(yōu)化)的一個(gè)著色器版本(例如,代表性指令122A),以及處理緩沖器的堆疊的另一個(gè)著色器版本(例如代表性指令122B)。在運(yùn)行時(shí),運(yùn)行時(shí)103檢查到內(nèi)核的緩沖器參數(shù)間的堆疊并且調(diào)用合適的著色器版本。
[0049]在線程映射的情況下,代碼生成器102可以生成假設(shè)存在直接線程映射(且針對(duì)直接線程映射優(yōu)化)的一個(gè)著色器版本,以及處理間接線程映射的另一個(gè)著色器。在運(yùn)行時(shí),運(yùn)行時(shí)103檢查直接/間接的線程映射并且調(diào)用合適的著色器版本。
[0050]轉(zhuǎn)至圖1C,圖1C示出使用抽象接口在運(yùn)行時(shí)綁定可執(zhí)行代碼。如圖1C所描述的,代碼生成器102生成包括抽象接口 124的較低級(jí)代碼121C。代表性指令122A和122B是抽象接口 124的具體實(shí)現(xiàn)。代表性指令122A和122B可以自先前的編譯起就存在或者同抽象接口 124—同生成。代表性指令122A和122B表示可動(dòng)態(tài)地鏈接以在運(yùn)行時(shí)處實(shí)現(xiàn)抽象接口 124的較低級(jí)代碼的不同部分。在運(yùn)行時(shí),運(yùn)行時(shí)103把較低級(jí)代碼121C作為可執(zhí)行代碼106來啟動(dòng)112。基于對(duì)輸入數(shù)據(jù)107的分析,運(yùn)行時(shí)103可以將代表性指令122B綁定到可執(zhí)行代碼106以提供抽象接口 124的具體實(shí)現(xiàn)。
[0051]使用抽象接口的實(shí)施例包括DirectX/HLSL定義可以在HLSL代碼中使用的抽象接口。把接口綁定到真實(shí)代碼可以延遲到運(yùn)行時(shí)。例如,在物理到邏輯線程索引映射上下文的情況下,代碼生成器102可生成利用抽象接口把物理線程IDs映射到C++邏輯線程IDs的HLSL字節(jié)碼。基于在運(yùn)行時(shí)處指定的真實(shí)計(jì)算機(jī)域,把抽象接口綁定到直接映射代碼(例如,代表性指令122A)或間接映射代碼(例如,代表性指令122B)
[0052]在緩沖器混疊的情況下,代碼生成器102可以生成利用抽象接口在運(yùn)行時(shí)處理緩沖器的HLSL字節(jié)碼。抽象接口基于是否在運(yùn)行時(shí)檢測(cè)到內(nèi)核的緩沖器參數(shù)間的混疊而被綁定到使用經(jīng)混疊的緩沖器的代碼或使用非混疊的緩沖器的代碼。
[0053]進(jìn)一步的實(shí)施例包括針對(duì)用戶代碼中存在的依賴于硬件的特征生成多個(gè)著色器。一個(gè)著色器可以利用硬件特征而另一個(gè)著色器可以使用較低效率的后退實(shí)現(xiàn)。在運(yùn)行時(shí),基于在運(yùn)行時(shí)處確定的目標(biāo)處理器的硬件能力選擇合適的著色器以供執(zhí)行。
[0054]附加實(shí)施例包括生成多個(gè)著色器,每個(gè)著色器改變對(duì)代碼生成的優(yōu)化選擇,并相應(yīng)地改變資源要求。在運(yùn)行時(shí)處,可以基于目標(biāo)硬件上的資源可用性選擇合適的著色器以供執(zhí)行。當(dāng)硬件資源(諸如舉例而言寄存器的數(shù)目)跨硬件變化時(shí),這些附加的實(shí)施例可以是有用的。
[0055]還可以生成著色器的多個(gè)版本以處理不同的運(yùn)行時(shí)配置,諸如舉例而言,執(zhí)行硬件的能力。例如,實(shí)施例包括為不同的目標(biāo)處理器生成多個(gè)著色器(可執(zhí)行代碼的版本)。在運(yùn)行時(shí)處,基于為運(yùn)行選擇的目標(biāo)處理器來選擇合適的著色器以供執(zhí)行。
[0056]用于處理不同運(yùn)行時(shí)配置的其他實(shí)施例包括生成多個(gè)著色器,這些著色器中的一些包括以較慢的執(zhí)行為代價(jià)來輔助剖析/調(diào)試的工具植入代碼(instrumentation code)。這為運(yùn)行工具植入的代碼或非工具植入的代碼提供了運(yùn)行時(shí)選擇,而無需重新編譯。在運(yùn)行時(shí)處,可以基于是否選擇剖析/調(diào)試來選擇合適的著色器。
[0057]抽象接口可以與多個(gè)代碼版本結(jié)合使用。一些輸入接著由不同的接口實(shí)現(xiàn)來服務(wù),而其他輸入由不采用接口或采用不同接口的完全不同的代碼版本來服務(wù)。
[0058]本發(fā)明可具體化為其他具體形式而不背離其精神或本質(zhì)特征。所描述的實(shí)施例在所有方面都應(yīng)被認(rèn)為僅是說明性而非限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求書而非前述描述指示。落入權(quán)利要求書的等效方案的含義和范圍內(nèi)的所有改變應(yīng)被權(quán)利要求書的范圍所涵蓋。
【權(quán)利要求】
1.一種在計(jì)算機(jī)系統(tǒng)處用于在運(yùn)行時(shí)處綁定代碼以改善性能的方法,所述計(jì)算機(jī)系統(tǒng)包括處理器和系統(tǒng)存儲(chǔ)器,所述計(jì)算機(jī)系統(tǒng)還包括編譯器和運(yùn)行時(shí),所述編譯器被配置成把較高級(jí)源代碼的語句和表達(dá)式編譯成較低級(jí)代碼的代表性較低級(jí)指令,所述運(yùn)行時(shí)被配置成執(zhí)行可執(zhí)行代碼,所述方法包括: 訪問較高級(jí)源代碼的語句和表達(dá)式的動(dòng)作; 檢測(cè)到較高級(jí)源代碼包括至少一個(gè)指定方面的動(dòng)作,針對(duì)所述指定方面,相應(yīng)的代表性較低級(jí)指令的執(zhí)行效率基于執(zhí)行期間接收到的輸入數(shù)據(jù)的配置變化到必要的程度; 把所訪問的較高級(jí)源代碼的語句和表達(dá)式編譯成較低級(jí)代碼的代表性較低級(jí)指令的動(dòng)作,包括: 針對(duì)所述至少一個(gè)指定方面編譯多個(gè)不同的代表性較低級(jí)指令的動(dòng)作,所述多個(gè)不同的代表性較低級(jí)指令中的每一個(gè)被配置成正確地實(shí)現(xiàn)所述至少一個(gè)指定方面的意圖,所述多個(gè)不同的代表性較低級(jí)指令中的至少一個(gè)基于接收到的輸入數(shù)據(jù)的不同配置針對(duì)執(zhí)行效率被進(jìn)行優(yōu)化; 配置所述較低級(jí)指令在運(yùn)行時(shí)的執(zhí)行的動(dòng)作,包括: 分析將被提供到所述較高級(jí)源代碼的所述至少一個(gè)指定方面的輸入數(shù)據(jù)的配置的動(dòng)作; 確定為執(zhí)行而基于所提供的輸入數(shù)據(jù)的配置來優(yōu)化選自多個(gè)不同的代表性較低級(jí)指令的指定的代表性較低級(jí)指令的動(dòng)作;以及 把所述指定的較低級(jí)指令綁定到可執(zhí)行代碼以實(shí)現(xiàn)所述較高級(jí)源代碼的所述至少一個(gè)指定方面的意圖的動(dòng)作 。
2.如權(quán)利要求1所述的方法,其特征在于,針對(duì)所述至少一個(gè)指定方面編譯多個(gè)不同的代表性較低級(jí)指令的動(dòng)作包括: 編譯代表性較低級(jí)指令的一個(gè)版本的動(dòng)作,為了在運(yùn)行時(shí)處與不使用緩沖器混疊的輸入數(shù)據(jù)一起使用而優(yōu)化所述代表性較低級(jí)指令的一個(gè)版本;以及 編譯代表性較低級(jí)指令的另一個(gè)版本的動(dòng)作,所述代表性較低級(jí)指令的另一個(gè)版本用于在運(yùn)行時(shí)處與使用緩沖器混疊的輸入數(shù)據(jù)一起使用。
3.如權(quán)利要求2所述的方法,其特征在于,其中分析將被提供到所述較高級(jí)源代碼的所述至少一個(gè)指定方面的輸入數(shù)據(jù)的配置的動(dòng)作包括確定所述輸入數(shù)據(jù)不使用緩沖器混疊的動(dòng)作;并且 其中把所述指定的較低級(jí)指令綁定到可執(zhí)行代碼以實(shí)現(xiàn)所述較高級(jí)源代碼的所述至少一個(gè)指定方面的意圖的動(dòng)作包括在運(yùn)行時(shí)處把所述代表性較低級(jí)指令的一個(gè)版本綁定到可執(zhí)行代碼的動(dòng)作。
4.如權(quán)利要求1所述的方法,其特征在于,其中針對(duì)所述至少一個(gè)指定方面編譯多個(gè)不同的代表性較低級(jí)指令的動(dòng)作包括: 編譯抽象接口以表示所述至少一個(gè)指定方面的動(dòng)作;以及 編譯可在運(yùn)行時(shí)處動(dòng)態(tài)地鏈接到所述抽象接口的較低級(jí)代碼的多個(gè)不同部分的動(dòng)作。
5.如權(quán)利要求4所述的方法,其特征在于,其中編譯抽象接口以表示所述至少一個(gè)指定方面的動(dòng)作包括編譯物理到邏輯線程ID映射接口的動(dòng)作;以及 其中編譯可在運(yùn)行時(shí)處動(dòng)態(tài)地鏈接到所述抽象接口的較低級(jí)代碼的多個(gè)不同部分的動(dòng)作包括: 為直接的物理到邏輯線程ID映射編譯較低級(jí)代碼的一部分的動(dòng)作;以及 為更通用的間接的物理到邏輯線程ID映射編譯較低級(jí)代碼的另一部分的動(dòng)作。
6.一種供在計(jì)算機(jī)系統(tǒng)處使用的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算系統(tǒng)包括編譯器和運(yùn)行時(shí),所述編譯器被配置把較高級(jí)源代碼的語句和表達(dá)式編譯成較低級(jí)代碼的代表性較低級(jí)指令,所述運(yùn)行時(shí)被配置執(zhí)行可執(zhí)行代碼,所述計(jì)算機(jī)程序產(chǎn)品用于一種用于在運(yùn)行時(shí)處綁定代碼以改善性能的方法,所述計(jì)算機(jī)程序產(chǎn)品包括其上存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令的一個(gè)或多個(gè)計(jì)算機(jī)存儲(chǔ)設(shè)備,所述指令在由處理器執(zhí)行時(shí),使得所述計(jì)算機(jī)系統(tǒng)執(zhí)行所述方法,所述方法包括以下: 訪問較高級(jí)源代碼的語句和表達(dá)式; 檢測(cè)到所述較高級(jí)源代碼包括至少一個(gè)指定方面,針對(duì)所述指定方面,相應(yīng)的代表性較低級(jí)指令的執(zhí)行效率基于執(zhí)行期間接收到的輸入數(shù)據(jù)的配置變化到必要的程度; 把所訪問的較高級(jí)源代碼的語句和表達(dá)式編譯成較低級(jí)代碼的代表性較低級(jí)指令,包括: 針對(duì)至少一個(gè)指定方面編譯多個(gè)不同的代表性較低級(jí)指令,所述多個(gè)不同的代表性較低級(jí)指令中的每一個(gè)被配置成正確地實(shí)現(xiàn)所述至少一個(gè)指定方面的意圖,所述多個(gè)不同的代表性較低級(jí)指令中的每一個(gè)基于接收到的輸入數(shù)據(jù)的不同配置針對(duì)執(zhí)行效率被進(jìn)行優(yōu)化; 配置所述較低級(jí)指令在運(yùn)行時(shí)的執(zhí)行,包括: 分析將被提供到所述較高級(jí)源代碼的所述至少一個(gè)指定方面的輸入數(shù)據(jù)的配置; 確定為執(zhí)行而基于所提供的輸入數(shù)據(jù)的配置來優(yōu)化選自所述多個(gè)不同的代表性較低級(jí)指令的指定的代表性較低級(jí)指令;以及 把所述指定的較低級(jí)指令綁定到可執(zhí)行代碼以實(shí)現(xiàn)所述較高級(jí)源代碼的所述至少一個(gè)指定方面的意圖。
7.如權(quán)利要求6所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,其中在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)把所訪問的較高級(jí)源代碼的語句和表達(dá)式編譯成較低級(jí)代碼的代表性較低級(jí)指令的計(jì)算機(jī)可執(zhí)行指令包括在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)把C++代碼編譯成高級(jí)著色器語言(“HLSL”)字節(jié)碼的計(jì)算機(jī)可執(zhí)行指令,所述C++代碼包括用于并行環(huán)境的擴(kuò)展。
8.如權(quán)利要求7所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,其中在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)針對(duì)所述至少一個(gè)指定方面編譯多個(gè)不同的代表性較低級(jí)指令的計(jì)算機(jī)可執(zhí)行指令包括在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)編譯用于所述C++代碼的著色器的多個(gè)不同版本的計(jì)算機(jī)可執(zhí)行指令,針對(duì)輸入數(shù)據(jù)的特定配置優(yōu)化所述著色器的多個(gè)不同版本中的至少一個(gè)。
9.如權(quán)利要求6所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,其中在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)針對(duì)所述至少一個(gè)指定方面編譯多個(gè)不同的代表性較低級(jí)指令的計(jì)算機(jī)可執(zhí)行指令包括在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令: 編譯代表性較低級(jí)指令的一個(gè)版本,為了在運(yùn)行時(shí)處與不使用緩沖器混疊的輸入數(shù)據(jù)一起使用而優(yōu)化所述代表性較低級(jí)指令的一個(gè)版本;以及 編譯代表性較低級(jí)指令的另一個(gè)版本,所述代表性較低級(jí)指令的另一個(gè)版本用于在運(yùn)行時(shí)處與使用緩沖器混疊的輸入數(shù)據(jù)一起使用。
10.如權(quán)利要求9所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,其中在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)分析將被提供到所述較高級(jí)源代碼的所述至少一個(gè)指定方面的輸入數(shù)據(jù)的配置的計(jì)算機(jī)可執(zhí)行指令包括在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)確定所述輸入數(shù)據(jù)不使用緩沖器混疊的計(jì)算機(jī)可執(zhí)行指令;以及 其中在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)把所述指定的較低級(jí)指令綁定到可執(zhí)行代碼以實(shí)現(xiàn)所述較高級(jí)源代碼的所述至少一個(gè)指定方面的意圖的計(jì)算機(jī)可執(zhí)行指令包括在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)在運(yùn)行時(shí)處把所述代表性較低級(jí)指令的一個(gè)版本綁定到可執(zhí)行代碼的計(jì)算機(jī)可執(zhí)行指令。
11.如權(quán)利要求9所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,其中所述代表性較低級(jí)指令的一個(gè)版本和所述代表性較低級(jí)指令的另一個(gè)版本二者均是高級(jí)著色器語言(“HLSL”)著色器。
12.如權(quán)利要求6所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,其中在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)針對(duì)所述至少一個(gè)指定方面編譯多個(gè)不同的代表性較低級(jí)指令的計(jì)算機(jī)可執(zhí)行指令包括在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令: 編譯抽象接口以表示所述至少一個(gè)指定方面;以及 編譯可在運(yùn)行時(shí)處動(dòng)態(tài)地鏈接到所述抽象接口的較低級(jí)代碼的多個(gè)不同部分。
13.如權(quán)利要求12所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,其中在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)編譯抽象接口以表示所述至少一個(gè)指定方面的計(jì)算機(jī)可執(zhí)行指令包括在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)編譯物理到邏輯線程ID映射接口的計(jì)算機(jī)可執(zhí)行指令;以及 其中在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)編譯可在運(yùn)行時(shí)處動(dòng)態(tài)地鏈接到所述抽象接口的較低級(jí)代碼的多個(gè)不同部分的計(jì)算機(jī)可執(zhí)行指令包括在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令:` 為直接的物理到邏輯線程ID映射編譯較低級(jí)代碼的一部分;以及 為更通用的間接的物理到邏輯線程ID映射編譯較低級(jí)代碼的另一部分。
14.如權(quán)利要求12所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,其中在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)分析將被提供到所述較高級(jí)源代碼的所述至少一個(gè)指定方面的輸入數(shù)據(jù)的配置的計(jì)算機(jī)可執(zhí)行指令包括在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)確定輸入數(shù)據(jù)使用直接的物理到邏輯線程ID映射的計(jì)算機(jī)可執(zhí)行指令;以及 其中在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)把指定的較低級(jí)指令綁定到可執(zhí)行代碼以實(shí)現(xiàn)所述較高級(jí)源代碼的所述至少一個(gè)方面的意圖的計(jì)算機(jī)可執(zhí)行指令包括在執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)在運(yùn)行時(shí)處把較低級(jí)代碼的一部分動(dòng)態(tài)鏈接到物理到邏輯線程ID映射接口的計(jì)算機(jī)可執(zhí)行指令。
15.一種計(jì)算機(jī)系統(tǒng),所述計(jì)算機(jī)系統(tǒng)包括: 一個(gè)或多個(gè)處理器; 系統(tǒng)存儲(chǔ)器;以及 一個(gè)或多個(gè)計(jì)算機(jī)存儲(chǔ)設(shè)備,所述一個(gè)或多個(gè)計(jì)算機(jī)存儲(chǔ)設(shè)備具有存儲(chǔ)在其上的表示代碼分析器、編譯器和運(yùn)行時(shí)的計(jì)算機(jī)可執(zhí)行指令,其中所述代碼分析器被配置為: 訪問較高級(jí)源代碼的語句和表達(dá)式;檢測(cè)到所述較高級(jí)源代碼包括至少一個(gè)指定方面,所述指定方面在運(yùn)行期間基于運(yùn)行時(shí)配置變化到必要的程度;以及 向編譯器指示所標(biāo)識(shí)的至少一個(gè)方面; 其中所述編譯器被配置為: 接收所標(biāo)識(shí)的至少一個(gè)方面的指示; 訪問較高級(jí)代碼的語句和表達(dá)式;以及 把所訪問的較高級(jí)源代碼的語句和表達(dá)式編譯成較低級(jí)代碼的代表性較低級(jí)指令,包括: 針對(duì)所述至少一個(gè)指定方面編譯多個(gè)不同的代表性較低級(jí)指令,所述多個(gè)不同的代表性較低級(jí)指令中的每一個(gè)被配置成正確地實(shí)現(xiàn)所述至少一個(gè)指定方面的意圖,所述多個(gè)不同的代表性較低級(jí)指令中的每一個(gè)被配置用于在不同的運(yùn)行時(shí)配置上執(zhí)行;以及其中所述運(yùn)行時(shí)被配置為: 分析將在執(zhí)行期間使用的運(yùn)行時(shí)配置; 確定選自多個(gè)不同的代表性較低級(jí)指令的指定的代表性較低級(jí)指令被配置用于基于所提供的運(yùn)行時(shí)配置來執(zhí)行; 以及 把所述指定的較低級(jí)指令綁定到可執(zhí)行代碼以實(shí)現(xiàn)所述較高級(jí)源代碼的所述至少一個(gè)指定方面的意圖。
【文檔編號(hào)】G06F9/30GK103620553SQ201280028424
【公開日】2014年3月5日 申請(qǐng)日期:2012年5月29日 優(yōu)先權(quán)日:2011年6月10日
【發(fā)明者】A·K·阿加瓦爾, W·朱, Y·萊瓦諾尼 申請(qǐng)人:微軟公司