專利名稱:還原寄存器重命名映射的制作方法
還原寄存器重命名映射
背景技術(shù):
亂序微處理器通過以不同于程序中順序的序列來執(zhí)行指令能提供提高的計算性能,使得指令當(dāng)其輸入數(shù)據(jù)可用時被執(zhí)行,而不是等待程序中前面的指令的執(zhí)行。為了允許指令在微處理器上亂序運行,能夠重命名指令使用的寄存器是有用的。這使得能從指令中移除“寫后讀”(WAR)依賴,因為這些依賴不是真正的依賴。通過使用寄存器重命名和移除這些依賴,能不按照程序序列執(zhí)行更多的指令,并且進一步提升了性能。寄存器重命名通過維護映射來執(zhí)行,其中,在指令中命名的寄存器(稱為架構(gòu)寄存器)被映射到微處理器的物理寄存器上。但是在程序中的指令的流程在執(zhí)行期間有時會改變。例如,在分支指令的情況下,分支預(yù)測經(jīng)常被用于預(yù)測將采用哪個指令分支,來允許推測地亂序執(zhí)行在預(yù)測分支的指令。這意味著會發(fā)生分支錯誤預(yù)測,這可能在已發(fā)送許多推測指令通過寄存器重命名級并且進入執(zhí)行管道之后被意識到。為了在采用不正確預(yù)測的分支之后,允許重置程序流程并且正確地繼續(xù),“回繞”寄存器重命名映射到錯誤預(yù)測分支通過寄存器重命名級時的狀態(tài)。其他指令在程序流程中引起意外改變(例如中斷或異常)的情況下也能看到類似的效果。當(dāng)前的亂序處理器通過每當(dāng)可能是流程風(fēng)險(flow risk)(此處流程風(fēng)險包括中斷、異常、分支或當(dāng)被執(zhí)行時會在執(zhí)行流程中引起改變的任何其他指令)的指令通過寄存器重命名級時,保存寄存器重命名映射的快照來實現(xiàn)寄存器重命名映射的回繞。但是,這需要提供大量的存儲來在其中保存所有的快照,因為如果所有的快照存儲都被使用,則必須停滯指令流,直到能再次保存快照,這就犧牲了性能。在下文中描述的實施例不限于解決任何或所有已知的亂序微處理器的缺點的實現(xiàn)。
發(fā)明內(nèi)容
本發(fā)明內(nèi)容被提供來以簡化的方式介紹在下文的具體實施方式
中進一步描述的概念中選擇的一些概念。本發(fā)明內(nèi)容并不旨在標(biāo)識所要求保護的主題的關(guān)鍵特征或必要特征,也不旨在用來幫助確定所要求保護的主題的范圍。描述了一種用于還原寄存器重命名映射的技術(shù)。在一個示例中,每當(dāng)向重排序緩沖器傳遞流程風(fēng)險指令時,具有多個存儲位置的還原表保存寄存器重命名映射的拷貝。當(dāng)所有存儲位置已滿時,仍向所述重排序緩沖器傳遞進一步的指令,但是不保存映射的拷貝。當(dāng)執(zhí)行與存儲位置關(guān)聯(lián)的流程風(fēng)險指令時,所述存儲位置隨后變得可用。在所述存儲位置已滿時的用于傳遞到所述重排序緩沖器的未記錄的流程風(fēng)險指令的寄存器重命名映射的狀態(tài)被產(chǎn)生并且被存儲在所述可用的位置。所述寄存器重命名映射的狀態(tài)是使用用于先前的流程風(fēng)險指令的還原表條目和用于中間指令的重排序緩沖器值來產(chǎn)生的,所述中間指令在所述先前的流程風(fēng)險指令和所述未記錄的流程風(fēng)險指令之間。如果在指令流程中發(fā)生意外改變,則能用所述還原表來還原所述映射。根據(jù)一個方面,提供了一種在亂序處理器中還原寄存器重命名映射的方法,包括:每當(dāng)將流程風(fēng)險指令插入到重排序緩沖器時,將所述寄存器重命名映射的狀態(tài)的拷貝存儲到還原表的一個存儲位置,直到所有存儲位置都被使用;確定隨后已變得可用的存儲位置;基于先前存儲的用于較舊的流程風(fēng)險指令的寄存器重命名映射的狀態(tài)和存儲在所述重排序緩沖器中的用于中間指令的值,產(chǎn)生在所有存儲位置都已被使用時用于插入到所述重排序緩沖器中的未記錄的流程風(fēng)險指令的得出的寄存器重命名映射的狀態(tài),其中,所述中間指令插入在所述較舊的流程風(fēng)險指令和所述未記錄的流程風(fēng)險指令之間;將用于所述未記錄的流程風(fēng)險指令的所述得出的寄存器重命名映射的狀態(tài)存儲到所述可用的存儲位置;以及在這些流程風(fēng)險指令中的一個的執(zhí)行在指令流程中引起意外改變的情況下,使用在所述還原表中的與該個流程風(fēng)險指令相關(guān)聯(lián)的寄存器重命名映射的狀態(tài)來還原所述寄存器重命名映射。根據(jù)另一方面,提供了一種亂序處理器,包括:寄存器重命名映射;重排序緩沖器;以及包括多個存儲位置的還原表,其中,所述處理器用于:響應(yīng)于流程風(fēng)險指令被插入到所述重排序緩沖器,將所述寄存器重命名映射的狀態(tài)的拷貝存儲到所述多個存儲位置中的一個,直到所有存儲位置都被使用;確定隨后已變得可用的存儲位置,并且響應(yīng)于此,基于先前存儲的用于較舊的流程風(fēng)險指令的寄存器重命名映射的狀態(tài)和存儲在所述重排序緩沖器中的用于中間指令的值,產(chǎn)生在所有存儲位置都已被使用時用于插入到所述重排序緩沖器中的未記錄的流程風(fēng)險指令的得出的寄存器重命名映射的狀態(tài),其中,所述中間指令插入在所述較舊的流程風(fēng)險指令和所述未記錄的流程風(fēng)險指令之間;將用于所述未記錄的流程風(fēng)險指令的所述得出的寄存器重命名映射的狀態(tài)存儲到所述可用的存儲位置;以及在這些流程風(fēng)險指令中的一個的執(zhí)行在指令流程中引起意外改變的情況下,使用在所述還原表中的與該個流程風(fēng)險指令相關(guān)聯(lián)的寄存器重命名映射的狀態(tài)來還原所述寄存器重命名映射??梢杂迷谟行蔚拇鎯橘|(zhì)上的機器可讀形式的軟件來執(zhí)行在本文中描述的方法,例如,用計算機程序的形式,所述計算機程序包括當(dāng)所述程序在計算機上運行時并且在所述計算機程序可以體現(xiàn)在計算機可讀介質(zhì)上的情況下,適于執(zhí)行在本文中描述的任意方法的所有步驟的計算機程序代碼模塊。有形的(或非暫態(tài)的)存儲介質(zhì)的示例包括磁盤、拇指驅(qū)動器、存儲卡等,并且不包括傳播的信號。所述軟件可以適合于在并行處理器或串行處理器上執(zhí)行,使得可以用任意適當(dāng)?shù)捻樞蚧蛲瑫r執(zhí)行所述方法的步驟。這表明固件和軟件可以是有價值的、可獨立交易的商品。旨在包括在“啞的”(dumb)或標(biāo)準(zhǔn)硬件上運行或控制“啞的”或標(biāo)準(zhǔn)硬件來執(zhí)行所需的功能的軟件。還旨在包括當(dāng)被用于設(shè)計硅芯片或用于配置通用可編程芯片時“描述”或定義硬件配置以執(zhí)行所需的功能的軟件,例如HDL (硬件描述語言)軟件。如對本領(lǐng)域的技術(shù)人員顯而易見的是,可以適當(dāng)?shù)亟M合上述的特征,并且上述特征可以與這些示例的任意方面組合。
將通過示例方式參考下列附圖來描述實施例,其中:圖1示出了具有寄存器重命名映射還原表的亂序處理器;圖2示出了用于保存寄存器重命名映射的狀態(tài)的過程的流程圖3示出了產(chǎn)生用于未記錄的流程風(fēng)險指令的寄存器重命名映射的狀態(tài)的過程的流程圖;圖4示出了示例性的還原表更新序列;圖5示出了用于使用還原表還原寄存器重命名映射的過程的流程圖;圖6示出了具有寄存器重命名映射還原表和提交映射的亂序處理器;以及圖7示出了用于使用提交映射還原寄存器重命名映射的過程的流程圖。貫穿圖中使用的共同的標(biāo)號表示類似的特征。
具體實施例方式僅通過示例的方式在下文中描述實施例。這些示例表示了本申請人目前已知的將實施例付諸于實踐的最佳方法,但是它們不是可以實現(xiàn)此的僅有方法。說明書闡述了示例的功能和用于構(gòu)建與操作示例的步驟序列。但是,可以用不同的示例完成相同的或等同的功能和序列。下文描述的是用于還原寄存器重命名映射以從亂序處理器中的程序流程中的意外改變中恢復(fù)的技術(shù)。描述了兩種技術(shù),其能被組合來進一步提高性能。與對于發(fā)出的每一個流程風(fēng)險指令,都保存寄存器重命名映射的狀態(tài)的快照的技術(shù)相比,第一種技術(shù)減少了用于實現(xiàn)從意外流程改變中恢復(fù)的存儲空間量。這種技術(shù)在“還原表”中保留了預(yù)定量的存儲位置,用于每當(dāng)流程風(fēng)險通過寄存器重命名級時,存儲寄存器重命名映射的狀態(tài)的拷貝。但是,一旦所有的這些存儲位置已滿,則不會停滯指令流,并且仍允許指令通過寄存器重命名級。當(dāng)隨后執(zhí)行流程風(fēng)險指令時,不再需要與這個指令關(guān)聯(lián)的寄存器重命名映射的狀態(tài)的拷貝,所以能丟掉所述拷貝。這就釋放了存儲位置。在存儲位置已滿時通過重命名級的未記錄的流程風(fēng)險指令(即,針對其的寄存器重命名映射的拷貝先前未被存儲的流程風(fēng)險指令)的寄存器重命名映射的狀態(tài)可以通過以下方式來得出:從先前存儲的用于較舊的流程風(fēng)險指令的寄存器重命名映射的狀態(tài)開始,并且通過與至較新的未記錄的流程風(fēng)險指令的中間指令一起工作來對其進行更新。如果需要,所得出的寄存器重命名映射的狀態(tài)在這個流程風(fēng)險指令在程序流程中引起意外改變的情況下,能被用于還原寄存器重命名映射。這種技術(shù)使能較少量的存儲被用于保存寄存器重命名映射的狀態(tài),并且當(dāng)所有的存儲位置已滿時,不會停滯指令流,而是仍允許從需要被盡快執(zhí)行的情況(例如分支錯誤預(yù)測)中恢復(fù)。第二種技術(shù)也減少了還原寄存器重命名映射需要的存儲空間量。這是通過在“寄存器提交映射”中維護提交的指令的寄存器重命名映射的狀態(tài)的拷貝來實現(xiàn)的,即保存用于在處理器亂序部分末端的那些指令的寄存器重命名映射的狀態(tài)。一旦提交了指令,在還原寄存器重命名映射的情況下,該指令不再有被“回繞”的風(fēng)險。通過維護寄存器提交映射,當(dāng)在程序流程中引起意外的改變的指令到達提交級時,通過將寄存器提交映射的狀態(tài)拷貝到寄存器重命名映射,能還原寄存器重命名映射。這減少了存儲空間量,因為不需要保存用于所有類型的流程風(fēng)險指令的寄存器重命名映射的快照。替代地,使用空間高效的寄存器提交映射來還原會引起流程風(fēng)險靠近提交時間的那些指令,或在正常操作中不應(yīng)引起流程改變但是當(dāng)它們進行時仍需要被處理的指令(例如異常)。
首先參考圖1至5來描述第一種技術(shù),并且參考圖6至I在下文中描述另外的第二種技術(shù)。首先參考圖1,其示出了具有寄存器重命名映射還原表的亂序處理器。亂序處理器包括取指級102與解碼和重命名級104,所述取指級102被安排為取得來自程序的由程序計數(shù)器(PC)指示的(以程序順序)的指令,并且解碼和重命名級104被安排為解釋所述指令并且執(zhí)行寄存器重命名。寄存器重命名通過移除寫后讀(WAR)依賴,使更多的指令能被亂序執(zhí)行。例如,考慮下列兩個指令(表示為Il和12):Il:R3=Rl+2I2:R1=R2因為Rl是12的目標(biāo)寄存器,所以不能在Il之前評估12,否則當(dāng)評估Il時,存儲在Rl中的值是不正確的。但是,在所述指令之間沒有“真正的”依賴,并且這意味著能使用寄存器重命名。例如,12能具有其如下重命名的目標(biāo)寄存器:I2:R4=R2因為目標(biāo)寄存器已經(jīng)被改變?yōu)镽4,所以現(xiàn)在在Il和12之間沒有依賴,并且能亂序執(zhí)行這兩個指令。重命名級104能通過維護在處理器上的架構(gòu)寄存器和物理寄存器之間的映射來執(zhí)行寄存器重命名。架構(gòu)寄存器是在指令中使用的寄存器的名稱/標(biāo)識符。物理寄存器是在處理器上存在的實際存儲位置。一般來說,物理寄存器多于架構(gòu)寄存器。重命名級104對于每一個指令,確定分配哪些架構(gòu)寄存器給哪些物理寄存器,并且通過這樣做,能移除WAR依賴。例如,考慮上文的示例,當(dāng)Il被傳遞到重命名級時,架構(gòu)寄存器Rl能被映射到物理寄存器P1,而當(dāng)12被傳遞到重命名級時,架構(gòu)寄存器Rl能被映射到物理寄存器P2。這意味著這些指令不會沖突,因為在每一個指令中的Rl映射到不同的存儲位置。重命名級104維護寄存器重命名映射106,所述寄存器重命名映射106是示出了最近分配給它的在每一個架構(gòu)寄存器和物理寄存器之間的映射的存儲的數(shù)據(jù)結(jié)構(gòu)。在圖1的示例中,寄存器重命名映射106包括指示物理寄存器標(biāo)識符的、由架構(gòu)寄存器標(biāo)識符索引四個條目。例如,架構(gòu)寄存器O當(dāng)前映射到物理寄存器6,架構(gòu)寄存器I當(dāng)前映射到物理寄存器5等。當(dāng)指令通過重命名級104時,其被插入到重排序緩沖器108 (ROB)中。重排序緩沖器108是使指令能被亂序執(zhí)行但是被順序提交的緩沖器。重排序緩沖器108保持按照程序順序插入其的指令,但是亂序管道110能不按照序列地執(zhí)行在ROB中的指令。在一些示例中,重排序緩沖器108能被形成為具有指向ROB中最舊指令的頭部和指向ROB中最年輕指令的尾部的循環(huán)緩沖器。按照程序順序從重排序緩沖器108輸出指令。換句話說,當(dāng)指令已被管道110執(zhí)行時,該指令從ROB的頭部輸出,并且頭部被遞增到ROB中的下一指令。從重排序緩沖器108輸出的指令被提供給提交級112,所述提交級112將指令的結(jié)果提交到寄存器/存儲器。處理器還包括分支預(yù)測器114,所述分支預(yù)測器114被安排為在已知會引起可能的流程改變的指令(例如分支指令)的情況下,預(yù)測程序流程將采用哪個方向。分支預(yù)測器是有用的,因為它使能在知道分支指令的結(jié)果之前,通過亂序處理器推測地執(zhí)行指令。分支預(yù)測器114能接收來自取指級102與解碼和重命名級104的關(guān)于新指令的輸入,和來自管道Iio和提交級112的關(guān)于發(fā)出的指令已被如何執(zhí)行的輸入。當(dāng)分支預(yù)測器114準(zhǔn)確地預(yù)測程序流程時,這提高了處理器的性能。但是,如果分支預(yù)測器114沒有正確地預(yù)測分支方向,則發(fā)生需要在程序能繼續(xù)之前被糾正的錯誤預(yù)測。為了糾正錯誤預(yù)測,發(fā)送到ROB的推測指令被丟棄,并且取指級102開始從正確的程序分支取得指令。但是,寄存器重命名映射106也需要糾正,因為寄存器重命名映射106已經(jīng)被通過重命名級104的推測指令更新。因而需要回繞寄存器重命名映射106來還原其在不正確的預(yù)測分支指令之前的狀態(tài)。除了分支錯誤預(yù)測之外,如上文所述,類似的在程序流程中的意外改變也可能由于中斷或異常而發(fā)生。這些情況也導(dǎo)致需要還原寄存器重命名映射106。注意在本文中使用的術(shù)語“流程風(fēng)險”表示可能在程序流程中導(dǎo)致意外改變的任何指令,包括例如分支指令、中斷或異常。換句話說,流程風(fēng)險指令是可能引起處理器的程序計數(shù)器改變的任何指令。一種處理寄存器重命名映射106還原的方法是每一次流程風(fēng)險指令通過重命名級104時,保存寄存器重命名映射的狀態(tài)的快照,使得插入到重排序緩沖器108的每一個流程風(fēng)險指令具有關(guān)聯(lián)的存儲的寄存器重命名映射的狀態(tài)。接著,如果這些流程風(fēng)險指令中的一個在程序流程中引起意外改變,則能使用與違例的流程風(fēng)險指令相關(guān)聯(lián)的存儲的狀態(tài)還原寄存器重命名映射106。但是,這需要提供大量的存儲空間來用于保存這些快照,因為在任何時間都可能有大量的流程風(fēng)險指令潛在地存在于(“運行于”)重排序緩沖器108中。如果沒有足夠的存儲空間存在,并且所述存儲空間被快照完全地占用,則必須停滯指令流直到空間變得可用,否則不能在意外的程序流程改變的情況下還原寄存器重命名映射106。例如,圖1示出了具有八個條目116的重排序緩沖器108。每一個條目是一指令,并且在這個示例中,這些條目中的四個是分支指令(在圖1中用“B”表示的指令)并且因而具有流程風(fēng)險。但是,為了避免停滯指令流的任何可能性,需要提供八個存儲位置來保存寄存器重命名映射106的快照,因為這是運行中的流程風(fēng)險的潛在數(shù)量。圖1示出了用于處理寄存器重命名映射106還原的可替換的技術(shù),所述技術(shù)沒有使用那么多的存儲空間。這種技術(shù)利用了還原表118。還原表118具有預(yù)定數(shù)量的存儲位置,這些存儲位置能被用于存儲寄存器重命名映射的狀態(tài)的拷貝,并且被用于其的還原。但是,在還原表118中的存儲位置的數(shù)量可以少于運行中的流程風(fēng)險指令的潛在數(shù)量而并不妨礙處理器操作,如在下文詳細闡述的。在圖1的示例中,還原表118包括兩個存儲位置120。注意在其他的示例中,可以存在不同數(shù)量的存儲位置。每一個存儲位置包括寄存器重命名映射的狀態(tài)122的拷貝和與該寄存器重命名映射的狀態(tài)122相關(guān)聯(lián)的在ROB中的流程風(fēng)險指令的標(biāo)識符124?,F(xiàn)在參考圖2至5,其示出了用于維護還原表118的過程。圖2描述了在指令通過重命名級時(即在執(zhí)行之前),執(zhí)行用來處理還原表的填充的過程。圖3和4描述了當(dāng)執(zhí)行在ROB中的指令時,用于更新還原表中的條目的過程。隨后描述的圖5闡述了用于使用還原表118來還原寄存器重命名映射106的過程。圖2示出了發(fā)出流程風(fēng)險指令時,用于在還原表中保存寄存器重命名映射的狀態(tài)拷貝的過程的流程圖。在步驟202,流程風(fēng)險指令通過重命名級104,并且響應(yīng)于這個步驟,在步驟204確定在還原表118中是否有至少一個存儲位置是可用的。如果是,則在步驟206將寄存器重命名映射106的當(dāng)前狀態(tài)拷貝到還原表118中的可用存儲位置,并且與流程風(fēng)險指令的標(biāo)識相關(guān)聯(lián)地存儲寄存器重命名映射106的當(dāng)前狀態(tài)拷貝。接著在步驟208將流程風(fēng)險指令插入到重排序緩沖器108。相反地,如果在還原表118中沒有可用的存儲位置,則在步驟210不拷貝寄存器重命名映射106的當(dāng)前狀態(tài)。但是,盡管沒有存儲寄存器重命名映射的狀態(tài),流程風(fēng)險指令在步驟208仍被插入到重排序緩沖器108。換句話說,沒有停滯指令流,即使沒有針對流程風(fēng)險指令拷貝寄存器重命名映射的狀態(tài)。圖3示出了當(dāng)在重排序緩沖器中執(zhí)行指令時,用于更新還原表的過程的流程圖。當(dāng)還原表已滿(即,所有的存儲位置都被使用)并且流程風(fēng)險指令已被插入到ROB中而沒有保存與它們相關(guān)聯(lián)的寄存器重命名映射的狀態(tài)時,使用圖3中的過程。當(dāng)執(zhí)行流程風(fēng)險指令時,則在能釋放還原表中被用來存儲對于該指令的寄存器重命名映射的狀態(tài)的存儲位置(假設(shè)這個流程風(fēng)險指令具有保存在還原表中的寄存器重命名映射的狀態(tài))。因此,在步驟302,在還原表中的存儲位置變得可用。在步驟304,對于目前在還原表中的最年輕的流程風(fēng)險指令的寄存器重命名映射的狀態(tài)的拷貝被拷貝到可用空間。換句話說,找到了具有保存的寄存器重命名映射的狀態(tài)的最近的指令(按照程序順序),并且拷貝其寄存器重命名映射的狀態(tài)到可用的存儲位置。在步驟306中,指針接著從目前還原表中最年輕的流程風(fēng)險指令迭代到重排序緩沖器108中的下一最年輕指令(不一定是流程風(fēng)險指令)。接著在步驟308確定在重排序緩沖器108中在指針位置的指令是否為不具有存儲在還原表中的條目的最舊流程風(fēng)險指令。換句話說,確定是否在還原表已滿的同時這個指令為已被插入到ROB的最舊流程風(fēng)險指令。如果不是,則使用與這個指令相關(guān)聯(lián)的存儲在重排序緩沖器中的值,接著在步驟310更新在可用存儲位置中的寄存器重命名映射的狀態(tài)。例如,重排序緩沖器108能與每一個指令相關(guān)聯(lián)地存儲在架構(gòu)目標(biāo)寄存器和用來存儲指令結(jié)果的物理寄存器之間的映射,并且這個值被用來更新寄存器重命名映射的狀態(tài)(寄存器重命名映射的狀態(tài)的更新參考圖4在下文更詳細地說明)。過程接著從步驟306重復(fù),其中指針迭代到在重排序緩沖器108中的下一最年輕指令。一旦指針到達不具有保存在還原表中的條目的最舊流程風(fēng)險指令,則在步驟308的確定是肯定的,并且在還原表中的可用存儲位置已被更新來給出用于這個流程風(fēng)險指令的寄存器重命名映射的狀態(tài)。換句話說,圖3的過程使得在存儲位置變得可用時,能夠針對先前不具有保存的寄存器重命名映射的狀態(tài)的流程風(fēng)險指令,得出寄存器重命名映射的狀態(tài)。這是通過從關(guān)于中間指令的信息得出寄存器重命名映射的狀態(tài)實現(xiàn)的,所述中間指令處于在還原表中具有保存的狀態(tài)的前面的流程風(fēng)險指令和在還原表中沒有保存的狀態(tài)的流程風(fēng)險指令之間。這能“在運行中”完成,這意味著甚至能在執(zhí)行流程風(fēng)險指令之前得出寄存器重命名映射的狀態(tài)。這個操作現(xiàn)在使用圖4的數(shù)值示例來更詳細地說明。圖4的示例示出了圖1的重排序緩沖器108的內(nèi)容116,并且說明了當(dāng)執(zhí)行流程風(fēng)險指令時,是如何更新還原表118的。在這個純粹說明性的示例中,重排序緩沖器108包含八個指令,表示為Il至18。Il是移動指令(用MOV表示)并且重排序緩沖器存儲該指令,對于這個指令,目標(biāo)架構(gòu)寄存器為0,并且寄存器重命名級將該目標(biāo)架構(gòu)寄存器映射到物理寄存器6。12是分支指令,并且因而是流程風(fēng)險。13是加法操作指令(用ADD表示)并且重排序緩沖器存儲該指令,對于這個指令,目標(biāo)架構(gòu)寄存器為2,并且寄存器重命名級將該目標(biāo)架構(gòu)寄存器映射到物理寄存器4。14是分支指令,并且因而是流程風(fēng)險。15是移動指令并且重排序緩沖器存儲該指令,這個指令具有目標(biāo)架構(gòu)寄存器1,并且寄存器重命名級將該目標(biāo)架構(gòu)寄存器映射到物理寄存器5。16是分支指令,并且因而是流程風(fēng)險。17是減法指令(用SUB表示)并且重排序緩沖器存儲該指令,對于這個指令,目標(biāo)架構(gòu)寄存器為2,并且寄存器重命名級將該目標(biāo)架構(gòu)寄存器映射到物理寄存器I。最后,18是分支指令,并且因而是另一流程風(fēng)險。在這個示例中,還原表118具有兩個存儲位置。如在402示出的,最舊的兩個流程風(fēng)險指令,12和14 (要插入到重排序緩沖器的前兩個分支指令),具有相關(guān)聯(lián)的存儲在還原表中的與寄存器重命名映射的狀態(tài)的拷貝。在這個時候,還原表的存儲位置已被全部使用,并且因而對于另外的被插入到ROB中的流程風(fēng)險指令(例如16和18),沒有存儲寄存器重命名映射的狀態(tài)的拷貝。接著,在這個說明性的示例中,執(zhí)行12。這意味著能釋放與12相關(guān)聯(lián)的存儲位置。如在404所示的,在還原表中的條目上移,留下底部存儲位置(在這個示例中)可用。如參考圖3在上文所述的,將具有存儲的寄存器重命名映射的狀態(tài)拷貝的最年輕流程風(fēng)險指令拷貝到可用位置。在這個示例中,這是用于14的寄存器重命名映射的狀態(tài)。因此,在404,將用于14的寄存器重命名映射的狀態(tài)和標(biāo)識拷貝到可用存儲位置(在圖4中的底部位置)。接著,指針移動到在被用來將值拷貝到可用存儲位置之后的指令的下一最年輕的指令,即,在這個示例中是在14之后的下一最年輕指令。這個下一最年輕指令是15。在重排序緩沖器中的條目指示用于15的寄存器重命名將目標(biāo)架構(gòu)寄存器I映射到物理寄存器
5。這個信息被用來在可用存儲位置更新寄存器重命名映射的狀態(tài)。在這個示例中,如在406所示,更新還原表來示出15的標(biāo)識,并且改變由架構(gòu)寄存器I索引的值為具有值5 (對應(yīng)于被15用作目標(biāo)的物理寄存器)。因為目前指向的指令(15)不是流程風(fēng)險指令,圖3的過程重復(fù),使得指針移動到在重排序緩沖器中的下一最年輕的指令。在這個示例中,這是指令16。16是分支指令,并且因而是流程風(fēng)險。因此,16是沒有存儲在還原表中的寄存器重命名映射的狀態(tài)的最舊流程風(fēng)險指令。為了完成寄存器重命名映射的狀態(tài)的得出,如在408示出的,更新可用位置來示出16的標(biāo)識。圖4的示例示出了當(dāng)存儲位置變得可用時,如何從最近存儲的寄存器重命名映射的狀態(tài)(用于14)和用于中間指令(在這里是15)的寄存器重命名值中得出用于先前未存儲的指令(在這個示例中為16)的寄存器重命名映射的狀態(tài)。這使流程風(fēng)險指令仍能被傳遞到ROB而不被停滯,即使沒有針對這些指令存儲寄存器重命名映射的狀態(tài)?,F(xiàn)在參考圖5,其示出了用于處理流程風(fēng)險指令的執(zhí)行以及寄存器重命名映射的還原的過程的流程圖。在步驟502,執(zhí)行流程風(fēng)險指令。接著在步驟504確定這個指令在程序流程中是否引起了意外改變。例如,在分支指令的情況下,確定是否正確地預(yù)測了分支。如果程序流程是符合預(yù)期的(例如,正確的分支預(yù)測),則在步驟506在還原表中移除與這個流程風(fēng)險指令相關(guān)聯(lián)的條目(使得存儲位置變得可用,如上面描述的)并且在步驟508標(biāo)記該指令為完成。相反地,如果在步驟504確定在程序流程中確實發(fā)生了意外改變(例如,分支錯誤預(yù)測),則開始還原過程。在步驟510,沖洗(B卩,清除)前端(例如,包括取指級102與解碼和重命名級104),并且取指級開始從正確的地址(例如,從正確的分支路徑,或異常句柄代碼)取得指令。在步驟512阻止指令通過重命名級104。在步驟514,確定在程序流程中引起意外的改變的流程風(fēng)險指令是否有在還原表中的條目。如果有,則在步驟516,使用在還原表中用于在程序流程中引起意外改變的該流程風(fēng)險指令的該條目,還原寄存器重命名映射106。換句話說,將用于這個流程風(fēng)險指令的寄存器重命名映射的狀態(tài)拷貝到(并且覆蓋)寄存器重命名映射106。這將寄存器重命名映射106還原到其緊接在程序流程中引起意外改變的該流程風(fēng)險指令之前的狀態(tài)。在步驟518,移除在還原表中的與比在程序流程中引起意外改變的該流程風(fēng)險指令更新的指令相關(guān)聯(lián)的任何條目,并且在步驟520沖洗后端(包括ROB108和提交級112)。最終,在步驟518,允許指令通過寄存器重命名級104。處理器接著可以正確地繼續(xù)來自改變的程序流程的指令。注意雖然在步驟518、520和522執(zhí)行的操作在圖5中被示出為是序列的,但是它們中的一些或全部能在同一時鐘周期內(nèi)被執(zhí)行。返回步驟514,如果確定在程序流程中引起意外改變的流程風(fēng)險指令在還原表中沒有條目,則處理器在步驟524等待,直到對于這個流程風(fēng)險指令在還原表中有可用的有效的寄存器重命名映射的狀態(tài)。當(dāng)其可用時,過程從步驟516重復(fù)。當(dāng)已執(zhí)行較舊的流程風(fēng)險指令并且在還原表中有可用的空間時,有效的寄存器重命名映射的狀態(tài)能變得可用,允許如上所述那樣得出寄存器重命名映射的狀態(tài)。上述的技術(shù)因而使用在流程風(fēng)險執(zhí)行之間的時間來創(chuàng)建用于隨后的流程風(fēng)險的寄存器重命名映射的狀態(tài),并且,因此,還原表不需要大到足夠用于運行中的預(yù)期數(shù)量的流程風(fēng)險。如果有足夠的存儲位置,則從先前的狀態(tài)更新流程風(fēng)險狀態(tài)所花費的時間被這樣的事實有效地隱藏:流程風(fēng)險不可能在一比例的先前流程風(fēng)險已執(zhí)行之前執(zhí)行?,F(xiàn)在參考圖6,其示出了對上述技術(shù)的增強,使得亂序處理器具有還原表和提交映射二者。圖6的結(jié)構(gòu)類似于參考圖1在上文所述的結(jié)構(gòu),除了現(xiàn)在將提交映射602連接到提交級112。提交映射602包括能使其保持寄存器重命名映射的狀態(tài)拷貝的存儲。提交映射602被安排為維護用于提交級112已提交的指令的寄存器重命名映射的狀態(tài)的版本。這是通過這樣實現(xiàn)的:每當(dāng)提交級112提交指令時,對于該指令更新映射到目標(biāo)架構(gòu)寄存器的物理寄存器的值。例如,考慮圖6的示例,當(dāng)指令I(lǐng)l被執(zhí)行并且到達提交級112時,更新提交映射602來改變與架構(gòu)寄存器O相關(guān)聯(lián)的物理寄存器的值為6。這是因為Il的MOV指令具有為O的目標(biāo)架構(gòu)寄存器,并且寄存器重命名級104映射這個目標(biāo)架構(gòu)寄存器到物理寄存器6,這被記錄在重排序緩沖器中(如在116示出的)。當(dāng)從重排序緩沖器108中輸出進一步的指令并且提交該指令時,以類似的方式更新提交映射602。當(dāng)提交級112提交指令時,不再有在程序流程中的意外改變引起的“回繞”的風(fēng)險。因而當(dāng)在程序流程中發(fā)生意外改變時,提交映射602能被用于還原寄存器重命名映射106?,F(xiàn)在參考圖7描述使用提交映射602還原寄存器重命名映射106的過程。在步驟702,檢測在程序流程中的意外改變。例如,這個意外改變可以是異常(例如,存儲器異常)或分支錯誤預(yù)測的形式。在步驟704,在程序流程中引起意外改變的在ROB中的指令被標(biāo)記為“需要還原”(例如,可以具有還原比特設(shè)置)。在步驟706,沖洗(B卩,清除)前端(例如,包括取指級102與解碼和重命名級104),并且在步驟708,取指級開始從正確的地址取得指令(例如,異常句柄代碼,或來自正確分支的代碼)。過程接著在步驟710等待,直到確定標(biāo)記為“需要還原”的指令已到達提交級112。一旦這個指令已到達提交級112,則意味著在需要還原的指令前面的所有指令(按照程序順序)已被提交,并且因而提交映射602準(zhǔn)確地反映了直到該個指令的寄存器重命名映射的狀態(tài)。接著在步驟712,可以通過從提交映射602向寄存器重命名映射106拷貝寄存器重命名映射的狀態(tài)來還原寄存器重命名映射106。最后,在步驟714,沖洗后端(包括R0B108和提交級112)。處理器接著能正確地繼續(xù)執(zhí)行來自改變的程序流程的指令。在一些示例中,在恢復(fù)中較長的時延是可接受的(因為等待違例指令到達提交級)的情況下,上述的用于維護提交映射602并且用其來還原寄存器重命名映射106的技術(shù)能被用來從在程序流程中的意外改變中恢復(fù)。例如,因為需要取得異常句柄代碼,異常(例如存儲器異常)具有較大的開銷,并且使用提交映射來還原異常的時延是可接受的。此外,許多存儲器異??偸菚A向于接近提交時間發(fā)生,這減少了使用提交映射來還原的時延?;谶€原表的第一種技術(shù)(參考圖1至5在上文中描述的)因而與基于提交映射的第二種技術(shù)相補充。使用還原表118的第一種技術(shù)能實現(xiàn)從程序流程中的意外改變的快速恢復(fù),但是需要提供一定量的存儲用于還原表(但是少于使用快照的情況)。這種技術(shù)因而適用于在可能需要相對經(jīng)常地(例如,5-10%的時間)恢復(fù)并且需要盡可能快地執(zhí)行恢復(fù)的情況下,從分支錯誤預(yù)測或類似地情況中恢復(fù)。因而能將具有這些需求的流程風(fēng)險指令(例如分支指令)保存在如上所述的還原表中。相反地,更不可能在程序流程中引起意外改變或不需要被那么快還原的流程風(fēng)險,例如異常,能使用提交映射來處理并且因而不需要具有在還原表中的條目。因此,使用提交映射進一步減少了還原表需要提供的存儲量,因為這需要保存用于更小數(shù)量的流程風(fēng)險的寄存器重命名映射的狀態(tài)。此外,如果僅使用還原表技術(shù)(例如,沒有提交映射),則在一些不例中,對于未記錄的指令的寄存器重命名映射的狀態(tài)的得出至少和提交指令一樣快地執(zhí)行,因為另外的指令可以在該得出完成之前從ROB輸出。但是,如果還提供了提交映射,則還原表不需要那么快速地執(zhí)行該得出。這是因為如果在提交指令之前沒有更新還原表來包含用于未記錄的指令的寄存器重命名映射的狀態(tài),則提交映射602能被替代地用于還原系統(tǒng)。因此,能減少寄存器重命名映射的狀態(tài)得出的更新率,使得能夠減少功耗和硅面積二者。在進一步的示例中,來自分支預(yù)測器114的信息能被用于確定使用還原表技術(shù)還是使用提交映射技術(shù)來用于特定指令的恢復(fù)。例如,分支預(yù)測器能預(yù)測分支指令將采用的方向,但也能提供預(yù)測的確定性的估計。如果預(yù)測的確定性相對低(例如,低于預(yù)定閾值),則能在還原表中存儲用于該指令的寄存器重命名映射的狀態(tài),因為這允許在預(yù)測錯誤的情況下進行快速恢復(fù)。相反地,如果預(yù)測的確定性相對高(例如,高于預(yù)定閾值),則處理器能依靠提交映射來恢復(fù),因為錯誤預(yù)測被認(rèn)為更不可能發(fā)生并且提交映射節(jié)省了存儲空間。在另一進一步示例中,能使用多個還原表,其中不同的還原表有不同的大小。在這個示例中,用于特定指令的還原表的大小與快速恢復(fù)的需要相關(guān)。例如,包括四個條目的還原表能被用于高流程風(fēng)險指令,包括兩個條目的還原表能被用于中等流程風(fēng)險指令(恢復(fù)慢,但是更小),并且包括一個條目的還原表能被用于其他任何情況(這等同于上述的提交映射)。在本文中使用的術(shù)語“處理器”和“計算機”是指具有處理能力從而使其能執(zhí)行指令的任何設(shè)備。在本領(lǐng)域中的技術(shù)人員將認(rèn)識到這些處理能力被并入到很多不同的設(shè)備中并且因而術(shù)語“計算機”包括機頂盒、媒體播放器、數(shù)字無線電、PC、服務(wù)器、移動電話、個人數(shù)字助理和許多其他設(shè)備。本領(lǐng)域的技術(shù)人員將認(rèn)識到能跨網(wǎng)絡(luò)地分布用來存儲程序指令或數(shù)據(jù)的存儲設(shè)備。例如,遠程計算機可以存儲描述為軟件的過程的示例。本地的或終端的計算機可以訪問遠程計算機并且下載部分或所有的軟件來運行程序。可替換地,本地計算機可以按照需要下載該軟件的片段,或在本地終端中執(zhí)行一些軟件指令并且在遠程計算機(或計算機網(wǎng)絡(luò))中執(zhí)行一些指令。本領(lǐng)域的技術(shù)人員還將認(rèn)識到通過使用對于本領(lǐng)域的技術(shù)人員已知的常規(guī)技術(shù),專用電路、可編程邏輯陣列等可以執(zhí)行所有或部分的軟件指令??梢栽诓皇ニ鶎で笮Ч那闆r下擴展或改變在本文中給出的任意范圍或設(shè)備值,這對本領(lǐng)域的技術(shù)人員來說將是顯而易見的。將理解上述的益處和優(yōu)點可以涉及一個實施例或可以涉及若干個實施例。這些實施例并不限于那些解決任何或所有所述的問題的實施例,或那些具有任何或所有所述的益處和優(yōu)點的實施例。對“一”項目的任何引用指這些項目的一個或多個。在本文中使用的術(shù)語“包括”意味著包括標(biāo)識的方法塊或部件,但是這些塊或部件不包括排他列表并且方法或裝置可以包含另外的塊或部件。在合適時,可以用任意適當(dāng)?shù)捻樞蚧蛲降貓?zhí)行在本文中描述的方法的步驟。此夕卜,在不偏離本文中描述的主題精神和范圍的情況下,可以從任何方法中刪除單獨的塊。在不失去所尋求效果的情況下,上述的任何示例的方面可以與所述的任何其他示例的方面來進行組合以形成進一步的示例。將理解上述的優(yōu)選實施例僅通過示例方式給出,并且本領(lǐng)域的技術(shù)人員可以做出各種修改。雖然上文以一定特定度或參考一個或多個單獨實施例描述了各種實施例,但是本領(lǐng)域的技術(shù)人員可以在不偏離這些示例的精神或范圍的情況下對所公開的實施例做出眾多修改。
權(quán)利要求
1.一種在亂序處理器中還原寄存器重命名映射的方法,包括: 每當(dāng)將流程風(fēng)險指令插入到重排序緩沖器時,將所述寄存器重命名映射的狀態(tài)的拷貝存儲到還原表的一個存儲位置,直到所有存儲位置都被使用; 確定隨后已變得可用的存儲位置; 基于先前存儲的用于較舊的流程風(fēng)險指令的寄存器重命名映射的狀態(tài)和存儲在所述重排序緩沖器中的用于中間指令的值,產(chǎn)生在所有存儲位置都已被使用時用于插入到所述重排序緩沖器中的未記錄的流程風(fēng)險指令的得出的寄存器重命名映射的狀態(tài),其中,所述中間指令插入在所述較舊的流程風(fēng)險指令和所述未記錄的流程風(fēng)險指令之間; 將用于所述未記錄的流程風(fēng)險指令的所述得出的寄存器重命名映射的狀態(tài)存儲到所述可用的存儲位置;以及 在這些流程風(fēng)險指令中的一個的執(zhí)行在指令流程中引起意外改變的情況下,使用在所述還原表中的與該個流程風(fēng)險指令相關(guān)聯(lián)的寄存器重命名映射的狀態(tài)來還原所述寄存器重命名映射。
2.根據(jù)權(quán)利要求1所述的方法,還包括以下步驟:響應(yīng)于這些流程風(fēng)險指令中的一個被執(zhí)行,從一個存儲位置清除與該個流程風(fēng)險指令相關(guān)聯(lián)的寄存器重命名映射的狀態(tài),使得該個存儲位置變得可用。
3.根據(jù)權(quán)利要求1所述的方法,其中,所述寄存器重命名映射的狀態(tài)包括在架構(gòu)寄存器和在所述處理器上用來存儲指令結(jié)果的物理寄存器之間的映射。
4.根據(jù)權(quán)利要求1所述的方法,其中,產(chǎn)生得出的寄存器重命名映射的狀態(tài)的步驟包括:將所述較舊的流程風(fēng)險指令標(biāo)識為插入到所述重排序緩沖器中的、已針對其將相關(guān)聯(lián)的寄存器重命名映 射的狀態(tài)存儲到所述還原表中的最近的流程風(fēng)險指令。
5.根據(jù)權(quán)利要求1所述的方法,其中,產(chǎn)生得出的寄存器重命名映射的狀態(tài)的步驟包括:將與所述較舊的流程風(fēng)險指令相關(guān)聯(lián)的寄存器重命名映射的狀態(tài)拷貝到所述可用的存儲位置。
6.根據(jù)權(quán)利要求5所述的方法,其中,產(chǎn)生得出的寄存器重命名映射的狀態(tài)的步驟還包括:迭代每一個所述中間指令,并且在每一次迭代,使用存儲在所述重排序緩沖器中的值來更新拷貝到所述可用的存儲位置的所述寄存器重命名映射的狀態(tài)。
7.根據(jù)權(quán)利要求1所述的方法,其中,存儲在所述重排序緩沖器中的所述值包括針對每一個中間指令的在目標(biāo)架構(gòu)寄存器和物理寄存器之間的映射。
8.根據(jù)權(quán)利要求1所述的方法,其中,所述未記錄的流程風(fēng)險指令是當(dāng)所述還原表的所有存儲位置都被使用時,插入到所述重排序緩沖器中的最舊的流程風(fēng)險指令。
9.根據(jù)權(quán)利要求1所述的方法,其中,所述存儲位置的數(shù)量小于能夠同時存在于所述重排序緩沖器中的流程風(fēng)險指令的數(shù)量。
10.根據(jù)任一前述權(quán)利要求所述的方法,其中,所述流程風(fēng)險指令包括能引起所述處理器的程序計數(shù)器發(fā)生改變的指令。
11.根據(jù)權(quán)利要求1至9中的任意一項所述的方法,其中,所述流程風(fēng)險指令包括分支指令。
12.根據(jù)權(quán)利要求1至9中的任意一項所述的方法,其中,所述流程風(fēng)險指令包括異?;蛑袛嘀噶?。
13.根據(jù)權(quán)利要求1所述的方法,還包括以下步驟:每當(dāng)從所述重排序緩沖器輸出指令到提交級時,更新寄存器提交映射,其中,使用針對從所述重排序緩沖器輸出的每一個指令的在所述目標(biāo)架構(gòu)寄存器和所述物理寄存器之間的映射的重排序緩沖器值來更新所述寄存器提交映射。
14.根據(jù)權(quán)利要求13所述的方法,還包括以下步驟:在一個指令的執(zhí)行在指令流程中引起意外改變并且該個指令被輸出到所述提交級的情況下,使用所述寄存器提交映射來還原所述寄存器重命名映射。
15.—種亂序處理器,包括: 寄存器重命名映射; 重排序緩沖器;以及 包括多個存儲位置的還原表, 其中,所述處理器用于:響應(yīng)于流程風(fēng)險指令被插入到所述重排序緩沖器,將所述寄存器重命名映射的狀態(tài)的拷貝存儲到所述多個存儲位置中的一個,直到所有存儲位置都被使用;確定隨后已變得可用的存儲位置,并且響應(yīng)于此,基于先前存儲的用于較舊的流程風(fēng)險指令的寄存器重命名映射的狀態(tài)和存儲在所述重排序緩沖器中的用于中間指令的值,產(chǎn)生在所有存儲位置都已被使用時用于插入到所述重排序緩沖器中的未記錄的流程風(fēng)險指令的得出的寄存器重命名映射的狀態(tài),其中,所述中間指令插入在所述較舊的流程風(fēng)險指令和所述未記錄的流程風(fēng)險指令之間;將用于所述未記錄的流程風(fēng)險指令的所述得出的寄存器重命名映射的狀態(tài)存儲到所述可用的存儲位置;以及在這些流程風(fēng)險指令中的一個的執(zhí)行在指令流程中引起意外改變的情況下,使用在所述還原表中的與該個流程風(fēng)險指令相關(guān)聯(lián)的寄存器重命名映射的狀態(tài)來還原所述寄存器重命名映射。
16.根據(jù)權(quán)利要求15所述的亂序處理器,還包括多個物理寄存器,所述多個物理寄存器用于存儲指令數(shù)據(jù)。
17.根據(jù)權(quán)利要求16所述的亂序處理器,還包括寄存器重命名級,所述寄存器重命名映射用于將在指令中使用的架構(gòu)寄存器映射到所述物理寄存器,將所述架構(gòu)寄存器和所述物理寄存器之間的映射存儲到所述寄存器重命名映射中,并且插入指令到所述重排序緩沖器。
18.根據(jù)權(quán)利要求16所述的亂序處理器,其中,所述重排序緩沖器包括用于按照程序順序來存儲指令的多個存儲單元,其中,每一個存儲單元被配置為存儲用于該個存儲單元中的指令的架構(gòu)目標(biāo)寄存器和物理寄存器之間的映射。
19.根據(jù)權(quán)利要求15至18中任意一項所述的亂序處理器,還包括: 提交級,用于從所述重排序緩沖器接收被執(zhí)行的指令,并且提交所述被執(zhí)行的指令到存儲器;以及 寄存器提交映射,用于存儲針對輸入到所述提交級的每一個指令的在所述架構(gòu)目標(biāo)寄存器和所述物理寄存器之間的映射。
20.根據(jù)權(quán)利要求19所述的亂序處理器,其中,所述處理器還用于:在一個指令的執(zhí)行在指令流程中引起意外改變并且該個指令在所述提交級被接收的情況下,使用所述寄存器提交映射來還原所述寄存器重命名映射。
全文摘要
描述了一種用于還原寄存器重命名映射的技術(shù)。在一個示例中,每當(dāng)向重排序緩沖器傳遞流程風(fēng)險指令時,具有多個存儲位置的還原表保存寄存器重命名映射的拷貝。當(dāng)所有存儲位置已滿時,仍向所述重排序緩沖器傳遞進一步的指令,但是不保存映射的拷貝。當(dāng)執(zhí)行與一個存儲位置關(guān)聯(lián)的流程風(fēng)險指令時,該個存儲位置隨后變得可用。在所述多個存儲位置已滿時的用于傳遞到所述重排序緩沖器的未記錄的流程風(fēng)險指令的寄存器重命名映射的狀態(tài)被產(chǎn)生并且被存儲在所述可用的位置。所述寄存器重命名映射的狀態(tài)是使用用于先前的流程風(fēng)險指令的還原表條目和用于中間指令的重排序緩沖器值來產(chǎn)生的,所述中間指令在所述先前的流程風(fēng)險指令和所述未記錄的流程風(fēng)險指令之間。如果在指令流程中發(fā)生意外改變,則能用所述還原表來還原所述映射。
文檔編號G06F9/38GK103197919SQ20131000373
公開日2013年7月10日 申請日期2013年1月5日 優(yōu)先權(quán)日2012年1月6日
發(fā)明者H·杰克遜 申請人:想象力科技有限公司