亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

控制準(zhǔn)獨(dú)立點(diǎn)引導(dǎo)的推測式多線程運(yùn)行的制作方法

文檔序號:6421246閱讀:148來源:國知局
專利名稱:控制準(zhǔn)獨(dú)立點(diǎn)引導(dǎo)的推測式多線程運(yùn)行的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般地涉及信息處理系統(tǒng),具體而言,涉及為推測式多線程運(yùn)行(multithreading)派生推測式線程。
背景技術(shù)
為了提高例如包含了微處理器的信息處理系統(tǒng)的性能,硬件和軟件技術(shù)都被采用了。一種已經(jīng)被用于改善處理器性能的軟件方法被稱為“多線程運(yùn)行”。在多線程運(yùn)行中,指令流被分成能夠并行執(zhí)行的多個指令流。在純軟件多線程運(yùn)行方法,例如,時間復(fù)用多線程運(yùn)行或者事件轉(zhuǎn)換(switch-on-event)多線程運(yùn)行中,在同一共享的處理器上交替地執(zhí)行該多個指令流。
多線程運(yùn)行日益增長地通過硬件來支持。例如,在一種方法中,例如單芯片多處理器(CMP)系統(tǒng)的多處理器系統(tǒng)中的多個處理器,可同時工作,每個處理器工作于多個線程中的一個。在另一種被稱為同步多線程運(yùn)行(SMT)的方法中,使得單個物理處理器作為多個邏輯處理器出現(xiàn)以運(yùn)行系統(tǒng)和用戶程序。也就是說,每個邏輯處理器維持一整套的體系結(jié)構(gòu)狀態(tài),但是共享該物理處理器的幾乎所有其它資源,例如,高速緩存、執(zhí)行單元、分支預(yù)測器控制邏輯以及總線。線程同步執(zhí)行,使得比時間復(fù)用多線程運(yùn)行或事件轉(zhuǎn)換多線程運(yùn)行更好地利用共享資源。
對于那些為多個線程提供硬件支持的系統(tǒng),例如CMP和SMT多線程運(yùn)行系統(tǒng),在單線程(single-threaded)應(yīng)用程序的執(zhí)行過程中一個或者多個線程可能是空閑的。利用否則就會空閑的線程來推測地并行化該單線程應(yīng)用程序可提高執(zhí)行速度,但是常常難于確定該單線程應(yīng)用程序的哪些部分應(yīng)該由否則就會空閑的線程推測地執(zhí)行。對一部分代碼的推測式線程執(zhí)行僅當(dāng)該應(yīng)用程序的控制流最后到達(dá)那部分代碼時才有用。另外,由于與獲取數(shù)據(jù)相關(guān)的等待時間的緣故,推測式線程執(zhí)行會被延時并造成效率低下。這里所公開的方法和裝置的實(shí)施例針對與推測式多線程運(yùn)行有關(guān)的這些以及其它關(guān)注的問題。

發(fā)明內(nèi)容
根據(jù)本發(fā)明的第一個方面,提出了一種編譯軟件程序的方法。該方法包括選擇包括派生點(diǎn)和控制準(zhǔn)獨(dú)立點(diǎn)的派生對;支持對用于推測式線程的內(nèi)部值的計算;以及生成包括指令的改善的二進(jìn)制文件,所述指令包括觸發(fā)指令以使得在控制準(zhǔn)獨(dú)立點(diǎn)處派生推測式線程。
根據(jù)本發(fā)明的第二個方面,提出了一種物品,該物品包括具有多個機(jī)器可訪問的指令的機(jī)器可讀存儲介質(zhì)。其中,當(dāng)所述指令被處理器執(zhí)行時,其支持選擇包括派生點(diǎn)和控制準(zhǔn)獨(dú)立點(diǎn)的派生對;支持對用于推測式線程的內(nèi)部值的計算;以及生成包括指令的改善的二進(jìn)制文件,所述指令包括觸發(fā)指令以使得在控制準(zhǔn)獨(dú)立點(diǎn)處派生所述推測式線程。
根據(jù)本發(fā)明第三個方面,提出了一種方法。該方法包括在非推測式線程中執(zhí)行第一指令流中的一個或者多個指令;在所述第一指令流中的派生點(diǎn)處派生推測式線程,其中計算得到的在執(zhí)行第一指令流的過程中,在對派生點(diǎn)的執(zhí)行之后,到達(dá)控制準(zhǔn)獨(dú)立點(diǎn)的概率高于預(yù)定閾值;以及同時,在所述推測式線程中執(zhí)行包括第一指令流中的指令的一個子集的推測式線程指令流,所述推測式線程指令流包括所述控制準(zhǔn)獨(dú)立點(diǎn);并且執(zhí)行第一指令流中跟隨所述派生點(diǎn)之后的一個或者多個指令。
根據(jù)本發(fā)明第四個方面,提出了一種物品,包括具有多個機(jī)器可訪問的指令的機(jī)器可讀存儲介質(zhì);其中,當(dāng)所述指令被處理器執(zhí)行時,所述指令支持在非推測式線程中執(zhí)行第一指令流中的一個或者多個指令;在所述第一指令流中的派生點(diǎn)處派生推測式線程,其中計算得到的在執(zhí)行所述第一指令流的過程中,在對所述派生點(diǎn)的執(zhí)行之后,到達(dá)控制準(zhǔn)獨(dú)立點(diǎn)的概率高于預(yù)定閾值;以及同時在所述推測式線程中執(zhí)行包括所述第一指令流中的指令的一個子集的推測式線程指令流,所述推測式線程指令流包括所述控制準(zhǔn)獨(dú)立點(diǎn);并且執(zhí)行所述第一指令流中跟隨在所述派生點(diǎn)之后的一個或者多個指令。
根據(jù)本發(fā)明的第五個方面,提出了一種編譯器。該編譯器包括派生對選擇器模塊,用于選擇包括有控制準(zhǔn)獨(dú)立點(diǎn)和派生點(diǎn)的派生對,和代碼生成器,用于生成在所述派生點(diǎn)包括觸發(fā)指令的改善的二進(jìn)制文件。


