專利名稱:中央處理單元中的提前執(zhí)行的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)系統(tǒng);更特別地,本發(fā)明涉及中央處理單元(CPUs)。
背景技術(shù):
計算機(jī)系統(tǒng)CPUs中提前執(zhí)行(runahead execution)的實現(xiàn),是為了容許必須由主存儲器提供服務(wù)的CPU高速緩存中的長等待時間加載遺漏。特別地,當(dāng)從存儲器讀取數(shù)據(jù)時,由于長等待時間加載遺漏阻塞依次撤回(in-orderretirement)長達(dá)數(shù)百個周期導(dǎo)致緩存器全停止,提前執(zhí)行使用這些由于對上述緩存器重新排序而產(chǎn)生的空閑時鐘周期。。
建議的提前執(zhí)行模型包括檢查寄存器狀態(tài),推理地執(zhí)行位于加載遺漏的陰影區(qū)中(例如,遺漏的負(fù)載之后)的指令,直到遺漏的數(shù)據(jù)被讀取,確保推理性的提前執(zhí)行不會導(dǎo)致存儲器狀態(tài)的更新,使用壞位(poison bits)以確保調(diào)度程序不受阻,當(dāng)遺漏數(shù)據(jù)返回時放棄推理性的提前執(zhí)行狀態(tài),恢復(fù)被檢查的寄存器狀態(tài),并且重新開始執(zhí)行。
建議的提前方案存在的問題是,檢查寄存器狀態(tài)以及使用壞位以確保推理性提前執(zhí)行不停止調(diào)度程序的步驟需要附加的硬件,這增加了CPU設(shè)計的復(fù)雜性和成本。
附圖簡述本發(fā)明通過實例方式加以說明,并且不限于附圖中的各幅圖,其中相同的參考指示類似的部件,其中
圖1是計算機(jī)系統(tǒng)的一個實施例的方塊圖;圖2描繪了CPU的一個實施例的方塊圖;圖3描繪了讀取/解碼單元的一個實施例的方塊圖;圖4描繪了撤回單元的一個實施例;圖5描繪了提前執(zhí)行的實施例的流程圖;圖6描繪了重新排序緩沖器的一個實施例;以及圖7描繪了重新排序緩沖器的另一個實施例。
詳細(xì)說明下文描述了CPU中的提前執(zhí)行。該提前執(zhí)行過程包括當(dāng)加載遺漏到達(dá)重新排序緩沖器的頭部時停止寄存器文件更新。然后,繼續(xù)加載遺漏的推理性提前和撤回,以及遺漏之后的指令而不更新寄存器文件或者發(fā)布存儲到存儲器。當(dāng)未重命名的寄存器被撤回時,它們被保留在重新排序緩沖器中。這是通過重新排序緩沖器的頭部和尾部的指針調(diào)整將未重命名的寄存器從重新排序緩沖器的頭部復(fù)制到尾部而實現(xiàn)的。接著,當(dāng)數(shù)據(jù)遺漏返回時,通路被清除(flushed)。最后,使用寄存器文件中加載遺漏的凍結(jié)狀態(tài)重新開始執(zhí)行。
在以下本發(fā)明的詳細(xì)說明中,為了提供對本發(fā)明的全面理解而闡明了多個具體的細(xì)節(jié)。然而,對于本領(lǐng)域中的技術(shù)人員來說,顯而易見的是,沒有這些具體的細(xì)節(jié)本發(fā)明也可以實現(xiàn)。在其他的例子中,為了避免使本發(fā)明難以理解,公知的結(jié)構(gòu)和設(shè)備以方框圖的形式示出,而不示出細(xì)節(jié)。
說明書中引用的“一個(one)實施例”或“一(an)實施例”意味著,實施例中描述的特殊的特征,結(jié)構(gòu),或特性包括在本發(fā)明的至少一個實施例中。說明書中不同位置中出現(xiàn)的短語“在一個實施例中”并不需要全部都指向同一個實施例。
圖1是計算機(jī)系統(tǒng)100的一個實施例的方塊圖。計算機(jī)系統(tǒng)100包括連接到總線105的中央處理單元(CPU)102。芯片組107也連接到總線105。芯片組107包括存儲器控制集線器(MCH)110。MCH110可以包括連接到一主系統(tǒng)存儲器115的一存儲器控制器112。主系統(tǒng)存儲器115存儲由CPU102或者系統(tǒng)100中包含的任意其他設(shè)備執(zhí)行的數(shù)據(jù)和指令序列。
在一個實施例中,主系統(tǒng)存儲器115包括動態(tài)隨機(jī)存取存儲器(DRAM);然而,主系統(tǒng)存儲器115也可以使用其他類型的存儲器實現(xiàn)。附加的設(shè)備也可以連接到總線105,諸如多個CPUs和/或多個系統(tǒng)存儲器。MCH110通過集線器接口連接到輸入/輸出控制集線器(ICH)140。ICH140為計算機(jī)系統(tǒng)100中的輸入/輸出(I/O)設(shè)備提供接口。
圖2描繪了CPU102的一個實施例的方塊圖。CPU102包括讀取/解碼單元210,發(fā)送/執(zhí)行單元220,撤回單元230以及重新排序緩沖器(ROB)240。讀取/解碼單元210是一個有序的單元,它從指令高速緩存(未示出)取出一用戶程序指令流作為輸入并且將該流解碼為一系列體現(xiàn)該流的數(shù)據(jù)流的微操作(uops)。
圖3描繪了讀取/解碼單元210的一個實施例的方塊圖。讀取/解碼單元210包括指令高速緩存(Icache)310,指令解碼器320,分支目標(biāo)緩沖器330,指令序列發(fā)生器340以及注冊別名表(RAT)350。Icache310是一個本地指令高速緩存,它根據(jù)分支目標(biāo)緩沖器330提供的索引來讀取超高速緩沖存儲器線的指令。
指令被送到解碼器320,它將該指令轉(zhuǎn)換成uops。使用由序列發(fā)生器340提供的微代碼將一些指令解碼成一到四個uops。該uops被排列并被轉(zhuǎn)發(fā)到RAT350,在這里,寄存器引用被轉(zhuǎn)換成物理寄存器引用。然后這些uops被傳送到ROB240。
返回參考圖2,發(fā)送/執(zhí)行單元220是一個無序單元,它接收數(shù)據(jù)流,調(diào)度執(zhí)行依賴于數(shù)據(jù)和資源有效性的uops并且暫時地存儲推理性執(zhí)行的結(jié)果。撤回單元230是一個有序單元,它將暫時的、推理性的結(jié)果指定(撤回)為永久狀態(tài)。
圖4描繪了撤回單元230的一個實施例的方塊圖。撤回單元230包括一寄存器文件(RF)410。撤回單元230從ROB240中讀取潛在的候選者用于撤回并且確定這些候選者中的哪些是原程序序列中的下一個。撤回的結(jié)果被寫入到RF410。
ROB240是一個重新排序機(jī)構(gòu),它通過有效地保持暫時的指令結(jié)果直到得知前面的指令結(jié)果,從而維持一結(jié)構(gòu)狀態(tài)。根據(jù)一個實施例,ROB240的實施用于簡化CPU102中的提前執(zhí)行,正如下面將要更加詳細(xì)討論的。
如上所述,提前執(zhí)行使用由于重新排序緩沖器全停止而遇到的空閑時鐘周期。這些停止是由于從主存儲器讀取數(shù)據(jù)時阻塞有序撤回達(dá)數(shù)百個周期的長等待時間加載遺漏的結(jié)果。圖5描繪了提前執(zhí)行的實施例的流程圖。在處理模塊510中,檢測到了一加載遺漏。在處理模塊520中,當(dāng)一加載遺漏到達(dá)ROB240的頭部時,RF410的更新被停止。
在處理模塊530中,繼續(xù)執(zhí)行加載遺漏的推理性提前和撤回以及遺漏之后的指令。根據(jù)一個實施例,執(zhí)行推理性提前和撤回而不更新RF410或者發(fā)布存儲到存儲器115。在處理模塊540中,當(dāng)那些還沒有被重命名的RF410中的該寄存器被撤回時,它們被保存在ROB240中。在一個實施例中,這是通過頭部和尾部的指針調(diào)整,將未重新命名的寄存器從ROB410的頭部復(fù)制到尾部實現(xiàn)的。
在處理模塊550中,當(dāng)從存儲器115返回加載遺漏的數(shù)據(jù)時,CPU102的流水線被清除。在處理模塊560中,使用RF410中加載遺漏的凍結(jié)狀態(tài)重新開始執(zhí)行。在一個實施例中,將寄存器數(shù)據(jù)從發(fā)生器轉(zhuǎn)發(fā)到消費者uops以便實施提前執(zhí)行。由于提前模式中的RF410更新被凍結(jié)以避免執(zhí)行檢測寄存器狀態(tài),ROB240和一轉(zhuǎn)回數(shù)據(jù)旁路,被用于轉(zhuǎn)發(fā)寄存器的值。其結(jié)果是,撤回過程被修改。
在一個實施例中,每當(dāng)uop具有已經(jīng)被重命名的邏輯寄存器目的地,則該uop被安全地撤回,而它的值被放棄。此外,由于寄存器已經(jīng)被重命名,新讀取的uops不需要該寄存器,而發(fā)送/執(zhí)行引擎220中等待預(yù)定位置的讀取器已經(jīng)從ROB240或轉(zhuǎn)回數(shù)據(jù)旁路中獲取了該值。圖6描繪了當(dāng)ROB240滿時,撤回ROB240中重命名的寄存器的動作的一個實施例。如圖6中所示,條目被釋放而值被放棄。
在進(jìn)一步的實施例中,當(dāng)一uop具有一個沒有被重命名的邏輯寄存器時,則終止撤回直到它被重命名,或者直到ROB240裝滿為止。如果當(dāng)ROB240裝滿時寄存器沒有被重命名,通過提前ROB240的頭部指針而不停止撤回,不需要放棄uop的目的地寄存器的值。在一個實施例中,這是通過提前ROB240的頭部指針和尾部指針來實現(xiàn)的。
提前兩個指針有效地將uop和它的值從ROB240頭部移動到尾部,而不需要實際地讀寫ROB240條目。由于不改變ROB240中的位置將uop從ROB240的頭部移動到尾部,一RAT350重命名表為該邏輯寄存器保持正確的位置。圖7描繪了當(dāng)ROB240裝滿時,撤回ROB240中沒有重新命名的寄存器的動作的一個實施例。如圖7中所示,與頭部指針一起提前尾部指針,留下uop和它在ROB240和RAT350中的輸出用于以后的讀取器。
還執(zhí)行了其他的修改以使在CPU102中的提前執(zhí)行能夠?qū)崿F(xiàn)。在一個實施例中,ROB240寄存器轉(zhuǎn)發(fā)機(jī)構(gòu)中具有重命名目的地址的uops被識別。在該實施例中,為了避免必須增加RAT350端口的數(shù)量,以半重命名帶寬執(zhí)行提前并且變得可用的讀取端口被用于為所有資源以及重命名的uops的目的地讀取RAT350。由邏輯目的地索引的RAT350中的ROB240條目是重命名的uopROB240條目。該ROB240條目中一重命名的位可以被設(shè)置為將條目標(biāo)記為重命名的。應(yīng)當(dāng)注意到,其他實施例中,可以簡單地增加RAT端口的數(shù)量。
在一個進(jìn)一步的實施例中,從推理性存儲器推理性加載的數(shù)據(jù)在提前執(zhí)行中被轉(zhuǎn)發(fā)。在該實施例中,推理性存儲被存儲在存儲緩沖器中,甚至在它們在ROB240中的“偽撤回”之后,以允許轉(zhuǎn)發(fā)到可能需要存儲數(shù)據(jù)的任意加載。
然而,當(dāng)存儲器緩沖器裝滿時,最舊的提前存儲被放棄而不將這些存儲發(fā)布到存儲器113,從而為新的提前存儲提供空間。作為該機(jī)構(gòu)的結(jié)果,用于從廢棄的存儲中接收數(shù)據(jù)的提前加載將改為從高速緩沖存儲器中讀取舊數(shù)據(jù)。此外,由于RF240的狀態(tài)在加載遺漏點被凍結(jié),當(dāng)在提前模式中時,跳轉(zhuǎn)執(zhí)行清除(JEClear)被禁止。
上述的機(jī)構(gòu)可以實現(xiàn)提前執(zhí)行,同時為了提前執(zhí)行而避免檢查和恢復(fù)寄存器文件。此外,提供了一種快速,費用低的機(jī)構(gòu),用于通過ROB將寄存器的值從生產(chǎn)者傳送到消費者uops而不必在撤回時更新寄存器文件。
然而,在閱讀了以上的說明書之后,本發(fā)明的各種改變和修飾對于本領(lǐng)域的普通技術(shù)人員來說將無疑是顯而易見的,應(yīng)當(dāng)理解的是,通過圖解顯示和描述的所有特定的實施例并不用于限定。因此,不同實施例的參考細(xì)節(jié)不用于限定權(quán)利要求的范圍,在權(quán)利要求中只引用被認(rèn)為對發(fā)明必要的那些特征。
權(quán)利要求
1.一種方法,包括檢測中央處理單元(CPU)中的加載遺漏;停止重新排序緩沖器(ROB);推理性地撤回使ROB停止的指令以及后面的指令;當(dāng)撤回時保留ROB中還沒有被重命名的寄存器;以及當(dāng)從加載遺漏接收數(shù)據(jù)時,清除CPU的流水線。
2.根據(jù)權(quán)利要求1所述的方法,其中,在停止ROB的步驟中包括當(dāng)加載遺漏到達(dá)ROB的頭部時在一寄存器文件中停止寄存器文件更新。
3.根據(jù)權(quán)利要求1所述的方法,其中,導(dǎo)致ROB停止的指令的推理性提前和撤回以及隨后的指令被執(zhí)行,而不更新寄存器文件。
4.根據(jù)權(quán)利要求3所述的方法,其中,導(dǎo)致ROB停止的指令以及隨后的指令的推理性提前和撤回被進(jìn)一步執(zhí)行,而不發(fā)布存儲到存儲設(shè)備。
5.根據(jù)權(quán)利要求3所述的方法,進(jìn)一步包括使用在寄存器文件中導(dǎo)致ROB停止的指令的被停止?fàn)顟B(tài)重新開始執(zhí)行。
6.根據(jù)權(quán)利要求1所述的方法,其中,在撤回時保留ROB中的寄存器的步驟包括通過頭部和尾部的指針調(diào)整將沒有被重命名的寄存器從ROB的頭部復(fù)制到尾部。
7.根據(jù)權(quán)利要求1所述的方法,其中,推理性地運(yùn)行導(dǎo)致ROB停止的指令和隨后指令的撤回的步驟中,進(jìn)一步包括將寄存器數(shù)據(jù)從生產(chǎn)者微操作(uops)轉(zhuǎn)發(fā)到消費者uops。
8.根據(jù)權(quán)利要求7所述的方法,進(jìn)一步包括每當(dāng)uop具有一被重命名的邏輯寄存器目的地時,就撤回該uop。。
9.根據(jù)權(quán)利要求7所述的方法,進(jìn)一步包括每當(dāng)uop具有一未被重命名的邏輯寄存器時,就回收該uop的ROB條目。
10.根據(jù)權(quán)利要求9所述的方法,進(jìn)一步包括停止uop撤回直到ROB被裝滿。
11.根據(jù)權(quán)利要求10所述的方法,進(jìn)一步包括通過提前ROB的頭部指針,如果ROB被裝滿,則不停止uop的撤回。
12.根據(jù)權(quán)利要求11所述的方法,進(jìn)一步包括提前ROB的頭部指針而不放棄uop目的地寄存器的值。
13.一種計算機(jī)系統(tǒng),包括主存儲器設(shè)備,以及與主存儲器設(shè)備連接的中央處理單元(CPU),包括一只讀緩沖器(ROB);一寄存器文件;以及一通過停止ROB而執(zhí)行推理性提前執(zhí)行的與執(zhí)行單元。
14.根據(jù)權(quán)利要求13所述的計算機(jī)系統(tǒng),其中,所述CPU進(jìn)一步包括撤回單元,在推理性提前執(zhí)行期間推理性撤回使ROB停止的指令以及后面的指令。
15.根據(jù)權(quán)利要求14所述的計算機(jī)系統(tǒng),其中,使ROB停止的指令和后面指令的推理性提前執(zhí)行以及撤回被執(zhí)行而不更新寄存器文件或者存儲到主存儲器設(shè)備。
16.根據(jù)權(quán)利要求15所述的計算機(jī)系統(tǒng),其中,ROB通過頭部和尾部的指針調(diào)整,將還沒有被重命名的寄存器從ROB的頭部復(fù)制到尾部,通過這種方法,ROB保持在撤回時還沒有被重命名的寄存器。
17.根據(jù)權(quán)利要求13所述的計算機(jī)系統(tǒng),其中,所述執(zhí)行通過使用導(dǎo)致ROB在寄存器文件中停止的指令的停止?fàn)顟B(tài)來重新開始執(zhí)行。
18.根據(jù)權(quán)利要求13所述的計算機(jī)系統(tǒng),其中,所述執(zhí)行單元通過將寄存器數(shù)據(jù)從生產(chǎn)者微操作(uops)轉(zhuǎn)發(fā)到消費者uops以執(zhí)行推理性提前執(zhí)行。
19.一種中央處理單元(CPU),包括一只讀緩沖器(ROB);和一寄存器文件;和一通過停止ROB以執(zhí)行推理性提前執(zhí)行的與執(zhí)行單元。
20.根據(jù)權(quán)利要求19所述的CPU,其中,當(dāng)加載遺漏到達(dá)ROB的頭部時,所述執(zhí)行單元通過在寄存器文件中停止寄存器文件更新從而停止ROB。
21.根據(jù)權(quán)利要求19所述的CPU,進(jìn)一步包括一撤回單元,用于在推理性提前執(zhí)行期間撤回使ROB停止的指令以及后面的指令。
22.根據(jù)權(quán)利要求21所述的CPU,其中,使ROB停止的指令和后續(xù)指令的所述推理性提前執(zhí)行和撤回被執(zhí)行,而不更新寄存器文件或存儲到主存儲器設(shè)備。
23.根據(jù)權(quán)利要求19所述的CPU,其中的ROB通過頭部和尾部的指針調(diào)整,將還沒有被重命名的寄存器從ROB的頭部復(fù)制到尾部,通過這種方法,保持還沒有被重命名的寄存器。
全文摘要
根據(jù)一個實施例,公開了一種方法。該方法包括檢測中央處理單元(CPU)中的加載遺漏,停止只讀緩沖器(ROB),推理性地撤回使ROB停止的指令以及后面的指令,當(dāng)撤回時保持ROB中還沒有被重命名的寄存器,以及當(dāng)從加載遺漏接收數(shù)據(jù)時清除CPU的通路。
文檔編號G06F9/38GK1831757SQ20051012176
公開日2006年9月13日 申請日期2005年12月28日 優(yōu)先權(quán)日2004年12月28日
發(fā)明者A·海薩姆, D·奧倫斯坦恩, R·拉吉瓦, S·斯利尼瓦薩恩 申請人:英特爾公司