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