欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

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

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

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


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