專利名稱:為處理器中的指令提供源操作數(shù)的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的實(shí)施例總體上涉及計算機(jī)處理器中的指令流水線。
背景計算機(jī)系統(tǒng)中的處理器一般以一系列的階段來執(zhí)行指令,這一系列階段可稱作流水線。這些階段的每一階段可以由處理器的不同部分執(zhí)行。例如,指令可以由解碼器解碼,隨后,經(jīng)解碼的指令由一個功能單元執(zhí)行。在“無序的”體系結(jié)構(gòu)中,指令可以由執(zhí)行單元按照與從中得到這些指令的程序所規(guī)定的順序不同的順序執(zhí)行。在這樣的情況下,指令可以被派發(fā)器(dispatcher)派發(fā)到調(diào)度器(scheduler),調(diào)度器可決定向執(zhí)行指令的功能單元發(fā)送指令的順序。
處理器執(zhí)行的指令一般用寄存器來存儲數(shù)據(jù)。指令可以有一個或多個源操作數(shù),它們可以存儲在寄存器中;指令可以產(chǎn)生一個結(jié)果,它也可以存儲在寄存器中。如果指令的源操作數(shù)被存儲在一個寄存器中(即從寄存器讀出),或者一個結(jié)果被存儲在那個寄存器中(即向寄存器寫入),則可以說指令使用該寄存器。例如,對于一個給定的指令來說,處理器可以從寄存器R0讀出一個數(shù)據(jù)操作數(shù),從寄存器R3讀出一個數(shù)據(jù)操作數(shù),將這些數(shù)據(jù)操作數(shù)相加,然后將結(jié)果存回到寄存器R4中。有些現(xiàn)有技術(shù)的體系結(jié)構(gòu)可以有一個寄存器高速緩存,在這樣的體系結(jié)構(gòu)中,可以從寄存器高速緩存中獲得源操作數(shù),或者,如果高速緩存失誤,則從寄存器文件單元獲得源操作數(shù)。在現(xiàn)有的體系結(jié)構(gòu)中,流水線中的每個指令必須流經(jīng)寄存器文件單元(或相關(guān)聯(lián)的寄存器高速緩存)。例如,有些現(xiàn)有技術(shù)的無序體系結(jié)構(gòu)是在主流水線中調(diào)度器之后具有寄存器文件單元(在這種情況下,可以在指令被調(diào)度器調(diào)出并發(fā)往功能單元時訪問寄存器文件單元);或者是在主流水線中調(diào)度器之前具有寄存器文件單元(在這種情況下,可以在指令進(jìn)入調(diào)度器時,訪問寄存器文件單元)。
附圖簡述
圖1是按照本發(fā)明實(shí)施例向調(diào)度器提供源操作數(shù)的處理器的簡化框圖2是按照本發(fā)明實(shí)施例把指令派發(fā)到調(diào)度器中和請求讀寄存器的方法的簡化流程圖;圖3是表示按照本發(fā)明另一個實(shí)施例的具有寄存器文件單元和與調(diào)度器耦接的功能單元的處理器的細(xì)節(jié)的簡化框圖;圖4是表示按照本發(fā)明另一個實(shí)施例的具有與調(diào)度器耦接的寄存器文件單元和功能單元的處理器的細(xì)節(jié)的簡化框圖。
詳細(xì)說明本發(fā)明的實(shí)施例涉及用于為處理器流水線中的指令提供源操作數(shù)的方法和裝置。在有些實(shí)施例中,處理器具有一個與功能單元并行地實(shí)現(xiàn)的寄存器文件單元,用于為調(diào)度器中的指令提供數(shù)據(jù)操作數(shù),并可被看作如同是功能單元那樣提供數(shù)據(jù)操作數(shù)。在有些實(shí)施例中,可以派發(fā)一個具有要從寄存器讀出的數(shù)據(jù)操作數(shù)的指令而不用向該寄存器發(fā)送一個讀請求——如果該源操作數(shù)有一個產(chǎn)生指令正在運(yùn)行中(in-flight)的話,并且,即使沒有,也可以在向該寄存器的讀請求得到結(jié)果之前派發(fā)該指令。按照有些實(shí)施例,多個指令對同一個物理寄存器的多個讀出請求可以被壓縮成一個單一的寄存器文件讀出,這樣,該單一的寄存器文件讀出可以將其數(shù)據(jù)匯集到1到n個在調(diào)度器內(nèi)的等待指令。在有些實(shí)施例中,可以將處理器設(shè)計得能容忍具有不同延遲的寄存器文件的訪問。應(yīng)當(dāng)理解,本文所述的例子的各種修改和變體可由下文提供的教導(dǎo)所覆蓋并且處在后附的權(quán)利要求的范圍內(nèi)。
圖1是按照本發(fā)明實(shí)施例向調(diào)度器提供源操作數(shù)的處理器的簡化框圖。圖1顯示的處理器100包括退役順序(retirement order)緩沖器110、派發(fā)器120、運(yùn)行中的存儲器125、調(diào)度器130、讀隊列140、寄存器文件單元150和功能單元160。處理器100可以是用于計算機(jī)系統(tǒng)的任何類型的處理器,諸如位于美國加州Santa Clara的英特爾公司的奔騰類微處理器。圖1中所示的各單元,可以例如以硬件、固件或者硬件與固件的某種組合的形式實(shí)現(xiàn)。盡管圖1顯示了處理器100的一個指令流水線,在其它實(shí)施例中指令流水線可含有更多的單元、不同的單元和/或額外的單元。
如圖1中所示,退役順序緩沖器110存儲多條指令,諸如指令15-17。這些指令,例如可以是要由處理器100例如按照已知指令處理技術(shù)執(zhí)行的一組程序指令的經(jīng)解碼的微指令。這些指令也可以是宏指令,微指令和宏指令的某種組合,等等。例如,指令15可以是一個執(zhí)行“ADD R0=R3,R4”的指令,該指令要求把寄存器0中存儲的數(shù)據(jù)操作數(shù)與寄存器3中存儲的數(shù)據(jù)操作數(shù)相加,將其結(jié)果存入寄存器4。當(dāng)然,退役順序緩沖器110可以存儲多于三條的要被執(zhí)行的指令。在所示實(shí)施例中,指令并非是與指令要使用的數(shù)據(jù)操作數(shù)一起存儲在退役順序緩沖器110中的,數(shù)據(jù)是由流水線中更遠(yuǎn)的單元提供的。
退役順序緩沖器110與派發(fā)器120耦接,可以向派發(fā)器120提供指令。本文中,如果兩個物體直接或者間接地相連,則可將他們稱作是“耦接的”。在有些實(shí)施例中,如圖1中所示,派發(fā)器120與讀隊列140耦接,后者又與寄存器文件單元150耦接。在圖1所示的實(shí)施例中,寄存器文件單元150含有第一寄存器組151和第二寄存器組152,讀隊列140對應(yīng)地含有第一存儲單元組141和第二存儲單元組142。例如,可以將隊列分組(banked)成偶數(shù)的和奇數(shù)的組。在其它實(shí)施例中,寄存器文件單元150和讀隊列140可以不分組,或者可以含有不同數(shù)目的組。在有些實(shí)施例中,處理器可包括一個2組寄存器文件單元,每個組有兩個讀端口,用簡單SRAM單元實(shí)現(xiàn),這樣每個周期總共多達(dá)4個讀結(jié)果。在所示實(shí)施例中,派發(fā)器120可以向讀隊列140發(fā)送一個請求,要求讀寄存器文件單元150中的一個寄存器提供一個要被某指令使用的數(shù)據(jù)操作數(shù),讀隊列140可以緩存這樣的請求,并將其傳遞到寄存器文件單元150中適當(dāng)?shù)募拇嫫鳌@?,如果派發(fā)器120正在派發(fā)一條要從寄存器R3中讀一個數(shù)據(jù)操作數(shù)的指令,則派發(fā)器120可以向讀隊列140發(fā)送一個請求讀取寄存器R3的請求121。在有些實(shí)施例中,如果沒有正在等待的請求,則可以繞過讀隊列。讀隊列140可以是實(shí)現(xiàn)隊列的任何類型的存儲器器件??梢詫⒆x隊列設(shè)計得例如吸收最壞情況的讀請求速率,并且可以以寄存器文件單元的讀路徑(portage)所支持的速率(例如通過在對應(yīng)的組中可用的寄存器讀端口)被排出。在有些實(shí)施例中,寄存器讀請求可以把寄存器讀請求的流速率平滑到穩(wěn)定的狀態(tài)水平。
寄存器文件單元150含有一組寄存器R0到Rn,如眾所周知的那樣,可以用來存儲由處理器100執(zhí)行的指令所用的數(shù)據(jù)操作數(shù)。寄存器文件單元150可以是任何類型的存儲器單元,諸如一組靜態(tài)隨機(jī)存取存儲器(SRAM)單元,一組動態(tài)隨機(jī)存取存儲器(DRAM)單元,或者是傳統(tǒng)的寄存器單元。寄存器文件單元150可以含任何數(shù)量的寄存器,例如512個82位寄存器。在有些實(shí)施例中,可以用例如高密度、低功率的SRAM單元實(shí)現(xiàn)海量物理寄存器(例如在數(shù)據(jù)高速緩存中)。結(jié)構(gòu)性和推測性的寄存器狀態(tài)可以混合在同一個物理寄存器文件中。在這樣的實(shí)施例中,結(jié)構(gòu)性和推測性寄存器重命名可以隨著指令的退出而重命名指針,以保留正確的結(jié)構(gòu)性狀態(tài)。在有些寄存器中,寄存器文件單元中的寄存器有少量的端口。例如在一個實(shí)施例中,利用4位寬的派發(fā)機(jī)(4-wide dispatch machine)上的2個讀和1個寫SRAM高速緩存單元,可以將寄存器實(shí)現(xiàn)為一個具有總共4個讀端口和總共2個寫端口的、劃分為兩個組的寄存器文件單元。例如,寄存器文件單元可以有512個寄存器和4個輸出端口。
派發(fā)器120與調(diào)度器130耦接,后者又與功能單元160耦接。在其它實(shí)施例中,處理器可以有多個調(diào)度器,例如每個功能單元有一個調(diào)度器,或者一個功能單元簇有一個調(diào)度器。派發(fā)器120可以將指令例如指令13派發(fā)到調(diào)度器130中。調(diào)度器130可以存儲若干條正在等待調(diào)度、供功能單元之一執(zhí)行的指令,諸如指令11-12。調(diào)度器130可以存儲一個指令而不存儲要由該指令使用的操作數(shù)(如調(diào)度器130中所示的空列所表示的那樣)。在有些實(shí)施例中,指令一旦被派發(fā)到調(diào)度器130中,就可開始有一個“運(yùn)行中”的狀態(tài),并且可繼續(xù)處于運(yùn)行中的狀態(tài),直到數(shù)據(jù)結(jié)果被(例如由寄存器文件單元或功能單元—如下文所討論的那樣)傳遞給該寄存器并且不再是可獲得的(例如從功能單元或旁路網(wǎng)絡(luò))。功能單元160可以是一個或多個執(zhí)行指令的單元,諸如算術(shù)邏輯單元、浮點(diǎn)執(zhí)行單元、整數(shù)執(zhí)行單元、分支執(zhí)行單元等等。當(dāng)要執(zhí)行一個指令時,它被傳遞到功能單元160中一個適當(dāng)?shù)墓δ軉卧摴δ軉卧獔?zhí)行該指令。調(diào)度器130可以是一個無序調(diào)度器,因為指令可以按與它們出現(xiàn)的順序不同的順序執(zhí)行。例如,指令12可以在指令11之前執(zhí)行,盡管指令11是在指令12之前派發(fā)的。調(diào)度器130可以通過執(zhí)行任何調(diào)度算法來調(diào)度指令。
如圖1中所示,寄存器文件單元150的輸出端口(這里是通過一個多路轉(zhuǎn)接器)耦接到調(diào)度器130的輸入端口。此外,功能單元160也有與調(diào)度器130的輸入端口耦接的輸出端口。按照有些實(shí)施例,可以將指定要從寄存器中讀取數(shù)據(jù)操作數(shù)的指令在操作數(shù)可得到之前派發(fā)到調(diào)度器而不帶源操作數(shù)。在有些實(shí)施例中,調(diào)度器130存儲具有用以指定寄存器的源操作數(shù)的指令,并根據(jù)該指令的源操作數(shù)到達(dá)調(diào)度器而調(diào)度該指令。在有些實(shí)施例中,將一條指令的源操作數(shù)提供到調(diào)度器,這與向調(diào)度器派發(fā)新指令是異步的,這意味著,在把指令派發(fā)到調(diào)度器與源操作數(shù)到達(dá)調(diào)度器的時間之間沒有相關(guān)性。因此,指令到達(dá)調(diào)度器與該指令的操作數(shù)到達(dá)調(diào)度器這兩者可以是去耦的。如下文參照圖2將要更詳細(xì)說明的那樣,在調(diào)度器中等待的指令要用的源操作數(shù)可以從寄存器文件150或功能單元160提供給調(diào)度器。例如,假設(shè)指令12是一個要使用要從某個寄存器中讀取的源操作數(shù)153的指令,而且該指令12是在該源操作數(shù)可用之前被派發(fā)到調(diào)度器130的,則可以或者從寄存器文件150或者從功能單元將源操作數(shù)153提供給調(diào)度器130,供由等待的指令12使用。
圖1也顯示一個與派發(fā)器120耦接的運(yùn)行中的存儲器125。如圖所示,運(yùn)行存儲器125含有多個1比特的存儲器位置,為了說明,這些位置在圖1中被標(biāo)記為項(entry)1到n。在所示實(shí)施例中,運(yùn)行存儲器125存儲一個數(shù)組或表,用于表明寄存器文件單元中的一個寄存器是否要被一個運(yùn)行中指令使用。在其余實(shí)施例中,可以采用其它元素/機(jī)制來表明寄存器文件單元中的一個寄存器是否要被一個運(yùn)行中的指令使用,諸如內(nèi)容可尋址的存儲器、各種比較器等等。在圖1所示的例子中,運(yùn)行存儲器125中的0號項含有值“1”,這可以表明寄存器0要被一個運(yùn)行中的指令使用,1號記錄含有值“0”,這可以表明沒有運(yùn)行中的指令要使用寄存器1。在有些實(shí)施例中,可以對這樣一個運(yùn)行表進(jìn)行更新,以反映已經(jīng)被派發(fā)到調(diào)度器的所有產(chǎn)生器指令。在有些實(shí)施例中,也可以為寄存器讀請求設(shè)置運(yùn)行狀態(tài),因為寄存器文件單元是物理寄存器的產(chǎn)生器。如下文所討論的那樣,派發(fā)器120可以用存儲在運(yùn)行存儲器125中的信息來確定是否要向讀隊列140生成一個請求,以要求派發(fā)一條指令(即,要求生成一個要從被指定為該指令的源操作數(shù)的位置的寄存器讀數(shù)據(jù)的請求)。如果生成了這樣一個請求,派發(fā)器120可以在讀請求完成之前把指令派發(fā)到調(diào)度器130。在有些實(shí)施例中,運(yùn)行存儲器125中的各單元可以是完全連接端口的(ported)或者部分連接端口的。
圖2是按照本發(fā)明實(shí)施例把指令派發(fā)到調(diào)度器中和請求讀寄存器的方法的簡化流程圖。這個方法將參照圖1中所示的裝置加以討論,但是該方法也可以用任何其他合適的裝置來執(zhí)行。指令可以流過諸如處理器100的處理器的流水線,并且例如可以被存儲在退役順序緩沖器110中。可以檢查新的指令,并可以確定該指令是否有一個要從寄存器讀取的源操作數(shù)(201)。例如,派發(fā)器120可以從退役順序緩沖器獲得一個指令,并且確定該指令是“ADD R0=R3,R4”指令,在這種情況下必須從寄存器0和寄存器3讀取源操作數(shù)。在另一個例子中,如果新指令沒有從寄存器讀取的源操作數(shù),則可以只是把新指令傳遞到調(diào)度器中用于調(diào)度,這是熟悉本技術(shù)領(lǐng)域的人員都明白的。
如果新指令真的有從寄存器讀取的源操作數(shù),則按照所示的實(shí)施例,就要確定是否有任何運(yùn)行中指令使用與該新指令所要讀取的相同的寄存器(202)。在有些實(shí)施例中,如果某運(yùn)行中指令讀取與被新指令所讀取的同一個寄存器或者寫入該同一個寄存器,則認(rèn)為該運(yùn)行中指令使用與被新指令所讀取的同一個寄存器。在有些實(shí)施例中,對運(yùn)行中指令使用與被新指令所讀取的相同的寄存器的確定,包含檢查存儲器中的一個數(shù)組,以確定是否有任何運(yùn)行中指令要被從與新指令相同的寄存器讀取或者寫到該相同的寄存器。例如,如果派發(fā)器120收到的指令14是一個要讀取寄存器0和寄存器3的“ADD R0=R3,R4”指令,派發(fā)器120可以檢查存儲器125,看看是否有任何運(yùn)行中指令要使用寄存器0和寄存器3。在圖1中所示的例子中,運(yùn)行存儲器125中的項0(它對應(yīng)于寄存器0)含有值“1”,這可能表明有一個運(yùn)行中的指令(例如指令11)要使用寄存器0。
如果一個運(yùn)行中指令使用與該新指令所要讀取的同一個寄存器,則可以將該新指令派發(fā)到調(diào)度器中,而不向該寄存器發(fā)送一個要求讀取源操作數(shù)的請求(203)。在這種情況下,可以將來自該運(yùn)行中的指令的結(jié)果操作數(shù)提供到調(diào)度器,以供新指令作為源操作數(shù)使用(204)。在上面討論的例子中,如果指令14要使用一個存儲在寄存器0中的源操作數(shù),但是指令11是在運(yùn)行中并且要對寄存器讀或?qū)?,則可以將指令14派發(fā)到調(diào)度器130,而不向寄存器文件單元150發(fā)送一個要求讀寄存器0的讀請求。如果指令11只是讀取寄存器0,從寄存器讀得的操作數(shù)(諸如圖1中的操作數(shù)153)可以從寄存器的輸出端口提供給調(diào)度器130的輸入,此時,可以將操作數(shù)存儲在調(diào)度器130,供將來要執(zhí)行指令14時由該指令使用。如果指令11改變了寄存器0的值(例如寫一個結(jié)果到寄存器0),則功能單元160在執(zhí)行指令11時所產(chǎn)生的結(jié)果(諸如圖1中的操作數(shù)153)可以從功能單元的輸出端口提供到調(diào)度器130的輸入,如剛剛討論的那樣,供將來由指令14使用。當(dāng)然,這假設(shè)了將不會安排新指令在與其相關(guān)的運(yùn)行中的指令之前執(zhí)行。因此,按照有些實(shí)施例,在產(chǎn)生器指令可能是被功能單元或者寄存器文件單元執(zhí)行的產(chǎn)生指令的情況下,如果產(chǎn)生器指令是運(yùn)行中的,則不生成讀請求。
如果沒有運(yùn)行中的指令使用與該新指令所要讀取的相同的寄存器,則可以生成一個請求以便從含有新指令用的源操作數(shù)的寄存器中讀出(205)。在上面的例子中,如果運(yùn)行存儲器125表明沒有使用寄存器0的運(yùn)行中指令,則派發(fā)器120可以生成一個讀寄存器0的請求121。在有些實(shí)施例中,生成讀寄存器的請求包含向該寄存器的一個讀隊列(例如讀隊列140)發(fā)送以一個要從該寄存器讀取源操作數(shù)的請求。因此,按照有些實(shí)施例,即使寄存器文件中沒有足夠的端口可用來接收讀請求,派發(fā)器也可以繼續(xù)將指令派發(fā)到指令調(diào)度器中。在圖2所示的實(shí)施例中,在接收到所生成的讀請求的結(jié)果之前就將新指令派發(fā)到調(diào)度器中(206)。在上面的例子中,即使尚未響應(yīng)讀請求121而讀取寄存器0,也可以將指令14派發(fā)到調(diào)度器130中。如圖2中所示,在讀請求完成時,可以把新指令用的源操作數(shù)從寄存器提供到調(diào)度器,供新指令使用(207)。例如,指令12可在調(diào)度器130中等待著操作數(shù)153響應(yīng)于讀請求121而從寄存器0被提供到調(diào)度器130。
在有些實(shí)施例中,可以用內(nèi)容可尋址的存儲器(CAM)將寄存器文件結(jié)果裝載到調(diào)度器中,這樣可以被處理器功能單元使用。在有些實(shí)施例中,可以或者從寄存器的輸出端口或者從功能單元的輸出端口將新指令的源操作數(shù)提供到調(diào)度器的端口,其中寄存器文件單元與功能單元共享調(diào)度器的輸入端口。在有些實(shí)施例中,在調(diào)度器中等待的指令可能對寄存器文件數(shù)據(jù)值何時到達(dá)是不敏感的。因此,調(diào)度器可在功能單元和寄存器文件單元產(chǎn)生它們的結(jié)果時捕獲源操作數(shù)數(shù)據(jù)。當(dāng)調(diào)度器有了用于特定指令的所要求的所有源操作數(shù)數(shù)據(jù)時,調(diào)度器可以把該值令發(fā)布到正確的功能單元。在有些實(shí)施例中,不需要寄存器讀出數(shù)值的那些后繼指令可以立即進(jìn)入調(diào)度器,以便在那些需要寄存器讀出數(shù)值的指令周圍被調(diào)度。因此,可以與新指令的派發(fā)異步地向調(diào)度器提供源操作數(shù),調(diào)度器可以在調(diào)度新指令供執(zhí)行之前,等待源操作數(shù)被提供到調(diào)度器。
圖3是表示按照本發(fā)明另一個實(shí)施例的具有寄存器文件單元和與調(diào)度器耦接的功能單元的一個處理器的細(xì)節(jié)的簡化框圖。圖3表示的處理器100包含圖1中所示一些部件。特別地,圖3顯示有圖1的調(diào)度器130、寄存器文件單元150和功能單元160。在圖3所示的實(shí)施例中,處理器也有一個耦接到調(diào)度器130的旁路網(wǎng)絡(luò)310、寄存器文件單元150和功能單元160。特別地,旁路網(wǎng)絡(luò)310的輸出端口耦接到調(diào)度器130的輸入端口,并且(這里是通過一個多路轉(zhuǎn)接器)耦接到功能單元160的輸入端口。此外,寄存器文件單元150和功能單元160的輸出端口還耦接到旁路網(wǎng)絡(luò)310的輸入端口。在有些實(shí)施例中,可以將來自寄存器文件單元150和功能單元160的輸出數(shù)據(jù)轉(zhuǎn)發(fā)到調(diào)度器130或功能單元160,供將來的指令使用。在有些實(shí)施例中,旁路網(wǎng)絡(luò)310可以含有緩沖器,用于暫時存儲數(shù)據(jù)操作數(shù)。當(dāng)然,旁路網(wǎng)絡(luò)310的輸出端口可以耦接到(通過寄存器文件端口)寄存器文件單元150中的每一個寄存器,以及耦接到功能單元160中的一組功能單元。在有些實(shí)施例中,旁路網(wǎng)絡(luò)可以含有在結(jié)果已經(jīng)被產(chǎn)生后暫時存儲結(jié)果的隊列或緩沖器,并且在有些實(shí)施例中,只要這樣一個指令所產(chǎn)生的結(jié)果在旁路網(wǎng)絡(luò)中仍然是可用的,則可認(rèn)為該指令有一個在運(yùn)行中的狀態(tài)。在有些實(shí)施例中,使用這樣的緩沖器可導(dǎo)致較少的來自寄存器文件單元的通信量(traffic)。
在圖3所示的實(shí)施例中,處理器100也有一個寫隊列320耦接到寄存器文件單元150、功能單元160和旁路網(wǎng)絡(luò)310。特別地,寫隊列320可有一個與寄存器文件單元150的輸入端口耦接的輸出端口,一個通過旁路網(wǎng)絡(luò)315耦接到旁路網(wǎng)絡(luò)310的輸出端口,以及一個耦接到寄存器文件單元150和功能單元160的地輸出端口的輸入端口。按照有些實(shí)施例,寄存器寫入可以在寫隊列320中被緩沖,并在后臺運(yùn)行時被寫入寄存器文件單元。在有些實(shí)施例中,如果某指令要讀取寄存器,而在寫隊列320中該寄存器的一個寫操作尚在等待,則可以通過旁路網(wǎng)絡(luò)315將數(shù)據(jù)從寫隊列提供到調(diào)度器130。與寄存器文件單元150一樣,在有些實(shí)施例中,寫隊列320可以有多個組。當(dāng)然,寫隊列320的輸出端口可以耦接到寄存器文件單元150中的每一個寄存器。在有些實(shí)施例中,如果有寄存器文件寫-讀沖突,可以將尚未寫入的寄存器值從寫隊列旁路到寄存器讀數(shù)據(jù)路徑中。
圖4是表示按照本發(fā)明另一個實(shí)施例的具有與調(diào)度器耦接的寄存器文件單元和功能單元的一個處理器的細(xì)節(jié)的簡化框圖。在有些實(shí)施例中,可以用總線和旁路多路轉(zhuǎn)接器將寄存器數(shù)據(jù)傳遞到功能單元/調(diào)度器/旁路網(wǎng)絡(luò)。按照上述的處理器的實(shí)施例,可以用額外的到執(zhí)行單元調(diào)度器的CAM端口來方便從寄存器文件單元向調(diào)度器提供數(shù)據(jù)。在有些實(shí)施例中,并且如圖4中所示,功能單元結(jié)果總線和選定數(shù)量的執(zhí)行單元的CAM端口可以被過載/與寄存器文件讀結(jié)果總線共享。
圖4顯示具有圖1中所示的一些部件的處理器100。特別地,圖4顯示有圖1的調(diào)度器130、寄存器文件單元150和功能單元160。在圖4中所示的實(shí)施例中,寄存器文件單元150包含四個讀端口RP0至RP3,功能單元160包含兩個存儲器功能單元(M0和M1)和兩個整數(shù)功能單元(I0和I1)。當(dāng)然,在其它實(shí)施例中,寄存器文件單元可以含有更多或更少的讀端口,并且可以有更多、更少、以及/或者不同的功能單元。如圖4中所示,調(diào)度器130有多個輸入端口。如圖所示,寄存器文件單元讀端口RP0可以通過總線RB0耦接到調(diào)度器130的一個輸入端口。此外,從寄存器文件單元來的寄存器文件單元讀端口RP1和功能單元M0的輸出端口二者都可以通過一個共享總線(圖4中標(biāo)記為A)耦接到調(diào)度器130中的第二(共享)輸入端口。寄存器文件單元讀端口RP2可以通過總線RB2耦接到調(diào)度器130的第三輸入端口。寄存器文件單元讀端口RP3和功能單元M1的輸出端口二者都可以通過一個共享總線(圖4中標(biāo)記為B)耦接到調(diào)度器130中的第四(共享)輸入端口。最后,整數(shù)功能單元0的輸出端口可以通過總線C耦接到調(diào)度器130中的第五輸入端口,整數(shù)功能單元1的輸出端口可以通過總線D耦接到調(diào)度器130中的第六輸入端口。
因此,在有些實(shí)施例中,一個與調(diào)度器耦接的總線可以被功能單元和寄存器共享,并且/或者調(diào)度器的一個CAM輸入端口可以被功能單元和寄存器共享。在有些實(shí)施例中,在功能單元與寄存器文件單元之間過載結(jié)果總線可以使寄存器文件單元對旁路網(wǎng)絡(luò)和調(diào)度器的影響最小化。如圖4中所示,來自寄存器文件單元和功能單元的總線的每個都可以向調(diào)度器130提供一個操作數(shù),如操作數(shù)153,例如如上文參照圖1-3所述的那樣。
在有些實(shí)施例中,功能單元結(jié)果和寄存器文件結(jié)果的高峰載荷時間可能是正交的。例如,在平穩(wěn)狀態(tài)的執(zhí)行期間,功能單元可能正在提供新結(jié)果,大多數(shù)指令可能從運(yùn)行中指令(例如通過旁路網(wǎng)絡(luò))獲得它們所需要的源操作數(shù)結(jié)果。在這種情況下,所需的寄存器文件讀出可能不頻繁。相反,在重啟動之后,功能單元可能進(jìn)入空閑狀態(tài),不在結(jié)果總線上放置數(shù)據(jù),而寄存器讀則可能處于高峰,以便為進(jìn)入機(jī)器的新指令服務(wù)。在共享結(jié)果總線和CAM端口時可以考慮這種正交性。
下表表示在與圖4中所示的處理器類似的一個示例處理器中的所有執(zhí)行單元的結(jié)果總線。盡管圖4中的處理器有兩個存儲器執(zhí)行單元(M0和M1)和兩個整數(shù)執(zhí)行單元(I0和I1),下表中的處理器有一個第三整數(shù)執(zhí)行單元(I2)、浮點(diǎn)執(zhí)行單元(F)和分支執(zhí)行單元(Br)。在下表中,最左邊的列中列出作為產(chǎn)生器的這些單元,頂部的行中列出要把結(jié)果送往的消費(fèi)器。在該表中,這些結(jié)果總線,從結(jié)果總線‘A’上的存儲器端口0到結(jié)果總線‘F’上的浮點(diǎn)端口都已被任意地命名,這與圖4中所示的類似。在這個實(shí)施例中,可以為這個配置假設(shè)某些宏指令的分解(decomposition)。這樣,在本例中,可以把由存儲器單元0和由讀端口1產(chǎn)生的結(jié)果通過總線A提供到功能單元的每一個(和調(diào)度器)。類似地,由存儲器單元1和由讀端口2產(chǎn)生的結(jié)果可以通過總線C被提供到功能單元的每一個(和調(diào)度器)。注意有一些功能單元可能不消費(fèi)來自任何產(chǎn)生器(諸如分支單元)的數(shù)據(jù)或者僅僅消費(fèi)來自產(chǎn)生器的一個子集的數(shù)據(jù)。
上表中中列出了讀端口0到讀端口0。讀端口0和1可共享組0。讀端口2和3可共享組1。在一個實(shí)施例中,帶下劃線的表項表示為支持這個寄存器文件配置而增加的CAM端口。該該表所描述的處理器例子中,通過增加兩個全CAM端口來支持寄存器文件讀端口,以及通過與存儲器結(jié)果總線共享其余兩個寄存器文件讀端口,可以使對性能的影響最小化。這在表中表示,其中讀端口1共享結(jié)果總線A(存儲器端口0),讀端口3共享結(jié)果總線B(存儲器端口1)??梢赃@樣來選擇讀端口1和3,以使得兩個讀出同時在相同的寄存器組上激活的這種較不通常的情況中只需要一個執(zhí)行結(jié)果總線。在其它實(shí)施例中,并且根據(jù)性能要求,所有的或部分的總線可能會過載或者根本不過載任何總線。
在上表所示的例子中,是存儲器端口而不是整數(shù)端口被過載,因為整數(shù)指令可能更常用,并且因為存儲器端口有更長的延遲。在有些實(shí)施例中,一個與寄存器文件共享其結(jié)果總線的執(zhí)行單元將在一個有效指令將要產(chǎn)生結(jié)果的時候發(fā)信號通知寄存器文件。在這樣的實(shí)施例中,執(zhí)行單元應(yīng)當(dāng)有足夠的延遲,以便能夠足夠早地發(fā)出這個通知,以阻止一個寄存器讀出從而被發(fā)布到寄存器文件查找表以及防止與執(zhí)行結(jié)果沖突。如果一個寄存器讀出被延遲,操作數(shù)可以等待從寄存器文件單元讀隊列發(fā)出,直到例如下一個時鐘周期。如果延遲太短,讀請求可能會被從讀隊列中取出并插入到寄存器文件查找流水線,這可能導(dǎo)致可能的結(jié)果總線沖突。因為上面所討論的處理器的實(shí)施例可以容忍不同的延遲,可以延遲寄存器文件讀出的發(fā)布,而不抑制被派發(fā)到調(diào)度器中的或者被發(fā)布到功能單元中的指令。
在有些實(shí)施例中,如果浮點(diǎn)端口到達(dá)不了足夠的端口(與讀端口相比,讀端口可到達(dá)所有的執(zhí)行端口)并且如果可能有浮點(diǎn)基準(zhǔn)性能的考慮,則可以在選擇要被過載的端口時忽略浮點(diǎn)端口,如上表所示的例子一樣。在有些實(shí)施例中,可以將存儲器端口擴(kuò)展以便到達(dá)分支端口,從而支持與寄存器讀端口的共享。
以上詳細(xì)討論了某些實(shí)施例。當(dāng)然權(quán)利要求的范圍要覆蓋上述的實(shí)施例和它們等同物以外的實(shí)施例。例如,所討論的指令格式和寄存器名稱僅僅是示意性的,在其它情況中可以使用任何指令格式和/或寄存器。類似地,另外一個例子是,處理器可以不使用讀隊列。
權(quán)利要求
1.一種處理器,包括含有多個寄存器的寄存器文件單元;和用于調(diào)度指令的調(diào)度器,其中,調(diào)度器要接收一個要被調(diào)度的指令,其中調(diào)度器要從寄存器文件單元接收一個用于所接收的要被調(diào)度的指令的源操作數(shù),并且其中調(diào)度器要異步地接收指令和源操作數(shù)。
2.權(quán)利要求1的處理器,進(jìn)一步包含用于表明寄存器文件單元中的一個寄存器是否要被一個在運(yùn)行中的指令使用的單元。
3.權(quán)利要求1的處理器,其中該單元進(jìn)一步包含存儲器或者多個比較器的其中之一。
4.權(quán)利要求2的處理器,其中該處理器進(jìn)一步包含用與向調(diào)度器派發(fā)指令的派發(fā)器,其中,派發(fā)器要根據(jù)該單元確定是否要生成一個要從被指定為要被派發(fā)的指令源操作數(shù)的位置的寄存器中讀取數(shù)據(jù)的請求,并且,如果生成了這樣一個請求,則在該讀請求完成之前派發(fā)該指令。
5.權(quán)利要求1的處理器,進(jìn)一步包含一個讀隊列,以便將從寄存器文件單元的寄存器中讀取數(shù)據(jù)的讀請求進(jìn)行緩存。
6.權(quán)利要求5的處理器,其中讀隊列包含多組存儲器單元。
7.權(quán)利要求6的處理器,其中寄存器文件單元包含多個靜態(tài)隨機(jī)存儲器單元。
8.權(quán)利要求1的處理器,其中寄存器文件單元中的多個寄存器被安排成多個組。
9.權(quán)利要求8的處理器,其中處理器進(jìn)一步包含與寄存器文件單元耦接的寫隊列,用于對寄存器文件單元的寫排隊,并且其中寫隊列包含多個組。
10.權(quán)利要求1的處理器,其中寄存器文件單元包含四個端口。
11.權(quán)利要求1的處理器,其中處理器進(jìn)一步包含功能單元和總線,其中總線耦接到調(diào)度器的輸入端口、功能單元的輸出端口、以及多個寄存器的第一寄存器的輸出端口,并且其中總線由功能單元和第一寄存器共享。
12.權(quán)利要求11的處理器,其中調(diào)度器的輸入端口由功能單元和第一寄存器共享。
13.權(quán)利要求1的處理器,其中處理器進(jìn)一步包含功能單元,其中處理器進(jìn)一步包含旁路網(wǎng)絡(luò),它具有與寄存器文件單元耦接的輸入端口并且具有與功能單元耦接的輸出端口,并且其中一個指令具有在運(yùn)行中的狀態(tài),其中在旁路網(wǎng)絡(luò)中可得到該指令的源操作數(shù)。
14.一種處理器,包含用于調(diào)度指令的調(diào)度器;包含多個寄存器的寄存器文件單元;和派發(fā)器,用于向調(diào)度器派發(fā)用于指定要從多個寄存器之一中讀取的源操作數(shù)的新指令,其中,如果要被新指令讀取的寄存器也要被在先的一個運(yùn)行中的指令使用,則派發(fā)器就派發(fā)該新指令而不用生成要為該新指令從該寄存器中讀取該源操作數(shù)的請求。
15.權(quán)利要求14的處理器,其中,如果要被新指令讀取的寄存器也要被在先的一個運(yùn)行中的指令使用,則調(diào)度器要為新指令接收作為該在先指令的結(jié)果的源操作數(shù)。
16.權(quán)利要求15的處理器,其中,新指令的源操作數(shù)是從一個旁路網(wǎng)絡(luò)提供到調(diào)度器的。
17.權(quán)利要求14的處理器,其中,其中處理器進(jìn)一步包含一個要存儲一個數(shù)組的存儲器,其中數(shù)組中的一個項為寄存器文件單元中的一個寄存器表明是否有一個運(yùn)行中指令要使用該寄存器。
18.權(quán)利要求17的處理器,進(jìn)一步包含一個讀隊列以便對從寄存器文件單元的寄存器中讀取數(shù)據(jù)的讀請求進(jìn)行緩存。
19.權(quán)利要求18的處理器,其中讀隊列包含多組存儲器單元。
20.權(quán)利要求14的處理器,其中寄存器文件單元中的多個寄存器被安排成多個組。
21.權(quán)利要求14的處理器,其中處理器進(jìn)一步包含與寄存器文件單元耦接的寫隊列,用于對寄存器文件單元的寫入進(jìn)行排隊,并且其中寫隊列包含多個組。
22.權(quán)利要求14的處理器,其中處理器進(jìn)一步包含一個具有與調(diào)度器的輸入端口耦接的輸出端口的功能單元,并且其中寄存器文件單元中的第一寄存器的輸出端口像該功能單元那樣耦接到調(diào)度器的同一個輸入端口。
23.權(quán)利要求22的處理器,其中處理器進(jìn)一步包含一個用于耦接功能單元的輸出端口與調(diào)度器的輸入端口的共享總線,其中共享總線也耦接第一寄存器的輸出端口與調(diào)度器的輸入端。
24.一種系統(tǒng),包含一個包含多個寄存器的寄存器文件單元;用于調(diào)度指令的調(diào)度器;派發(fā)器,用于向調(diào)度器派發(fā)一個具有要從多個寄存器之一中讀取的源操作數(shù)的指令;和用于向派發(fā)器表明是否可以從在先的指令獲得源操作數(shù)的單元。
25.權(quán)利要求24的系統(tǒng),其中,寄存器文件單元與調(diào)度器耦接,以向調(diào)度器提供在調(diào)度器中等待的指令的源操作數(shù)。
26.權(quán)利要求24的系統(tǒng),其中處理器進(jìn)一步包含功能單元和總線,其中總線耦接到調(diào)度器的輸入端口、功能單元的輸出端口、以及寄存器單元的第一寄存器的輸出端口,并且其中總線由功能單元和第一寄存器共享。
27.權(quán)利要求26的系統(tǒng),其中調(diào)度器的輸入端口由功能單元和第一寄存器共享。
28.權(quán)利要求24的系統(tǒng),進(jìn)一步包含一個讀隊列,以便對從寄存器文件單元的寄存器中讀取數(shù)據(jù)的讀請求進(jìn)行緩存。
29.權(quán)利要求28的系統(tǒng),其中讀隊列包含多組靜態(tài)隨機(jī)存取存儲器單元。
30.一種方法,包含確定一個新指令具有一個要從一個寄存器讀取的源操作數(shù);確定一個運(yùn)行中的指令是否要使用與該新指令要讀取的相同的寄存器;和如果一個運(yùn)行中的指令要使用與該新指令要讀取的同一個寄存器,則將新指令派發(fā)到一個調(diào)度器中而不用向寄存器發(fā)送一個要讀取源操作數(shù)的請求。
31.權(quán)利要求30的方法,其中該方法進(jìn)一步包含使用被在先的指令從寄存器讀的結(jié)果向調(diào)度器提供源操作數(shù),以供新指令使用。
32.權(quán)利要求30的方法,其中,如果一個運(yùn)行中指令讀取與新指令所讀取的相同寄存器或者寫入該相同的寄存器,則認(rèn)為該運(yùn)行中指令要使用與新指令所讀取的相同的寄存器。
33.權(quán)利要求30的方法,其中,所述確定一個運(yùn)行中指令是否要使用與新指令要讀取的相同的寄存器包含檢查存儲器中的一個數(shù)組,以確定是否有任何運(yùn)行中指令要從與新指令相同的寄存器讀取或者寫入到該相同的寄存器。
34.權(quán)利要求30的方法,該方法進(jìn)一步包含確定沒有運(yùn)行中指令要使用與新指令所要讀取的相同的寄存器;生成一個讀取該相同寄存器的請求;和在接收到所生成的讀取該相同的寄存器的請求的結(jié)果之前將新指令派發(fā)到調(diào)度器中。
35.權(quán)利要求34的方法,其中生成讀取該寄存器的請求包含向該寄存器的讀隊列發(fā)送一個從該寄存器讀取源操作數(shù)的請求。
36.權(quán)利要求30的方法,該方法進(jìn)一步包含或者從寄存器的一個輸出端口或者從一個功能單元的輸出端口向調(diào)度器的一個輸入端口為新指令提供源操作數(shù),其中寄存器和功能單元共享調(diào)度器輸入端口。
37.一種方法,包含確定一個新指令具有一個要從一個寄存器讀取的源操作數(shù);將新指令派發(fā)到一個調(diào)度器;和與向調(diào)度器派發(fā)新指令異步地向調(diào)度器提供源操作數(shù)。
38.權(quán)利要求37的方法,其中該方法進(jìn)一步包含調(diào)度新指令以供執(zhí)行之用,其中調(diào)度器在調(diào)度新指令以供執(zhí)行之前要等待源操作數(shù)被提供到調(diào)度器。
39.權(quán)利要求37的方法,其中該方法進(jìn)一步包含使用一個在先的指令從寄存器讀取的結(jié)果來向調(diào)度器提供源操作數(shù)以供新指令使用。
40.權(quán)利要求37的方法,其中該方法進(jìn)一步包含或者從寄存器的一個輸出端口或者從一個功能單元的輸出端口向調(diào)度器的一個輸入端口提供用于新指令的源操作數(shù),其中寄存器和功能單元共享調(diào)度器輸入端口。
全文摘要
用于向要在處理器執(zhí)行的指令提供源操作數(shù)的方法和裝置。一些實(shí)施例可包括一個具有寄存器的寄存器文件單元和用于調(diào)度指令的調(diào)度器。在一些實(shí)施例中,調(diào)度器要異步地接收指令和該指令的源操作數(shù),源操作數(shù)是從寄存器文件單元中接收的。
文檔編號G06F9/38GK101036119SQ200580033435
公開日2007年9月12日 申請日期2005年9月30日 優(yōu)先權(quán)日2004年9月30日
發(fā)明者G·哈蒙德, C·斯卡費(fèi)迪, J·克勞福德 申請人:英特爾公司