具有多個子寄存器文件的寄存器文件的制作方法
【專利摘要】本發(fā)明公開了用于在亂序處理器中使用的被劃分為多個子寄存器文件的寄存器文件。所述寄存器文件還具有多個緩沖器,每一個緩沖器與所述子寄存器文件中的一個相關(guān)聯(lián)。每一個緩沖器接收并存儲目的地為相關(guān)聯(lián)的子寄存器文件的寫入操作,所述寫入操作隨后被發(fā)布到所述子寄存器文件。具體地說,在每一個時鐘周期,確定在所述緩沖器中是否存在還沒有被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件的至少一個寫入操作。如果在所述緩沖器中存在還沒有被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件的至少一個寫入操作,則將未發(fā)布的寫入操作中的一個發(fā)布到所述相關(guān)聯(lián)的子寄存器文件。每一個子寄存器文件也可以具有仲裁邏輯單元,所述仲裁邏輯單元通過優(yōu)先考慮讀取操作來解決想要在相同的時鐘周期中訪問所述相關(guān)聯(lián)的子寄存器文件的讀取和寫入操作之間的沖突,除非相沖突的寫入操作已經(jīng)到達(dá)呈交時間。
【專利說明】具有多個子寄存器文件的寄存器文件
【背景技術(shù)】
[0001]在現(xiàn)代超標(biāo)量處理器中,存在大量管線,這些管線都試圖從共享寄存器文件進(jìn)行讀取并寫入到共享寄存器文件。然而,在不降低時鐘速度的情況下,難于實(shí)現(xiàn)具有大量的讀取和與入端口的共孕寄存器文件。
[0002]解決這一問題的一種方法是實(shí)現(xiàn)寄存器文件高速緩存。這使用多個高速緩存(與系統(tǒng)中的存儲器高速緩存無關(guān))來減小共享寄存器文件上的帶寬。在這樣的系統(tǒng)中,可以使用寫回高速緩存系統(tǒng)來降低到寄存器的寫入的數(shù)量,因?yàn)槲锢砑拇嫫髟谕艘蹠r可以從高速緩存移除。然而,這些系統(tǒng)要求某種形式的管理來在高速緩存之間遷移當(dāng)前沒有駐留在共享寄存器文件中的數(shù)據(jù)。
[0003]下面描述的實(shí)施例不局限于解決已知處理器的任何或所有缺點(diǎn)的實(shí)現(xiàn)。
【發(fā)明內(nèi)容】
[0004]提供這一
【發(fā)明內(nèi)容】
部分以便引入下面在【具體實(shí)施方式】中進(jìn)一步描述的簡化形式的概念的選擇。這一
【發(fā)明內(nèi)容】
部分并不意在識別請求保護(hù)的主題的關(guān)鍵特征或本質(zhì)特征,也不意在在確定請求保護(hù)的主題的范圍時用作輔助。
[0005]本文描述了用于亂序處理器的被劃分為多個子寄存器文件的寄存器文件。這些寄存器文件還具有多個緩沖器,每一個緩沖器與子寄存器文件中的一個相關(guān)聯(lián)。每一個緩沖器接收并存儲目的地為相關(guān)聯(lián)的子寄存器文件的寫入操作,隨后將該寫入操作發(fā)布到所述子寄存器文件。具體地說,在每一個調(diào)度周期(例如,時鐘周期),確定在所述緩沖器中是否存在還沒有被發(fā)布到相關(guān)聯(lián)的子寄存器文件的至少一個寫入操作。如果存在,則將未發(fā)布的寫入操作中的一個發(fā)布到相關(guān)聯(lián)的子寄存器文件。每一個子寄存器文件也可以具有仲裁邏輯單元,所述仲裁邏輯單元通過優(yōu)先考慮讀取操作來解決想要在相同的調(diào)度周期(例如,時鐘周期)中訪問相關(guān)聯(lián)的子寄存器文件的讀取和寫入操作之間的沖突,除非相沖突的寫入操作已經(jīng)到達(dá)呈交時間。
[0006]第一方面提供一種用于亂序處理器的寄存器文件,所述寄存器文件包括:多個子寄存器文件,每一個子寄存器文件包括至少一個物理寄存器;以及多個緩沖器,每一個緩沖器與子寄存器文件相關(guān)聯(lián)并且配置為:接收并存儲目的地為相關(guān)聯(lián)的子寄存器文件的寫入操作;接收并存儲對于存儲在子寄存器文件中的每一個寫入操作的寫入值,一旦接收到了對于特定的寫入操作的寫入值,該寫入操作就變?yōu)榈却龑懭氩僮鳎辉诿恳粋€時鐘周期,確定在緩沖器中是否存在至少一個等待寫入操作;并且如果在緩沖器中存在至少一個等待寫入操作,則選擇等待寫入操作中的一個并且將選擇的寫入操作發(fā)布到相關(guān)聯(lián)的子寄存器文件。
[0007]第二方面提供一種亂序處理器,包括:根據(jù)第一方面的寄存器文件;以及解碼和重命名級,所述解碼和重命名級配置為:接收取出的指令;對于在取出的指令的寫入操作中提到的任何架構(gòu)寄存器分派子寄存器文件和分派的子寄存器文件的物理寄存器;并且使用分派的子寄存器文件的指示符和分派的物理寄存器的指示符來重命名該架構(gòu)寄存器。[0008]第三方面提供一種讀取和寫入亂序處理器的寄存器文件的方法,所述寄存器文件包括多個子寄存器文件,每一個子寄存器文件包括至少一個物理寄存器,所述方法包括:在多個緩沖器中的一個處接收目的地為相關(guān)聯(lián)的子寄存器文件的寫入操作;將接收的寫入操作存儲在所述緩沖器中;在所述緩沖器處接收對于所述寫入操作的寫入值;將接入的寫入值存儲在與所述寫入操作相關(guān)聯(lián)的緩沖器中,使所述寫入操作變?yōu)榈却龑懭氩僮?;在每一個時鐘周期,確定在所述緩沖器中是否存在任何等待寫入操作;并且如果在所述緩沖器中存在至少一個等待寫入操作,則選擇所述等待寫入操作中的一個并且將其發(fā)布到所述相關(guān)聯(lián)的子寄存器文件。
[0009]本文描述的方法可以由配置有存儲在有形存儲介質(zhì)上的機(jī)器可讀形式的軟件的計(jì)算機(jī)執(zhí)行,例如,以包括計(jì)算機(jī)可讀程序代碼的計(jì)算機(jī)程序的形式,所述計(jì)算機(jī)程序代碼用于配置計(jì)算機(jī)來執(zhí)行所述方法的組成部分,或者以包括計(jì)算機(jī)程序代碼模塊的計(jì)算機(jī)程序的形式,所述計(jì)算機(jī)程序代碼模塊適合于當(dāng)在計(jì)算機(jī)上運(yùn)行程序時執(zhí)行本文描述的任何方法的所有步驟,并且其中所述計(jì)算機(jī)程序可以體現(xiàn)在計(jì)算機(jī)可讀存儲介質(zhì)上。有形(或非暫態(tài))存儲介質(zhì)的示例包括磁盤、指狀驅(qū)動、存儲卡等等,且不包括傳播的信號。軟件可以適合于在并行處理器或串行處理器上執(zhí)行,以使得可以按照任何適當(dāng)?shù)捻樞蚧蛲瑫r執(zhí)行所述方法步驟。
[0010]本文描述的硬件部件可以由非暫態(tài)計(jì)算機(jī)可讀存儲介質(zhì)生成,所述非暫態(tài)計(jì)算機(jī)可讀存儲介質(zhì)具有編碼在其上的計(jì)算機(jī)可讀程序代碼。
[0011]這承認(rèn)固件和軟件可以被單獨(dú)使用并且是有價(jià)值的。意在包括在“無效(dumb)”或標(biāo)準(zhǔn)硬件上運(yùn)行或控制該“無效”或標(biāo)準(zhǔn)硬件的軟件以便執(zhí)行期望的功能。還意在包括“描述”或定義硬件的配置的軟件,例如,用于設(shè)計(jì)硅芯片或用于配置通用可編程芯片的HDL(硬件描述語言)軟件,以便執(zhí)行期望的功能。
[0012]可以對優(yōu)選特征進(jìn)行適當(dāng)組合,這對于本領(lǐng)域的普通技術(shù)人員來說將變得顯而易見,并且可以將優(yōu)選特征與本發(fā)明的任何方面進(jìn)行組合。
【專利附圖】
【附圖說明】
[0013]將通過示例的方式參照下面的附圖來描述本發(fā)明的實(shí)施例,在附圖中:
[0014]圖1是示例單線程亂序處理器的示意圖;
[0015]圖2是圖1的示例寄存器文件的示意圖;
[0016]圖3是用于控制到圖2的子寄存器文件的讀取/寫入訪問的示例邏輯單元的示意圖;
[0017]圖4是用于寫入圖2的寄存器文件并從圖2的寄存器文件讀取的示例方法的流程圖;
[0018]圖5是用于解決在相同的時鐘周期中發(fā)布到圖2的寄存器文件的相同子寄存器文件的讀取和寫入操作之間的沖突的示例方法的流程圖;
[0019]圖6是示例多線程亂序處理器的示意圖;
[0020]圖7是圖6的不例寄存器文件的不意圖;
[0021]圖8是用于控制到圖7的子寄存器文件的讀取/寫入訪問的示例邏輯單元的示意圖;[0022]圖9是用于解決在相同的時鐘周期中發(fā)布到圖7的寄存器文件的相同子寄存器文件的讀取和寫入操作之間的沖突的第一示例方法的流程圖;以及
[0023]圖10是用于解決在相同的時鐘周期中發(fā)布到圖7的寄存器文件的相同子寄存器文件的讀取和寫入操作之間的沖突的第二示例方法的流程圖。
[0024]在整個附圖中使用共同的附圖標(biāo)記來指示類似的特征。
【具體實(shí)施方式】
[0025]下面僅通過示例的方式來描述本發(fā)明的實(shí)施例。這些示例代表 申請人:當(dāng)前已知的實(shí)施本發(fā)明的最佳方式,盡管它們不是能夠?qū)崿F(xiàn)本發(fā)明的唯一方式。該實(shí)施方式闡述了該示例的功能以及用于構(gòu)建和操作該示例的步驟的序列。然而,可以通過不同的示例來實(shí)現(xiàn)相同或等效的功能和序列。
[0026]本文描述的實(shí)施例涉及用于減少到在亂序處理器中使用的共享寄存器文件的讀取和寫入端口的數(shù)量的技術(shù)。具體地說,在本文描述的實(shí)施例中,將寄存器文件劃分為多個較小的分立子寄存器文件,每一個子寄存器文件具有其自己的緩沖器。每一個子寄存器文件包括寄存器文件的物理寄存器的一部分。在重命名級期間,每一個架構(gòu)寄存器被分派特定的子寄存器文件和該子寄存器文件內(nèi)的物理寄存器。然后在相對應(yīng)的緩沖器中收集到每一個子寄存器文件的寫入并且使該寫入緩緩流出到所述子寄存器文件中。
[0027]現(xiàn)在參照圖1,說明了單線程亂序處理器100,其中,共享寄存器文件102被劃分為多個較小的分立子寄存器文件,每一個子寄存器文件具有其自己的緩沖器。每一個子寄存器文件包括所述寄存器文件的物理寄存器的一部分。在圖1所示的示例中,寄存器文件102被劃分為六個子寄存器文件 A、B、C、D、E和F,然而,對于本領(lǐng)域中的普通技術(shù)人員顯而易見的是,寄存器文件102可以具有更多或更少的子寄存器文件。將參照圖2更加詳細(xì)地描述示例寄存器文件102。
[0028]盡管圖1的處理器100包括單個共享寄存器文件102,但是在其它示例中,所述處理器可以包括多個共享寄存器文件(例如,用于浮點(diǎn)架構(gòu)寄存器的共享寄存器文件和用于整數(shù)架構(gòu)寄存器的共享寄存器文件)。在這些示例中,可以按照與圖1的共享寄存器文件102類似的方式來配置一個或多個共享寄存器文件。
[0029]處理器100包括配置為從由程序計(jì)數(shù)器(PC)指示的程序(按照程序順序)取出指令的取出級104以及布置為解釋所述指令并執(zhí)行寄存器重命名的解碼和重命名級106。每一個指令可以包括寄存器寫入操作;一個或多個寄存器讀取操作;和/或算術(shù)或邏輯操作。寄存器寫入操作寫入到目的地寄存器,并且寄存器讀取操作從源寄存器進(jìn)行讀取。在解碼和重命名級期間,在指令中提到的每一個架構(gòu)寄存器(例如每一個源寄存器和目的地寄存器)被使用物理寄存器代替(或重命名)。
[0030]對于寫入操作,每一個架構(gòu)寄存器(例如,目的地寄存器)被分配/分派特定的子寄存器文件和在該子寄存器文件內(nèi)的物理寄存器。在一些情況下,子寄存器文件在循環(huán)的基礎(chǔ)(例如A、B、C、D、E、F、A、B、C、D、E、F、A…等等)上被分配到架構(gòu)寄存器。在一些情況下,每一個指令被分配/分派特定的子寄存器文件,而與該指令是否包括寫入操作無關(guān)。在指令不包括寫入操作的情況下,分配被忽略。在其它情況下,僅包括寫入操作的指令被分配/分派特定的子寄存器文件。[0031]可以將任何分配存儲在寄存器重命名映射108中,該寄存器重命名映射108是表示每一個架構(gòu)寄存器與最近被分配的子寄存器文件和物理寄存器之間的映射的數(shù)據(jù)結(jié)構(gòu)。然后,對于讀取操作,對于特定的架構(gòu)寄存器(例如,源寄存器)的正確的物理寄存器可以根據(jù)寄存器重命名映射108來確定。
[0032]在圖1的示例中,寄存器重命名映射108包括由架構(gòu)寄存器標(biāo)識符索引的指示子寄存器文件和物理寄存器標(biāo)識符的四個條目。例如,架構(gòu)寄存器O當(dāng)前映射到子寄存器文件A、物理寄存器6 ;架構(gòu)寄存器I當(dāng)前映射到子寄存器文件F、物理寄存器5 ;架構(gòu)寄存器2當(dāng)前映射到子寄存器文件C、物理寄存器I ;并且架構(gòu)寄存器3當(dāng)前映射到子寄存器文件A、物理寄存器3。
[0033]當(dāng)指令經(jīng)過解碼和重命名級106傳遞時,該指令被插入重排序緩沖器110 (ROB)中,并且該指令內(nèi)的任何寫入操作被存儲在與適當(dāng)?shù)淖蛹拇嫫魑募嚓P(guān)聯(lián)的寄存器文件102的緩沖器中。此時,寫入操作不準(zhǔn)備被發(fā)布到適當(dāng)?shù)淖蛹拇嫫魑募?,因?yàn)橐粚懭氲臄?shù)據(jù)是未知的。
[0034]重排序緩沖器110是使指令能夠被亂序地執(zhí)行但被有序地呈交的緩沖器。重排序緩沖器110保持按照程序順序插入在其中的指令,但是ROB內(nèi)的指令可以由多個亂序管線112亂序地執(zhí)行。
[0035]在一些示例中,重排序緩沖器110可以被形成為具有指向R0B110中的最老指令的頭部和指向ROBllO中的最年輕指令的尾部的環(huán)形緩沖器。換句話說,指令從R0B110的頭部輸出,并且該頭部被遞增到ROB中的下一個指令。存儲在重排序緩沖器110中的指令可以通過ROB ID進(jìn)行索引,該ROB ID指定指令在重排序緩沖器中的順序。
[0036]亂序管線112 —般分別訪問共享寄存器文件102以便執(zhí)行到物理寄存器的讀取和/或?qū)懭?。?dāng)亂序管線希望執(zhí)行寫入操作時,將待寫入的值由亂序管線112提供到寄存器文件102。然后將待寫入的值連同相對應(yīng)的寫入操作一起存儲在適當(dāng)?shù)募拇嫫魑募?02中。一旦寫入值被接收并存儲在緩沖器中用于特定的寫入操作,該寫入操作就準(zhǔn)備被發(fā)布到適當(dāng)?shù)淖蛹拇嫫魑募?。每一個緩沖器中的準(zhǔn)備寫入操作然后緩緩流出到相關(guān)聯(lián)的子寄存器文件。
[0037]—旦被執(zhí)行,將指令按照程序順序從重排序緩沖器110輸出到呈交級114。呈交級114將指令的結(jié)果呈交到寄存器/存儲器。呈交級114每時鐘周期呈交N個指令,其中N以處理器100的配置為基礎(chǔ)。例如,四路超標(biāo)量處理器可以每時鐘周期呈交四個指令。在另一示例中,三路雙線程處理器可以每時鐘周期呈交六個指令。
[0038]處理器100還可以包括分支預(yù)測器116,該分支預(yù)測器116配置為預(yù)測在諸如分支指令的被已知引起可能的流改變的指令的情況下程序流將采取哪個方向。分支預(yù)測是有用的,因?yàn)樗怪噶钅軌蛟诜种е噶畹慕Y(jié)果是已知的之前由處理器100推測地執(zhí)行。分支預(yù)測器116能夠接收來自取出級104以及解碼和重命名級106的與新指令有關(guān)的輸入,以及來自亂序管線112和呈交級114的輸入。
[0039]當(dāng)分支預(yù)測器116精確地預(yù)測程序流時,這改善了處理器的性能。然而,如果分支預(yù)測器116沒有正確地預(yù)測分支方向,則發(fā)生誤預(yù)測,這需要在程序能夠繼續(xù)之前對該誤預(yù)測進(jìn)行校正。為了校正誤預(yù)測,丟棄被發(fā)送到ROBllO的推測性指令,并且取出級104開始從正確的程序分支取出指令。[0040]現(xiàn)在參照圖2,說明了圖1的示例寄存器文件102。寄存器文件102被劃分為多個較小的分立子寄存器文件202-212。圖2的示例寄存器文件102被劃分為六個子寄存器文件202-212 ;然而,對于本領(lǐng)域中的普通技術(shù)人員來說顯而易見的是,寄存器文件可以具有更多或更少的子寄存器文件。
[0041]在一些情況下,子寄存器文件202-212的數(shù)量等于每時鐘周期能夠由呈交級114呈交的指令的數(shù)量。例如,每時鐘周期可以發(fā)布四個指令的四路超標(biāo)量處理器可以具有被劃分為四個子寄存器文件的寄存器文件。類似地,每時鐘周期可以發(fā)布六個指令的三路雙線程處理器可以具有被劃分為六個子寄存器文件的寄存器文件。
[0042]寄存器文件102還包括用于每一個子寄存器文件202-212的一個緩沖器214-224。將到特定的子寄存器文件202-212的任何寫入操作存儲在相對應(yīng)的緩沖器214-224中并且在稍后的時間寫入到子寄存器文件202-212。每一個緩沖器214-224包括用于存儲寫入操作的諸如硬件寄存器(例如,觸發(fā)器)的部件或部件的集合(未示出),以及用于從該部件或該部件的集合取回寫入操作的邏輯單元(未示出)。
[0043]在一些情況下,每一個緩沖器214-224具有與圖1的R0B110類似的結(jié)構(gòu)。具體地說,每一個緩沖器214-224可以被實(shí)現(xiàn)為具有頭部和尾部的環(huán)形緩沖器。
[0044]在一些情況下,緩沖器214-224的尺寸的和可以等于R0B110的尺寸。這允許緩沖器214-224保持任何數(shù)量的顯著的寫入操作,確保緩沖器214-224不溢出。R0B110的尺寸可以被相等地劃分,以使得每一個緩沖器具有相同的尺寸。在其它情況下,緩沖器214-224的累積尺寸可以大于ROBllO的尺寸。
[0045]在一些情況下,將寫入操作按照該寫入操作被接收的順序存儲在緩沖器214-224中。因?yàn)閷懭氩僮饕话惆凑粘绦蝽樞蛴山獯a和重命名級106提供到緩沖器214-224,因此可以將寫入操作按照程序順序存儲在緩沖器214-224中。
[0046]在其它情況下,將寫入操作按照由與該寫入操作相關(guān)聯(lián)的ID指定的順序存儲在緩沖器214-224中。例如,可以將寫入操作提供到具有相關(guān)聯(lián)的指令的ROB ID的寄存器文件,這允許將寫入操作按照與R0B110中的相關(guān)聯(lián)的指令相同的順序(例如,按照程序順序)放置在緩沖器中。
[0047]在存在六個子寄存器文件202-212并且將子寄存器文件202-212在循環(huán)的基礎(chǔ)上分派到每一個指令的情況下,將與R0B110中的每第六個指令相關(guān)聯(lián)的寫入操作存儲在緩沖器A中。例如,如果將指令放置在R0B110的位置O中,則可以將相對應(yīng)的寫入操作放置在例如緩沖器A214的位置O中。然后,可以將與R0B110的位置I到5中的指令相對應(yīng)的寫入操作分別放置在緩沖器B到F216-224的位置O中。然后可以將與R0B110的位置6到11中的指令相對應(yīng)的寫入操作分別放置在緩沖器A到F214-224的位置I中。
[0048]因此,可以通過對接收的ID (例如,ROB ID)執(zhí)行模X操作來確定用于寫入操作的特定緩沖器,其中X是子寄存器文件202-212的數(shù)量。在圖2所示的示例中,存在六個子寄存器文件,因而可以對接收的ID (例如ROB ID)執(zhí)行模6操作以便確定用于存儲寫入操作的特定緩沖器??梢匀缓髮υ揑D (例如ROB ID)執(zhí)行整數(shù)除操作以便確定緩沖器中用于寫入操作的位置或空位。如本領(lǐng)域中的普通技術(shù)人員已知的,整數(shù)除操作使數(shù)字的整數(shù)部分除以一個數(shù)字而沒有余數(shù)。例如,可以將具有ID為9的寫入操作放在緩沖器D (9模6=3)中的空位I (9整數(shù)除6=1)中。[0049]由于模和整數(shù)除操作是硬件密集的,因此如果X是二的冪,則可以通過從接收的ID(例如ROB ID)丟掉Y個位來確定緩沖器中用于寫入操作的位置或空位,其中Y是1g(X)除以log(2)。在X不是二的冪的情況下,硬件查找表可以用于根據(jù)ID (例如ROB ID)來確定位置(例如,緩沖器索引)。
[0050]按照程序順序?qū)懭氩僮鞔鎯υ诰彌_器中允許由緩沖器214-224按照任何順序接收要被寫入到寄存器的值并且按照程序順序?qū)⒃撝捣胖迷诰彌_器中。一旦按照程序順序組織了寫入操作,就能夠容易地將它們按照程序順序發(fā)布到相關(guān)聯(lián)的子寄存器文件202-212。
[0051]在一些情況下,將緩沖器214-224中的每一個寫入操作最遲在呈交時間發(fā)布到相對應(yīng)的子寄存器文件202-212。這是期望的,因?yàn)樵谶@一時間之后,存在緩沖器中的數(shù)據(jù)會由隨后的寫入操作重寫的機(jī)會。在其它情況下,可以允許在呈交時間之后將寫入操作發(fā)布到相對應(yīng)的子寄存器文件202-212。
[0052]由于在每一個時鐘周期中存在呈交的N條指令,因此在最壞的情況情景下,所有N個呈交的指令將在最后一個時鐘周期(例如,指令的呈交時間)中被寫入到寄存器。期望具有與在相同的時鐘周期(例如,呈交周期)中被寫入到相對應(yīng)的子寄存器文件202-212的呈交的指令相關(guān)聯(lián)的所有N個寫入操作,以使得在緩沖器中與這些寫入操作有關(guān)的數(shù)據(jù)不會在下一個時鐘周期中被隨后重寫。
[0053]在寄存器文件102被劃分為N個子寄存器文件202-212 (例如,如圖2所示)并且子寄存器文件202-212在循環(huán)的基礎(chǔ)上按照程序順序被分配到指令的情況下,呈交的指令中的每一個將被寫入到不同的子寄存器文件,因而允許在相同的時鐘周期中將所有N個寫入操作發(fā)布到其相對應(yīng)的子寄存器文件202-212。在子寄存器文件202-212的數(shù)量小于N的情況下,處理器100可以配置為當(dāng)與呈交的指令相關(guān)聯(lián)的所有寫入操作不能夠在相同的周期中被寫入到子寄存器文件202-212時停止特定的呈交。
[0054]在一些情況(例如,如圖2所示)下,每一個子寄存器文件202-212僅具有一個讀取/寫入端口。在這些情況下,每一個子寄存器文件可以在隨機(jī)存取存儲器(RAM)而不是觸發(fā)器中實(shí)現(xiàn),這對于大寄存器文件節(jié)省了面積和功率。在其它情況下,一個或多個子寄存器文件202-212可以具有多個輸入端口。
[0055]現(xiàn)在參照圖3,說明了用于控制到子寄存器文件202的訪問(讀取和寫入)的示例邏輯單元(讀取邏輯單元302和仲裁邏輯單元304)。
[0056]盡管圖3示出了用于單個子寄存器文件202的邏輯單元302和304,但是對于本領(lǐng)域中的普通技術(shù)人員顯而易見的是,類似的邏輯單元可以用于控制到每一個其它子寄存器文件的訪問。在一些情況下,可以存在控制讀取所有子寄存器文件的單個讀取邏輯單元302。
[0057]緩沖器214在派送端口 226上從解碼和重命名級106接收對于子寄存器文件202的寫入操作,并且將接收的寫入操作存儲在緩沖器214中。從解碼和重命名級106接收到的每一個寫入操作一般指定將被寫入的寄存器(例如,寄存器號),但是不指定將被寫入到寄存器的數(shù)據(jù)。
[0058]在一些情況中,將寫入操作按照它們被接收的順序存儲在緩沖器214中。由于解碼和重命名級106 —般按照程序順序提供寫入操作,因此可以將寫入操作按照程序順序存儲在緩沖器214中。
[0059]在其它情況中,將寫入操作按照以與每一個寫入操作相關(guān)聯(lián)的ID為基礎(chǔ)的特定順序(例如,程序順序)存儲在緩沖器214中。在一些情況下,所述ID是相對應(yīng)的指令的ROBID,以使得將寫入操作按照與R0B110中的相對應(yīng)的指令相同的順序(例如,程序順序)放置在緩沖器214中。例如,如上所述,如果將指令存儲在主R0B110中的索引或位置O處,則該ID可以指示要將寫入操作存儲在緩沖器214中的索引或位置O處。
[0060]緩沖器214還在寫入端口 228上從亂序管線112接收對于存儲在緩沖器214中的每一個寫入操作的寫入值,并且將接收到的寫入值存儲在緩沖器214中。使用提供有寫入值的ID將每一個寫入值匹配到緩沖器214中其相對應(yīng)的寫入操作。在一些情況下,所述ID是相關(guān)聯(lián)的指令的ROB ID。在其它情況下,所述ID是寄存器號。一旦將對于特定的寫入操作的寫入值存儲在緩沖器214中,該特定的寫入操作就變?yōu)榈却龑懭氩僮?,因?yàn)樗诘却话l(fā)布到相對應(yīng)的子寄存器文件/由該相對應(yīng)的子寄存器文件完成。一旦等待寫入操作被發(fā)布到相對應(yīng)的子寄存器文件/由該相對應(yīng)的子寄存器文件完成,它就變?yōu)榘l(fā)布的或完成的寫入操作。
[0061]在每一個調(diào)度周期,緩沖器214確定在緩沖器214中是否存在任何等待寫入操作。術(shù)語“調(diào)度周期”在本文中用于指代操作(即,讀取和/或?qū)懭氩僮?被遞交到子寄存器文件的時間。在一些情況下,存在每時鐘周期的調(diào)度周期。然而,在其它情況下,調(diào)度周期可以比每時鐘周期出現(xiàn)得更經(jīng)?;蚋唤?jīng)常。如果在緩沖器214中存在至少一個等待寫入操作,則緩沖器214選擇等待寫入操作中的一個并且將它發(fā)布到相對應(yīng)的子寄存器文件202。在一些情況下,將寫入操作發(fā)布到相對應(yīng)的子寄存器文件可以包括向復(fù)用器306發(fā)送選擇的寫入操作。在其它情況下,向相對應(yīng)的子寄存器文件發(fā)布寫入操作可以包括將選擇的寫入操作直接發(fā)送到子寄存器文件202。
[0062]在一些情況下,緩沖器214配置為選擇緩沖器214中的最老等待寫入操作。在其它情況下,緩沖器214可以配置為使用其它準(zhǔn)則來選擇緩沖器214中的等待寫入操作中的一個。
[0063]讀取邏輯單元302負(fù)責(zé)控制子寄存器文件202的讀取。由于當(dāng)執(zhí)行讀取時子寄存器文件202可能不包括最近的更新(例如,在緩沖器214中可能存在還沒有被寫入到子寄存器文件202的寫入操作),因此當(dāng)讀取邏輯單元302在讀取端口 308上接收到對于子寄存器文件202的讀取操作時,讀取邏輯單元302可以將該讀取操作發(fā)布到緩沖器214和子寄存器文件202 二者。在一些情況下,將讀取操作發(fā)布到子寄存器文件202可以包括將讀取操作發(fā)送到復(fù)用器306。在其它情況下,將讀取操作發(fā)布到子寄存器文件可以包括將讀取操作直接發(fā)送到子寄存器文件202。
[0064]當(dāng)緩沖器214從讀取邏輯單元302接收讀取操作時,它在緩沖器214中搜索與讀取操作相匹配(例如,與在讀取操作中指定的寄存器有關(guān))的寫入操作。如果緩沖器214發(fā)現(xiàn)匹配并且該匹配是等待寫入操作或完成的寫入操作(例如,接收了對于寫入操作的寫入值),則緩沖器214向讀取邏輯單元302提供與匹配的寫入操作相對應(yīng)的寫入數(shù)據(jù)。讀取邏輯單元302然后向亂序管線112提供接收的寫入數(shù)據(jù)。如果緩沖器214發(fā)現(xiàn)匹配,但是該匹配不是等待寫入操作或完成的寫入操作(例如,還沒有接收到用于寫入操作的寫入值),則緩沖器214可以將指示寄存器沒有準(zhǔn)備好被讀取的錯誤消息返回到讀取邏輯單元302。讀取邏輯單元302可以然后將該錯誤消息轉(zhuǎn)發(fā)到亂序管線112。如果緩沖器214不能夠發(fā)現(xiàn)匹配,則緩沖器214可以將指示讀取失敗的錯誤消息返回到讀取邏輯單元302。該讀取邏輯單元302可以然后等待從子寄存器文件202接收讀取數(shù)據(jù),并且將該讀取數(shù)據(jù)轉(zhuǎn)發(fā)到亂序管線112。
[0065]當(dāng)緩沖器214-224的累積尺寸等于R0B110的尺寸時,緩沖器214可以僅發(fā)現(xiàn)緩沖器214中與讀取操作相匹配(例如,與在讀取操作中指定的寄存器相關(guān))的一個寫入操作。然而,在緩沖器214-224的累積尺寸大于R0B110的尺寸的情況下,緩沖器214可以發(fā)現(xiàn)緩沖器214中與讀取操作相匹配(例如,與在讀取操作中指定的寄存器相關(guān))的多于一個寫入操作。在緩沖器214識別多于一個匹配的寫入操作的情況下,緩沖器214可以配置為從最新的寫入操作選擇寫入數(shù)據(jù)(如由其在緩沖器214中的位置確定),并且將該寫入數(shù)據(jù)提供到讀取邏輯單元302。
[0066]在一些情況下,讀取邏輯單元302可以配置為在相同的調(diào)度周期(例如,時鐘周期)中將讀取操作發(fā)布到緩沖器和子寄存器文件。在其它情況下,讀取邏輯302可以配置為在不同的調(diào)度周期(例如,時鐘周期)上將讀取操作發(fā)布到緩沖器214和子寄存器文件202。例如,如果在緩沖器214中沒有發(fā)現(xiàn)對于指定的寄存器的匹配,則讀取邏輯302可以配置為在第一時鐘周期上將讀取操作發(fā)布到緩沖器214,并且在隨后的時鐘周期上僅將讀取操作發(fā)布到子寄存器文件202。在這些情況下,子寄存器文件讀取的總數(shù)量可以降低,但是沒有由緩沖器中的數(shù)據(jù)解決的那些讀取可能花費(fèi)更長的時間來完成。
[0067]在子寄存器文件202僅具有單個輸入端口(如圖2和圖3所示)的情況下,在單個調(diào)度周期(例如,時鐘周期)中只能夠完成子寄存器文件202的一個讀取或?qū)懭?。在這些情況下,仲裁邏輯單元304負(fù)責(zé)解決在相同的調(diào)度周期中發(fā)布到相同的子寄存器文件的讀取和寫入(例如,讀取操作和寫入操作都在相同的時鐘周期中在復(fù)用器306處被接收)之間的沖突。
[0068]在一些情況下,仲裁邏輯單元304可以配置為控制復(fù)用器306,以使得如果存在沖突,例如在相同的時鐘周期中在復(fù)用器306處接收的讀取和寫入操作,則給予讀取優(yōu)先級(例如,讀取被選擇并被發(fā)送到子寄存器文件202),除非是對于寫入操作的呈交時間。在是對于寫入操作的呈交時間的情況下,給予寫入操作優(yōu)先級(例如,寫入操作被選擇并被發(fā)送到子寄存器文件202)。在沒有沖突的情況下,例如在僅存在復(fù)用器306處接收的單個讀取或?qū)懭氩僮鞯那闆r下,則在復(fù)用器306處接收的讀取或?qū)懭氩僮鞅贿x擇并被發(fā)送到子寄存器文件202。
[0069]在一些情況下,仲裁邏輯單元304可以以在呈交端口 310上從呈交級114接收的數(shù)據(jù)為基礎(chǔ)來確定寫入操作是否到達(dá)呈交時間。在呈交端口 310上提供的數(shù)據(jù)可以包括在當(dāng)前時鐘周期期間呈交的指令的列表。例如,在呈交端口 310上提供的數(shù)據(jù)可以包括已經(jīng)被呈交的ROB ID的列表。在一些情況下,這些ID被分析以便確定它們相關(guān)的特定緩沖器以及它們在緩沖器中被存儲的特定位置(例如,索引)。仲裁邏輯單元304可以然后將由ROBID識別的索引與對于寫入操作的索引進(jìn)行比較以便確定它們是否匹配。如果它們匹配,則可以確定寫入操作已到達(dá)呈交時間。
[0070]在其它情況下,轉(zhuǎn)換從呈交級114接收的ROB ID以便設(shè)計(jì)出它們與哪一個子寄存器文件相關(guān)聯(lián),并且將它們與特定的子寄存器文件的計(jì)數(shù)器進(jìn)行比較以便確定寫入操作是否已經(jīng)到達(dá)呈交時間。具體地說,在這些情況下,每一個子寄存器文件可以包括每次當(dāng)子寄存器文件被寫入時遞增并且當(dāng)與子寄存器文件相關(guān)聯(lián)的指令被呈交時遞減的邏輯(未示出)。每一個計(jì)數(shù)器本質(zhì)上對還沒有到達(dá)呈交時間的多少個寫入操作進(jìn)行計(jì)數(shù)。當(dāng)特定的子寄存器文件從呈交級114接收到指示與子寄存器文件相關(guān)聯(lián)的指令正在被呈交的數(shù)據(jù)并且對于該特定的子存儲器文件的計(jì)數(shù)器為零時,仲裁邏輯單元304可以確定是對于寫入操作的呈交時間。
[0071 ] 在將寫入操作寫入到子寄存器文件202之后,它可以保持在緩沖器214中,直到它在呈交階段114期間被呈交為止或直到對于新的寫入操作要求緩沖器214的空位為止。這允許從緩沖器214而非子寄存器文件202完成讀取,因?yàn)檫M(jìn)行緩存器讀取比子寄存器文件讀取一般更容易且更快。然而,一旦將寫入操作寫入到子寄存器文件202,就可以在緩沖器214中設(shè)置指示已經(jīng)將寫入操作寫入到子寄存器文件202的標(biāo)志。這確保了寫入操作將不會被再次選擇來被寫入到子寄存器文件202。
[0072]本文描述的緩沖器214-224、讀取邏輯單元302、仲裁邏輯單元304和復(fù)用器306可以使用任何適當(dāng)?shù)挠布壿媮韺?shí)現(xiàn)。
[0073]盡管圖2和圖3示出了具有單個輸入端口的子寄存器文件,但是在其它實(shí)施例中,每一個子寄存器文件可以包括兩個輸入端口。第一輸入端口可以用于從子寄存器文件進(jìn)行讀取,并且第二輸入端口可以用于寫入到子寄存器文件。在這些實(shí)施例中,寄存器文件可以不具有仲裁邏輯單元來處理到相同的子寄存器文件的讀取和寫入之間的沖突。這可以減小在圖2和圖3中所示的單端口子寄存器文件實(shí)施例上的讀取延遲。
[0074]現(xiàn)在參照圖4,說明了用于將數(shù)據(jù)寫入到寄存器文件并且從該寄存器文件讀取數(shù)據(jù)的示例性方法400,該寄存器文件已經(jīng)被細(xì)分為多個較小的分立子寄存器文件。在步驟402,指令被取出并解碼。如上所述,每一個指令可以包括寄存器寫入操作;一個或多個寄存器讀取操作;和/或算術(shù)或邏輯操作。一旦指令被取出并解碼,方法400就繼續(xù)進(jìn)行到步驟404。
[0075]在步驟404,使用物理寄存器來代替或重命名在指令中提到的任何架構(gòu)寄存器。對于寫入操作,使用物理寄存器代替架構(gòu)寄存器(例如,目的地寄存器)可以包括將特定的子寄存器文件和該子寄存器文件內(nèi)的物理寄存器分派到架構(gòu)寄存器。在一些情況下,在循環(huán)的基礎(chǔ)上分派子寄存器文件。例如,如果存在如圖2所示的被標(biāo)記為A到F的六個子寄存器文件,則可以按照下列順序A、B、C、D、E、F、A、B、0..等等來分派子寄存器文件??梢詫⒆蛹拇嫫魑募臀锢砑拇嫫鞯郊軜?gòu)寄存器的任何分派存儲在如上面關(guān)于圖1描述的寄存器重命名映射108中。
[0076]對于讀取操作,使用物理寄存器更換架構(gòu)寄存器(例如,源寄存器)可以包括確定最近被分派到架構(gòu)寄存器的特定的子寄存器文件和物理寄存器,并且使用該子寄存器文件和物理寄存器更換該架構(gòu)寄存器。在一些情況下,從寄存器重命名映射(例如,寄存器重命名映射108)獲得最近被分派到架構(gòu)寄存器的特定的子寄存器文件和物理寄存器。一旦將架構(gòu)寄存器重命名到物理寄存器,方法400就繼續(xù)進(jìn)行到步驟406和408。
[0077]在步驟406,在指令中的任何寫入操作被存儲在合適的緩沖器中的情況下,將該寫入操作派送到寄存器文件102 (例如,與在步驟404中分派的子寄存器文件相關(guān)聯(lián)的緩沖器)。如上所述,在一些情況下,可以將每一個寫入操作提供到具有ID (例如ROB ID)的緩沖器,該ID向緩沖器通知該寫入操作要被存儲到緩沖器中的什么位置或空位。在其它情況下,將寫入操作按照它們被接收的順序(例如,程序順序)存儲在緩沖器中。一旦將寫入操作存儲在適當(dāng)?shù)木彌_器中,方法400就繼續(xù)進(jìn)行到步驟414。
[0078]在步驟408,將指令提供到亂序管線112用于執(zhí)行。在步驟410,亂序管線112向寄存器文件102提供指令中用于任何寫入操作的寫入值。在步驟412,將在步驟410中提供的寫入值存儲在具有相關(guān)聯(lián)的寫入操作的適當(dāng)緩沖器中??梢酝ㄟ^提供到寄存器文件102的信息連同寫入值一起來識別特定的緩沖器和寫入操作。在一些情況下,所述信息可以包括特定的子寄存器和寄存器號。在其它情況下,該信息可以包括可以用于確定特定的緩沖器和空位的ID (例如,相關(guān)聯(lián)的指令的ROB ID)。一旦接收并存儲了對于寫入操作的寫入值,就認(rèn)為該寫入操作是等待寫入操作。一旦接收并存儲了寫入值,方法400就繼續(xù)進(jìn)行到步驟414。
[0079]在步驟414,每一個緩沖器確定它是否包括任何等待寫入操作。如果緩沖器包括至少一個等待寫入操作,則該緩沖器選擇等待寫入操作中的一個并且將選擇的寫入操作發(fā)布到相對應(yīng)的子寄存器文件。在一些情況下,將選擇的寫入操作發(fā)布到子寄存器文件包括將其提供到復(fù)用器(例如,圖3的復(fù)用器306),其中它等待在下一個可用的調(diào)度周期(例如,時鐘周期)上被發(fā)送到子寄存器文件。在一些情況下,下一個可用的調(diào)度周期(例如,時鐘周期)是當(dāng)前調(diào)度周期。
[0080]如上面參照圖3描述的,在一些情況下,可以將緩沖器中的每一個寫入操作與指示是否已經(jīng)將寫入操作寫入到相關(guān)聯(lián)的子寄存器文件的標(biāo)志或位相關(guān)聯(lián)。在這些情況下,緩沖器可以配置為僅選擇寫入操作,其標(biāo)志或位指示它還沒有被寫入到相對應(yīng)的子寄存器文件。在一些情況下,緩沖器可以配置為選擇緩沖器中等待被寫入到子寄存器文件的最老的寫入操作。在其它情況下,緩沖器可以使用其它準(zhǔn)則來選擇等待寫入操作。一旦等待寫入操作被選擇并被發(fā)布到子寄存器文件,方法400就可以繼續(xù)進(jìn)行到方法500的步驟502。
[0081]在步驟416,形成指令的一部分的任何讀取操作被發(fā)布到寄存器文件102。一旦讀取操作被發(fā)布到寄存器文件102,方法400就繼續(xù)進(jìn)行到步驟418。
[0082]在步驟418,讀取操作被發(fā)布到適當(dāng)?shù)木彌_器(例如,與在步驟404中確定的子寄存器文件相關(guān)聯(lián)的緩沖器)。一旦所有讀取操作被發(fā)布到適當(dāng)?shù)木彌_器,該方法就繼續(xù)進(jìn)行到步驟420。
[0083]在步驟420,讀取操作被發(fā)布到適當(dāng)?shù)淖蛹拇嫫魑募?例如,在步驟404中確定的子寄存器文件)。在一些情況下,向子寄存器文件發(fā)布讀取操作包括將讀取操作發(fā)布到與子寄存器文件相關(guān)聯(lián)的復(fù)用器(例如,圖3的復(fù)用器306),其中它等待被發(fā)送到適當(dāng)?shù)淖蛹拇嫫魑募?br>
[0084]在一些情況下,步驟418和420在相同的調(diào)度周期(例如,時鐘周期)中被完成。具體地說,在一些情況下,讀取操作在相同的調(diào)度周期(例如,時鐘周期)中被發(fā)布到適當(dāng)?shù)木彌_器(例如,與在步驟404中確定的子寄存器文件相關(guān)聯(lián)的緩沖器)和適當(dāng)?shù)淖蛹拇嫫魑募?例如,在步驟404中確定的子寄存器文件)。在其它情況下,步驟418和420可以在不同的調(diào)度周期(例如,時鐘周期)中被執(zhí)行。例如,如果確定相關(guān)聯(lián)的緩沖器不包含用于在讀取操作中指定的寄存器的條目,則步驟418可以在第一時鐘周期中被完成,并且步驟420可以僅在隨后的時鐘周期中被完成。在這些情況下,如果緩沖器不能夠滿足該請求,則讀取操作僅被發(fā)送到適當(dāng)?shù)淖蛹拇嫫魑募?br>
[0085]一旦步驟420完成,該方法就可以繼續(xù)進(jìn)行到方法500的步驟502,其中讀取和寫入之間的沖突被解決。
[0086]現(xiàn)在參照圖5,說明了方法500,該方法500可以由圖3的仲裁邏輯單元304執(zhí)行,用于解決在相同的調(diào)度周期(例如,時鐘周期)中被發(fā)布到相同的子寄存器文件的操作之間的沖突。在步驟502,到與子寄存器文件相關(guān)聯(lián)的復(fù)用器(例如,復(fù)用器306)的輸入(例如,讀取和/或?qū)懭氩僮?被讀取。一旦到復(fù)用器的輸入被讀取,方法500就繼續(xù)進(jìn)行到步驟504。
[0087]在步驟504,確定是否是對于被輸入到復(fù)用器306的任何寫入操作的呈交時間。在一些情況下,確定是否是對于寫入操作的呈交時間包括將從呈交級114接收的數(shù)據(jù)與寫入操作的至少一部分進(jìn)行比較。例如,如上面參照圖3描述的,確定是否是對于寫入操作的呈交時間可以包括分析從呈交級114到緩沖器ID的呈交的指令的ROB ID。在其它情況下,確定是否是對于寫入操作的呈交時間可以包括分析與子寄存器文件相關(guān)聯(lián)的計(jì)數(shù)器值。如果確定是對于被輸入到復(fù)用器306的寫入操作的呈交時間,則該方法繼續(xù)進(jìn)行到步驟506。然而,如果確定不是對于被輸入到復(fù)用器306的寫入操作的呈交時間,則方法500繼續(xù)進(jìn)行到步驟508。
[0088]在步驟506,到達(dá)呈交時間的寫入操作被提交到適當(dāng)?shù)淖蛹拇嫫魑募?。如果不存在相沖突的讀取操作,則考慮在下一個調(diào)度周期(例如,時鐘周期)中到子寄存器文件的提交。例如,在一些情況下,可以在下一個調(diào)度周期(例如,時鐘周期)中將其輸入到復(fù)用器306中。如果在下一個調(diào)度周期(例如,時鐘周期)中不存在到達(dá)呈交時間的相沖突的寫入操作,則將在下一個調(diào)度周期(例如,時鐘周期)中將其提交到適當(dāng)?shù)淖蛹拇嫫魑募?。一旦寫入操作被提交到適當(dāng)?shù)淖蛹拇嫫魑募?,方?00就結(jié)束。
[0089]在步驟508,確定是否存在被輸入到復(fù)用器306的讀取操作。如果存在被輸入到復(fù)用器306的讀取操作,則方法500繼續(xù)進(jìn)行到步驟510,其中讀取操作被提交到子寄存器文件。如果不存在被輸入到復(fù)用器306中的讀取操作,則方法500繼續(xù)進(jìn)行到步驟506,其中寫入操作被提交到子寄存器文件。
[0090]在步驟510,讀取操作被提交到適當(dāng)?shù)淖蛹拇嫫魑募H绻嬖谙鄾_突的寫入操作,如果在相同的緩沖器中沒有較老的寫入操作在下一個調(diào)度周期(例如,下一時鐘周期)中變?yōu)榈却龑懭氩僮?,則可以考慮在下一個調(diào)度周期(例如,時鐘周期)中到子寄存器文件的提交。例如,在一些情況下,相沖突的寫入操作將在下一個時鐘周期中從緩沖器被選擇并輸入到復(fù)用器306中,用于發(fā)布到子寄存器文件。如果在該時鐘周期中沒有相沖突的讀取操作,則它將被提交到適當(dāng)?shù)淖蛹拇嫫魑募?。一旦讀取操作被提交到適當(dāng)?shù)淖蛹拇嫫魑募?,方?00就結(jié)束。
[0091]可以每調(diào)度周期(例如,每時鐘周期)地重復(fù)方法500。
[0092]該方法500對于讀取操作給出優(yōu)先級,除非是對于相沖突的寫入操作的呈交時間。因此,可以通過將寫入操作盡快地發(fā)布到復(fù)用器306 (并且因而子寄存器文件)而不是等待直到呈交時間來減小讀取不得不等待寫入的可能性。
[0093]盡管方法500公開了對于讀取操作給出優(yōu)先級,除非是對于相沖突的寫入操作的呈交時間,但是在其它實(shí)施例中,仲裁邏輯單元304可以配置為對于讀取操作給出優(yōu)先級,除非相沖突的寫入操作將在緩沖器中被重寫。在這些實(shí)施例中,由仲裁邏輯單元304執(zhí)行的方法可以與方法500類似,但是代替在步驟504中確定是對于寫入操作的呈交時間,其可以確定被輸入到復(fù)用器306的寫入操作是否將被從解碼和重命名級派送的新的寫入操作重寫。只有被輸入到復(fù)用器306的寫入操作將被新的寫入操作重寫時,寫入操作才被給予優(yōu)于相沖突的讀取操作的優(yōu)先級。
[0094]如上所述,在一些情況下,除了提供寫入操作,解碼和重命名級還向寄存器文件102提供ROB ID。在這些情況下,仲裁邏輯單元304可以配置為通過根據(jù)ROB ID來確定新的寫入指令的緩沖器空位并且將其與被輸入到復(fù)用器306的寫入指令的緩沖器空位(例如,緩沖器索引)進(jìn)行比較來確定被輸入到復(fù)用器306的寫入操作是否將被從解碼和重命名級接收的新的寫入操作重寫。如果兩個緩沖器空位匹配,則新的寫入操作將在當(dāng)前的時鐘周期中重寫被輸入到復(fù)用器306的寫入操作。因此,為了確保對于被輸入到復(fù)用器306的寫入操作的數(shù)據(jù)不丟失,輸入到復(fù)用器306的寫入操作被提交到子寄存器文件。
[0095]在緩沖器被實(shí)現(xiàn)為環(huán)形緩沖器(例如,具有頭部和尾部)的其它情況下,仲裁邏輯單元304可以配置為如果在環(huán)形緩沖器的尾部之后的緩沖器空位包含等待寫入操作,則確定寫入操作將被重寫。具體地說,如果寫入操作位于環(huán)形緩沖器的尾部之后的空位中,則從解碼和重命名級派送到緩沖器的任何新的寫入操作將被寫入到該空位,并且將重寫位于其中的寫入操作。因此,為了確保寫入操作在被提交之前不被重寫,將其提交到子寄存器文件。
[0096]在緩沖器的累積尺寸等于R0B110的尺寸的情況下,這一重寫方法允許更多的讀取被優(yōu)先考慮,因而優(yōu)于參照圖5描述的呈交時間方法500而改善了系統(tǒng)性能。例如,未來的指令可以在它們能夠執(zhí)行之前等待來自讀取操作的數(shù)據(jù),因而使讀取操作優(yōu)于寫入操作可以加速程序的執(zhí)行。相反,使寫入操作到子寄存器文件的提交延遲不會影響其它指令,因?yàn)榭梢源娴貜木彌_器讀取寫入數(shù)據(jù)。
[0097]可以實(shí)現(xiàn)優(yōu)于呈交時間方法500的進(jìn)一步的系統(tǒng)改善,其中緩沖器的累積尺寸大于R0B110的尺寸。具體地說,通過增加緩沖器的尺寸,增加了在變?yōu)榈却龑懭氩僮鞯膶懭氩僮骱筒坏貌粚懭氩僮魈峤坏阶蛹拇嫫魑募膶懭氩僮髦g的時間。這允許更多的時間來使寫入操作提交到子寄存器文件,并且因而降低不得不對于寫入操作而停止讀取操作的機(jī)會。
[0098]圖6到圖10將用于說明如何將本文描述的技術(shù)和方法應(yīng)用于多線程亂序處理器。
[0099]現(xiàn)在參照圖6,說明了多線程亂序處理器600的示意圖。處理器600包括在本文中分別被稱為線程O和線程I的兩個線程602和604。每一個線程602和604包括如上面參照圖1描述的取出級606或608、維持寄存器重命名映射614或616的解碼和重命名級610或612、重排序緩沖器618或620、呈交級622或624和分支預(yù)測器626或627。線程602和604共享亂序管線628和一個或多個寄存器文件630。
[0100]現(xiàn)在參照圖7,說明了圖6的示例寄存器文件630。圖7的寄存器文件630與圖2的寄存器文件102類似,因?yàn)樗粍澐譃槎鄠€較小的分立子寄存器文件702-712。與圖2的示例寄存器文件102類似,圖7的示例寄存器文件630被劃分為六個子寄存器文件702-712 ;然而,對于本領(lǐng)域中的普通技術(shù)人員顯而易見的是,寄存器文件630可以具有更多或更少的子寄存器文件。[0101]在一些情況下,子寄存器文件的數(shù)量等于每時鐘周期可以由呈交級622和624呈交的指令的數(shù)量。例如,每時鐘周期可以發(fā)布四個指令的四路超標(biāo)量處理器可以具有被劃分為四個子寄存器文件的寄存器文件。類似地,每時鐘周期可以發(fā)布六個指令的三路雙線程處理器可以具有被劃分為六個子寄存器文件的寄存器文件。
[0102]由于每一個線程602和604可以按照不同的速度呈交,因此圖7的寄存器文件630對于每一個子寄存器文件702-712具有多個緩沖器714-736。具體地說,每一個子寄存器文件702-712對于處理器600中的每一個線程具有一個緩沖器。圖6中示出的示例多線程處理器600包括兩個線程602和604 (線程O和線程1),因而寄存器文件630具有對于每一個子寄存器文件702-712的兩個緩沖器714-736。對于本領(lǐng)域中的普通技術(shù)人員顯而易見的是,取決于處理器中線程的數(shù)量,寄存器文件630可以具有每子寄存器文件更多或更少的緩沖器。
[0103]將到特定的子寄存器文件702-712的任何寫入存儲在相對應(yīng)的緩沖器714-736中,并且在稍后的時間寫入到子寄存器文件702-712。
[0104]在一些情況下,每一個緩沖器714-736具有與圖6的R0B618和620類似的結(jié)構(gòu)。具體地說,每一個緩沖器714-736可以被實(shí)現(xiàn)為具有頭部和尾部的環(huán)形緩沖器。
[0105]在一些情況下,用于特定線程的緩沖器714-736的尺寸之和等于相對應(yīng)的R0B618或620的尺寸。這允許緩沖器714-736保持任何數(shù)量的顯著的寫入操作,確保緩沖器714-736不溢出。R0B618或620的尺寸可以在用于該線程的緩沖器714-736中間被相等地劃分,以使得用于該線程的所有緩沖器714-726具有相同的尺寸。由于兩個R0B618和620可以具有不同的尺寸,因此對于不同線程的緩沖器可以具有不同的尺寸。在其它情況下,用于特定線程的緩沖器714-736的累積尺寸可以大于相對應(yīng)的R0B618或620的尺寸。
[0106]在一些情況下,寫入操作以它們被接收的順序被存儲在緩沖器714-736中。由于寫入操作一般按照程序順序由解碼和重命名級610和612提供到緩沖器714-736,因此寫入操作可以按照程序順序被存儲在緩沖器714-736中。
[0107]在其它情況下,寫入操作以由與該寫入操作相關(guān)聯(lián)的ID指定的順序被存儲在緩存器714-736中。例如,每一個寫入操作可以被提供到具有相關(guān)聯(lián)的指令的ROB ID的寄存器文件,這允許將寫入操作按照與R0B618或620中的相關(guān)聯(lián)的指令相同的順序(例如,按照程序順序)放置在緩沖器中。
[0108]按照程序順序?qū)懭氩僮鞔鎯υ诰彺嫫髦性试S對于寫入操作的寫入值由緩沖器714-736亂序地接收,但是被有序地寫入到相對應(yīng)的子寄存器文件。
[0109]現(xiàn)在參照圖8,說明了用于控制到子寄存器文件的訪問(讀取和寫入)的邏輯單元(讀取邏輯單元802和仲裁邏輯單元804)。盡管圖8示出了對于單個子寄存器文件702的邏輯單元,但是對于本領(lǐng)域的普通技術(shù)人員顯而易見的是,類似的邏輯單元可以用于控制到每一個其它子寄存器文件的訪問。在一些情況下,可以存在控制所有子寄存器文件的讀取的單個讀取邏輯單元802。
[0110]每一個緩沖器714和716在派送端口 738或740上從特定的線程接收對于子寄存器文件702的寫入操作。例如,第一緩沖器714可以配置為從第一線程602 (線程O)接收寫入操作,并且第二緩沖器716可以配置為從第二線程604 (線程I)接收寫入操作。在派送端口 738或740上接收到寫入操作時,緩沖器714或716將接收到的寫入操作存儲在緩沖器714或716中。在一些情況下,存儲接收到的寫入操作包括存儲將被寫入到的寄存器的寄存器號。
[0111]在一些情況下,寫入操作按照它們被接收的順序被存儲在緩沖器714和716中。由于寫入操作一般按照程序順序由解碼和重命名級610和612提供到緩沖器714和716,因此該寫入操作可以按照程序順序被存儲在緩沖器714和716中。
[0112]在其它情況下,寫入操作以與該寫入操作相關(guān)聯(lián)的ID指定的順序存儲在緩沖器714和716中。例如,每一個寫入操作可以被提供到具有相關(guān)聯(lián)的指令的ROB ID的寄存器文件,這允許寫入操作按照與R0B110中的相關(guān)聯(lián)的指令的相同順序(例如,按照程序順序)被放置在緩沖器中。
[0113]每一個緩沖器714和716還從寫入端口 742或744上的亂序管線628接收存儲在緩沖器714中的對于每一個寫入操作的寫入值。緩沖器714或716然后將接收到的寫入值連同其相對應(yīng)的寫入操作一起存儲在緩沖器714或716中。由于指令可以被亂序地執(zhí)行,因此寫入值可以從亂序管線628被亂序地接收。每一個寫入值使用被提供有寫入值的ID與緩沖器714或716中的其相對應(yīng)的寫入操作相匹配。在一些情況下,所述ID是相關(guān)聯(lián)的指令的ROB ID。在其它情況下,所述ID是物理寄存器號。一旦對于特定的寫入操作的寫入值被存儲在緩沖器714或716中,該寫入操作就被認(rèn)為是等待。
[0114]在每一個調(diào)度周期(例如,時鐘周期),每一個緩沖器714和716確定它是否包括任何等待寫入操作。如果緩沖器714或716確定它包括至少一個等待寫入操作,則它選擇等待寫入操作中的一個并將選擇的寫入操作發(fā)布到子寄存器文件702。在一些情況下,發(fā)布選擇的子寄存器文件包括向復(fù)用器806提供選擇的寫入操作。在一些情況下,緩沖器714和716配置為選擇緩沖器714或716中的最老的寫入操作等待。在其它情況下,緩沖器714和716可以配置為使用其它準(zhǔn)則來選擇等待寫入操作。
[0115]與圖3的讀取邏輯單元302類似,讀取邏輯單元802負(fù)責(zé)控制子寄存器文件702的讀取。因?yàn)楫?dāng)讀取被執(zhí)行(例如,在一個或多個相關(guān)聯(lián)的緩沖器714和716中可以具有還沒有被寫入到子寄存器文件702的寫入操作)時,子寄存器文件702可以不包括最近的更新,當(dāng)讀取邏輯單元802在讀取端口 808或809上接收到讀取操作時,該讀取邏輯單元802可以配置為將讀取操作發(fā)布到至少一個緩沖器714和716以及子寄存器文件702 (經(jīng)由復(fù)用器806)。
[0116]在一些情況下,讀取邏輯單元802可以配置為將每一個接收到的讀取操作發(fā)布到相對應(yīng)的緩沖器714和716 二者。然而,在其它情況下,線程號連同讀取操作可以一起被提供到讀取邏輯單元802。在這些情況下,讀取邏輯單元802可以僅將讀取操作發(fā)布到緩沖器714或716中的一個(例如,與識別的線程相對應(yīng)的緩沖器)。例如,來自線程O的讀取操作可以僅被發(fā)布到第一緩沖器714而不是第一緩沖器714和第二緩沖器716 二者。
[0117]盡管圖8示出了對于每一個線程602和604的單個讀取端口 808或809,但是在其它情況下,每線程可以具有多個(例如,四個)讀取端口或者可以存在在線程之間共享的多個(例如,八個)讀取端口。這允許每一個線程在單個時鐘周期中將一個或多個讀取操作發(fā)送到讀取邏輯單元802。
[0118]由于讀取邏輯單元802可以在相同的周期中從一個線程或從多個線程接收多于一個的讀取操作,因此讀取邏輯單元802可以配置為緩沖或存儲讀取操作,直到它能夠使它們緩緩流出。在一些情況下,如果讀取邏輯單元802用完了用于存儲新的讀取操作的空間,則讀取邏輯單元802可以配置為將故障消息返回到亂序管線628。故障消息可以包括指示讀取操作是否被接受的單個確認(rèn)位。在讀取邏輯單元802不具有緩沖或存儲讀取操作的能力的情況下,如果它不能夠執(zhí)行接收到的讀取操作(例如,它在相同的周期中接收到多個讀取操作),讀取邏輯單元802可以在接收到讀取操作時將故障消息返回到亂序管線628。
[0119]讀取邏輯單元802可以能夠在相同的時鐘周期中將多個讀取操作發(fā)布到每一個緩沖器714和716。然而,讀取邏輯單元802可以僅能夠在特定的時鐘周期中以到子寄存器文件702的輸入端口的數(shù)量為基礎(chǔ)來將僅一個讀取操作發(fā)布到子寄存器文件702。
[0120]當(dāng)緩沖器714或716從讀取邏輯單元802接收到讀取操作時,緩沖器714或716尋找緩沖器714或716中與該讀取操作相匹配(例如,與在讀取操作中指定的寄存器相關(guān))的寫入操作。如果緩沖器714或716發(fā)現(xiàn)匹配并且該匹配是等待寫入操作或完成的寫入操作,則緩沖器714或716向讀取邏輯單元802提供與匹配的寫入操作相對應(yīng)的寫入數(shù)據(jù),讀取邏輯單元802將該寫入數(shù)據(jù)提供到亂序管線628。如果緩沖器714或716發(fā)現(xiàn)匹配,但是該匹配不是等待寫入操作或完成的寫入操作(例如,還沒有從用于寫入操作的亂序管線628接收到寫入值),則緩沖器714或716可以將指示寄存器沒有準(zhǔn)備好被讀取的錯誤消息返回到讀取邏輯單元802。讀取邏輯單元802可以然后將錯誤消息轉(zhuǎn)發(fā)到亂序管線628。如果緩沖器714或716不能夠發(fā)現(xiàn)匹配,則緩沖器714或716可以將指示讀取失敗的錯誤消息返回到讀取邏輯單元802。讀取邏輯單元802可以然后等待從子寄存器文件702接收讀取數(shù)據(jù),并且將此轉(zhuǎn)發(fā)到亂序管線628。
[0121]當(dāng)用于特定線程的緩沖器714-736的累積尺寸等于相對應(yīng)的R0B618或620的尺寸時,緩沖器714或716可以在緩沖器714或716中僅發(fā)現(xiàn)與讀取操作相匹配(例如,與在讀取操作中指定的寄存器相關(guān))的一個寫入操作。然而,在用于特定線程的緩沖器714-716的累積尺寸大于相對應(yīng)的R0B618或620的尺寸的情況下,緩沖器714或716可以在緩沖器中發(fā)現(xiàn)與讀取操作相匹配(例如,與在讀取操作中指定的寄存器相關(guān))的多于一個的寫入操作。在緩沖器714或716識別出多于一個的相匹配的寫入操作的情況下,緩沖器714或716可以配置為從最新的寫入操作(如由其在緩沖器714或716中的位置確定)選擇寫入數(shù)據(jù)并將其提供到讀取邏輯單元802。
[0122]在一些情況下,讀取邏輯單元802可以配置為在相同的調(diào)度周期(例如,時鐘周期)中將讀取操作發(fā)布到一個或多個緩沖器716和718以及子寄存器文件702。在其它情況下,讀取邏輯802可以配置為在不同的調(diào)度周期(例如,時鐘周期)中將讀取操作發(fā)布到一個或多個緩沖器716和718以及子寄存器文件。例如,讀取邏輯單元802可以配置為如果在相關(guān)聯(lián)的緩沖器714和716中沒有發(fā)現(xiàn)對于指定的寄存器的匹配,則在第一時鐘周期上將讀取操作發(fā)布到一個或多個緩沖器714和716,并且在隨后的時鐘周期上僅將讀取操作發(fā)布到子寄存器文件702,。如上面參照圖3描述的,在這些情況下,子寄存器文件訪問的總數(shù)可以減小,但是可能花費(fèi)更長時間來完成沒有由相關(guān)聯(lián)的緩沖器714和716中的數(shù)據(jù)解決的讀取操作。
[0123]在子寄存器文件702僅具有一個輸入端口(如圖7和圖8所示)的情況下,在單個調(diào)度周期(例如,時鐘周期)中僅能夠完成到子寄存器文件702的一個讀取或?qū)懭?。在這些情況下,仲裁邏輯單元804負(fù)責(zé)解決想要在相同的調(diào)度周期(例如,時鐘周期)中訪問子寄存器文件702的讀取和寫入之間的沖突。在一些情況下,仲裁邏輯804可以通過對到復(fù)用器806的輸入的數(shù)量進(jìn)行計(jì)數(shù)(例如,多于I個輸入=沖突,I個或更少的輸入=無沖突)來確定具有沖突。
[0124]在一些情況下,仲裁邏輯單元804可以配置為控制復(fù)用器806,以使得如果存在沖突,則任何讀取被給予優(yōu)先級,除非已經(jīng)經(jīng)過對于任何相沖突的寫入的呈交時間,或者是對于任何相沖突的寫入的呈交時間。
[0125]在已經(jīng)經(jīng)過對于任何相沖突的寫入操作的呈交時間的情況下,呈交時間已經(jīng)過去的寫入操作被給予優(yōu)于讀取操作和任何其它寫入操作的優(yōu)先級。具體地說,在對于寫入操作的呈交時間已經(jīng)過去的情況下,該寫入操作被提交到子寄存器文件702。在子寄存器文件在循環(huán)的基礎(chǔ)上被派發(fā)并且存在N個子寄存器文件(其中,N是能夠在時鐘周期中被呈交的指令的數(shù)量)的情況下,將僅存在一個寫入操作,其呈交時間在任何時鐘周期中已經(jīng)過去。因此,在這些情況下,其呈交時間已經(jīng)過去的任何寫入操作被確保被發(fā)布到子寄存器文件 702。
[0126]在不存在其呈交時間已經(jīng)過去的相沖突的寫入操作的情況下,優(yōu)先級被給予是對于其的呈交時間的任何相沖突的寫入操作。在是僅對于一個相沖突的寫入操作的呈交時間的情況下,該寫入操作被給予優(yōu)先級。具體地說,對于其呈交時間已經(jīng)到達(dá)的寫入操作被提交到子寄存器文件702。然而,在是對于至少兩個相沖突的寫入操作的呈交時間的情況下,僅那些寫入操作中的一個被給予優(yōu)先級。在這些情況下,仲裁邏輯單元804可以選擇這些寫入操作中的一個并且將其提交到子寄存器文件702。仲裁邏輯單元804可以使用用于選擇寫入操作以便提交到子寄存器文件702的任何適當(dāng)?shù)氖侄?。例如,在一些情況下,仲裁邏輯單元804可以配置為從具有最顯著的寫入操作的線程選擇寫入操作。其中是呈交時間的任何其它相沖突的寫入操作將在緊接著后面的調(diào)度周期(例如,時鐘周期)中被給予優(yōu)先級。
[0127]在不具有沖突的情況下,例如,在僅具有在特定的調(diào)度周期(例如,時鐘周期)中在復(fù)用器806處接收的單個讀取或?qū)懭氩僮鞯那闆r下,在復(fù)用器806處接收的讀取或?qū)懭氡惶峤坏阶蛹拇嫫魑募?02。
[0128]與圖3的仲裁邏輯單元304類似,圖8的仲裁邏輯單元804可以以在呈交端口 810和812上從呈交級722和724接收到的數(shù)據(jù)為基礎(chǔ)來確定寫入操作是否到達(dá)呈交時間。在呈交端口 810和812上提供的數(shù)據(jù)可以包括在當(dāng)前時鐘周期期間被呈交的指令(例如,ROBID)的列表。
[0129]在寫入操作被寫入到子寄存器文件702之后,它可以保持在相對應(yīng)的緩沖器714或716中,直到它在呈交階段622或624期間被呈交或它被另一寫入操作重寫。這允許從緩沖器714和716而非子寄存器文件702來完成讀取,因?yàn)橥瓿删彌_器讀取比子寄存器文件讀取一般更容易且更快。然而,一旦寫入操作被寫入到子寄存器文件702,指示寫入操作已經(jīng)被寫入到子寄存器文件702的標(biāo)記就可以被設(shè)置在相對應(yīng)的緩沖器714或716中。這確保寫入操作將不會被再次選擇以便被寫入到子寄存器文件702。
[0130]本文描述的緩沖器714-736、讀取邏輯單元802、仲裁邏輯單元804和復(fù)用器806可以使用任何適當(dāng)?shù)挠布壿媮韺?shí)現(xiàn)。
[0131]上面參照圖4描述的用于寫入到寄存器文件并從寄存器文件讀取的方法400同樣可應(yīng)用于多線程亂序處理器(例如,處理器600)。例如,在一些情況下,將對于每一個線程執(zhí)行方法400的實(shí)例。
[0132]現(xiàn)在參照圖9,說明了方法900,該方法900可以由圖8的仲裁邏輯單元804執(zhí)行,用于解決試圖在多線程亂序處理器(例如,處理器600)中在相同的調(diào)度周期(例如,時鐘周期)中訪問子寄存器文件的操作之間的沖突。在步驟902,到與子寄存器文件(例如,子寄存器文件702)相關(guān)聯(lián)的復(fù)用器(例如,復(fù)用器806)的輸入(例如讀取和/或?qū)懭氩僮?被讀取。一旦到復(fù)用器的輸入被讀取,方法900就繼續(xù)進(jìn)行到步驟904。
[0133]在步驟904,確定對于輸入到復(fù)用器的任何寫入操作,呈交時間是否已經(jīng)過去。如果為是,則該寫入操作被給予優(yōu)先級。在先前周期中是對于至少兩個相沖突的寫入的呈交時間的情況下,這種情況會出現(xiàn)。在這樣的情況下,僅一個相沖突的寫入可以在該調(diào)度周期(例如,時鐘周期)中被提交到寄存器文件,而其它相沖突的寫入在緊接其后的調(diào)度周期(例如,時鐘周期)中被提交到子寄存器文件。如果確定對于被輸入到復(fù)用器的寫入操作的呈交時間已經(jīng)過去,則方法900繼續(xù)進(jìn)行到步驟906。然而,如果確定對于相沖突的寫入操作的呈交時間還沒有過去,則方法900繼續(xù)進(jìn)行到步驟908。
[0134]在步驟906,其呈交時間已經(jīng)過去的寫入操作被提交到子寄存器文件用于執(zhí)行。
[0135]在步驟908,確定是否是對于被輸入到復(fù)用器的任何寫入操作的呈交時間。在一些情況下,確定是否是對于寫入的呈交時間以從呈交級622和624接收到的如上所述的相沖突的寫入操作的至少一部分的數(shù)據(jù)為基礎(chǔ)。如果確定不是對于被輸入到復(fù)用器的任何寫入操作的呈交時間,則該方法繼續(xù)進(jìn)行到步驟910。然而,如果確定是對于被輸入到復(fù)用器的至少一個寫入操作的呈交時間,則該方法繼續(xù)進(jìn)行到步驟916。
[0136]在步驟910,確定是否存在被輸入到復(fù)用器的讀取操作。如果為是,則該讀取操作被給予優(yōu)先級。具體地說,如果確定存在被輸入到復(fù)用器的讀取操作,則該方法繼續(xù)進(jìn)行到步驟912。然而,如果確定不存在被輸入到復(fù)用器的讀取操作,則方法900繼續(xù)進(jìn)行到步驟914。
[0137]在步驟912,讀取操作被提交到子寄存器文件。方法900然后結(jié)束。
[0138]在步驟914,被輸入到復(fù)用器的寫入操作之一被選擇并提交到子寄存器文件。方法900然后結(jié)束。
[0139]在步驟916,確定是否是對于被輸入到復(fù)用器的僅一個寫入操作的呈交時間。如果為是,則該寫入操作被給予優(yōu)先級。具體地說,如果確定是對于僅一個相沖突的寫入操作的呈交時間,則該方法繼續(xù)進(jìn)行到步驟918。然而,如果確定是對于至少兩個相沖突的寫入操作的呈交時間,則方法900繼續(xù)進(jìn)行到步驟920。
[0140]在步驟918,其呈交時間已經(jīng)到達(dá)的寫入操作被提交到子寄存器文件。
[0141]在步驟920,其呈交時間已經(jīng)到達(dá)的寫入操作中的一個被提交到子寄存器文件。如上所述,僅一個操作能夠在特定的周期中被提交到子寄存器文件。
[0142]在當(dāng)前調(diào)度周期(例如,時鐘周期)中沒有被提交到子寄存器文件的任何相沖突的操作被認(rèn)為在下一個調(diào)度周期(例如,時鐘周期)中提交到子寄存器文件。例如,在當(dāng)前時鐘周期中沒有被提交到子寄存器文件的相沖突的讀取操作可以在下一個時鐘周期中被自動輸入到復(fù)用器中,并且如果在下一時鐘周期中不存在已經(jīng)到達(dá)或經(jīng)過呈交時間的相沖突的寫入操作,則讀取操作將被提交到子寄存器文件。類似地,在當(dāng)前時鐘周期中沒有被提交到子寄存器文件的相沖突的寫入操作可以在下一時鐘周期中由緩沖器選擇以便被輸入到復(fù)用器。如果在該時鐘周期中不存在已經(jīng)到達(dá)或經(jīng)過呈交時間的相沖突的讀取操作或?qū)懭氩僮?,則該寫入操作將被提交到子寄存器文件。如果相沖突的寫入已經(jīng)到達(dá)呈交時間,則在下一個周期中,它的呈交時間將經(jīng)過,并且將被給予最高優(yōu)先級并被提交到子寄存器文件。
[0143]現(xiàn)在參照圖10,說明了方法1000,該方法1000可以由圖8的仲裁邏輯單元804執(zhí)行,用于解決試圖在多線程亂序處理器(例如,處理器600)中在相同的調(diào)度周期(例如,時鐘周期)中訪問子寄存器文件的操作之間的沖突。在步驟1002,到與子寄存器文件(例如,子寄存器文件702)相關(guān)聯(lián)的復(fù)用器(例如,復(fù)用器806)的輸入(例如,讀取和/或?qū)懭氩僮?被讀取。一旦到復(fù)用器的輸入被讀取,則方法1000繼續(xù)進(jìn)行到步驟1004。
[0144]在步驟1004,確定被輸入到復(fù)用器的任何寫入操作是否將被重寫。在一些情況下,確定寫入操作是否將被重寫包括確定寫入操作是否位于緩沖器中在緩沖器的尾部之后的預(yù)定數(shù)量的空位中。該預(yù)定數(shù)量的空位可以以處理器中線程的數(shù)量為基礎(chǔ)。通常,線程的數(shù)量越高,空位的預(yù)定數(shù)量就越高。例如,如果處理器具有兩個線程,則空位的預(yù)定數(shù)量可以是一,而如果處理器具有四個線程,則空位的預(yù)定數(shù)量可以是二。
[0145]如果寫入操作位于緩沖器中在緩沖器的尾部之后的預(yù)定數(shù)量的空位中,則在緩沖器從解碼和重命名級接收到預(yù)定數(shù)量的新的寫入操作之后,被輸入到復(fù)用器的寫入操作將被重寫。例如,如果空位的預(yù)定數(shù)量為一,則當(dāng)緩沖器接收到一個新的寫入操作時,被輸入到復(fù)用器的寫入操作將被重寫。類似地,如果空位的預(yù)定數(shù)量為二,則在緩沖器接收到兩個新的寫入操作之后,被輸入到復(fù)用器的寫入操作將被重寫。因此,為了確保被輸入到復(fù)用器的寫入操作在被提交之前不被重寫,將其提交到子寄存器文件。
[0146]如果確定被輸入到復(fù)用器的寫入操作中沒有一個將被重寫,則方法1000繼續(xù)進(jìn)行到步驟1006。然而,如果確定被輸入到復(fù)用器的至少一個寫入操作將被重寫,則方法1000繼續(xù)進(jìn)行到步驟1012。
[0147]在步驟1006,確定是否存在被輸入到復(fù)用器的讀取操作。如果為是,則讀取操作被給予優(yōu)先級。具體地說,如果確定存在被輸入到復(fù)用器的讀取操作,則該方法繼續(xù)進(jìn)行到步驟1008。然而,如果確定不存在被輸入到復(fù)用器的讀取操作,則方法1000繼續(xù)進(jìn)行到步驟1010。
[0148]在步驟1008,讀取操作被提交到子寄存器文件。方法1000然后結(jié)束。
[0149]在步驟1010,被輸入到復(fù)用器的寫入操作之一被選擇并提交到子寄存器文件。方法1000然后結(jié)束。
[0150]在步驟1012,確定被輸入到復(fù)用器的僅一個寫入操作是否將被重寫。如果為是,則該寫入操作被給予優(yōu)先級。具體地說,如果確定僅一個相沖突的寫入操作將被重寫,則方法1000繼續(xù)進(jìn)行到步驟1014。然而,如果確定至少兩個相沖突的寫入操作將被重寫,則方法1000繼續(xù)進(jìn)行到步驟1016。
[0151]在步驟1014,將要被重寫的寫入操作被提交到子寄存器文件。
[0152]在步驟1016,將要被重寫的寫入操作中的一個被提交到子寄存器文件。如上所述,在特定的周期中僅一個操作可以被提交到子寄存器文件。
[0153]在當(dāng)前調(diào)度周期(例如,時鐘周期)中沒有被提交到子寄存器文件的任何相沖突的操作被認(rèn)為在下一個調(diào)度周期(例如,時鐘周期)中提交到子寄存器文件。例如,在當(dāng)前時鐘周期中沒有被提交到子寄存器文件的相沖突的讀取操作可以在下一個時鐘周期中被自動輸入到復(fù)用器中,并且如果在下一個時鐘周期中不存在將被重寫的相沖突的寫入操作,則讀取操作將被提交到子寄存器文件。類似地,在當(dāng)前時鐘周期中未被提交到子寄存器文件的相沖突的寫入操作可以在下一個時鐘周期中被緩沖器選擇以便被輸入到復(fù)用器。如果在該時鐘周期中不存在將被重寫的相沖突的讀取操作或?qū)懭氩僮?,則該寫入操作將被提交到子寄存器文件。
[0154]在緩沖器的累積尺寸等于R0B618或620的尺寸的情況下,參照圖10描述的重寫方法1000允許更多的讀取被優(yōu)先考慮,因而與參照圖9描述的呈交時間方法900相比較改善了系統(tǒng)性能。例如,在讀取操作能夠執(zhí)行之前,未來的指令可以是在來自讀取操作的數(shù)據(jù)上等待,因而優(yōu)先考慮讀取操作而非寫入操作可以加速程序的執(zhí)行。相反,使寫入操作到子寄存器文件的提交延遲可以不影響指令,由于寫入數(shù)據(jù)可以被替代地從緩沖器讀取。
[0155]優(yōu)于呈交時間方法900的進(jìn)一步的系統(tǒng)改善可以實(shí)現(xiàn),其中緩沖器的累積尺寸大于R0B618或620的尺寸。具體地說,通過增加緩沖器的尺寸,增加了在變?yōu)榈却龑懭氩僮鞯膶懭氩僮骱筒坏貌粚懭氩僮魈峤坏阶蛹拇嫫魑募膶懭氩僮髦g的時間。這允許更多的時間來使寫入操作被提交到子寄存器文件,并且因而減少了不得不為了寫入操作而停止讀取操作的機(jī)會。
[0156]如同方法500 —樣,方法900和1000可以在每調(diào)度周期(例如,時鐘周期)重復(fù)。
[0157]本領(lǐng)域的普通技術(shù)人員將認(rèn)識到,用于存儲程序指令的存儲設(shè)備可以分布在網(wǎng)絡(luò)上。例如,遠(yuǎn)程計(jì)算機(jī)可以存儲被描述為軟件的處理的示例。本地或終端計(jì)算機(jī)可以訪問遠(yuǎn)程計(jì)算機(jī)并且下載軟件的一部分或全部以便運(yùn)行該程序??蛇x地,本地計(jì)算機(jī)可以根據(jù)需要下載軟件的片段,或者在本地終端處執(zhí)行一些軟件指令并且在遠(yuǎn)程計(jì)算機(jī)(或計(jì)算機(jī)網(wǎng)絡(luò))處執(zhí)行一些軟件指令。本領(lǐng)域中的普通技術(shù)人員也將認(rèn)識到,通過利用本領(lǐng)域中的普通技術(shù)人員已知的常規(guī)技術(shù),軟件指令的全部或一部分可以由諸如DSP、可編程邏輯陣列等等的專用電路實(shí)現(xiàn)。
[0158]存儲用于在實(shí)現(xiàn)所公開的方面時使用的機(jī)器可執(zhí)行數(shù)據(jù)的存儲器可以是非暫態(tài)介質(zhì)。非暫態(tài)介質(zhì)可以是易失性或非易失性的。易失性非暫態(tài)介質(zhì)的示例包括基于半導(dǎo)體的存儲器,例如SRAM或DRAM??梢杂糜趯?shí)現(xiàn)非易失性存儲器的技術(shù)的示例包括光和磁存儲器技術(shù)、閃存、相變存儲器、電阻RAM。
[0159]在不失去所尋求的效果的情況下,本文給出的任何范圍或設(shè)備值可以被擴(kuò)展或改變,這對于本領(lǐng)域的普通技術(shù)人員是顯而易見的。
[0160]將理解,上面描述的益處和優(yōu)點(diǎn)可以涉及一個實(shí)施例或者可以涉及幾個實(shí)施例。所述實(shí)施例不局限于解決所陳述的問題中的任意或所有的實(shí)施例或具有所陳述的益處和優(yōu)點(diǎn)的任意或所有的實(shí)施例。
[0161]對“一”項(xiàng)目的任何提及指代這些項(xiàng)目中的一個或多個。術(shù)語“包括”在本文中用于意指包括所標(biāo)識的方法方框或要素,但是這樣的方框或要素不包括排他性的列表,并且裝置可以包含附加的方框或要素,而且方法可以包含附加的操作或要素。而且,方框、要素和操作本身不被隱含地閉合。
[0162]可以在適當(dāng)?shù)臅r候按照任何適當(dāng)?shù)捻樞蚧蛲瑫r執(zhí)行本文描述的方法的步驟。在附圖中的方框之間的箭頭表示方法步驟的一個示例序列,而不是意在排除并行多個步驟的其它序列或性能。此外,在不偏離本文描述的主題的精神和范圍的情況下,可以從任何方法刪除單獨(dú)的方框。在不失去所尋求的效果的情況下,上面描述的任何示例的方面可以與所述其它示例中的任意一個的方面相組合以便形成進(jìn)一步的示例。在附圖的要素被表示為由箭頭連接的情況下,將認(rèn)識到,這些箭頭僅示出了要素之間的通信的一個示例流(包括數(shù)據(jù)和控制消息)。在要素之間的流可以在一個方向上或在兩個方向上。
[0163]對“邏輯”的特定提及指代執(zhí)行一種或多種功能的結(jié)構(gòu)。邏輯的示例包括布置為執(zhí)行那些功能的電路。例如,這樣的電路可以包括在制造處理中可用的晶體管和/或其它硬件元件。通過示例的方式,這樣的晶體管和/或其它元件可以用于形成實(shí)現(xiàn)和/或包含諸如寄存器、觸發(fā)器或鎖存器的存儲器,諸如布爾運(yùn)算的邏輯運(yùn)算符,例如加法器、乘法器或移位器的數(shù)學(xué)運(yùn)算符以及互連的電路或結(jié)構(gòu)。這樣的元件可以被提供為定制電路或標(biāo)準(zhǔn)單元庫、宏或至少其它級別的抽象。這樣的元件可以在特定的布置中被互連。邏輯可以包括具有固定功能的電路,并且電路可以被編程為執(zhí)行一種或多種功能;這樣的編程可以從固件或軟件更新或控制機(jī)制提供。被識別為執(zhí)行一種功能的邏輯還可以包括實(shí)現(xiàn)構(gòu)成的功能或子處理的邏輯。在示例中,硬件邏輯具有實(shí)現(xiàn)一種或多種固定功能操作、狀態(tài)機(jī)或處理的電路。
[0164]將理解,僅通過示例的方式給出了優(yōu)選實(shí)施例的上述描述,并且本領(lǐng)域中的普通技術(shù)人員可以做出各種修改。盡管上面以某種程度的細(xì)節(jié)或參照一個或多個單獨(dú)的實(shí)施例描述了各種實(shí)施例,但是在不偏離本發(fā)明的精神或范圍的情況下,本領(lǐng)域中的普通技術(shù)人員可以對所公開的實(shí)施例做出許多改變。
【權(quán)利要求】
1.一種用于在亂序處理器(100,600)中使用的寄存器文件(102,630),所述寄存器文件包括: 多個子寄存器文件(202-212,702-712),每一個子寄存器文件(202-212,702-712)包括至少一個物理寄存器;以及 多個緩沖器(214-224,714-736),每一個緩沖器(214-224,714-736)與子寄存器文件(202-212,702-712)相關(guān)聯(lián)并且布置為: 接收目的地為相關(guān)聯(lián)的子寄存器文件(202-212,702-712)的寫入操作; 將每一個接收到的寫入操作存儲在所述緩沖器中; 接收對于存儲在所述緩沖器(214-224,714-736)中的每一個寫入操作的寫入值; 將每一個接收到的寫入值存儲在所述緩沖器中; 對存儲對于特定的寫入操作的寫入值做出響應(yīng),將所述特定的寫入操作識別為等待寫入操作; 在每一個時鐘周期,確定在所述緩沖器(214-224,714-736)中是否存在至少一個等待寫入操作;并且 對確定在所述緩沖器(214-224,714-736)中存在至少一個等待寫入操作做出響應(yīng),選擇所述等待寫入操作中的一個并且將選擇的寫入操作發(fā)布到所述相關(guān)聯(lián)的子寄存器文件(202-212,702-712)。
2.如權(quán)利要求1所述的寄存器文件(102,630),進(jìn)一步包括多個仲裁邏輯單元(304,804),每一個仲裁邏輯單元(304,804)與子寄存器文件(202-212,702-712)相關(guān)聯(lián)并且布置為: 接收被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件(202-212,702-712)的寫入和讀取操作;并且 通過優(yōu)先處理讀取操作來解決在相同的時鐘周期中被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件(202-212,702-712)的讀取和寫入操作之間的沖突,除非相沖突的寫入操作將被重寫。
3.如權(quán)利要求1所述的寄存器文件(102,630),進(jìn)一步包括多個仲裁邏輯單元(304,804),每一個仲裁邏輯單元(304,804)與子寄存器文件(202-212,702-712)相關(guān)聯(lián)并且布置為: 接收被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件(202-212,702-712)的寫入和讀取操作;并且 通過優(yōu)先處理讀取操作來解決在相同的時鐘周期中被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件(202-212,702-712)的讀取和寫入操作之間的沖突,除非相沖突的寫入操作已經(jīng)到達(dá)呈交時間。
4.如權(quán)利要求1所述的寄存器文件(102,630),進(jìn)一步包括至少一個讀取邏輯單元(302、802),每一個讀取邏輯單元與至少一個子寄存器文件(202-212,702-712)相關(guān)聯(lián)并且布置為: 接收對于每一個相關(guān)聯(lián)的子寄存器文件(202-212,702-712)的讀取操作;并且將每一個讀取操作發(fā)布到適當(dāng)?shù)淖蛹拇嫫魑募?202-212,702-712)以及與所述適當(dāng)?shù)淖蛹拇嫫魑募?202-212,702-712)相關(guān)聯(lián)的至少一個緩沖器(214-224,714-736)。
5.如權(quán)利要求4所述的寄存器文件(102,630),其中,每一個讀取邏輯單元(302,802)布置為僅對確定被發(fā)布到與所述適當(dāng)?shù)淖蛹拇嫫魑募?202-212,702-712)相關(guān)聯(lián)的所述至少一個緩沖器(214-224,714-736)的所述讀取操作不產(chǎn)生匹配做出響應(yīng)來將所述讀取操作發(fā)布到所述適當(dāng)?shù)淖蛹拇嫫魑募?202-212,702-712)。
6.如權(quán)利要求4所述的寄存器文件(102,630),其中,每一個讀取邏輯單元(302,802)布置為在相同的時鐘周期中將所述讀取操作發(fā)布到所述適當(dāng)?shù)淖蛹拇嫫魑募?202-212,702-712)以及與所述適當(dāng)?shù)淖蛹拇嫫魑募?202-212,702-712)相關(guān)聯(lián)的所述至少一個緩沖器(214-224,714-736)。
7.如權(quán)利要求1所述的寄存器文件(102,630),其中,所述子寄存器文件(202-212,702-712)的數(shù)量等于在單個時鐘周期中能夠由所述亂序處理器(100,600)呈交的指令的數(shù)量。
8.如權(quán)利要求1所述的寄存器文件(102,630),其中,所述子寄存器文件(202-212,702-712)中的每一個被實(shí)現(xiàn)在隨機(jī)存取存儲器中。
9.如權(quán)利要求1所述的寄存器文件(102,630),其中,所述寫入操作按照程序順序被存儲在所述多個緩沖器(214-224,714-736 )中。
10.如權(quán)利要求1所述的寄存器文件(102,630),其中,所述多個緩沖器(214-224,714-736)中的每一個是環(huán)形緩沖器。
11.如權(quán)利要求1所述的寄存器文件(102),其中,存儲在緩沖器(214-224)中的每一個寫入操作最晚在呈交時間被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件(202-212)。
12.如權(quán)利要求3所述的寄存器文件(630),其中,所述亂序處理器(600)是多線程處理器,并且每一個子寄存器文件(702-712)與多個緩沖器(714-736)相關(guān)聯(lián),每一個相關(guān)聯(lián)的緩沖器(714-736)布置為從多個線程(602、604)中的一個接收并存儲寫入操作。
13.如權(quán)利要求12所述的寄存器文件(630),其中,每一個仲裁邏輯單元(804)布置為通過優(yōu)先處理讀取操作來解決在相同的時鐘周期中被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件(702-712)的讀取和寫入操作之間的沖突,除非相沖突的寫入操作已經(jīng)到達(dá)呈交時間或它的呈交時間已經(jīng)過去。
14.如權(quán)利要求13所述的寄存器文件(630),其中,每一個仲裁邏輯單元(804)布置為: 確定對于在特定的時鐘周期中被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件(702-712)的至少一個寫入操作的呈交時間是否已經(jīng)過去; 對確定對于被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件的至少一個寫入操作的呈交時間已經(jīng)過去做出響應(yīng),選 擇其呈交時間已經(jīng)過去的所述寫入操作中的一個并且在所述特定的時鐘周期期間將選擇的寫入操作提交到所述相關(guān)聯(lián)的子寄存器文件(702-712); 對確定對于在所述特定的時鐘周期中被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件(702-712)的至少一個寫入操作的呈交時間還沒有過去做出響應(yīng),確定是否是對于被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件(702-712)的至少一個寫入操作的呈交時間; 對確定不是對于被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件的至少一個寫入操作的呈交時間做出響應(yīng),將任何讀取操作提交到所述相關(guān)聯(lián)的子寄存器文件;并且 對確定是對于被發(fā)布到所述相關(guān)聯(lián)的子寄存器文件的至少一個寫入操作的呈交時間做出響應(yīng),選擇已經(jīng)到達(dá)呈交時間的所述寫入操作中的一個,并且將選擇的寫入操作提交到所述相關(guān)聯(lián)的子寄存器文件(702-712)。
15.如權(quán)利要求3所述的寄存器文件(102,630),其中,以從所述亂序處理器(100,600)的至少一個呈交級(114,622,624)接收到的信息為基礎(chǔ)來確定對于特定的寫入操作的呈交時間。
16.一種亂序處理器(100,600),包括: 寄存器文件(102,630),所述寄存器文件包括: 多個子寄存器文件,每一個子寄存器文件包括至少一個物理寄存器;和 多個緩沖器,每一個緩沖器與子寄存器文件相關(guān)聯(lián)并且布置為: 接收目的地為相關(guān)聯(lián)的子寄存器文件的寫入操作; 將每一個接收到的寫入操作存儲在所述緩沖器中; 接收對于存儲在所述緩沖器中的每一個寫入操作的寫入值; 將每一個接收到的寫入值存儲在所述緩沖器中; 對存儲對于特定的寫入操作的寫入值做出響應(yīng),將所述特定的寫入操作識別為等待寫入操作; 在每一個時鐘周期,確 定在所述緩沖器中是否存在至少一個等待寫入操作;并且對確定在所述緩沖器中存在至少一個等待寫入操作做出響應(yīng),選擇所述等待寫入操作中的一個并且將選擇的寫入操作發(fā)布到所述相關(guān)聯(lián)的子寄存器文件;以及 解碼和重命名級(106,610,612),所述解碼和重命名級(106,610,612)布置為: 接收取出的指令; 對于在所述取出的指令的寫入操作中提到的任何架構(gòu)寄存器分派子寄存器文件(202-212,702-712)以及來自分派的子寄存器文件(202-212,702-712)的物理寄存器;并且 使用分派的子寄存器文件(202-212,702-712)的指示符和分派的物理寄存器的指示符來重命名所述架構(gòu)寄存器。
17.如權(quán)利要求16所述的亂序處理器(100,600),其中,所述子寄存器文件(202-212,702-712)在循環(huán)的基礎(chǔ)上被分派到架構(gòu)寄存器。
18.如權(quán)利要求16所述的亂序處理器(100,600),其中,子寄存器文件(202-212,702-712)和物理寄存器到架構(gòu)寄存器的分派被存儲在寄存器重命名映射(108,614,616)中。
19.如權(quán)利要求18所述的亂序處理器(100,600),其中,所述解碼和重命名級(106,610,612)進(jìn)一步布置為: 使用在所述寄存器重命名映射(108,614,616)中指定的分派的子寄存器文件(202-212,702-712)的指示符和分派的物理寄存器的指示符來重命名在所述取出的指令的讀取操作中提到的任意架構(gòu)寄存器。
20.一種讀取和寫入亂序處理器(100,600)的寄存器文件(102,630)的方法,所述寄存器文件(102,630)包括多個子寄存器文件(202-212,702-712),每一個子寄存器文件(202-212,702-712)包括至少一個物理寄存器,所述方法包括: 在多個緩沖器(214-224,714-736)中的一個處接收目的地為相關(guān)聯(lián)的子寄存器文件(202-212,702-712)的寫入操作;將接收到的寫入操作存儲在所述緩沖器(214-224,714-736)中; 在所述緩 沖器(214-224,714-736)處接收對于所述寫入操作的寫入值; 在所述緩沖器(214-224、714-736)中與所述寫入操作相關(guān)聯(lián)地存儲接收到的寫入值;對將接收到的寫入值存儲在所述緩沖器中做出響應(yīng),將所述寫入操作識別為等待寫入操作; 在每一個時鐘周期,確定在所述緩沖器中是否存在至少一個等待寫入操作;并且對確定在所述緩沖器中存在至少一個等待寫入操作做出響應(yīng),選擇所述等待寫入操作中的一個并且將選擇的寫入操作發(fā)布到相關(guān)聯(lián)的子寄存器文件。
【文檔編號】G06F9/38GK103970505SQ201410033696
【公開日】2014年8月6日 申請日期:2014年1月24日 優(yōu)先權(quán)日:2013年1月24日
【發(fā)明者】H·杰克遜 申請人:想象力科技有限公司