本發(fā)明可參考以下示圖來理解,圖中相似的元件用相似的數(shù)字指示。這些圖并不意圖限制,而是被提供用來說明用于幫助實(shí)現(xiàn)控制準(zhǔn)獨(dú)立點(diǎn)(control-quasi-independent-points)引導(dǎo)的推測式多線程運(yùn)行的方法和裝置的優(yōu)選實(shí)施例。
圖1是流程圖,圖示了用于為控制準(zhǔn)獨(dú)立點(diǎn)引導(dǎo)的推測式多線程運(yùn)行生成指令的方法的至少一個實(shí)施例;圖2是流程圖,圖示了用于為推測式多線程運(yùn)行識別控制準(zhǔn)獨(dú)立點(diǎn)的方法的至少一個實(shí)施例;圖3是數(shù)據(jù)流圖,示出了用于為控制準(zhǔn)獨(dú)立點(diǎn)引導(dǎo)的推測式多線程運(yùn)行生成指令的方法的至少一個實(shí)施例;圖4是流程圖,圖示了軟件編譯處理的至少一個實(shí)施例;圖5是流程圖,圖示了用于生成指令以為控制準(zhǔn)獨(dú)立點(diǎn)引導(dǎo)的推測式多線程運(yùn)行預(yù)計算推測式線程的內(nèi)部(live-in)值;圖6和7是流程圖,圖示了用于利用控制準(zhǔn)獨(dú)立點(diǎn)引導(dǎo)的推測式多線程運(yùn)行和對內(nèi)部值的推測式預(yù)計算的結(jié)合來實(shí)現(xiàn)推測式多線程運(yùn)行的方法的至少一個實(shí)施例;圖8是能夠?qū)崿F(xiàn)控制準(zhǔn)獨(dú)立點(diǎn)引導(dǎo)的推測式多線程運(yùn)行的至少一個實(shí)施例的處理系統(tǒng)的方框圖。
具體實(shí)施例方式
圖1是流程圖,其圖示了用于生成指令以幫助實(shí)現(xiàn)控制準(zhǔn)獨(dú)立點(diǎn)(CQIP)引導(dǎo)的推測式多線程運(yùn)行的方法的至少一個實(shí)施例。對于方法100的至少一個實(shí)施例,生成指令以通過使用一個或者多個同步推測式線程減少單線程應(yīng)用程序的執(zhí)行時間。方法100因此通過使用所述同步推測式線程幫助實(shí)現(xiàn)了應(yīng)用程序代碼的一部分的并行化。被稱為被派生線程(spawnee thread)的推測式線程執(zhí)行由完成所述派生的線程執(zhí)行的代碼之前的指令。完成派生的線程被稱為派生線程(spawner thread)。對于至少一個實(shí)施例來說,被派生線程是由與派生線程在同一物理處理器上的第二邏輯處理器執(zhí)行的SMT線程。本領(lǐng)域技術(shù)人員將意識到,方法100可被用于任何多線程運(yùn)行方法中,包括SMT、CMP多線程運(yùn)行或者其它多處理器多線程或者任何其它可能遇到空閑線程上下文的已知多線程運(yùn)行方法。
傳統(tǒng)軟件程序并行化技術(shù)通常適用于數(shù)值和常規(guī)應(yīng)用程序。但是,傳統(tǒng)的自動編譯器并行化技術(shù)對于非常規(guī)或者非數(shù)值應(yīng)用程序,例如那些需要基于鏈接的數(shù)據(jù)結(jié)構(gòu)訪問存儲器的應(yīng)用程序,表現(xiàn)并不好。然而,各種研究表明這些非常規(guī)和整數(shù)應(yīng)用程序仍然具有大量的可通過合理的推測式多線程運(yùn)行而被利用的線程級并行性。圖1所示方法100提供了一種將單線程應(yīng)用程序程分割成能夠利用其它線程推測地執(zhí)行的子任務(wù)的機(jī)制。
與基于已知依賴于控制的結(jié)構(gòu),例如調(diào)用或者循環(huán),派生推測式線程的一些類型的傳統(tǒng)推測式多線程運(yùn)行技術(shù)不同,圖1的方法100基于控制獨(dú)立性確定派生點(diǎn),但是支持對于并行線程之間的數(shù)據(jù)流的依賴性的處理。以下討論闡明了方法100基于對控制獨(dú)立性的分析選擇線程派生點(diǎn),以在對控制流的最小推測失誤的情況下實(shí)現(xiàn)推測式并行化。另外,該方法通過提供內(nèi)部值來解決數(shù)據(jù)流依賴性的問題。對于至少一個實(shí)施例來說,內(nèi)部值是利用值預(yù)測方法預(yù)測得到的。在至少一個實(shí)施例中,內(nèi)部值是利用基于后向依賴性分析的推測式預(yù)計算而預(yù)計算出來的。
圖1圖示了用于生成指令以幫助實(shí)現(xiàn)CQIP引導(dǎo)的多線程運(yùn)行的方法100包括對派生對(spawning pair)的識別10,其中每一派生對都包括派生點(diǎn)和CQIP。在方框50處,方法100支持對用于要被派生的輔助者線程中數(shù)據(jù)依賴性的內(nèi)部值的計算。在方框60處,生成指令以使得當(dāng)該指令被處理器執(zhí)行時,派生出推測式線程并且該推測式線程推測地執(zhí)行應(yīng)用程序代碼的選定部分。
圖2是流程圖,其圖示了推測式多線程運(yùn)行的控制準(zhǔn)獨(dú)立點(diǎn)的識別10的至少一個實(shí)施例。圖2圖示了方法10進(jìn)行210特征分析(profileanalysis)。在該分析210過程中,生成控制流圖(見,例如圖3的330)以表示與應(yīng)用程序相關(guān)聯(lián)的基本程序塊之間的控制流。方法10然后計算220到達(dá)概率。即,方法10計算220如果執(zhí)行了第一基本程序塊,那么在源程序的執(zhí)行過程中到達(dá)第二基本程序塊的概率?;谠谙扔嬎愕牡竭_(dá)概率識別230候選基本程序塊作為潛在派生對。在方框240處,根據(jù)選定的量度評估候選者以選擇一個或者多個派生對。以下將結(jié)合圖3更加詳細(xì)地描述方框210(完成特征分析)、方框220(計算到達(dá)概率)、方框230(識別候選基本程序塊)以及方框240(選擇派生對)中的每一個。
圖3是數(shù)據(jù)流圖。數(shù)據(jù)流是通過包含了圖1和2中所示動作的展開流程圖來表示的。圖3圖示了,對于圖1所示方法100的至少一個實(shí)施例,在方法100的執(zhí)行過程中,參考了某些數(shù)據(jù),同時也生成了某些其它的數(shù)據(jù)。圖3圖示了,特征325被訪問以幫助實(shí)現(xiàn)特征分析210。同樣,控制流圖330(CFG)被訪問以幫助實(shí)現(xiàn)對到達(dá)概率的計算220。
對圖4的簡單參考顯示特征325一般是由方法執(zhí)行之前的一次或者多次編譯通過(pass)生成的。圖4中,表示出了典型的編譯處理400。該處理400涉及由編譯器完成的兩次通過405、410,并且還涉及一般由用戶,例如軟件程序員啟動的測試運(yùn)行407。在第一次通過405的過程中,編譯器(例如,圖8中的808)接收需要編譯的源代碼415作為輸入。編譯器然后生成對應(yīng)于源代碼415的機(jī)器二進(jìn)制代碼(instrumented binarycode)420。該機(jī)器二進(jìn)制代碼420除了包括源代碼415指令的二進(jìn)制碼之外,還包括額外的二進(jìn)制代碼,所述額外的二進(jìn)制代碼在運(yùn)行機(jī)器代碼420的過程中使得統(tǒng)計數(shù)據(jù)被收集并記錄在特征325和調(diào)用圖424中。當(dāng)用戶啟動對機(jī)器二進(jìn)制代碼420的試運(yùn)行407時,生成特征325和調(diào)用圖424。在正常的編譯通過410過程中,特征325被用作給編譯器的輸入并生成二進(jìn)制代碼文件340。特征325可以,例如,在正常編譯通過410過程中被編譯器所使用以幫助提高性能,例如推測式分支預(yù)測。
編譯通過405、410中的每一個和測試運(yùn)行407對方法100來說都是可選的,在方法400中,任何生成由特征325表示的信息的方法都可以使用。因此,第一次通過405和正常通過410,以及試運(yùn)行407在圖4中用虛線畫出以指示它們是可選的。本領(lǐng)域的技術(shù)人員可以認(rèn)識到,任何生成特征325所表示的信息的方法都可以使用,并且圖4中所畫的動作405、407、410僅為說明目的而提供。本領(lǐng)域的技術(shù)人員還可以認(rèn)識到,在其它實(shí)施例中這里所描述的方法100可被用于二進(jìn)制文件。也就是說,可以為二進(jìn)制文件而不是高級源代碼文件生成特征325,并且可利用這樣的基于二進(jìn)制的特征作為輸入而完成特征分析210(圖2)。
回到圖3,可以看到特征分析210利用了特征325作為輸入并生成控制流圖(CFG)330作為輸出。方法100在特征分析210過程中構(gòu)建CFG 330使得CFG 330的每一個節(jié)點(diǎn)表示源程序的一個基本程序塊。CFG 330的節(jié)點(diǎn)之間的連線(edge)表示基本程序塊之間的潛在控制流。對于至少一個實(shí)施例來說,CFG 330的連線被利用對應(yīng)的控制流被遵循的頻率(這反應(yīng)在特征325中)加權(quán)。因此,連線被概率加權(quán),所述概率是指一個基本程序塊跟隨另一個程序塊而不重訪該后一節(jié)點(diǎn)的概率。與其它的CFG表示法,例如只表示了過程內(nèi)連線的“連線特征表示(edge profiling)”不同,在特征分析210過程中創(chuàng)建的CFG 330的至少一個實(shí)施例包括過程間連線。
對至少一個實(shí)施例,CFG 330被精減以簡化CFG 330并控制其大小。執(zhí)行頻率最低的基本程序塊被從CFG 330中精減掉。為了確定哪些節(jié)點(diǎn)應(yīng)該保留在CFG 330中,哪些應(yīng)該被精減,程序塊的連線權(quán)重被用于確定該基本程序塊的執(zhí)行計數(shù)?;境绦驂K依照執(zhí)行計數(shù)排序,并且根據(jù)它們的執(zhí)行計數(shù)被選擇保留在CFG 330中。對至少一個實(shí)施例,從最高向較低的執(zhí)行計數(shù)來挑選基本程序塊直至達(dá)到包括在CFG 330中的總的被執(zhí)行過的指令的一個預(yù)定閾值百分比。因此,在加權(quán)和精減之后,CFG 330中表示了執(zhí)行最頻繁的基本程序塊。
對至少一個實(shí)施例,在特征分析210過程中被挑選保留在CFG 330中的執(zhí)行過的指令的預(yù)定閾值百分比為90%。對選定實(shí)施例,基于一些因素,例如應(yīng)用程序要求和/或機(jī)器資源可用性,該閾值可被改變?yōu)楦哂诨蛘叩陀?0%的數(shù)。舉例來說,如果機(jī)器資源支持相對較大數(shù)量的硬件線程上下文,則可選擇較低的閾值以幫助實(shí)現(xiàn)更加積極的推測。
為了保存關(guān)于被精減的基本程序塊的控制流信息,在特征分析210過程中還可以出現(xiàn)以下處理。當(dāng)節(jié)點(diǎn)被從CFG 330精減掉時,從前趨者(predecessor)到該被精減的節(jié)點(diǎn)的連線被轉(zhuǎn)換成從該前趨者到該節(jié)點(diǎn)的后繼者(successor)的一個或者多個連線。同樣地,從該被精減的節(jié)點(diǎn)到后繼者的連線被轉(zhuǎn)換成從該被精簡的節(jié)點(diǎn)的前趨者到該后繼者的一個或者多個連線。如果,在該轉(zhuǎn)換過程中,一個連線轉(zhuǎn)換成多個連線,原始連線的重權(quán)在新的連線之間成比例地被分配。
圖3圖示了,特征分析210過程中所產(chǎn)生的CFG 330被用來計算220到達(dá)概率。到達(dá)概率計算220的至少一個實(shí)施例使用了特征CFG 330作為輸入,并生成到達(dá)概率矩陣335作為輸出。如上所述,該“到達(dá)概率”用在這里是指在第一基本程序塊執(zhí)行之后到達(dá)第二基本程序塊而不重訪該第一基本程序塊的概率。對至少一個實(shí)施例,方框220處計算的該到達(dá)概率被存儲于二維正方形矩陣335中,所述矩陣335具有與CFG 330中的節(jié)點(diǎn)一樣多的行和列。矩陣的每一個元素表示在執(zhí)行由行表示的基本程序塊之后執(zhí)行由該列表示的基本程序塊的概率。
對至少一個實(shí)施例,該概率被計算為所有存在的從源節(jié)點(diǎn)到目的地節(jié)點(diǎn)的基本程序塊的各種序列的頻率的總和。為了簡化計算,加入約束以使得源節(jié)點(diǎn)和目的地節(jié)點(diǎn)只可分別作為第一個節(jié)點(diǎn)和最后一個節(jié)點(diǎn)在節(jié)點(diǎn)序列中出現(xiàn)一次,并且不可再作為中間節(jié)點(diǎn)出現(xiàn)。(為確定在一個基本程序塊已經(jīng)被執(zhí)行之后到達(dá)該基本程序塊的概率,該基本程序塊出現(xiàn)兩次——既作為源節(jié)點(diǎn)又作為目的地節(jié)點(diǎn))。其它基本程序塊被允許在序列中出現(xiàn)不止一次。
在方框230處,遍歷到達(dá)概率矩陣335以評估基本程序塊對并識別派生對的候選者。術(shù)語“派生對”用在這里指的是與源程序相關(guān)聯(lián)的一對指令。指令中的一個是派生點(diǎn),其為第一基本程序塊中的一個指令。對至少一個實(shí)施例,該派生點(diǎn)是第一基本程序塊的第一個指令。
另一個指令是目標(biāo)點(diǎn),具體而言,其為控制準(zhǔn)獨(dú)立點(diǎn)(CQIP)。CQIP是第二基本程序塊中的一個指令。對至少一個實(shí)施例,CQIP是第二基本程序塊的第一個指令。派生點(diǎn)是源程序中的一個指令,當(dāng)該指令被到達(dá)時,會在CQIP處激活對推測式線程的創(chuàng)建,在所述CQIP處,該推測式線程將開始其執(zhí)行。
對于到達(dá)概率矩陣335中的每一個元素,表示了兩個基本程序塊。第一程序塊包括一個潛在派生點(diǎn),第二程序塊包括一個潛在CQIP。對于行的基本程序塊的指令(例如第一個指令)是潛在派生點(diǎn)。對于列的基本程序塊的指令(例如第一個指令)是潛在CQIP。評估到達(dá)概率矩陣335的每一個元素,并且那些滿足了特定選擇標(biāo)準(zhǔn)的元素被挑選作為派生對的候選者。對于至少一個實(shí)施例,評估元素以確定那些概率高于某個預(yù)定閾值的對,即,在執(zhí)行派生點(diǎn)之后到達(dá)該控制準(zhǔn)獨(dú)立點(diǎn)的概率高于給定閾值的對。對所述標(biāo)準(zhǔn)進(jìn)行設(shè)計以使不被執(zhí)行的推測式線程的派生最小化。對于至少一個實(shí)施例,如果與到達(dá)概率矩陣335的一個元素相關(guān)聯(lián)的一對基本程序塊的到達(dá)概率高于0.95則其被視為是派生對的候選者。
選擇候選派生對的第二標(biāo)準(zhǔn)是派生點(diǎn)和CQIP之間的指令的平均數(shù)量。理想地,在派生點(diǎn)和CQIOP之間應(yīng)該存在有最小平均數(shù)量的指令以減少線程創(chuàng)建的相對開銷。如果這個距離太小,那么線程創(chuàng)建的開銷會超過向前執(zhí)行的受益,因?yàn)樵撏茰y式線程向前運(yùn)行得不夠。對于至少一個實(shí)施例,與到達(dá)概率矩陣335的一個元素相關(guān)的一對基本程序塊如果它們之間的指令的平均數(shù)量大于32個指令則被視為派生對的候選者。
基本程序塊之間的距離可被另外存儲在矩陣335中并在識別230派生對候選者中被考慮。對于至少一個實(shí)施例,該附加信息在特征分析210過程中被計算并包括在到達(dá)概率矩陣335的每一個元素中。該平均值被計算為各個基本程序塊的序列所執(zhí)行的指令的數(shù)量的總和乘以其頻率。
在方框240處,基于對一個或者多個選定量度的分析,評估派生對候選者。這些量度可被區(qū)分出優(yōu)先次序。基于相對于被區(qū)分出優(yōu)先級的量度對候選派生對的評估,選擇一個或者多個派生對。
方框240處所使用的量度可以包括(上述)潛在派生對的基本程序塊之間的最小平均距離,以及對被錯誤預(yù)測的分支、加載未命中和/或指令緩存未命中的評估。矩陣還可包括附加的考慮。一種這樣的附加考慮是潛在派生對的基本程序塊之間的最大平均距離。應(yīng)該認(rèn)識到,派生點(diǎn)和CQIP之間的指令的平均數(shù)量太大了還會帶來潛在的性能損失。因此,對派生對的選擇還可利用最大平均距離。如果對之間的距離太大,則在推測式線程對于推測值只有有限存儲的方案中,推測式線程可能造成阻塞。另外,如果推測式線程的大小十分地不一致,則在推測式線程不能提交其狀態(tài)直至其變成非推測式線程(見下面關(guān)于圖6和7的對“連接點(diǎn)”的討論)的方案中,推測式線程可能造成阻塞。這樣的阻塞很可能造成對關(guān)鍵資源的沒有效用的占據(jù),這些關(guān)鍵資源否則可被非推測式線程用來推進(jìn)處理。
另一種附加考慮是推測式線程包括的與派生點(diǎn)和CQIP之間的應(yīng)用程序代碼相關(guān)的依賴性指令的數(shù)量。優(yōu)選地,依賴于由在先線程生成的值(也稱為“內(nèi)部值”)的推測式線程指令的平均數(shù)量應(yīng)該相對較低。依賴性指令的數(shù)量越小使得能夠更加及時地為推測式線程計算該內(nèi)部值。
另外,對于選定的實(shí)施例,優(yōu)選地,較大數(shù)量的推測式線程的內(nèi)部值是值可預(yù)測的。對于那些利用值預(yù)測來支持對內(nèi)部值的計算50(以下將進(jìn)一步討論)的實(shí)施例,內(nèi)部值的值可預(yù)測性幫助實(shí)現(xiàn)內(nèi)部值的更快的交流,從而最小化派生的開銷同時也保證了推測式線程計算的正確性和準(zhǔn)確性。
方框230處識別的候選派生對有可能可以包括與給定派生點(diǎn)相關(guān)聯(lián)的CQIP的幾個較好的候選者。即,對于到達(dá)概率矩陣335的給定行,不止一個元素可被選擇作為候選派生對。在這種情況下,在方框240處的量度評估過程中,該派生點(diǎn)的最優(yōu)CQIP被選擇,因?yàn)閷τ诮o定派生點(diǎn),推測式線程只可在一個CQIP處被派生。為了選擇給定派生點(diǎn)的最優(yōu)CQIP,方框230處識別的潛在CQIP根據(jù)預(yù)期的受益被區(qū)分優(yōu)先級。
在至少一個可替換的實(shí)施例中,如果有足夠的硬件線程資源,對于對應(yīng)的派生點(diǎn)可以挑選不止一個CQIP。在這種情況下,多個同時存在的,盡管是互斥的,推測式線程可被派生并同步執(zhí)行以完成對推測式線程的“急切的”執(zhí)行。該多個CQIP的派生條件可在推測式線程已經(jīng)被執(zhí)行之后檢查和驗(yàn)證,以確定推測的有效性。如果該多個推測式線程中的一個證實(shí)了是較好的推測,并且另外的較差,則前者的結(jié)果可被主線程重新使用而后者的結(jié)果可能被丟棄。
除了根據(jù)量度評估而選擇的那些派生對之外,方法100的至少一個實(shí)施例選擇240調(diào)用返回點(diǎn)對(子例程調(diào)用和返回點(diǎn)組成的對),如果它們滿足最小大小約束。否則在方框240處這些對可能不會被選擇,因?yàn)檫@樣的對的到達(dá)概率有時候太低以致不能滿足上述關(guān)于候選者識別230所討論的選擇標(biāo)準(zhǔn)。具體而言,如果一個子例程從多個位置被調(diào)用,則在CFG330中它將具有多個前趨者和多個后繼者。如果所有調(diào)用都被執(zhí)行了相近的次數(shù),則任何返回點(diǎn)對的到達(dá)概率都將是很低的,因?yàn)閳D330將具有有著相近權(quán)重的多條路徑。
在方框50處,方法100支持對用于要在CQIP處執(zhí)行的推測式線程的內(nèi)部值的計算。通過“支持(provide for)”,其意味著生成了指令,其中對所生成指令的執(zhí)行,可能連同一些特殊的硬件支持,將會引起對于要被用作被派生線程的輸入的被預(yù)測內(nèi)部值的計算。當(dāng)然,方框50可能確定不需要內(nèi)部值。在這種情況下,“支持”對內(nèi)部值的計算只是需要確定不需要內(nèi)部值。
對線程輸入值的預(yù)測使得處理器能夠執(zhí)行推測式線程,就好像它們是獨(dú)立的一樣。方框50的至少一個實(shí)施例生成指令以完成或者觸發(fā)值預(yù)測。任何已知方式的值預(yù)測都可以采用,包括硬件值預(yù)測。例如,可生成50指令以預(yù)測在派生的時刻被派生線程的寄存器值與派生線程的寄存器值是一樣的。
在方框50,方法100的另一個實(shí)施例從應(yīng)用程序代碼中識別出可能被用于對一個或者多個內(nèi)部值的推測式預(yù)計算的一個程序片(slice)的指令。盡管值預(yù)測是一種很有希望的方法,但是它經(jīng)常需要很復(fù)雜的硬件支持。相反,對于推測式預(yù)計算并不需要附加的硬件支持。在否則就會空閑的線程上下文中,推測式預(yù)計算可在推測式線程執(zhí)行的開始完成,實(shí)現(xiàn)在無需額外的值預(yù)測硬件支持的情況下最小化對內(nèi)部值的推測失誤的優(yōu)點(diǎn)。下面將結(jié)合圖5更詳細(xì)地討論推測式預(yù)計算。
圖5圖示了方法100的一個實(shí)施例,其中方框50被進(jìn)一步規(guī)定為識別502要被用于對一個或者多個內(nèi)部值的推測式預(yù)計算的預(yù)計算指令。對于至少一個實(shí)施例,一套指令,稱為一個程序片,在方框502處被計算以只包括那些從原始的應(yīng)用程序代碼中識別出來的、計算內(nèi)部值必需的指令。所以程序片是來自原始應(yīng)用程序代碼的指令的一個子集。程序片是通過沿著依賴性連線從包含該內(nèi)部值的指令開始回溯,直至所有計算該內(nèi)部值所必需的指令都被識別出來而計算的。生成被識別了的程序片指令的一個拷貝,用于插入60改善的二進(jìn)制文件350中(圖3)。
圖3和5圖示了用于為CQIP引導(dǎo)的多線程運(yùn)行生成指令的方法100、500在方框60處生成改善的二進(jìn)制文件350。該改善的二進(jìn)制文件350包括原始單線程應(yīng)用程序的二進(jìn)制代碼340,以及附加指令??梢砸鹋缮鐾茰y式線程的觸發(fā)指令在方框240處所選擇的派生點(diǎn)被插入到該改善的二進(jìn)制文件350中。該觸發(fā)指令可以是用特殊記號標(biāo)記的、處理器現(xiàn)有指令集中的傳統(tǒng)指令?;蛘撸|發(fā)指令可以是特殊指令,例如分岔(fork)或派生指令。觸發(fā)指令可由任何線程來執(zhí)行。
另外,要由推測式線程完成的指令包括在改善的二進(jìn)制文件350中。這些指令可包括在原始代碼二進(jìn)制文件340基礎(chǔ)上增加的、用于內(nèi)部值計算的指令,和推測式線程要執(zhí)行的、從CQIP開始已經(jīng)出現(xiàn)在原始代碼二進(jìn)制文件340中的一些指令。也就是說,關(guān)于改善的二進(jìn)制文件350中的推測式線程指令,如果推測式線程要完成對內(nèi)部值的推測式預(yù)計算,則對于每一個派生對都可以區(qū)分出兩組指令。相反,對于要利用對其內(nèi)部值的值預(yù)測的推測式線程,則在改善的二進(jìn)制文件350中只出現(xiàn)下面緊接著要描述的后一組指令。
第一組指令在方框50(或者502,見圖5)處生成,并被結(jié)合到該改善的二進(jìn)制文件350中以支持對推測式線程內(nèi)部值的計算。對于至少一個實(shí)施例,要由推測式線程完成以預(yù)計算內(nèi)部值的指令被附在文件350的末尾,在那些與原始代碼二進(jìn)制文件340相關(guān)聯(lián)的指令之后。
這樣的指令不會出現(xiàn)在使用值預(yù)測的推測式線程中。相反,專用的值預(yù)測硬件可被用于值預(yù)測。值預(yù)測硬件由派生指令來起動。當(dāng)處理器執(zhí)行派生指令時,該硬件利用預(yù)測的內(nèi)部值初始化推測式線程寄存器。
不論推測式線程是利用值預(yù)測(在改善的二進(jìn)制文件350中沒有附加的指令)還是推測式預(yù)計算(改善的二進(jìn)制文件350中的程序片指令),推測式線程都與上面提到的第二組指令相關(guān)聯(lián)。該第二組指令是已經(jīng)存在于原始代碼二進(jìn)制文件340中的指令。與推測式線程相關(guān)聯(lián)的這樣的指令的子集是那些原始代碼二進(jìn)制文件340中從CQIP處開始的指令。對于利用對內(nèi)部值的推測式預(yù)計算的推測式線程,(可被附于改善的二進(jìn)制文件的末尾的)預(yù)計算程序片以到相應(yīng)的CQIP的一個分支結(jié)束,這引起推測式線程從CQIP開始執(zhí)行應(yīng)用程序代碼指令。對于利用對內(nèi)部值的值預(yù)測的推測式線程,被派生線程從CQIP開始執(zhí)行應(yīng)用程序代碼指令。
在另一個實(shí)施例中,對于推測式線程來說,改善的二進(jìn)制文件350包括來自原始應(yīng)用程序的相關(guān)指令子集的拷貝,而不是支持推測式線程向原始代碼的CQIP指令分支。但是,發(fā)明人發(fā)現(xiàn)了在上一段討論的非拷貝方法,該方法是利用了合適的分支指令實(shí)現(xiàn)的,有效地減小了代碼大小。
因此,前面的討論顯示了,對于至少一個實(shí)施例,方法100由編譯器808(圖8)完成。在這樣的實(shí)施例中,方法100表示自動化的處理,該處理中編譯器為推測式線程識別派生點(diǎn)和相關(guān)聯(lián)的控制準(zhǔn)獨(dú)立點(diǎn)(CQIP)目標(biāo),生成指令以預(yù)計算其內(nèi)部值,并在二進(jìn)制碼中在派生點(diǎn)處嵌入觸發(fā)器。推測式線程的預(yù)計算指令被結(jié)合(例如,通過附加)在改善的二進(jìn)制文件350中。本領(lǐng)域的技術(shù)人員會認(rèn)識到,在另一個實(shí)施例中,方法100可以手動地完成,使得1)識別CQIP派生對10、2)支持對內(nèi)部值的計算50以及3)修改主線程二進(jìn)制碼60中的一個或者多個可以在人的干預(yù)下交互地完成。
總的來說,描述了一種用于識別派生對并改編二進(jìn)制文件以使之適于實(shí)現(xiàn)控制準(zhǔn)獨(dú)立點(diǎn)引導(dǎo)的推測式多線程運(yùn)行的方法。方法的一個實(shí)施例由編譯器完成,所述編譯器識別合適的派生點(diǎn)和CQIP,支持對推測式線程中的內(nèi)部值的計算,并生成改善的二進(jìn)制文件。
圖6和7圖示了方法600的至少一個實(shí)施例,所述方法600用于利用控制準(zhǔn)獨(dú)立點(diǎn)引導(dǎo)的推測式多線程運(yùn)行和對內(nèi)部值的推測式預(yù)計算的結(jié)合實(shí)現(xiàn)推測式多線程運(yùn)行。對于至少一個實(shí)施例,方法600由執(zhí)行改善的二進(jìn)制代碼文件(例如圖3中的350)中的指令的處理器(例如圖8中的804)完成。對于圖6和7中所示的方法600,假設(shè),改善二進(jìn)制代碼文件已經(jīng)根據(jù)圖5所示方法生成,所以完成內(nèi)部值的推測式預(yù)計算的指令已經(jīng)被識別502并插入改善的二進(jìn)制文件中。
圖6和7圖示了,在執(zhí)行改善的二進(jìn)制代碼文件的過程中,多個線程T0、T1......TX可同步執(zhí)行。與該多個線程的每一個相關(guān)聯(lián)的控制流用圖6和7所示的方框之間連線上的符號T0、T1以及TX指示。本領(lǐng)域的技術(shù)人員可以認(rèn)識到,可以從非推測式線程派生出該多個線程。同樣,在至少一個實(shí)施例中,推測式線程可派生一個或者多個附加的非推測式后繼者線程。
圖6圖示了,處理開始于線程T0開始執(zhí)行的方框601處。在方框602處,進(jìn)行檢驗(yàn)以確定當(dāng)線程T0仍舊是推測式的時候,它(T0)以前是否遇到過連接點(diǎn)。下面將更詳細(xì)地討論方框602。本領(lǐng)域的技術(shù)人員可以理解,如果線程T0之前從來不是推測式的,那么方框602當(dāng)然會評估得出“假”。
如果方框602評估得出“假”,則在方框604執(zhí)行線程T0的指令。如果在方框606遇到與派生點(diǎn)相關(guān)聯(lián)的觸發(fā)指令,則處理繼續(xù)到方框608。否則線程T0繼續(xù)執(zhí)行方框607。在方框607,確定在線程T0中是否遇到了連接點(diǎn)。如果既沒有遇到觸發(fā)指令也沒有遇到連接點(diǎn),則線程T0繼續(xù)執(zhí)行指令604直至它到達(dá)603其指令的末尾。
如果在方框606處檢測到觸發(fā)指令,則在方框608處在自由的線程上下文中派生推測式線程T1。如果在方框610處推測式線程T1遇到程序片指令,則處理在方框612處繼續(xù)。如果沒有,則處理在方框702(圖7)處繼續(xù)。
在方框612處,迭代地執(zhí)行用于推測式預(yù)計算的程序片指令直至對內(nèi)部值的推測式預(yù)計算完成614。與此同時,在方框608處派生了推測式線程T1之后,派生線程T0繼續(xù)執(zhí)行604其指令。圖6圖示了,當(dāng)推測式線程T1執(zhí)行612該程序片指令,派生線程繼續(xù)執(zhí)行604其指令直至遇到606另一個派生點(diǎn),遇到607連接點(diǎn),或者指令流結(jié)束603。因此,派生線程T0和被派生線程T1在推測式預(yù)計算過程中并行執(zhí)行。
當(dāng)確定內(nèi)部值計算完成了614,或者如果沒有推測式線程T1610可用的用于推測式預(yù)計算的程序片指令,則處理在圖7中的A處繼續(xù)。
圖7圖示了,在方框702處,推測式線程T1執(zhí)行來自原始代碼的指令。在方框702的第一次迭代時,執(zhí)行CQIP指令。被派生線程指令的執(zhí)行702與派生線程代碼的執(zhí)行并行完成直至到達(dá)終止條件。
在方框708處,推測式線程T1檢驗(yàn)終止條件。當(dāng)被派生線程T1已經(jīng)遇到一個活動的、深層的推測式(more speculative)線程的CQIP,或者已經(jīng)到了程序的末尾,則該檢驗(yàn)708評估得出“真”。只要兩個條件都沒有出現(xiàn),則被派生線程T1前進(jìn)到方框710。
如果推測式線程T1確定708已經(jīng)到達(dá)連接點(diǎn),則理論上是準(zhǔn)備好要進(jìn)行處理以與所述深層的推測式線程切換線程上下文(如以下關(guān)于方框720將討論到的那樣)。但是,方法600的至少一個實(shí)施例將這樣的處理限制于非推測式線程。因此,當(dāng)推測式線程T1確定708它已經(jīng)到達(dá)一個深層的推測式的、活動的線程的連接點(diǎn)時,T1等待708直到它(T1)變成非推測式的以繼續(xù)處理。
在方框710處,推測式線程T確定是否已經(jīng)到達(dá)派生點(diǎn)。如果710條件評估得出“假”,則T1繼續(xù)執(zhí)行702其指令。
如果在方框710處遇到派生點(diǎn),則線程T1創(chuàng)建712一個新的推測式線程TX。然后線程T1繼續(xù)執(zhí)行702其指令,而新的推測式線程TX前進(jìn)以繼續(xù)方框610處的推測式線程操作,如以上關(guān)于推測式線程T1所描述的那樣)。本領(lǐng)域的技術(shù)人員應(yīng)該認(rèn)識到,當(dāng)多個推測式線程是活動的時,每個線程都遵循以上關(guān)于T1所描述的邏輯(圖6和7的方框610到方框614以及方框702到方框710)。
當(dāng)派生線程T0到達(dá)活動的、深層的推測式線程的CQIP時,則我們說遇到了一個連接點(diǎn)。線程的連接點(diǎn)是在其處一個正在進(jìn)行的推測式線程開始執(zhí)行的控制準(zhǔn)獨(dú)立點(diǎn)。應(yīng)該理解,多個推測式線程可以在同一時刻是活動的。從而有了術(shù)語“深層的推測式的”。“深層的推測式的”線程指的是由參考線程(在本例中,線程T0)派生的線程并且在該被派生者的派生鏈中包括有隨后被派生的推測式線程。
因此,當(dāng)線程T0到達(dá)在其處正在進(jìn)行的任意推測式線程開始執(zhí)行的CQIP,則連接點(diǎn)檢驗(yàn)607(圖6)評估得出真。本領(lǐng)域的技術(shù)人員應(yīng)該認(rèn)識到,如果多個推測式線程同時是活動的,則在方框607處可以到達(dá)該活動的推測式線程的多個CQIP中的任何一個。為了簡化說明,圖7假設(shè)當(dāng)T0在方框607處碰到一個連接點(diǎn)時,該連接點(diǎn)是與T1相關(guān)聯(lián)的,T1就是程序順序中的下一個線程,也就是其CQIP已經(jīng)被非推測式線程T0到達(dá)的那個推測式線程。
一旦在方框607處到達(dá)連接點(diǎn)(圖6),線程T0前進(jìn)到方框703。線程T0確定703它是不是推測式的活動的線程,并且如果不是,則等待直到它變成非推測式線程。
當(dāng)T0變成非推測式的,它啟動704對由被派生線程T1完成的推測的驗(yàn)證。對于至少一個實(shí)施例,驗(yàn)證704包括確定被派生線程T1所使用的推測的內(nèi)部值是否反映由派生線程計算的實(shí)際值。
如果驗(yàn)證704失敗,則T1以及任何其它比T1更深層的推測式線程被壓制(squash)730。然后線程T0前進(jìn)到C(圖6)繼續(xù)執(zhí)行其指令。否則,如果驗(yàn)證704成功,則線程T0和線程T1前進(jìn)到方框720。在方框720,其中線程T0已被執(zhí)行的線程上下文變成為自由的并被放棄(relinquish)。并且,在CQIP處開始的推測式線程T1變成非推測式線程并在C處(圖6)繼續(xù)執(zhí)行。
對圖6的參考顯示,新的非推測式線程T0在方框602處檢驗(yàn)以確定當(dāng)它仍舊是推測式的時,它是否在方框708(圖6)處遇到CQIP。如果是這樣,則線程T0前進(jìn)到B以開始如上所述的連接點(diǎn)處理。
圖5、6和7所示基于CQIP的派生點(diǎn)選擇和對內(nèi)部值的推測式計算的結(jié)合提供了一種幫助提高推測式多線程運(yùn)行的功效和準(zhǔn)確度的多線程運(yùn)行方法。能夠獲得這樣的提高是因?yàn)橛捎谠谕茰y式線程執(zhí)行之前計算了內(nèi)部值,所以推測式線程之間的數(shù)據(jù)依賴性被最小化了。
在以上描述中,已經(jīng)描述了用于幫助實(shí)現(xiàn)控制準(zhǔn)獨(dú)立點(diǎn)引導(dǎo)的推測式多線程運(yùn)行的方法和設(shè)備的各個方面。為了說明,陳述了具體數(shù)字、示例、系統(tǒng)以及配置以提供更加全面的理解。但是,顯然對于本領(lǐng)域的技術(shù)人員所描述的方法可以不通過這些特定細(xì)節(jié)而實(shí)現(xiàn)。其它情況下,為了使該方法清晰省略或簡化掉了眾所周知的細(xì)節(jié)。
該方法的實(shí)施例可以通過硬件、軟件、固件或者這些實(shí)現(xiàn)途徑的組合實(shí)現(xiàn)。本發(fā)明的實(shí)施例可被實(shí)現(xiàn)為執(zhí)行在可編程系統(tǒng)上的計算機(jī)程序,其中所述可編程系統(tǒng)包括至少一個處理器、數(shù)據(jù)存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設(shè)備和至少一個輸出設(shè)備。程序代碼可適于輸入數(shù)據(jù)以完成這里所描述的功能并生成輸出信息。輸出信息可以以已知方式被施加給一個或者多個輸出設(shè)備。為了該種應(yīng)用的目的,處理系統(tǒng)包括任何具有處理器的系統(tǒng),所述處理器可以是,例如,數(shù)字信號處理器(DSP)、微控制器、專用集成電路(ASIC)或者微處理器。
該程序可以用高級面向過程或者面向?qū)ο缶幊陶Z言實(shí)現(xiàn),以與處理系統(tǒng)交流。如果需要,該程序也可以用匯編語言或者機(jī)器語言實(shí)現(xiàn)。實(shí)際上,這里所描述的方法不限于任何特定編程語言的范圍。在任何情況下,語言可以是編譯語言或者解釋語言。
程序可以存儲在通用或者特定用途的可編程處理系統(tǒng)可讀的存儲介質(zhì)或者設(shè)備(例如,硬盤驅(qū)動、軟盤驅(qū)動、只讀存儲器(ROM)、CD-ROM設(shè)備、閃存設(shè)備、多功能數(shù)碼光盤(DVD)或者其它存儲設(shè)備)上。處理系統(tǒng)中處理器可訪問的指令,當(dāng)處理系統(tǒng)讀存儲介質(zhì)或設(shè)備以完成這里所描述的程序時,實(shí)現(xiàn)了配置和運(yùn)行該處理系統(tǒng)。還可以考慮將本發(fā)明的實(shí)施例實(shí)現(xiàn)為配置成與處理系統(tǒng)一起使用的機(jī)器可讀存儲介質(zhì),其中該存儲介質(zhì)被配置成使得處理系統(tǒng)以特定的預(yù)定方式完成這里所述的功能。
圖8示出了這樣一類處理系統(tǒng)的示例。系統(tǒng)800可以,例如,被用于執(zhí)行用于實(shí)現(xiàn)控制準(zhǔn)獨(dú)立點(diǎn)引導(dǎo)的推測式多線程運(yùn)行的方法的處理,例如這里所描述的實(shí)施例。系統(tǒng)800還可以執(zhí)行根據(jù)這里所描述的方法的至少一個實(shí)施例而生成的改善的二進(jìn)制文件。系統(tǒng)800代表了基于可從Intel公司購買到的Pentium、PentiumPro、PentiumI、PentiumII、Pentium4、以及Itanium和ItaniumII微處理器的處理系統(tǒng),但是也可以使用其它系統(tǒng)(包括具有其它微處理器的個人電腦(PC)、工程工作站、機(jī)頂盒等)。在一個實(shí)施例中,示例系統(tǒng)800可執(zhí)行從Microsoft公司能夠購買到的WindowsTM操作系統(tǒng)的一個版本,但是也可以使用,例如,其它系統(tǒng)和圖形用戶界面。
參照圖8,處理系統(tǒng)800包括存儲器系統(tǒng)802和處理器804。存儲器系統(tǒng)802可存儲用于控制處理器804的操作的指令810和數(shù)據(jù)812。例如,指令810可包括編譯器程序808,所述編譯器程序當(dāng)執(zhí)行時,令處理器804編譯存在于存儲器系統(tǒng)802中的程序415。存儲器802保存該要被編譯的程序、該程序的中間形式以及結(jié)果得到的被編譯程序。對于至少一個實(shí)施例,編譯器程序808包括用于選擇派生對和生成指令以實(shí)現(xiàn)CQIP引導(dǎo)的多線程的指令。對于這樣的實(shí)施例,指令810還可包括根據(jù)本發(fā)明的至少一個實(shí)施例而生成的改善的二進(jìn)制文件350(圖3)。
存儲器系統(tǒng)802意圖作為存儲器的總的代表,并且可包括各種形式的存儲器,例如,硬盤驅(qū)動、CD-ROM、隨機(jī)訪問存儲器(RAM)、動態(tài)隨機(jī)訪問存儲器(DRAM)、靜態(tài)隨機(jī)訪問存儲器(SRAM)以及相關(guān)電路。存儲器系統(tǒng)802可存儲用數(shù)據(jù)信號識別的、可以由處理器804執(zhí)行的指令810和/或數(shù)據(jù)812。指令810和/或數(shù)據(jù)812可包括用于完成這里所描述的所有技術(shù)或者其中的任一種的代碼。CQIP引導(dǎo)的推測式多線程運(yùn)行的至少一個實(shí)施例利用了系統(tǒng)800中的編譯器808以如上面所描述的那樣選擇派生點(diǎn)和生成指令。
具體而言,圖8圖示了編譯器808可包括特征分析器模塊820,所述特征分析器模塊820當(dāng)被處理器804執(zhí)行時,分析特征以如上關(guān)于圖3所描述的那樣生成控制流圖。編譯器808還可包括矩陣構(gòu)建器模塊824,所述矩陣構(gòu)建器模塊824當(dāng)被處理器804執(zhí)行時,如上所述地計算220到達(dá)概率并生成到達(dá)概率矩陣335。編譯器808還可包括派生對選擇器模塊826,所述派生對選擇器模塊826當(dāng)被處理器804執(zhí)行時,識別230候選基本程序塊并選擇240一個或者多個派生對。同樣,編譯器808可包括分片器(slicer)模塊822,所述分片器模塊822為要被推測式線程執(zhí)行以完成對內(nèi)部值的推測式預(yù)計算的程序片識別502(圖5)指令。編譯器808還可包括代碼生成器模塊828,所述代碼生成器模塊828當(dāng)被處理器804執(zhí)行時,生成60改善的二進(jìn)制文件350(圖3)。
盡管示出和描述了本發(fā)明的特定實(shí)施例,但是對于本領(lǐng)域的技術(shù)人員顯然能夠在不背離本發(fā)明的更廣闊的范圍的情況下作出改變和修改。所附權(quán)利要求將落入本發(fā)明的真實(shí)范圍之內(nèi)的所有這樣的改變和修改包括在其范圍之中。
權(quán)利要求
1.一種編譯軟件程序的方法,包括選擇包括派生點(diǎn)和控制準(zhǔn)獨(dú)立點(diǎn)的派生對;支持對用于推測式線程的內(nèi)部值的計算;以及生成包括指令的改善的二進(jìn)制文件,所述指令包括觸發(fā)指令以使得在控制準(zhǔn)獨(dú)立點(diǎn)處派生所述推測式線程。
2.如權(quán)利要求1所述的方法,還包括完成特征分析。
3.如權(quán)利要求1所述的方法,還包括計算多個到達(dá)概率。
4.如權(quán)利要求1所述的方法,還包括識別多個候選基本程序塊。
5.如權(quán)利要求4所述的方法,其中選擇派生對還包括從所述多個候選基本程序塊中選擇所述派生對。
6.如權(quán)利要求1所述的方法,其中生成所述改善的二進(jìn)制文件還包括在與所述派生對相關(guān)聯(lián)的派生點(diǎn)處嵌入觸發(fā)器。
7.如權(quán)利要求1所述的方法,其中選擇所述派生對還包括選擇至少具有最小平均數(shù)量的所述派生對的派生點(diǎn)和控制準(zhǔn)獨(dú)立點(diǎn)之間的指令的派生對。
8.如權(quán)利要求3所述的方法,其中選擇所述派生對還包括選擇至少具有最小到達(dá)概率的派生對。
9.如權(quán)利要求1所述的方法,其中支持對所述內(nèi)部值的計算還包括提供指令以起動對所述內(nèi)部值的硬件預(yù)測。
10.如權(quán)利要求1所述的方法,其中支持對所述內(nèi)部值的計算還包括生成一個或者多個指令以完成對所述內(nèi)部值的推測式預(yù)計算。
11.如權(quán)利要求1所述的方法,其中選擇派生對還包括選擇第一派生對和第二派生對;并且生成包括有指令的改善的二進(jìn)制文件還包括生成包括有用于各個派生對的觸發(fā)指令的改善的二進(jìn)制文件。
12.一種物品,包括具有多個機(jī)器可訪問的指令的機(jī)器可讀存儲介質(zhì);其中,當(dāng)所述指令被處理器執(zhí)行時,所述指令支持選擇包括派生點(diǎn)和控制準(zhǔn)獨(dú)立點(diǎn)的派生對;支持對用于推測式線程的內(nèi)部值的計算;以及生成包括指令的改善的二進(jìn)制文件,所述指令包括觸發(fā)指令以使得在控制準(zhǔn)獨(dú)立點(diǎn)處派生推測式線程。
13.如權(quán)利要求12所述的物品,其中所述指令還包括支持完成特征分析的指令。
14.如權(quán)利要求12所述的物品,其中所述指令還包括支持計算多個到達(dá)概率的指令。
15.如權(quán)利要求12所述的物品,其中所述指令還包括支持識別多個候選基本程序塊的指令。
16.如權(quán)利要求15所述的物品,其中所述支持選擇派生對的指令還包括支持從所述多個候選基本程序塊中選擇所述派生對的指令。
17.如權(quán)利要求12所述的物品,其中所述支持生成所述改善的二進(jìn)制文件的指令還包括支持在與所述派生對相關(guān)聯(lián)的派生點(diǎn)嵌入觸發(fā)器的指令。
18.如權(quán)利要求12所述的物品,其中所述支持選擇所述派生對的指令還包括支持選擇至少具有最小平均數(shù)量的所述派生對的派生點(diǎn)和控制準(zhǔn)獨(dú)立點(diǎn)之間的指令的派生對的指令。
19.如權(quán)利要求14所述的物品,其中所述支持選擇所述派生對的指令還包括支持選擇至少具有最小到達(dá)概率的派生對的指令。
20.如權(quán)利要求12所述的物品,其中所述支持對所述內(nèi)部值的計算的指令還包括支持提供指令以起動對所述內(nèi)部值的硬件預(yù)測的指令。
21.如權(quán)利要求12所述的物品,其中所述支持對所述內(nèi)部值的計算的指令還包括支持生成一個或者多個指令以完成對所述內(nèi)部值的推測式預(yù)計算的指令。
22.一種方法,包括在非推測式線程中執(zhí)行第一指令流中的一個或者多個指令;在所述第一指令流中的派生點(diǎn)處派生推測式線程,其中計算得到的在執(zhí)行所述第一指令流的過程中,在對所述派生點(diǎn)的執(zhí)行之后,到達(dá)控制準(zhǔn)獨(dú)立點(diǎn)的概率高于預(yù)定閾值;以及同時在所述推測式線程中執(zhí)行包括所述第一指令流中的指令的一個子集的推測式線程指令流,所述推測式線程指令流包括所述控制準(zhǔn)獨(dú)立點(diǎn);并且執(zhí)行所述第一指令流中跟隨在所述派生點(diǎn)之后的一個或者多個指令。
23.如權(quán)利要求22所述的方法,其中執(zhí)行所述第一指令流中跟隨所述派生點(diǎn)之后的一個或者多個指令還包括執(zhí)行指令直至到達(dá)所述控制準(zhǔn)獨(dú)立點(diǎn)。
24.如權(quán)利要求23所述的方法,還包括響應(yīng)于到達(dá)所述控制準(zhǔn)獨(dú)立點(diǎn),確定所述推測式線程中完成的推測式執(zhí)行是否正確。
25.如權(quán)利要求24所述的方法,還包括響應(yīng)于確定了所述推測式線程中完成的所述推測式執(zhí)行是正確的,放棄所述非推測式線程。
26.如權(quán)利要求24所述的方法,還包括響應(yīng)于確定了所述推測式線程中完成的推測式執(zhí)行是不正確的,壓制所述推測式線程。
27.如權(quán)利要求26所述的方法,還包括響應(yīng)于確定了所述推測式線程中完成的推測式執(zhí)行是不正確的,壓制所述推測式線程的所有可能有的活動的后繼線程。
28.如權(quán)利要求22所述的方法,其中所述推測式線程指令流包括用于對內(nèi)部值的推測式計算的預(yù)計算程序片。
29.如權(quán)利要求22所述的方法,其中派生所述推測式線程觸發(fā)對內(nèi)部值的硬件預(yù)測。
30.如權(quán)利要求28所述的方法,其中所述推測式線程指令流在所述預(yù)計算程序片之后包括到所述控制準(zhǔn)獨(dú)立點(diǎn)的分支指令。
31.如權(quán)利要求22所述的方法,還包括在所述推測式線程指令流的派生點(diǎn)處派生第二推測式線程。
32.一種物品,包括具有多個機(jī)器可訪問的指令的機(jī)器可讀存儲介質(zhì);其中,當(dāng)所述指令被處理器執(zhí)行時,所述指令支持在非推測式線程中執(zhí)行第一指令流中的一個或者多個指令;在所述第一指令流中的派生點(diǎn)處派生推測式線程,其中計算得到的在執(zhí)行所述第一指令流的過程中,在對所述派生點(diǎn)的執(zhí)行之后,到達(dá)控制準(zhǔn)獨(dú)立點(diǎn)的概率高于預(yù)定閾值;以及同時在所述推測式線程中執(zhí)行包括所述第一指令流中的指令的一個子集的推測式線程指令流,所述推測式線程指令流包括所述控制準(zhǔn)獨(dú)立點(diǎn);并且執(zhí)行所述第一指令流中跟隨在所述派生點(diǎn)之后的一個或者多個指令。
33.如權(quán)利要求32所述的物品,其中所述支持執(zhí)行所述第一指令流中跟隨所述派生點(diǎn)的一個或者多個指令的指令還包括支持執(zhí)行指令直到到達(dá)所述控制準(zhǔn)獨(dú)立點(diǎn)的指令。
34.如權(quán)利要求33所述的物品,其中所述指令還包括支持響應(yīng)于到達(dá)所述控制準(zhǔn)獨(dú)立點(diǎn),確定所述推測式線程中完成的推測式執(zhí)行是否正確的指令。
35.如權(quán)利要求34所述的物品,其中所述指令還包括支持響應(yīng)于確定了所述推測式線程中完成的所述推測式執(zhí)行是正確的,放棄所述非推測式線程的指令。
36.如權(quán)利要求34所述的物品,還包括支持響應(yīng)于確定了所述推測式線程中完成的推測式執(zhí)行是不正確的,壓制所述推測式線程的指令。
37.如權(quán)利要求36所述的物品,其中所述指令還包括支持響應(yīng)于確定了所述推測式線程中完成的推測式執(zhí)行是不正確的,壓制所述推測式線程的所有可能有的活動的后繼線程的指令。
38.如權(quán)利要求32所述的物品,其中所述推測式線程指令流包括用于對內(nèi)部值的推測式計算的預(yù)計算程序片。
39.如權(quán)利要求32所述的物品,其中所述支持派生所述推測式線程的指令觸發(fā)對內(nèi)部值的硬件預(yù)測。
40.如權(quán)利要求38所述的物品,其中所述推測式線程指令流在所述預(yù)計算程序片之后包括到所述控制準(zhǔn)獨(dú)立點(diǎn)的分支指令。
41.一種編譯器,包括派生對選擇器模塊,用于選擇包括有控制準(zhǔn)獨(dú)立點(diǎn)和派生點(diǎn)的派生對;和代碼生成器,用于生成在所述派生點(diǎn)包括觸發(fā)指令的改善的二進(jìn)制文件。
42.如權(quán)利要求41所述的編譯器,其中所述觸發(fā)指令將派生在控制準(zhǔn)獨(dú)立點(diǎn)處開始執(zhí)行的推測式線程。
43.如權(quán)利要求41所述的編譯器,還包括分片器,用于生成用于對內(nèi)部值的預(yù)計算的程序片;其中所述代碼生成器還包括所述改善的二進(jìn)制文件中的所述預(yù)計算程序片。
44.如權(quán)利要求41所述的編譯器,其中所述派生對選擇模塊還選擇派生對,使得計算得到的在對所述派生點(diǎn)的執(zhí)行之后到達(dá)所述控制準(zhǔn)獨(dú)立點(diǎn)的概率高于預(yù)定閾值。
45.如權(quán)利要求44所述的編譯器,還包括矩陣構(gòu)建器,用于為所述派生對計算到達(dá)概率。
46.如權(quán)利要求41所述的編譯器,還包括特征分析器,用于構(gòu)建控制流圖。
47.如權(quán)利要求41所述的編譯器,其中所述觸發(fā)指令將觸發(fā)對內(nèi)部值的硬件值預(yù)測。
48.如權(quán)利要求41所述的編譯器,還包括矩陣構(gòu)建器,用于為所述派生對計算到達(dá)概率。
全文摘要
本發(fā)明提出了一種用于生成指令以幫助實(shí)現(xiàn)控制準(zhǔn)獨(dú)立點(diǎn)多線程運(yùn)行的方法。該方法中,確定了派生點(diǎn)和控制準(zhǔn)獨(dú)立點(diǎn)。生成指令流以分割程序使得該程序的部分被推測式線程并行化。一種完成控制準(zhǔn)獨(dú)立點(diǎn)引導(dǎo)的推測式多線程運(yùn)行的方法包括當(dāng)遇到所述派生點(diǎn)時派生推測式線程。該方法的一個實(shí)施例還包括完成推測式預(yù)計算以確定所述推測式線程的內(nèi)部值。
文檔編號G06F9/48GK1519718SQ20031012159
公開日2004年8月11日 申請日期2003年12月29日 優(yōu)先權(quán)日2003年1月31日
發(fā)明者佩德羅·馬庫埃略, 安東尼奧·岡薩雷斯, 紅·王, 約翰·P·申, 佩爾·哈馬隆德, 蓋羅爾夫·F·霍夫勒納, 佩里·H·王, 史蒂文·施-偉·廖, 施-偉 廖, H 王, P 申, 佩德羅 馬庫埃略, 哈馬隆德, 夫 F 霍夫勒納, 奧 岡薩雷斯 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1