專利名稱:以輔助處理器預(yù)取用于主要處理器的指令的方法和裝置的制作方法
背景資料令人遺憾的是,在許多包含固有的代碼串行部分的應(yīng)用中,得自并行化的性能增益會(huì)受到限制。對(duì)于這些固有的代碼串行部分,由于內(nèi)存延遲問(wèn)題,性能受到進(jìn)一步限制。
隨著處理器時(shí)鐘速度持續(xù)以指數(shù)速度改善,內(nèi)存延遲問(wèn)題正在變得更加惡化。以現(xiàn)在的處理器時(shí)鐘速度,要用多達(dá)200個(gè)處理器時(shí)鐘周期從主要內(nèi)存拉出一個(gè)高速緩存線(cache line)。
計(jì)算機(jī)設(shè)計(jì)者們目前使用許多技術(shù)降低內(nèi)存延遲(1)可利用亂序執(zhí)行(out-of-order)計(jì)劃加載和存儲(chǔ),從而盡可能地隱藏內(nèi)存延遲。令人遺憾的是,亂序執(zhí)行典型地受限于隱藏少許的內(nèi)存延遲的時(shí)鐘周期。(2)當(dāng)?shù)刂窡o(wú)效時(shí)可利用無(wú)故障加載(non-faulting load)指令推測(cè)性地加載一個(gè)數(shù)據(jù)值而不引起故障。(3)可利用導(dǎo)引加載(steeringload)指令推測(cè)地加載一個(gè)數(shù)據(jù)值進(jìn)入二級(jí)緩存(L2 cache)而非一級(jí)緩存(L1 cache),以使得一級(jí)緩存不會(huì)被未用過(guò)的數(shù)據(jù)值所污染。令人遺憾的是,使用無(wú)故障加載和導(dǎo)引加載可能導(dǎo)致不必要的加載。這會(huì)浪費(fèi)指令高速緩存空間并且占用寄存器。(4)某些研究人員已經(jīng)試驗(yàn)使用硬件預(yù)取引擎,但是這些硬件預(yù)取引擎典型地對(duì)于不規(guī)則的內(nèi)存存取模式是無(wú)效的。
在指令取出操作期間,內(nèi)存延遲也可能成為一個(gè)問(wèn)題。請(qǐng)注意,一個(gè)指令高速緩存失誤可能引起與數(shù)據(jù)數(shù)據(jù)高速緩存失誤一樣多的延遲。也請(qǐng)注意,推算下一個(gè)很可能要執(zhí)行的指令是非常困難的,因?yàn)橥ǔR性S多的分支和功能調(diào)用分散到以現(xiàn)代編程語(yǔ)言編寫(xiě)的程序代碼中。
現(xiàn)在需要的是一種在指令取出操作期間減少內(nèi)存延遲的方法和裝置。
在本發(fā)明的一個(gè)實(shí)施例中,在執(zhí)行該可執(zhí)行代碼之前,該系統(tǒng)將源代碼編譯成用于該主要處理器的可執(zhí)行代碼。然后,該系統(tǒng)對(duì)該可執(zhí)行代碼進(jìn)行概要程序分析(profile),以產(chǎn)生用于該可執(zhí)行代碼頻繁涉及部分的指令追蹤。然后,該系統(tǒng)通過(guò)產(chǎn)生預(yù)取指令而將該指令追蹤部分預(yù)取到一個(gè)該主要處理器可訪問(wèn)的高速緩存中,產(chǎn)生用于該輔助處理器的可執(zhí)行代碼的簡(jiǎn)化版本。該系統(tǒng)也將通信指令插入到該可執(zhí)行代碼(其用于主要處理器)和可執(zhí)行代碼的簡(jiǎn)化版本(其用于輔助處理器)中,以將進(jìn)展信息從該主要處理器傳送給該輔助處理器。這個(gè)進(jìn)展信息觸發(fā)該輔助處理器執(zhí)行該預(yù)取操作。
在本發(fā)明的一個(gè)實(shí)施例中,編譯源代碼的過(guò)程和產(chǎn)生可執(zhí)行代碼的簡(jiǎn)化版本的過(guò)程是由一個(gè)編譯器執(zhí)行的。
在本發(fā)明的一個(gè)實(shí)施例中,如果給輔助處理器的該進(jìn)展信息表示該輔助處理器已經(jīng)沿著錯(cuò)誤的路徑預(yù)取指令,該可執(zhí)行代碼的簡(jiǎn)化版本使得該輔助處理器中斷預(yù)取。
在本發(fā)明的一個(gè)實(shí)施例中,該可執(zhí)行代碼的簡(jiǎn)化版本被配置為從專用的硬件讀取控制流程歷史信息,該專用硬件記錄分支歷史信息和調(diào)用歷史信息。然后,該可執(zhí)行代碼的簡(jiǎn)化版本基于該控制流程歷史信息構(gòu)成一個(gè)經(jīng)由該可執(zhí)行代碼推算的路徑,然后執(zhí)行沿著該推算路徑的預(yù)取操作,以便預(yù)取用于該主要處理器的指令。
在本發(fā)明的一個(gè)實(shí)施例中,產(chǎn)生該可執(zhí)行代碼的簡(jiǎn)化版本,包括構(gòu)成一個(gè)用于該可執(zhí)行代碼的控制流程圖。在這樣操作時(shí),該系統(tǒng)從該控制流程圖中除去循環(huán),并且除去與該控制流程圖無(wú)關(guān)的可執(zhí)行代碼指令。該系統(tǒng)也將該預(yù)取指令插入到該可執(zhí)行代碼的簡(jiǎn)化版本中,以從該可執(zhí)行代碼中預(yù)取用于該主要處理器的指令。
在本發(fā)明的一個(gè)實(shí)施例中,執(zhí)行預(yù)取操作包括預(yù)取包含用于該主要處理器的多個(gè)指令的高速緩存模塊。
在本發(fā)明的一個(gè)實(shí)施例中,該系統(tǒng)經(jīng)由一個(gè)單向通信信道周期性地從該主要處理器發(fā)送該進(jìn)展信息給該輔助處理器。
在本發(fā)明的一個(gè)實(shí)施例中,該主要處理器和該輔助處理器駐留在相同的半導(dǎo)體芯片上。
在本發(fā)明的一個(gè)實(shí)施例中,該主要處理器和該輔助處理器駐留在不同的半導(dǎo)體芯片上。
在本發(fā)明的一個(gè)實(shí)施例中,該輔助處理器是該主要處理器的一個(gè)簡(jiǎn)化版本。
圖2舉例說(shuō)明按照本發(fā)明一個(gè)實(shí)施例的編譯過(guò)程。
圖3是一個(gè)流程圖,舉例說(shuō)明按照本發(fā)明一個(gè)實(shí)施例產(chǎn)生可執(zhí)行代碼的簡(jiǎn)化版本的過(guò)程。
圖4舉例說(shuō)明按照本發(fā)明一個(gè)實(shí)施例用以簡(jiǎn)化可執(zhí)行代碼的結(jié)構(gòu)例子。
圖5是一個(gè)流程圖,舉例說(shuō)明按照本發(fā)明一個(gè)實(shí)施例如何去構(gòu)成可執(zhí)行代碼的簡(jiǎn)化版本的細(xì)節(jié)。
圖6是一個(gè)流程圖,舉例說(shuō)明按照本發(fā)明的一個(gè)實(shí)施例,當(dāng)確定已經(jīng)沿著錯(cuò)誤的路線進(jìn)行的時(shí)候,如何彈射出(bail out)可執(zhí)行代碼的簡(jiǎn)化版本。
圖7是一個(gè)流程圖,舉例說(shuō)明按照本發(fā)明的一個(gè)實(shí)施例,如何通過(guò)從專用的硬件讀取控制流量歷史信息而操作該可執(zhí)行代碼的簡(jiǎn)化版本。
圖8舉例說(shuō)明按照本發(fā)明的一個(gè)實(shí)施例的用于存儲(chǔ)控制流量歷史信息的專用硬件。
圖9舉例說(shuō)明按照本發(fā)明的一個(gè)實(shí)施例的簡(jiǎn)化可執(zhí)行代碼的范例部分。
詳細(xì)說(shuō)明給出以下說(shuō)明書(shū)以使得所有的所屬技術(shù)領(lǐng)域的專業(yè)人員能夠?qū)崿F(xiàn)和使用本發(fā)明,并且在上下文中提供了特定的應(yīng)用及其要求。對(duì)那些本領(lǐng)域技術(shù)人員來(lái)說(shuō),顯然易于對(duì)所公開(kāi)的實(shí)施例作各種各樣的修改,并且在此處所規(guī)定的原理可以適用于其他的實(shí)施例和應(yīng)用,且無(wú)需脫離本發(fā)明的精神和范圍。因此,本發(fā)明并非意在受限于所示實(shí)施例,而是要求有與在此公開(kāi)的原理和特點(diǎn)一致的最寬范圍。
在這個(gè)詳細(xì)的說(shuō)明書(shū)中描述的數(shù)據(jù)結(jié)構(gòu)和代碼典型地存儲(chǔ)于計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上,該計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何存儲(chǔ)供計(jì)算機(jī)系統(tǒng)使用的代碼和/或數(shù)據(jù)的設(shè)備或者介質(zhì)。這包括(但不局限于)磁性和光存儲(chǔ)設(shè)備,諸如磁盤驅(qū)動(dòng)器、磁帶、CD(光盤)和DVD(數(shù)字視頻磁盤),計(jì)算機(jī)指令信號(hào)包含在傳輸媒介中(當(dāng)該信號(hào)被調(diào)制時(shí)有或者沒(méi)有載波)。例如,該傳輸媒介可以包括一個(gè)通信網(wǎng)絡(luò),諸如因特網(wǎng)。計(jì)算機(jī)系統(tǒng)
圖1舉例說(shuō)明一個(gè)按照本發(fā)明實(shí)施例的計(jì)算機(jī)系統(tǒng)101。計(jì)算機(jī)系統(tǒng)101包括一個(gè)主要處理器102和一個(gè)輔助處理器104。所有的這些構(gòu)件駐留于硅片100上(雖然在本發(fā)明的其它實(shí)施例中它們可以駐留于多個(gè)硅片上)。
處理器102和104包括指令高速緩存112和120,其分別包括由處理器102和104執(zhí)行的指令。
處理器102和104還另外包括加載緩沖器114和122以及存儲(chǔ)緩沖器116和124,分別用于緩沖與數(shù)據(jù)高速緩存107和106的通信。更具體地說(shuō),主要處理器102包括加載緩沖器114(用于緩沖從數(shù)據(jù)高速緩存107接收的加載)和存儲(chǔ)緩沖器116(用于對(duì)數(shù)據(jù)高速緩存107緩沖存儲(chǔ))。類似地,輔助處理器104包括加載緩沖器122(用于緩沖從數(shù)據(jù)高速緩存106接收的加載)和存儲(chǔ)緩沖器124(用于緩沖對(duì)數(shù)據(jù)高速緩存106所做存儲(chǔ))。
處理器102和104另外通過(guò)單向通信信道128~129而連接在一起,單向通信信道128~129便于在主要處理器102和輔助處理器104之間進(jìn)行快速通信。請(qǐng)注意,通信信道128允許主要處理器102去寫(xiě)入在輔助處理器104內(nèi)的寄存器126。類似地,通信信道129允許輔助處理器104去寫(xiě)入在主要處理器102內(nèi)的寄存器127。
與使用共享內(nèi)存通信機(jī)構(gòu)不同,寫(xiě)入寄存器126(或者127)不會(huì)引起高速緩存失誤或者相關(guān)業(yè)務(wù)量。此外,主要處理器102沒(méi)有必要等到輔助處理器104接收到該通信才繼續(xù)處理。相比之下,如果主要處理器102經(jīng)由內(nèi)存與輔助處理器104進(jìn)行通信,為了通信該系統(tǒng)將必須等候存儲(chǔ)緩沖器116被清除。
在本發(fā)明的一個(gè)實(shí)施例中,數(shù)據(jù)高速緩存106和107是16K字節(jié)、帶有32字節(jié)高速緩存線的4路相關(guān)設(shè)置數(shù)據(jù)高速緩存。
數(shù)據(jù)高速緩存106、數(shù)據(jù)高速緩存107、指令高速緩存112以及指令高速緩存120經(jīng)由開(kāi)關(guān)110被連接至二級(jí)緩存113。開(kāi)關(guān)110可以包括用于轉(zhuǎn)換信號(hào)線路的任何類型的電路。在本發(fā)明的一個(gè)實(shí)施例中,開(kāi)關(guān)110是一個(gè)縱橫開(kāi)關(guān)。
二級(jí)緩存是一個(gè)很大的合成一體的高速緩存,用于存儲(chǔ)主要處理器102和輔助處理器104兩者的指令和數(shù)據(jù)。二級(jí)緩存113被連接至存儲(chǔ)控制器111,存儲(chǔ)控制器111自身連接至動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)108(其位于芯片之外)。
DRAM 108包含用于主要處理器102的可執(zhí)行代碼130。在系統(tǒng)操作期間,可執(zhí)行代碼130經(jīng)由存儲(chǔ)控制器111、二級(jí)緩存113和開(kāi)關(guān)110被加載進(jìn)主要處理器102的指令高速緩存112中。DRAM 108還包括用于輔助處理器104的簡(jiǎn)化的可執(zhí)行代碼132。簡(jiǎn)化的可執(zhí)行代碼132是可執(zhí)行代碼130的簡(jiǎn)化版本,其產(chǎn)生與可執(zhí)行代碼130相同的存儲(chǔ)參考模式。在系統(tǒng)操作期間,簡(jiǎn)化的可執(zhí)行代碼132經(jīng)由存儲(chǔ)控制器111、二級(jí)緩存113和開(kāi)關(guān)110被加載進(jìn)輔助處理器104的指令高速緩存120中。DRAM 108另外包含數(shù)據(jù)134,其經(jīng)由存儲(chǔ)控制器111、二級(jí)緩存113和開(kāi)關(guān)110而往返傳送于數(shù)據(jù)高速緩存106~107。
請(qǐng)注意,本發(fā)明可以在包含多個(gè)處理器的所有計(jì)算機(jī)系統(tǒng)中使用,并且不局限于舉例說(shuō)明的計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)。
也請(qǐng)注意,在本發(fā)明的一個(gè)實(shí)施例中,輔助處理器104用于在主要處理器102使用指令之前對(duì)該指令進(jìn)行存取。在這個(gè)實(shí)施例中,輔助處理器104不必實(shí)際執(zhí)行在程序中指定的所有計(jì)算,輔助處理器104只需要執(zhí)行足夠的計(jì)算,以允許輔助處理器104去確定該程序的指令存取模式。因此,輔助處理器104可以是主要處理器102的遠(yuǎn)為簡(jiǎn)單的版本,除去不是為執(zhí)行指令地址計(jì)算所必需的電路(例如除法器和乘法器電路)。編譯過(guò)程圖2舉例說(shuō)明按照本發(fā)明一個(gè)實(shí)施例的編譯過(guò)程。在該編譯過(guò)程期間,源代碼202通過(guò)編譯器204饋給,以產(chǎn)生用于主要處理器102的可執(zhí)行代碼130??蓤?zhí)行代碼130然后通過(guò)簡(jiǎn)化模塊208而饋給,以產(chǎn)生用于輔助處理器104的簡(jiǎn)化可執(zhí)行代碼132。請(qǐng)注意,簡(jiǎn)化模塊208可以是編譯器204的一部分,或者可以是從編譯器204分離出來(lái)。
在本發(fā)明的一個(gè)實(shí)施例中,在運(yùn)行時(shí)間之前進(jìn)行該編輯和簡(jiǎn)化過(guò)程。在另一個(gè)實(shí)施例中,在運(yùn)行時(shí)間期間進(jìn)行該編輯和簡(jiǎn)化過(guò)程,同時(shí)執(zhí)行該程序。產(chǎn)生簡(jiǎn)化的可執(zhí)行代碼圖3是一個(gè)流程圖,舉例說(shuō)明按照本發(fā)明一個(gè)實(shí)施例而在簡(jiǎn)化模塊208內(nèi)產(chǎn)生簡(jiǎn)化的可執(zhí)行代碼132的過(guò)程。該系統(tǒng)開(kāi)始通過(guò)對(duì)可執(zhí)行代碼130進(jìn)行程序概要分析(模擬執(zhí)行)以標(biāo)識(shí)熱點(diǎn),其中內(nèi)存延遲導(dǎo)致延遲(步驟302)。該系統(tǒng)使用在該程序概要分析過(guò)程期間獲得的信息而在可執(zhí)行代碼130中建立熱點(diǎn)指令蹤跡。在本發(fā)明的一個(gè)實(shí)施例中,該系統(tǒng)構(gòu)成大約2000個(gè)指令的每個(gè)大約100個(gè)離散的蹤跡。該系統(tǒng)然后相關(guān)這些蹤跡,返回至相應(yīng)的源代碼(步驟304)。
接著,該系統(tǒng)通過(guò)產(chǎn)生用以預(yù)取該蹤跡的代碼而產(chǎn)生簡(jiǎn)化的可執(zhí)行代碼132(步驟306)。在下面參考圖4、5和9更詳細(xì)地描述這個(gè)過(guò)程。
該系統(tǒng)還將處理器至處理器通信代碼插入到可執(zhí)行代碼130和簡(jiǎn)化可執(zhí)行代碼132兩者之中(步驟308)。這個(gè)通信代碼使主要處理器102去交換進(jìn)展信息給輔助處理器104。這個(gè)進(jìn)展信息能夠使輔助處理器104確定是否它沿著正確路徑預(yù)取指令、以及是否它提前主要處理器102過(guò)遠(yuǎn)去繼續(xù)預(yù)取指令。
請(qǐng)注意,輔助處理器104提前主要處理器102過(guò)遠(yuǎn)去預(yù)取指令是不合乎需要的,因?yàn)樘崆斑^(guò)遠(yuǎn)而預(yù)取的指令很少會(huì)為主要處理器102使用,并且可能替換主要處理器102更直接需要的數(shù)據(jù)。很少可能使用的預(yù)取指令會(huì)占用存儲(chǔ)帶寬,并且可能導(dǎo)致高速緩存污染,其降低計(jì)算機(jī)系統(tǒng)性能。因此,在啟動(dòng)預(yù)取指令之前,希望輔助處理器104等待,直至主要處理器102的執(zhí)行路徑接近于在輔助處理器104中相應(yīng)的代碼為止。
也請(qǐng)注意,單個(gè)預(yù)取操作典型地恢復(fù)包括多個(gè)指令的整個(gè)高速緩存線。例如,一個(gè)預(yù)取的高速緩存線可以包含64字節(jié),其中包含16個(gè)4字節(jié)指令。
如果這個(gè)進(jìn)展信息表示輔助處理器104沿著錯(cuò)誤的路線通過(guò)可執(zhí)行代碼130預(yù)取指令,該系統(tǒng)可能引起輔助處理器104彈射出預(yù)取指令追蹤。
圖4舉例說(shuō)明按照本發(fā)明一個(gè)實(shí)施例的用于簡(jiǎn)化的可執(zhí)行代碼132可能結(jié)構(gòu)。在這個(gè)實(shí)施例中,簡(jiǎn)化的可執(zhí)行代碼132被構(gòu)成為一個(gè)循環(huán)。該代碼首先開(kāi)始于讀取一個(gè)變量“val”,該變量“val”可以位于共享內(nèi)存中或者在圖1所示的寄存器126內(nèi)。如果該val不等于零,該系統(tǒng)基于包含在val中的值而執(zhí)行一個(gè)開(kāi)關(guān)語(yǔ)句,該開(kāi)關(guān)語(yǔ)句執(zhí)行包含預(yù)取操作的代碼的特定部分。通過(guò)這種方法,主要處理器102可以經(jīng)由該變量val交換進(jìn)展信息給輔助處理器104。這個(gè)進(jìn)展信息使特定的預(yù)取指令被執(zhí)行,以便輔助處理器104在主要處理器102需要該指令時(shí)提前預(yù)取指令。該代碼然后重新設(shè)置val為零,并且繼續(xù)該循環(huán)。請(qǐng)注意,對(duì)于val讀和寫(xiě)不是同時(shí)發(fā)生的。
圖5是一個(gè)流程圖,舉例說(shuō)明按照本發(fā)明一個(gè)實(shí)施例如何構(gòu)成該簡(jiǎn)化的可執(zhí)行代碼132的細(xì)節(jié)。該系統(tǒng)開(kāi)始于構(gòu)成一個(gè)用于可執(zhí)行代碼130的控制流程圖(步驟502)。然后,該系統(tǒng)從該控制流程圖除去小的循環(huán)(步驟504),因?yàn)樾〉难h(huán)假定被預(yù)取進(jìn)入二級(jí)緩存113中。因此,一旦小的循環(huán)被預(yù)取,其執(zhí)行直至該循環(huán)完成。該系統(tǒng)還從可執(zhí)行代碼130中除去與該控制流程圖無(wú)關(guān)的所有的指令(步驟506)。這可以被做,因?yàn)樵摕o(wú)關(guān)的程序代碼不會(huì)影響經(jīng)由程序代碼的該執(zhí)行路徑,由此將不會(huì)對(duì)需要的預(yù)取操作有影響。例如,可以除去執(zhí)行數(shù)學(xué)計(jì)算確定的程序代碼。
接著,該系統(tǒng)將預(yù)取指令插入到簡(jiǎn)化的可執(zhí)行代碼132以預(yù)取用于可執(zhí)行代碼130的相應(yīng)部分的指令(步驟508)。彈射出過(guò)程圖6是一個(gè)流程圖,舉例說(shuō)明按照本發(fā)明的一個(gè)實(shí)施例,當(dāng)確定已經(jīng)沿著錯(cuò)誤的路線進(jìn)行的時(shí)候,簡(jiǎn)化的可執(zhí)行代碼132如何彈射出。當(dāng)在輔助處理器104上執(zhí)行簡(jiǎn)化的可執(zhí)行代碼132的時(shí)候,該系統(tǒng)開(kāi)始讀取由主要處理器102寫(xiě)入的進(jìn)展信息(步驟602)。這個(gè)進(jìn)展信息表示主要處理器102的執(zhí)行路徑已經(jīng)在可執(zhí)行代碼130內(nèi)到達(dá)何處。
如果這個(gè)進(jìn)展信息表示輔助處理器104沿著錯(cuò)誤的路線進(jìn)行,輔助處理器104中斷預(yù)取該蹤跡(步驟604)。輔助處理器可以選擇性地開(kāi)始對(duì)應(yīng)于正確路徑的預(yù)取。
請(qǐng)注意,在該預(yù)取指令過(guò)程期間,輔助處理器104可以決定只沿著支路的一邊預(yù)取,且主要處理器102可以實(shí)際上決定沿著該支路的另外一邊進(jìn)行。在這種情況下,輔助處理器104已經(jīng)采取了錯(cuò)誤的路線。
還請(qǐng)注意,輔助處理器104并非一定要彈射出。沿著錯(cuò)誤的路線預(yù)取指令的唯一的不利結(jié)果是高速緩存污染和不必要的存儲(chǔ)內(nèi)容轉(zhuǎn)儲(chǔ),其對(duì)于很小的蹤跡也許并非重要因素。用于存儲(chǔ)歷史信息的專用硬件圖7是一個(gè)流程圖,舉例說(shuō)明按照本發(fā)明一個(gè)實(shí)施例簡(jiǎn)化如何操作可執(zhí)行代碼132。該系統(tǒng)開(kāi)始于從專用的硬件讀取控制流程歷史信息,該專用硬件記錄可執(zhí)行代碼130的控制流程歷史信息(步驟702)。例如,這個(gè)控制流程歷史信息可以包含一個(gè)采用的分支記錄和其執(zhí)行的功能調(diào)用。然后,該系統(tǒng)基于該控制流程歷史信息構(gòu)成一個(gè)經(jīng)由可執(zhí)行代碼130推算的路徑(步驟704)。例如,該推算的路徑可以基于經(jīng)由可執(zhí)行代碼130采用的上一次的路徑確定,或者基于經(jīng)由可執(zhí)行代碼130采用的最頻繁的路徑確定。接著,簡(jiǎn)化的可執(zhí)行代碼132使得輔助處理器104沿著該推算的路徑執(zhí)行預(yù)取操作(步驟706)。
圖8舉例說(shuō)明按照本發(fā)明的一個(gè)實(shí)施例,用于存儲(chǔ)控制流程歷史信息的專用硬件。在這個(gè)實(shí)施例中,該專用硬件存儲(chǔ)用于功能調(diào)用和返回的調(diào)用地址。對(duì)于每個(gè)調(diào)用,該硬件存儲(chǔ)一個(gè)是否連續(xù)的分支被采用或未采用的記錄。例如,第一行指定一個(gè)駐留在地址“X”的功能調(diào)用,繼之以一個(gè)采用的分支,一個(gè)未采用的分支,然后是三個(gè)采用的分支。第二行指定一個(gè)駐留在地址“Y”的功能調(diào)用,然后沒(méi)有分支。第三行指定一個(gè)從功能調(diào)用返回至地址“Y+4”。最后,第四行指定一個(gè)駐留在地址“Z”的功能調(diào)用,繼之以二個(gè)采用的分支和一個(gè)未采用的分支。簡(jiǎn)化的可執(zhí)行代碼的范例圖9舉例說(shuō)明按照本發(fā)明的一個(gè)實(shí)施例的簡(jiǎn)化的可執(zhí)行代碼132的范例部分,其包含預(yù)取指令。
圖9的左手側(cè)舉例說(shuō)明可執(zhí)行代碼130的部分結(jié)構(gòu)。這個(gè)部分被分成多個(gè)模塊902、904、906、908、910和912,每個(gè)模塊是64字節(jié)長(zhǎng),并且可以在單個(gè)預(yù)取操作中被預(yù)取。請(qǐng)注意,可執(zhí)行代碼130首先執(zhí)行模塊902,其執(zhí)行一個(gè)或者到模塊904或者到模塊906的分支。模塊904和906兩者執(zhí)行對(duì)模塊908的功能調(diào)用。模塊908然后執(zhí)行一個(gè)或者到模塊910或者到模塊912的分支。
圖9的右手側(cè)舉例說(shuō)明簡(jiǎn)化的可執(zhí)行代碼132的部分的相應(yīng)結(jié)構(gòu)。簡(jiǎn)化的可執(zhí)行代碼132首先預(yù)取模塊902、904和906。然后,變量“addr”隨著功能調(diào)用的目標(biāo)地址而加載,然后簡(jiǎn)化的可執(zhí)行代碼132預(yù)取模塊908、910和912。
請(qǐng)注意,簡(jiǎn)化的可執(zhí)行代碼132沿著在可執(zhí)行代碼130中分支的兩側(cè)預(yù)取。在本發(fā)明的另一個(gè)實(shí)施例中,為了消除不必要的指令加載和指令高速緩存污染,簡(jiǎn)化的可執(zhí)行代碼132只沿著推算的支路預(yù)取。
還請(qǐng)注意,該預(yù)取操作將可執(zhí)行代碼130模塊傳送到圖1中的二級(jí)緩存113。做為選擇,該預(yù)取操作可以使得被預(yù)取的指令直接進(jìn)入用于主要處理器102的指令高速緩存112。
僅為了說(shuō)明和描述起見(jiàn),上文的說(shuō)明書(shū)已經(jīng)介紹了發(fā)明的實(shí)施例。說(shuō)明書(shū)并非意圖窮舉本發(fā)明或?qū)⒈景l(fā)明限制于所公開(kāi)的形式。因此,對(duì)于本領(lǐng)域?qū)I(yè)技術(shù)人員來(lái)說(shuō)許多的修改和變化將是顯而易見(jiàn)的。另外,以上所述的公開(kāi)不意在限制本發(fā)明。本發(fā)明的范圍由所附的權(quán)利要求限定。
權(quán)利要求
1.一種通過(guò)用輔助處理器在主要處理器開(kāi)始之前執(zhí)行預(yù)取操作來(lái)預(yù)取指令的方法,包括在該主要處理器上執(zhí)行可執(zhí)行代碼;同時(shí)在該輔助處理器上執(zhí)行一個(gè)該可執(zhí)行代碼的簡(jiǎn)化版本,其中該可執(zhí)行代碼的簡(jiǎn)化版本比該可執(zhí)行代碼執(zhí)行更加迅速,并且在該主要處理器需要該指令之前,為該主要處理器執(zhí)行預(yù)取操作;和將所預(yù)取的指令存儲(chǔ)到一個(gè)該主要處理器可訪問(wèn)的高速緩存中,使得無(wú)需從主內(nèi)存取回該預(yù)取指令,該主要處理器即能訪問(wèn)該預(yù)取指令。
2.根據(jù)權(quán)利要求1的方法,進(jìn)一步包括在執(zhí)行該可執(zhí)行代碼之前編譯源代碼為用于該主要處理器的可執(zhí)行代碼;對(duì)該可執(zhí)行代碼進(jìn)行程序概要分析以產(chǎn)生用于該可執(zhí)行代碼頻繁涉及部分的指令追蹤;通過(guò)產(chǎn)生預(yù)取指令而將該指令追蹤部分預(yù)取到一個(gè)該主要處理器可訪問(wèn)的高速緩存中,產(chǎn)生用于該輔助處理器的該可執(zhí)行代碼的簡(jiǎn)化版本,和將通信指令插入到用于該主要處理器的該可執(zhí)行代碼,和插入到用于該輔助處理器的該可執(zhí)行代碼的簡(jiǎn)化版本,以從該主要處理器傳送進(jìn)展信息給該輔助處理器;其中該進(jìn)展信息觸發(fā)該輔助處理器以執(zhí)行該預(yù)取操作。
3.根據(jù)權(quán)利要求2的方法,其中該編譯源代碼的過(guò)程和該產(chǎn)生可執(zhí)行代碼的簡(jiǎn)化版本的過(guò)程是由一個(gè)編譯器執(zhí)行的。
4.根據(jù)權(quán)利要求2的方法,其中如果給該輔助處理器的該進(jìn)展信息表示該輔助處理器已經(jīng)沿著錯(cuò)誤的路徑預(yù)取指令,該可執(zhí)行代碼的簡(jiǎn)化版本使得該輔助處理器中斷預(yù)取。
5.根據(jù)權(quán)利要求1的方法,其中將該可執(zhí)行代碼的簡(jiǎn)化版本配置為從記錄分支歷史信息和調(diào)用歷史信息的專用的硬件讀取控制流程歷史信息;基于該控制流程歷史信息,構(gòu)成一個(gè)經(jīng)由該可執(zhí)行代碼推算的路徑;和沿著該推算的路徑執(zhí)行預(yù)取操作,以預(yù)取用于該主要處理器的指令。
6.根據(jù)權(quán)利要求1的方法,其中產(chǎn)生該可執(zhí)行代碼的簡(jiǎn)化版本包括構(gòu)成一個(gè)用于該可執(zhí)行代碼的控制流程圖;從該控制流程圖除去循環(huán);除去與該控制流程圖無(wú)關(guān)的可執(zhí)行代碼指令;和將該預(yù)取指令插入到該可執(zhí)行代碼的簡(jiǎn)化版本中,以從該可執(zhí)行代碼預(yù)取用于該主要處理器的指令。
7.根據(jù)權(quán)利要求1的方法,其中執(zhí)行該預(yù)取操作包括預(yù)取包含用于該主要處理器的多個(gè)指令的高速緩存模塊。
8.根據(jù)權(quán)利要求1的方法,進(jìn)一步包括經(jīng)由一個(gè)單向通信信道周期性地從該主要處理器發(fā)送該進(jìn)展信息給該輔助處理器。
9.一種存儲(chǔ)指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),當(dāng)該指令由計(jì)算機(jī)執(zhí)行的時(shí)候,通過(guò)使用一個(gè)輔助處理器在主要處理器之前執(zhí)行預(yù)取操作,使得該計(jì)算機(jī)實(shí)施一種用于預(yù)取指令的方法,包括在該主要處理器上執(zhí)行可執(zhí)行代碼;同時(shí)在該輔助處理器上執(zhí)行一個(gè)該可執(zhí)行代碼的簡(jiǎn)化版本,其中該可執(zhí)行代碼的簡(jiǎn)化版本比該可執(zhí)行代碼執(zhí)行更加迅速,并且在該主要處理器需要該指令之前,為該主要處理器執(zhí)行預(yù)取操作;和將所預(yù)取的指令存儲(chǔ)到一個(gè)該主要處理器可訪問(wèn)的高速緩存中,使得無(wú)需從主內(nèi)存取回該預(yù)取指令,該主要處理器即能訪問(wèn)該預(yù)取指令。
10.根據(jù)權(quán)利要求9的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中在執(zhí)行該可執(zhí)行代碼之前,該方法進(jìn)一步包括編譯源代碼為用于該主要處理器的可執(zhí)行代碼;對(duì)該可執(zhí)行代碼進(jìn)行程序概要分析以產(chǎn)生用于該可執(zhí)行代碼頻繁涉及部分的指令追蹤;通過(guò)產(chǎn)生預(yù)取指令而將該指令追蹤部分預(yù)取到一個(gè)該主要處理器可訪問(wèn)的高速緩存中,產(chǎn)生用于該輔助處理器的該可執(zhí)行代碼的簡(jiǎn)化版本,和將通信指令插入到用于該主要處理器的該可執(zhí)行代碼,和插入到用于該輔助處理器的該可執(zhí)行代碼的簡(jiǎn)化版本,以從該主要處理器傳送進(jìn)展信息給該輔助處理器;其中該進(jìn)展信息觸發(fā)該輔助處理器以執(zhí)行該預(yù)取操作。
11.根據(jù)權(quán)利要求10的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中該編譯源代碼的過(guò)程和該產(chǎn)生可執(zhí)行代碼的簡(jiǎn)化版本的過(guò)程是由一個(gè)編譯器執(zhí)行的。
12.根據(jù)權(quán)利要求10的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中如果給該輔助處理器的該進(jìn)展信息表示該輔助處理器已經(jīng)沿著錯(cuò)誤的路徑預(yù)取指令,該可執(zhí)行代碼的簡(jiǎn)化版本使得該輔助處理器中斷預(yù)取。
13.根據(jù)權(quán)利要求9的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中將該可執(zhí)行代碼的簡(jiǎn)化版本配置為從記錄分支歷史信息和調(diào)用歷史信息的專用的硬件讀取控制流程歷史信息;基于該控制流程歷史信息,構(gòu)成一個(gè)經(jīng)由該可執(zhí)行代碼推算的路徑;和沿著該推算的路徑執(zhí)行預(yù)取操作,以預(yù)取用于該主要處理器的指令。
14.根據(jù)權(quán)利要求9的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中產(chǎn)生該可執(zhí)行代碼的簡(jiǎn)化版本包括構(gòu)成一個(gè)用于該可執(zhí)行代碼的控制流程圖;從該控制流程圖除去循環(huán);除去與該控制流程圖無(wú)關(guān)的可執(zhí)行代碼指令;和將該預(yù)取指令插入到該可執(zhí)行代碼的簡(jiǎn)化版本中,以從該可執(zhí)行代碼預(yù)取用于該主要處理器的指令。
15.根據(jù)權(quán)利要求9的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中執(zhí)行該預(yù)取操作包括預(yù)取包含用于該主要處理器的多個(gè)指令的高速緩存模塊。
16.根據(jù)權(quán)利要求9的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中該方法進(jìn)一步包括經(jīng)由一個(gè)單向通信信道周期性地從該主要處理器發(fā)送該進(jìn)展信息給該輔助處理器。
17.一種利于從內(nèi)存進(jìn)行預(yù)取的裝置,包括一個(gè)配置用以執(zhí)行可執(zhí)行代碼的主要處理器;一個(gè)配置用以同時(shí)執(zhí)行該可執(zhí)行代碼的簡(jiǎn)化版本的輔助處理器,其中該可執(zhí)行代碼的簡(jiǎn)化版本比該可執(zhí)行代碼執(zhí)行更加迅速,并且在該主要處理器需要該指令之前,為該主要處理器執(zhí)行預(yù)取操作;和一個(gè)高速緩存,其可為該主要處理器訪問(wèn)并且配置用以存儲(chǔ)所預(yù)取的指令,使得無(wú)需從主內(nèi)存取回該預(yù)取指令,該主要處理器即能訪問(wèn)該預(yù)取指令。
18.根據(jù)權(quán)利要求17的裝置,進(jìn)一步包括一個(gè)編譯結(jié)構(gòu),該編譯結(jié)構(gòu)配置用以編譯源代碼為用于該主要處理器的可執(zhí)行代碼;對(duì)該可執(zhí)行代碼進(jìn)行程序概要分析以產(chǎn)生用于該可執(zhí)行代碼頻繁涉及部分的指令追蹤;通過(guò)產(chǎn)生預(yù)取指令以預(yù)取該指令追蹤部分進(jìn)入一個(gè)由該主要處理器可訪問(wèn)的高速緩存,產(chǎn)生用于該輔助處理器的該可執(zhí)行代碼的簡(jiǎn)化版本;和將通信指令插入到用于主要處理器的該可執(zhí)行代碼,和插入到用于輔助處理器的該可執(zhí)行代碼的簡(jiǎn)化版本,以從該主要處理器傳送進(jìn)展信息給該輔助處理器;其中該進(jìn)展信息觸發(fā)該輔助處理器以執(zhí)行該預(yù)取操作。
19.根據(jù)權(quán)利要求18的裝置,其中如果給該輔助處理器的該進(jìn)展信息表示該輔助處理器已經(jīng)沿著錯(cuò)誤的路徑預(yù)取指令,該可執(zhí)行代碼的簡(jiǎn)化版本使得該輔助處理器中斷預(yù)取。
20.根據(jù)權(quán)利要求17的裝置,進(jìn)一步包括記錄用于該可執(zhí)行代碼的分支歷史信息和調(diào)用歷史信息的專用的硬件,并且其中該可執(zhí)行代碼的簡(jiǎn)化版本被配置為從記錄分支歷史信息和調(diào)用歷史信息的專用的硬件讀取控制流程歷史信息;基于該控制流程歷史信息,構(gòu)成一個(gè)經(jīng)由該可執(zhí)行代碼推算的路徑;和沿著該推算的路徑執(zhí)行預(yù)取操作,以預(yù)取用于該主要處理器的指令。
21.根據(jù)權(quán)利要求17的裝置,其中在產(chǎn)生該可執(zhí)行代碼的簡(jiǎn)化版本方面,該編譯結(jié)構(gòu)被配置為構(gòu)成一個(gè)用于該可執(zhí)行代碼的控制流程圖;從該控制流程圖除去循環(huán);除去與該控制流程圖無(wú)關(guān)的可執(zhí)行代碼指令;和將該預(yù)取指令插入到該可執(zhí)行代碼的簡(jiǎn)化版本中,以從該可執(zhí)行代碼預(yù)取用于該主要處理器的指令。
22.根據(jù)權(quán)利要求17的裝置,其中該預(yù)取操作被配置為預(yù)取包含用于該主要處理器的多個(gè)指令的高速緩存模塊。
23.根據(jù)權(quán)利要求17的裝置,其中該主要處理器和該輔助處理器駐留在相同的半導(dǎo)體芯片上。
24.根據(jù)權(quán)利要求17的裝置,其中該主要處理器和該輔助處理器駐留在不同的半導(dǎo)體芯片上。
25.根據(jù)權(quán)利要求17的裝置,其中該輔助處理器是該主要處理器的簡(jiǎn)化版本,該主要處理器無(wú)需與內(nèi)存存取操作無(wú)關(guān)的硬件。
全文摘要
本發(fā)明的一個(gè)實(shí)施例提供了一種系統(tǒng),其通過(guò)使用一個(gè)輔助處理器在一個(gè)主要處理器之前執(zhí)行預(yù)取操作來(lái)預(yù)取指令。通過(guò)在該主要處理器上執(zhí)行可執(zhí)行代碼且同時(shí)在該輔助處理器上執(zhí)行一個(gè)簡(jiǎn)化版本的可執(zhí)行代碼來(lái)操作該系統(tǒng)。這個(gè)簡(jiǎn)化版本的可執(zhí)行代碼比該可執(zhí)行代碼執(zhí)行更加迅速,并且在該主要處理器需要該指令之前,為該主要處理器執(zhí)行預(yù)取操作。該系統(tǒng)也存儲(chǔ)該預(yù)取指令到一個(gè)由該主要處理器可訪問(wèn)的高速緩存,從而無(wú)需從主內(nèi)存取回該預(yù)取指令,該主要處理器即能夠訪問(wèn)該預(yù)取指令。在本發(fā)明的一個(gè)實(shí)施例中,在執(zhí)行該可執(zhí)行代碼之前,該系統(tǒng)編譯源代碼為用于該主要處理器的可執(zhí)行代碼。然后,該系統(tǒng)對(duì)該可執(zhí)行代碼進(jìn)行程序概要分析以產(chǎn)生該可執(zhí)行代碼頻繁涉及部分的指令追蹤。然后,該系統(tǒng)通過(guò)產(chǎn)生預(yù)取指令而將該指令追蹤部分預(yù)取到一個(gè)該主要處理器可訪問(wèn)的高速緩存中,產(chǎn)生用于該輔助處理器的可執(zhí)行代碼的簡(jiǎn)化版本。該系統(tǒng)也插入通信指令到用于主要處理器的該可執(zhí)行代碼和用于輔助處理器的可執(zhí)行代碼的簡(jiǎn)化版本中,以從該主要處理器傳送進(jìn)展信息給該輔助處理器。這個(gè)進(jìn)展信息觸發(fā)該輔助處理器執(zhí)行預(yù)取操作。
文檔編號(hào)G06F12/08GK1466716SQ01816274
公開(kāi)日2004年1月7日 申請(qǐng)日期2001年8月30日 優(yōu)先權(quán)日2000年9月8日
發(fā)明者S·喬杜里, M·特倫布萊, S 喬杜里, 撞祭 申請(qǐng)人:太陽(yáng)微系統(tǒng)公司