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