專利名稱:在信息處理系統(tǒng)的處理器中發(fā)布指令的方法及設(shè)備的制作方法
技術(shù)領(lǐng)域:
本公開內(nèi)容涉及信息處理系統(tǒng),更具體地,涉及在信息處理系統(tǒng)的處理器中發(fā)布指令。
背景技術(shù):
傳統(tǒng)的信息處理系統(tǒng)中的處理器可以包括數(shù)個管線級(pipeline stage),來提高處理器的有效吞吐量。舉例來說,處理器可以包括提取級,用于從存儲器提取指令;解碼級,用于將指令解碼成操作碼和操作數(shù);以及,具有各種執(zhí)行單元的執(zhí)行級,用于執(zhí)行已解碼的指令。管線使得處理器能夠通過并行執(zhí)行這些處理器操作來獲得更高的效率。舉例來說,當提取級提取下一指令時,解碼級可解碼已提取指令。類似地,當解碼級解碼另一指令時,執(zhí)行級中的執(zhí)行單元可以執(zhí)行已解碼指令。
最簡單的處理器按程序順序處理指令,即處理器在程序中遇到指令的順序。處理器設(shè)計者通過設(shè)計無序(000)執(zhí)行指令的處理器來提高處理器效率。設(shè)計者發(fā)現(xiàn),假如已處理的指令不依賴于尚未可用的結(jié)果,如來自較早指令的結(jié)果,處理器可以不按程序的順序處理指令。換句話說,假如指令不呈現(xiàn)相依關(guān)系,處理器可以無序(000)執(zhí)行指令。
為使得處理器能夠無序(000)執(zhí)行指令,處理器可以在解碼級和執(zhí)行級之間包括發(fā)布隊列。發(fā)布隊列起緩沖器作用,其有效地將構(gòu)成處理器執(zhí)行級的執(zhí)行單元與解碼級相解耦。發(fā)布隊列包括確定哪些指令被發(fā)送到各種執(zhí)行單元以及那些指令被發(fā)送到執(zhí)行單元的順序的邏輯。
當處理器的發(fā)布隊列遇到一條或多條呈現(xiàn)與其他指令的相依關(guān)系的指令時,該隊列可能停頓。換句話說,發(fā)布隊列等待處理器解決這些相依關(guān)系。一旦處理器解決了該相依關(guān)系,發(fā)布隊列可以繼續(xù)發(fā)布指令到執(zhí)行單元,并且執(zhí)行繼續(xù)。不幸的是,當發(fā)布隊列呈現(xiàn)停頓,直到處理器解決了導致停頓的相依關(guān)系為止時,處理器損失了寶貴的時間。一些現(xiàn)代處理器可以允許多條指令停頓;然而,它們一般不擴展(scale)到高頻操作或擴展到大發(fā)布隊列。
所需要的是一種以可擴展方式解決上述處理器低效率問題的方法及設(shè)備。
發(fā)明內(nèi)容
相應地,在一個實施例中,公開了一種用于操作處理器的方法,其中,指令提取器從存儲器提取指令,從而提供已提取指令。所述方法還包括,由解碼器解碼已提取指令。解碼器提供已解碼指令到發(fā)布隊列,該發(fā)布隊列包括存儲元件主陣列,其連接到存儲元件輔陣列。所述方法還包括,由主陣列將已解碼指令存儲到包括在主陣列內(nèi)的存儲元件行和列的矩陣中,以便無序發(fā)布到執(zhí)行單元。所述方法還包括,由發(fā)布隊列確定主陣列是否被主陣列一行中對于發(fā)布未就緒的第一指令所停頓。在那種情況下,發(fā)布隊列搜索主陣列的其他行,以定位對于發(fā)布就緒的第二指令。所述方法還包括,通過發(fā)布隊列將第二指令轉(zhuǎn)發(fā)到輔陣列以便發(fā)布到執(zhí)行單元,而第一指令保留在主陣列中,從而繞過第一指令。
在另一實施例中,公開了一種處理器,其包括提取級,被適配成從存儲器提取指令來提供已提取指令。所述處理器還包括解碼器,其連接到提取級,用于解碼已提取指令。所述處理器還包括多個執(zhí)行單元。所述處理器還包括發(fā)布隊列,連接于解碼器與所述多個執(zhí)行單元之間。所述發(fā)布隊列包括存儲元件主陣列,其存儲等待由執(zhí)行單元無序執(zhí)行的指令。所述發(fā)布隊列還包括存儲元件輔陣列,其連接到存儲元件主陣列。所述發(fā)布隊列確定主陣列是否被主陣列一行中對于發(fā)布未就緒的第一指令所停頓。在那種情況下,發(fā)布隊列搜索主陣列的其他行,以定位對于發(fā)布就緒的第二指令。所述發(fā)布隊列通過將第二指令轉(zhuǎn)發(fā)到輔陣列以便發(fā)布到執(zhí)行單元,而所述第一指令保留在主陣列中,從而繞過第一指令。
附圖僅僅圖示本發(fā)明的示例性實施例,因而并不限制本發(fā)明的范圍,因為本發(fā)明的概念適用于其他等效實施例。
圖1示出了所公開處理器的一個實施例的框圖。
圖2示出了圖1中的處理器的發(fā)布隊列的框圖。
圖3示出了所公開處理器中的發(fā)布控制狀態(tài)機的框圖。
圖4A為描述所公開處理器的優(yōu)先級狀態(tài)機中的處理流程的流程圖。
圖4B為包括年齡控制(age control)信息的發(fā)布隊列的框圖。
圖5為描述所公開處理器的插入控制狀態(tài)機中的處理流程的流程圖。
圖6為描述所公開處理器的底端行發(fā)布控制狀態(tài)機中的處理流程的流程圖。
圖7為描述所公開處理器的上層行壓縮及副(side)發(fā)布狀態(tài)機中的處理流程的流程圖。
圖8為描述所公開處理器的就緒狀態(tài)機中的處理流程的流程圖。
圖9為所公開處理器的發(fā)布隊列的框圖,其被標記以示出指令插入、壓縮及發(fā)布。
圖10為采用所公開處理器的信息處理系統(tǒng)的框圖。
具體實施例方式
所公開處理器從存儲器提取指令并解碼那些指令。已解碼指令分成兩類,即“對于發(fā)布就緒”指令和“對于發(fā)布未就緒”指令。特定指令可能對于發(fā)布未就緒的原因包括1)該指令呈現(xiàn)相依關(guān)系,即,該指令在執(zhí)行之前需要前面已發(fā)布指令的結(jié)果;2)該指令是“上下文同步指令”,即,該指令必須等待所有前面的指令執(zhí)行完畢;3)存在“管線忙”的情況,即,該指令必須等待,因為處理器在前面執(zhí)行了非管線指令;4)存在資源忙的情況,即,該指令需要不可用的資源,如已滿的執(zhí)行單元中的載入或存儲隊列。
發(fā)布隊列阻止對于發(fā)布尚未就緒的已解碼指令到執(zhí)行單元。當指令由于等待解決相依關(guān)系或其他原因停頓在發(fā)布隊列中時,隊列邏輯利用這個時間來更深地搜索發(fā)布隊列,以定位任何無相依關(guān)系的、可以無序發(fā)布的指令。以這種方式,在已停頓指令等待相依關(guān)系的解決或其他阻止發(fā)布的原因的解決的同時,有用的處理器工作繼續(xù)。
處理器的發(fā)布隊列包括按照行和列排列的指令存儲位置陣列。發(fā)布隊列包括行R1、行R2、…RN,其中N為發(fā)布隊列的深度。發(fā)布隊列發(fā)布指令到適當?shù)膱?zhí)行單元以便執(zhí)行。發(fā)布隊列的輸出包括發(fā)布點,從該點,對于發(fā)布就緒的指令發(fā)布到能夠執(zhí)行由該指令規(guī)定的功能的執(zhí)行單元。如果行R1包括對于發(fā)布未就緒的指令,如呈現(xiàn)相依關(guān)系的指令,則行R1不能越過該發(fā)布點而前進。這種情況停頓發(fā)布隊列的行R1。然而,當發(fā)布隊列以這種方式停頓時,發(fā)布隊列邏輯可以在行R(1+1)即行R2中更深地搜索可發(fā)布的、無相依關(guān)系的指令。如果發(fā)布隊列邏輯在行R2中找到這樣的無相依關(guān)系的指令,則該無相依關(guān)系的指令繞過該無相依關(guān)系指令的已停頓行R1。以這種方式,處理器可以在較舊的、有相依關(guān)系的指令停頓的同時執(zhí)行有用的工作。
在一個實施例中,處理器從行R1、R2、…RN遞歸重復上述結(jié)構(gòu),其中N代表發(fā)布隊列的深度。換句話說,處理器逐一地遞歸配置行。如果行RN包括無相依關(guān)系的指令,即對于發(fā)布就緒的指令,則發(fā)布隊列邏輯使那個指令前進到前一行R(N-1)。以這種方式,該指令可以朝向發(fā)生導致發(fā)布隊列更深搜索的停頓的行R,逐行地前進。當前進的指令到達行R1時,發(fā)布隊列邏輯使得該指令發(fā)布到適當?shù)膱?zhí)行單元。
圖1示出了處理器100的框圖,其連接到存儲器105。處理器100包括L2接口110,其連接到存儲器105,以接收來自其的指令和數(shù)據(jù)。存儲器105存儲按程序順序組織的指令。提取級115連接到L2接口110,使得處理器100能夠從存儲器105提取指令。更具體地,提取級115包括連接到L2接口110的提取單元120、以及L1指令高速緩存125。預解碼單元130將L2接口110連接到L1指令高速緩存125,以預解碼通過提取單元120的、來自存儲器105的指令。L1指令高速緩存125連接到預解碼單元130和調(diào)度單元135,如圖所示。
調(diào)度單元135通過多路復用器(MUX)145直接地、或者可選地通過微碼單元150和MUX 145連接到解碼器140,如圖所示。以這種方式,調(diào)度單元135通過MUX 145將無需分解成更小指令的指令傳送到解碼器140?;蛘撸尸F(xiàn)需要分解成更小指令的長度的已調(diào)度指令通過微碼單元150。微碼單元150將這些指令分解成更小的指令,MUX 145將其傳送到解碼器140以便解碼。
解碼器140解碼由提取級115向其提供的指令。解碼器140連接到相依關(guān)系檢查器155,其檢驗每個已解碼指令,以確定該已解碼指令是否呈現(xiàn)與該已解碼指令之后的指令、或當前不可用的操作數(shù)或結(jié)果的相依關(guān)系。相依關(guān)系檢查器155連接到發(fā)布級200,該發(fā)布級200包括發(fā)布控制狀態(tài)機202和發(fā)布隊列204。發(fā)布級200將其接收的每個已解碼指令傳遞到定點單元170和/或向量/浮點單元180內(nèi)的適當執(zhí)行單元。發(fā)布級200高效地確定對于發(fā)布就緒的那些指令,并迅速地發(fā)布那些指令到適當?shù)膱?zhí)行單元。
定點單元170包括載入/存儲執(zhí)行單元171、定點執(zhí)行單元172、分支執(zhí)行單元173、以及完成/刷新(completion/flush)單元174,這些單元全都連接在一起,如圖1所示。向量/浮點單元180包括向量載入/存儲單元181、向量算術(shù)邏輯單元(ALU,arithmetic logicunit)182、浮點單元(FPU,floatingpoint unit)算術(shù)邏輯單元(ALU)183、FPU載入/存儲單元184、向量完成單元185及FPU完成單元186,這些單元全都連接在一起,如圖1所示。向量/浮點單元180的向量完成單元185和FPU完成單元186連接到定點單元170的完成/刷新單元174。完成單元174、185及186執(zhí)行這樣的任務,例如,按順序撤出指令,以及處理可能出現(xiàn)在相關(guān)執(zhí)行單元中的異常情況。
解碼器140通過發(fā)布隊列204將已解碼指令調(diào)度到適當?shù)膱?zhí)行單元。如下更詳細描述的那樣,發(fā)布隊列204在對已排隊指令解決相依關(guān)系時,將該指令發(fā)布到適當?shù)膱?zhí)行單元。發(fā)布隊列204包括按照行和列排列的存儲元件或鎖存器212的主發(fā)布隊列陣列210,如圖2所示。每個鎖存器212存儲由解碼器140提供的指令。更具體地,主發(fā)布隊列陣列210包括行R1、R2、…RN,其中N是主發(fā)布隊列陣列210的總行數(shù)。在本具體示例中,N=4,從而主發(fā)布隊列陣列包括4行。同樣在本特定示例中,主發(fā)布隊列陣列210包括4列。主發(fā)布隊列陣列210可以根據(jù)具體應用而采用多于或少于所示的行和列數(shù)。
在本特定實施例中,當駐滿指令時,主發(fā)布隊列陣列210可以存儲16條指令,即4行中的每一行為4條指令。主發(fā)布隊列陣列210將這些指令分成8組,每組包括2條指令。因此,當駐滿時,主發(fā)布隊列陣列210包括8組,每組2條指令,即,行R1中的指令組1和2,行R2中的指令組3和4,行R3中的指令組5和6,以及行R4中的指令組7和8。
發(fā)布隊列204還包括輔隊列或副隊列215,其提供到執(zhí)行單元的替代路徑。在本特定實施例中,針對主發(fā)布隊列陣列210的每行,副隊列215包括兩個存儲元件。與組1和組2指令相對應的行R1存儲元件連接到副隊列存儲單元221和222。副隊列存儲單元221和222形成指令從其發(fā)布到執(zhí)行單元的發(fā)布行。每個副隊列存儲單元包括多路復用器和存儲元件,如圖2所示。例如,副隊列存儲單元221包括MUX 221A,其連接到鎖存器或存儲元件221B。為說明方便,圖2示出了與存儲元件221B連在一起的MUX 221A。副隊列存儲單元222包括MUX 222A,其連接到鎖存器或存儲元件222B。一旦指令轉(zhuǎn)移到存儲元件221B和222B,該指令發(fā)布到適當?shù)膱?zhí)行單元以便執(zhí)行。
在本特定實施例中,針對主發(fā)布隊列陣列210的每行,副隊列215包括兩個存儲元件,副隊列215在每個處理器時鐘周期內(nèi)可以發(fā)布兩條指令。因此,假定主發(fā)布隊列陣列210的行R1包括在組1和組2中的總共4條有效指令,假如這些指令滿足下面討論的特定標準,這4條指令中的2條可以分別移動到副隊列存儲元件221和222。
如圖所示,副隊列215還包括副隊列存儲元件231和232,其連接到行R2的存儲元件212。副隊列存儲元件231和232一起形成副隊列215內(nèi)的一行。副隊列215還包括副隊列存儲元件241和242,其連接到行R3的存儲元件212。副隊列存儲元件241和242一起形成副隊列215內(nèi)的另一行。副隊列215還包括副隊列存儲元件251和252,其連接到行R4的存儲元件212。副隊列存儲元件251和252一起形成副隊列215內(nèi)的再一行。當行R1、R2、R3或R4中的存儲元件212之一存儲了指令時,則發(fā)布隊列204將該元件視作存儲了有效條目(entry)。然后,如果元件沒有存儲指令,則發(fā)布隊列204將這樣的空閑單元視作呈現(xiàn)了無效條目。
圖1和圖3示出的發(fā)布控制狀態(tài)機202可以將從解碼器140接收的指令存儲到可用行R1到R4的任何存儲元件中。當處理器100初始化時,主發(fā)布隊列陣列210的所有存儲元件為空。類似地,當處理器100初始化時,副隊列215的所有存儲元件為空。當處理器操作開始時,發(fā)布控制狀態(tài)機首先駐入陣列210中的最高優(yōu)先級存儲元件212。在一個實施例中,處理器100定義底端行,即行R1,為陣列210的最高優(yōu)先級行,該行最接近于發(fā)布。這意味著,存儲在行R1的存儲元件中的指令比主發(fā)布隊列陣列210的其他行更接近于發(fā)布。行R2呈現(xiàn)在行R1之后的次高優(yōu)先級。然后,行R3呈現(xiàn)在行R2之后的次高優(yōu)先級,在該陣列中向上依此類推。更高的優(yōu)先級意味著行R1中的指令比行R2及上面行中的指令更接近于發(fā)布,下面將對此進行更詳細的說明。按照慣例,在主發(fā)布隊列陣列210的每行中,更靠近主發(fā)布隊列陣列的每行的左端的指令比更靠近每行右端的指令呈現(xiàn)更高的優(yōu)先級。替代實施例是可能的,其中該慣例被顛倒。
存儲為行R1中的組1或組2的指令可以通過副隊列存儲單元221或副隊列存儲單元222發(fā)布到執(zhí)行單元。執(zhí)行單元連接到副隊列存儲單元221和222的輸出端,如圖2所示。在一個處理器周期內(nèi),發(fā)布控制狀態(tài)機202可以命令多路復用器221A選擇存儲在行R1中的組1和組2指令當中的任一個,并將所選指令存儲到存儲元件221B中。在同一處理器周期內(nèi),發(fā)布控制狀態(tài)機202還可以命令多路復用器222A選擇行R1中沒有已被選擇的組1和組2指令當中的任一個,并將所選指令存儲到存儲元件222B中。以這種方式,副隊列215選擇并存儲來自行R1的兩條指令。在一個實施例中,副隊列215選擇來自同一組的指令。舉例來說,組1提供兩條指令,或組2提供兩條指令,以便存儲到存儲元件221B或222B中。其他實施例是可能的,其中,副隊列215選擇一條來自組1的指令和一條來自組2的指令,以便存儲到存儲元件221B和222B中。在隨后的處理器周期內(nèi),存儲在副隊列存儲單元221和副隊列存儲單元222中的指令發(fā)布到適當?shù)膱?zhí)行單元。
按類似的方式,發(fā)布控制狀態(tài)機202可以命令副隊列存儲單元231和232存儲來自行R2中的組3和組4的指令。發(fā)布控制狀態(tài)機202還可以命令副隊列存儲單元241和242存儲來自行R3中的組5和組6的指令。發(fā)布控制狀態(tài)機202還可以命令副隊列存儲單元251和252存儲來自行R4中的組7和組8的指令。主發(fā)布隊列陣列210和副隊列215可以通過遵循圖2的連接模式為模板來擴展,以包括附加行。更具體地,主發(fā)布隊列陣列210和副發(fā)布隊列215呈現(xiàn)遞歸拓撲結(jié)構(gòu),這是因為行R2和相關(guān)副隊列存儲單元231-232重復并遵循下面的行R1和相關(guān)副隊列存儲單元221-222的連接模式。類似地,行R3和相關(guān)副隊列存儲單元241-242相對于下面行呈現(xiàn)遞歸拓撲結(jié)構(gòu),往上依此類推到行R4和更高的行(未示出)。在一個實施例中,發(fā)布控制狀態(tài)機202將對于發(fā)布就緒的指令轉(zhuǎn)移到副隊列215。
副隊列存儲單元231的輸出端連接到副隊列存儲單元221和222的相應輸入端。副隊列存儲單元232的輸出端連接到副隊列存儲單元221和222的相應輸入端。因此,存儲在副隊列存儲單元231和232中的指令可以通過副隊列存儲單元221和222繼續(xù)發(fā)布到適當?shù)膱?zhí)行單元。
副隊列存儲單元241的輸出端連接到副隊列存儲單元231和232的相應輸入端。副隊列存儲單元242的輸出端連接到副隊列存儲單元231和232的相應輸入端。因此,存儲在副隊列存儲單元241和242中的指令可以通過與行R2相關(guān)聯(lián)的副隊列存儲單元231和232、以及通過與行R1相關(guān)聯(lián)的副隊列存儲單元221和222,繼續(xù)發(fā)布到適當?shù)膱?zhí)行單元。
最后,副隊列存儲單元251的輸出端連接到副隊列存儲單元241和242的相應輸入端。副隊列存儲單元252的輸出端連接到副隊列存儲單元241和242的相應輸入端。因此,存儲在副隊列存儲單元251和252中的指令可以通過與行R3相關(guān)聯(lián)的副隊列存儲單元241和242、與行R2相關(guān)聯(lián)的副隊列存儲單元231和232、以及與行R1相關(guān)聯(lián)的副隊列存儲單元221和222,繼續(xù)發(fā)布到適當?shù)膱?zhí)行單元。如下面更詳細說明的那樣,在每個處理器周期內(nèi),對于發(fā)布就緒的指令可以朝向執(zhí)行經(jīng)由副隊列前進副隊列的一行。
指令可以采取兩條通過發(fā)布隊列204的路徑到達與其連接的執(zhí)行單元。主發(fā)布隊列陣列210為指令提供一條通過發(fā)布隊列204前進的路徑,而副隊列215提供另一條通過發(fā)布隊列204的路徑。實際上,指令在發(fā)布到適當?shù)膱?zhí)行單元以便執(zhí)行之前,可以通過主發(fā)布隊列陣列210的部分和副隊列215的部分??赡艿氖?,主發(fā)布隊列陣列210中的特定行可能駐滿由于相依關(guān)系或其他原因而不能發(fā)布的指令。這樣的行變成了停頓點,這是因為它可能阻止停頓行之上的行中的指令前進到下面行中并發(fā)布到執(zhí)行單元。當行呈現(xiàn)這樣的停頓點時,如發(fā)布控制狀態(tài)機202所引導的那樣,該停頓行之上的行可以通過將其指令轉(zhuǎn)移到副隊列215來繞過該停頓行。一旦處于副隊列215中,在隨后的處理器周期內(nèi),已轉(zhuǎn)移的指令在副隊列中從一行到一行、越來越低地前進,直到它們發(fā)布到連接在最低端的副隊列存儲單元221和222的執(zhí)行單元為止。
下面的一系列示例說明了在不同操作條件下發(fā)布隊列204的操作。在一個示例中,在一個處理器周期內(nèi),發(fā)布控制狀態(tài)機202向行R1的組1插入2條有效指令。這些指令是對于發(fā)布就緒的。換句話說,這些指令沒有呈現(xiàn)它們不能立即發(fā)布到執(zhí)行單元的原因??赡茏柚篃o序(000)發(fā)布隊列中的指令立即執(zhí)行的原因是,該指令呈現(xiàn)與其他指令的結(jié)果的相依關(guān)系。換句話說,該指令所需的必要操作數(shù)目前不可用。然而,由于在本例中,行1的組1包括兩條無相依關(guān)系的有效指令,因此行1將該兩條對于發(fā)布就緒的指令分別提供到副隊列215的存儲元件221和222,從副隊列215,這些指令可以發(fā)布到連接于其的執(zhí)行單元。在發(fā)布控制狀態(tài)機202向行1的組1插入2條無相依關(guān)系的有效指令之后的下一個處理器周期內(nèi),狀態(tài)機202向行1的組2插入2條無相依關(guān)系的有效指令。在下一個處理器周期內(nèi),因為不存在延遲執(zhí)行的原因,所以主發(fā)布隊列陣列210將行1的組2中的2條指令轉(zhuǎn)移到存儲元件221和222以便執(zhí)行。在行1的組2發(fā)送其兩條指令到存儲元件221和222以便傳送到執(zhí)行單元的同一處理器周期內(nèi),狀態(tài)機202發(fā)送另外兩條指令到空的組1存儲元件中。因此,我們觀察到“乒乓”(ping-pong)效應,其中1)在第一個處理器周期內(nèi),兩條行1組1指令轉(zhuǎn)移到存儲元件221和222,以便轉(zhuǎn)移到執(zhí)行單元;2)在第二個處理器周期內(nèi),兩條行1組2指令轉(zhuǎn)移到存儲元件221和222,以便執(zhí)行;以及3)在第三個處理器周期內(nèi),兩條行1組1指令再次轉(zhuǎn)移到元件221和222,以便執(zhí)行,等等。因此,發(fā)布隊列204的拓撲結(jié)構(gòu)為無相依關(guān)系的指令提供最佳的指令吞吐量。換種方式表述,當行1接收無相依關(guān)系的指令的供應時,這些指令立即發(fā)布到副隊列215的最低元件,從其這些指令轉(zhuǎn)移到適當?shù)膱?zhí)行單元以便執(zhí)行。換句話說,組1駐滿,然后當組2駐滿時組1發(fā)布;當組1再次駐滿時,組2發(fā)布;當組2再次駐滿時,組1發(fā)布,等等依此類推。
在上述示例中,發(fā)布隊列204在同一處理器周期內(nèi),既接收兩條指令,又發(fā)布兩條指令,從而提供極好的吞吐量。換句話說,當解碼器140通過相依關(guān)系檢查器155向發(fā)布級200和發(fā)布隊列204提供一系列無相依關(guān)系的已解碼指令時,發(fā)布隊列204不阻止指令發(fā)布。上面討論的例子假定,當發(fā)布隊列204開始接收一系列無相依關(guān)系的指令時,發(fā)布隊列204是空的。在這種場景下,發(fā)布隊列204獲得100%的吞吐量,而無任何空閑時間來等待解決任何相依關(guān)系。
在下面的示例中,底端行,即行1,駐有4條呈現(xiàn)相依關(guān)系的指令。行R1中的所有四個存儲元件212或條目現(xiàn)在都有效,這是因為指令占據(jù)了這些存儲元件。然而,由于呈現(xiàn)相依關(guān)系的指令現(xiàn)在駐入整個行R1,因此沒有來自行R1的指令目前可以發(fā)布到執(zhí)行單元以便執(zhí)行。換句話說,行R1中的組1和組2指令呈現(xiàn)相依關(guān)系,并且不可以發(fā)布,直到解決了這些相依關(guān)系為止。因為行R1目前不可以通過存儲單元221和222發(fā)布到執(zhí)行單元,所以行R1停頓,并且行R1上面的行開始駐入來自解碼器140的指令。
假定行R2駐有沒有呈現(xiàn)相依關(guān)系的組3和組4指令,并且行R1由于其呈現(xiàn)相依關(guān)系而不能發(fā)布,則行R2通過轉(zhuǎn)移或發(fā)布到副隊列215來有效地繞過行1。按照慣例,更靠近行左端的指令比更靠近行右端的指令呈現(xiàn)更高的優(yōu)先級。因此,如果行R2中的所有4條指令沒有呈現(xiàn)相依關(guān)系,則組3指令在發(fā)布控制狀態(tài)機202的控制下發(fā)布到副隊列215。更具體地,組3中的最左端指令轉(zhuǎn)移到存儲單元231,組3中的剩余指令轉(zhuǎn)移到存儲單元232。注意,每個副隊列存儲元件對221-222、231-232、241-242以及251-252連接到相應的行R1、行R2、行R3以及行R4,并可從其接收指令。在本實施例中,在每個處理器周期內(nèi),兩條指令可以轉(zhuǎn)移到副隊列215。在隨后的處理器周期內(nèi),假如行R1中的指令仍然呈現(xiàn)相依關(guān)系,則組3指令通過副隊列215的存儲元件221和222發(fā)布到適當?shù)膱?zhí)行單元。以這種方式,發(fā)布到副隊列215中的更高存儲元件對的、無相依關(guān)系的指令朝向存儲元件對221-222向下轉(zhuǎn)移,該存儲元件對221-222最終發(fā)布該指令對到適當?shù)膱?zhí)行單元以便執(zhí)行。因此,盡管行R1包括有相依關(guān)系的指令,但是行R2通過經(jīng)由副隊列215發(fā)布而繞過停頓行R1。
以類似的方式,如果行R1和行R2完全駐入對于發(fā)布未就緒的、有相依關(guān)系的指令,則行R3中的無相依關(guān)系的指令可以通過流經(jīng)副隊列存儲元件對241-242、231-232和221-222而發(fā)布到適當?shù)膱?zhí)行單元。在一個實施例中,花費一個處理器周期來使得兩條指令朝向執(zhí)行單元從副隊列215中的一個存儲元件對流到另一個存儲元件對。此外,如果行R1、行R2和行R3完全駐入不能立即發(fā)布的、有相依關(guān)系的指令,則行R4中無相依關(guān)系的指令可以通過流經(jīng)副隊列存儲元件對251-252、241-242、231-232和221-222而發(fā)布到適當?shù)膱?zhí)行單元。
在另一操作場景中,假定行R1、R2、R3和R4完全駐入呈現(xiàn)相依關(guān)系的指令。在這種場景中,在一個處理器周期內(nèi),主發(fā)布隊列210沒有包括對于發(fā)布就緒的指令。然而,在下一個處理器周期內(nèi),解決了行R1中的組1指令的相依關(guān)系。響應于這樣的解決,現(xiàn)在對于發(fā)布就緒的組1指令轉(zhuǎn)移或流動到副隊列存儲元件221和222。假定現(xiàn)在解決了組3指令。在隨后的處理器周期內(nèi),存儲元件221和222中的組1指令發(fā)布到適當?shù)膱?zhí)行單元,組3指令從行R2流入由于先前移動到副隊列215的組1指令而留下的、行R1中的空閑存儲元件。以這種方式,上層行中的指令向下流到或向下滴到下層行中的空缺,該空缺是由于移到副隊列的指令而留下的。這種下滴動作也應用于行R3和行R4。
如果發(fā)布控制狀態(tài)機202具有將指令從上層行移動到主發(fā)布隊列陣列210的下層行中的空缺、或者將該指令移動到副隊列215的選擇,則狀態(tài)機202將該指令移動到主發(fā)布隊列陣列210中的下層行。
為了設(shè)計效率的原因,圖2示出的發(fā)布隊列204是遞歸結(jié)構(gòu)。對于遞歸所指的是,行R1結(jié)構(gòu)及其相關(guān)存儲元件對221-222向上重復3次,以構(gòu)成圖2所示的完整發(fā)布隊列204拓撲結(jié)構(gòu)。換句話說,行R2及其相關(guān)存儲元件對231-232在結(jié)構(gòu)上是行R1及其存儲元件對221-222的重復。類似地,行R3及其相關(guān)存儲元件對241-242、以及行R4及其相關(guān)存儲元件對251-252也重復行R1及其相關(guān)存儲元件對221-222的結(jié)構(gòu)。使用這種遞歸拓撲結(jié)構(gòu),發(fā)布隊列204可以根據(jù)具體應用的需要而包括更多或更少的行及其相關(guān)副隊列存儲元件對。
在另一場景中,行R1完全駐入對于發(fā)布未就緒的指令。舉例來說,組1和組2指令全都呈現(xiàn)相依關(guān)系,因此行R1停頓。然而,行R2包括組3,其具有對于發(fā)布就緒的指令。在一個處理器周期內(nèi),發(fā)布控制狀態(tài)機202將對于發(fā)布就緒的組3指令置入副隊列215的存儲元件231和232。在下一個處理器周期內(nèi),行R1中的相依關(guān)系全部解決。因此,行R1中的所有4條指令,即組1指令和組2指令是對于發(fā)布就緒的。此外,存儲元件231和232包括來自行R2的組3、對于發(fā)布就緒的兩條指令。因此,6條指令現(xiàn)在是對于發(fā)布就緒的,即,行R1中的4條,以及副隊列存儲元件231-232中的2條。
由于行R1在行R2之前駐入指令,因此按照定義,行R1包含老于現(xiàn)在處于副隊列存儲元件231-232中的組3指令的指令。關(guān)于這6條指令中的哪兩條可以通過底端存儲元件221-222發(fā)布,發(fā)布控制狀態(tài)機202現(xiàn)在進行6種判定。如下更詳細討論的那樣,發(fā)布控制狀態(tài)機202將年齡位與發(fā)布隊列204中的每條指令相關(guān)聯(lián)。以這種方式,發(fā)布控制狀態(tài)機202監(jiān)視相對于發(fā)布隊列204中的其他指令的年齡的、發(fā)布隊列204中的每條指令的年齡。按照慣例,主發(fā)布隊列陣列210的任意行中最左端指令老于該行的最右端指令。因此,在行R1中,組1指令比組2指令呈現(xiàn)更大的年齡。當考慮哪些指令發(fā)布到執(zhí)行單元時,發(fā)布控制狀態(tài)機202向呈現(xiàn)更大年齡的這些指令給予更高的優(yōu)先級。因此,在6條對于發(fā)布就緒的指令當中,發(fā)布控制狀態(tài)機202將行R1的組1指令發(fā)送到副隊列存儲元件221-222,以便發(fā)布到連接于其的執(zhí)行單元。行R1的組2指令比現(xiàn)在存儲在副隊列存儲元件231-232中的組3指令呈現(xiàn)更大的年齡。因此,在下一處理器周期內(nèi),發(fā)布控制狀態(tài)機202將組2指令發(fā)送到副隊列存儲元件221-222,以便發(fā)布到執(zhí)行單元。發(fā)布控制狀態(tài)機202監(jiān)視與現(xiàn)在處于副隊列存儲元件231-232中的組3指令相關(guān)聯(lián)的年齡位,并確定這些指令比向下流到或滴到行1的最近組3或組4指令呈現(xiàn)更大的年齡。因此,發(fā)布控制狀態(tài)機202將存儲元件231-232中的組3指令發(fā)送到底端副隊列存儲元件221-222,以便在新駐入的行R1指令發(fā)布之前發(fā)布到執(zhí)行單元。
如果發(fā)布控制狀態(tài)機202發(fā)現(xiàn)主發(fā)布隊列陣列210中的指令是對于發(fā)布未就緒的,則發(fā)布控制狀態(tài)機202可以發(fā)送該指令到包括空缺或空閑存儲元件的陣列210中的下層行。該動作代表垂直壓縮。換句話說,假如發(fā)布隊列陣列210中的下層行包含空缺或空閑單元,則發(fā)布控制狀態(tài)機202可以將對于發(fā)布未就緒的指令從發(fā)布隊列陣列210中的上層行壓縮或轉(zhuǎn)移到下層行。然而,在本實施例中,發(fā)布控制狀態(tài)機202不可以將對于發(fā)布未就緒的指令發(fā)布到副隊列215或執(zhí)行單元。在一個實施例中,主發(fā)布隊列陣列210也可以以上述方式壓縮對于發(fā)布就緒的指令。
在另一實施例中,發(fā)布控制狀態(tài)機202包括數(shù)個狀態(tài)機來控制發(fā)布級200的發(fā)布隊列204。更具體地,如圖3所示,發(fā)布控制狀態(tài)機202包括優(yōu)先級狀態(tài)機400,用于指令年齡控制;插入控制狀態(tài)機500;底端行發(fā)布控制狀態(tài)機600;上層行壓縮及副發(fā)布狀態(tài)機700;以及,就緒狀態(tài)機800。這些狀態(tài)機一起工作,并且協(xié)作以提高發(fā)布隊列204的吞吐量。
圖4A示出了描述管理發(fā)布隊列204中的指令的年齡的優(yōu)先級狀態(tài)機400的操作的流程圖。年齡與由軟件編譯器(未示出)所確定的軟件程序中指令的程序順序有關(guān)。非易失性存儲裝置(未示出)連接到處理器100,以存儲已編譯軟件程序。軟件編譯器確定處理器100最終執(zhí)行的軟件程序的程序順序。對于指令年齡,處理器100將軟件編譯器設(shè)置成在第二指令之前執(zhí)行的第一指令定義為更年老的指令。類似地,對于指令年齡,處理器100定義將軟件編譯器設(shè)置成在第四指令之后執(zhí)行的第三指令定義為更年輕的指令。在一個實施例中,處理器100在發(fā)布隊列204中使更年老的指令優(yōu)先于更年輕的指令。該方案往往提高發(fā)布隊列204的性能,并降低其復雜性。
圖4B示出了發(fā)布隊列204,其駐有來自解碼器140的指令。發(fā)布控制狀態(tài)機202確定哪些指令進入發(fā)布隊列204中的哪些存儲元件212或指令位置。如圖4B所示,每個存儲指令的存儲元件還存儲年齡位?;谥鹦械幕A(chǔ),年齡位0表示更年老指令,而年齡位1表示更年輕指令。發(fā)布控制狀態(tài)機202配置存儲在發(fā)布隊列204的存儲元件中的指令,使得列從左向右變得更年輕。換句話說,按照該慣例,發(fā)布隊列204最左端的列存儲特定行的最年老指令,而最右端的列存儲該特定行的最年輕指令。需要時,其它實施例可以顛倒這個慣例。
如上所述,來自上層行的指令可以壓縮或向下流到下層行中的空缺存儲元件。當優(yōu)先級狀態(tài)機400將年齡位設(shè)置為1(更年輕)時,這表示在特定行內(nèi)該特定指令是從上面行壓縮的。因此,該特定已壓縮指令比該特定行中的所有其他未壓縮指令或條目呈現(xiàn)更年輕的年齡。同樣地,對于特定行,在該行中所有呈現(xiàn)對于發(fā)布就緒的狀態(tài)的指令當中,對于進一步壓縮到下層行或發(fā)布到副隊列215,更年老的指令優(yōu)先于更年輕的指令。在特定行中具有同樣年齡位的指令中,優(yōu)先級狀態(tài)機400從左到右給予更高的優(yōu)先級。
回到圖4A的流程圖,按照塊405,當發(fā)布控制狀態(tài)機202首先將每個指令插入到主發(fā)布隊列陣列210中的空缺存儲元件時,優(yōu)先級狀態(tài)機400將這樣最初插入的指令的年齡位設(shè)置為0。然而,按照塊410,當指令從上層行壓縮或流到下層行的存儲元件的空缺時,優(yōu)先級控制機400將該已壓縮指令的年齡位設(shè)置為1。這區(qū)分了新壓縮的指令與在該已壓縮指令到達的同一行中存在的其他較年老指令。另外,按照塊410,當指令從主發(fā)布隊列陣列210中的一行流到或轉(zhuǎn)移到與該行對應的存儲元件對的副隊列存儲元件時,優(yōu)先級狀態(tài)機400設(shè)置該指令的年齡位為1。在塊415,優(yōu)先級狀態(tài)機400進行測試,以確定是否特定行中的所有指令呈現(xiàn)年齡位=1。如果不是,則優(yōu)先級狀態(tài)機400繼續(xù)進行測試,直到該特定行中的所有指令呈現(xiàn)年齡位=1。按照塊420,一旦優(yōu)先級狀態(tài)機400確定存儲在特定行中的所有指令呈現(xiàn)年齡位=1,狀態(tài)機400就對該行中的所有指令重設(shè)年齡位=0。然后,處理流程繼續(xù)回到塊410,該塊410對特定行中的每個已壓縮或副發(fā)布指令設(shè)置年齡位=1。
回到圖4B的已駐入發(fā)布隊列204,本示例說明了年齡位的操作,該年齡位與發(fā)布隊列204的存儲元件中的每條指令一起存儲。主發(fā)布隊列陣列210的行R1-R4中的每一行包括各自存儲元件中的4條指令,即,指令I(lǐng)NSTR 1、INSTR 2、INSTR 3及INSTR 4。副隊列存儲元件221-222對應于行R1存儲元件,這是因為副隊列存儲元件221-222連接到R1存儲元件,以接收指令從而發(fā)布到執(zhí)行單元。圖4B將存儲元件221-222標注為ISSUE INST,這是因為這些存儲元件中的每一個可以存儲下一條指令,以發(fā)布到執(zhí)行單元。副隊列存儲元件231-232對應于行R2存儲元件,這是因為副隊列存儲元件231-232連接到R2存儲元件,以接收指令從而轉(zhuǎn)發(fā)到執(zhí)行單元。圖4B將存儲元件231-232標注為INSTR 5和INSTR 6,這是因為這些元件中的每一個可以接收來自行R2、或上面副隊列存儲元件241-242的指令。副隊列存儲元件241-242對應于行R3存儲元件,這是因為副隊列存儲元件241-242連接到R3存儲元件,以接收指令從而轉(zhuǎn)發(fā)到執(zhí)行單元。圖4B將存儲元件241-242標注為INSTR5和INSTR 6,這是因為這些元件中的每一個可以接收來自行R3、或上面副隊列存儲元件251-252的指令。副隊列存儲元件251-252對應于行R4存儲元件,這是因為副隊列存儲元件251-252連接到R4存儲元件,以接收指令從而轉(zhuǎn)發(fā)到執(zhí)行單元。圖4B將存儲元件251-252標注為INSTR 5和INSTR 6,這是因為這些元件中的每一個可以接收來自行R4的指令。
現(xiàn)在參考行R1中的指令I(lǐng)NSTR 1-INSTR 4,發(fā)布優(yōu)先級為全都呈現(xiàn)年齡=0的INSTR 1、INSTR 3、INSTR 4。由于INSTR 1的位置為行R1中的最左端指令,因此INSTR 1首先通過存儲元件對221-222發(fā)布。在行R1中從左向右移動,INSTR 3接下來發(fā)布,緊接著是INSTR 4?,F(xiàn)在,行R1中的、具有年齡=1的任何剩余指令發(fā)布,因此INSTR 2通過存儲元件對221-222發(fā)布。在如上所述發(fā)布行R1指令之后,指令I(lǐng)NSTR 5及INSTR 6通過副隊列存儲元件對221-222發(fā)布。來自存儲元件對231和232的指令I(lǐng)NSTR 5及INSTR 6每個呈現(xiàn)年齡位=1。因為特定行中的主發(fā)布隊列陣列指令在從特定行上面的行接收的副隊列指令之前發(fā)布,所以存儲元件對231-231中的指令I(lǐng)NSTR 5和INSTR 6通過存儲元件對221-222的發(fā)布在第一行R1指令I(lǐng)NSTR 1、INSTR 3、INSTR 4及INSTR 2的發(fā)布之后。
現(xiàn)在參考行R2中的指令I(lǐng)NSTR 1-INSTR 4,該行中的所有指令都呈現(xiàn)年齡=1。另外,相鄰副隊列存儲元件對241-242中的指令I(lǐng)NSTR 5-INSTR 6每個也呈現(xiàn)年齡=1。因此,按照流程圖4A的判定塊415和重設(shè)塊420,在判定塊415檢測到此情況之后的處理器周期內(nèi),所有年齡位重設(shè)為年齡=0。
現(xiàn)在參考行R3中的指令、以及相鄰副隊列存儲元件251-252,行R3中的指令I(lǐng)NSTR 2從R4壓縮或向下流到行R3。因此,行R3中的指令I(lǐng)NSTR 2呈現(xiàn)更年輕的年齡位=1。副隊列存儲元件251-252中的指令I(lǐng)NSTR 5及INSTR 6從上面行R4發(fā)布到存儲元件251-252。因此,副隊列存儲元件251-252中的指令I(lǐng)NSTR 5及INSTR 6呈現(xiàn)更年輕的年齡位=1。當行R1-R3駐有指令時,發(fā)布控制狀態(tài)機202開始將所提取的已解碼指令駐入行R4。發(fā)布控制狀態(tài)機202以從左到右的優(yōu)先級,將呈現(xiàn)年齡位=0的指令駐入行R4。
圖5示出了描述插入控制狀態(tài)機500中的處理流程的流程圖。插入控制狀態(tài)機500與發(fā)布控制狀態(tài)機202中的其他狀態(tài)機協(xié)作,以控制將也被稱作條目的指令插入發(fā)布隊列204的存儲元件。在判定塊505,插入控制狀態(tài)機500進行測試,以確定發(fā)布隊列204是否駐滿。按照塊510,如果發(fā)布隊列204駐滿,則上層管線停頓。上層管線包括調(diào)度單元135、微碼單元150、MUX 145、解碼器140及相依關(guān)系檢查器155。判定塊505繼續(xù)測試,直到空閑存儲元件出現(xiàn)在發(fā)布隊列204中,從而使得發(fā)布隊列204不再駐滿。發(fā)布隊列204可以包括多個空閑存儲元件。插入控制狀態(tài)機500查找目前不可壓縮的最高優(yōu)先級的存儲元件。存儲元件條目或指令,如果該指令下面的行是駐滿的,則可以是不可壓縮的。按照塊520,插入控制狀態(tài)機500將輸入指令插入在塊515找到的最高優(yōu)先級空閑存儲元件。插入控制狀態(tài)機500以年齡位=0將這樣存儲的指令標記為有效。然后,狀態(tài)機500在判定塊525進行另一個測試,以確定發(fā)布隊列204是否再次駐滿。按照塊530,如果狀態(tài)機500發(fā)現(xiàn)發(fā)布隊列204是駐滿的,則上層管線停頓。測試在判定塊525繼續(xù),直到發(fā)布隊列204再次包含至少一個空閑存儲元件。在那種情況下,處理流程繼續(xù)至塊535,在其中狀態(tài)機500確定發(fā)布隊列204中的次高優(yōu)先級空閑單元。在一個實施例中,插入控制狀態(tài)機500將指令插入主發(fā)布隊列陣列210中的存儲元件。在另一實施例中,如果指令是對于發(fā)布就緒的,插入控制狀態(tài)機500可以將該指令插入最高優(yōu)先級副隊列存儲元件。然后,按照塊540,狀態(tài)機500將下一輸入指令插入在塊535中找出的次高優(yōu)先級空閑單元。完成此任務后,上層管線按照塊545前進,并且處理流程繼續(xù)回到判定塊505,其再次測試發(fā)布隊列,以確定隊列204是否駐滿。
圖6示出了描述底端行發(fā)布控制狀態(tài)機600中的處理流程的流程圖,其中該狀態(tài)機600控制從主發(fā)布隊列陣列210的底端行R1的指令發(fā)布。狀態(tài)機600與就緒狀態(tài)機800協(xié)作,以確定底端行R1中的指令是否對于發(fā)布就緒。按照塊605,狀態(tài)機600從左至右按照年齡搜索主發(fā)布隊列陣列210的底端行R1。判定塊610測試底端行R1中的指令,以確定這些指令中的任一個是否對于發(fā)布就緒。如果判定塊610發(fā)現(xiàn)沒有特定底端行指令對于發(fā)布就緒,則按照塊605搜索繼續(xù),直到判定塊610發(fā)現(xiàn)對于發(fā)布就緒的指令。如果判定塊610在搜索所有底端行指令之后沒有發(fā)現(xiàn)對于發(fā)布就緒的指令,則狀態(tài)機600等待一個處理器周期,并且在塊605搜索再次開始。然而,按照塊615,一旦判定塊610在底端行R1中發(fā)現(xiàn)對于發(fā)布就緒的指令,狀態(tài)機600就將該指令移動到兩個發(fā)布存儲元件221-222中的一個,即第一發(fā)布槽(slot)。發(fā)布存儲元件221-222也可以被稱作發(fā)布槽。這些存儲元件或槽連接到執(zhí)行單元,并向其發(fā)布指令,其中執(zhí)行單元最終執(zhí)行所發(fā)布的指令。判定塊620進行測試,以確定底端行R1中的第二指令是否對于發(fā)布就緒。如果判定塊620未能發(fā)現(xiàn)這樣的對于發(fā)布就緒的第二指令,則處理流程繼續(xù)回到605,以便進行另外的搜索。然而,如果判定塊620發(fā)現(xiàn)這樣的對于發(fā)布就緒的第二指令,則判定塊625進行測試,以確定此第二指令是否與先前的第一指令沖突。沖突意味著第二對于發(fā)布就緒的指令需要與第一對于發(fā)布就緒的指令相同的執(zhí)行單元,因此這樣的第二對于發(fā)布就緒的指令不可以在與第一對于發(fā)布就緒的指令相同的處理器周期內(nèi)發(fā)布。如果判定塊625發(fā)現(xiàn)這樣的沖突,則處理流程繼續(xù)回到塊605,以便在底端行R1中進行另外的搜索。然而,按照塊630,如果判定塊沒有發(fā)現(xiàn)這樣的沖突,則狀態(tài)機600將該第二指令移動到第二發(fā)布槽,即存儲元件222。處理流程然后繼續(xù)回到塊605,其在底端行R1中進行對于發(fā)布就緒的指令的另外搜索。在一個實施例中,壓縮、插入及年齡更新發(fā)生在發(fā)布判定塊610及620之前。
圖7示出了描述上層行壓縮及副發(fā)布狀態(tài)機700中的處理流程的流程圖。上層行包括主發(fā)布隊列陣列210中除行R1以外的那些行。對于特定上層行中的每條指令或條目,狀態(tài)機700在直接下層行中搜索空閑單元。按照塊705,如果狀態(tài)機700在直接下層行中發(fā)現(xiàn)這樣的空閑單元,則狀態(tài)機700命令主指令隊列陣列210將位于上面的條目壓縮到該空閑單元中。按照塊705,狀態(tài)機700還將這樣壓縮的所有條目設(shè)置為年齡位=1,即更年輕。然后,狀態(tài)機700在判定塊705進行測試,以確定該下層行是否駐滿。如果該下層行未駐滿,則處理流程繼續(xù)回到塊705,以便進行另外的壓縮(若可能的話)。然而,按照塊715,如果判定塊710發(fā)現(xiàn)該下層行已駐滿,則狀態(tài)機700按照年齡從右到左并行搜索所有行,以定位對于發(fā)布就緒的指令。換句話說,狀態(tài)機700同時在所有行上進行相同的搜索。如果該搜索沒有發(fā)現(xiàn)這樣的對于發(fā)布就緒的指令,則判定塊720將處理流程送回到塊705,以進行壓縮活動(若可能的話)。然而,如果該搜索發(fā)現(xiàn)對于發(fā)布就緒的指令,則判定塊720將處理流程送到塊725。塊725將該對于發(fā)布就緒的指令移動到副隊列215,稍后該指令從該副隊列215發(fā)布。發(fā)布控制狀態(tài)機202在上述壓縮和發(fā)布判定之前進行向發(fā)布隊列204的插入以及指令年齡位更新。
圖8示出了描述就緒狀態(tài)機800的處理流程的流程圖,該狀態(tài)機800確定特定指令是否對于發(fā)布就緒。首先,按照塊805,就緒狀態(tài)機800檢查當前指令,以確定該指令是否呈現(xiàn)相依關(guān)系。按照塊810,如果判定塊805確定當前指令沒有呈現(xiàn)相依關(guān)系,則狀態(tài)機800將當前指令指定為對于發(fā)布就緒。然而,按照塊815,如果狀態(tài)機800確定當前指令呈現(xiàn)相依關(guān)系,則狀態(tài)機800進行相依關(guān)系更新。然后,判定塊820進行測試,以確定相依關(guān)系是否仍存在。按照塊810,如果相依關(guān)系不再存在,則狀態(tài)機800將該指令指定為對于發(fā)布就緒。然而,按照塊825,如果相依關(guān)系仍存在,則狀態(tài)機800將該指令指定為對于發(fā)布未就緒。在等待一個處理器周期后,狀態(tài)機800將處理流程送回到判定塊805,以便進行另外的相依關(guān)系測試。
圖9示出了發(fā)布隊列204的簡化圖示,其中為清楚起見,主發(fā)布隊列210與副發(fā)布隊列215之間的連接被移除。該發(fā)布隊列圖示提供了隊列中的指令插入、隊列內(nèi)的壓縮、以及從隊列發(fā)布的示例。注意,行R4與副隊列存儲元件對251-252相關(guān)聯(lián)。行R3與副隊列存儲元件對241-242相關(guān)聯(lián)。行R2與副隊列存儲元件對231-232相關(guān)聯(lián)。主發(fā)布隊列陣列210的底端行與發(fā)布指令存儲元件對221-222相關(guān)聯(lián)。當發(fā)布控制狀態(tài)機202將指令置入存儲元件對221-222時,該指令直接前進或發(fā)布到執(zhí)行該指令的執(zhí)行單元。圖9將未被指令占據(jù)的所有存儲元件指定為VLD=0,即意味著在該元件中存在無效指令/不存在指令。例如,如行R1的最左端指令所示,包含指令的存儲元件包括指令號INSTR、年齡位AGE、對于發(fā)布就緒位RDY、以及指令有效位VLD。當指令的RDY位=1時,該指令是對于發(fā)布就緒的。
下面討論發(fā)布隊列204內(nèi)的代表性指令,以說明隊列的操作。行R1的指令I(lǐng)NSTR 3呈現(xiàn)就緒位RDY=1,因此是對于發(fā)布就緒的。因為INSTR 3還呈現(xiàn)年齡位=0,所以它呈現(xiàn)行R1中的最高優(yōu)先級,作為行R1中的、最年老的對于發(fā)布就緒的指令。因此,如虛線905所示,INSTR 3發(fā)布流到存儲元件221,該指令從其發(fā)布到適當?shù)膱?zhí)行單元。行R1中的剩余指令全都呈現(xiàn)就緒位RDY=0,從而表明它們尚未對于發(fā)布就緒。因此,這些剩余指令在行R1中停頓。副隊列存儲元件232中的指令I(lǐng)NSTR 6呈現(xiàn)就緒位RDY=1,因此是對于發(fā)布就緒的。因為此INSTR 6不與現(xiàn)在處于存儲元件221中的指令沖突,因此如虛線910所示,INSTR 6轉(zhuǎn)移到該指令從其發(fā)布的存儲元件222。
在主發(fā)布隊列陣列210的行R2中,所有指令呈現(xiàn)RDY=0,因此表示對于發(fā)布未就緒。因為行R2中的INSTR 1、INSTR 2、INSTR 3和INSTR 4都對于發(fā)布未就緒,所以這些存儲元件保持被占用,從而阻止來自上層行,即行R3的任意指令壓縮到行R2中。在副隊列215中,存儲元件241中的INSTR 5呈現(xiàn)RDY=1,因此對于發(fā)布就緒。因為元件241下面的單元231是空閑的(VLD=0),所以指令I(lǐng)NSTR 5從存儲元件241壓縮或流到存儲元件231中,如虛線915所示。
現(xiàn)在參考主發(fā)布隊列陣列210的行R3,行R3中的前兩個最左端存儲元件保持空閑,這是因為對于這些元件的每個,VLD=0。然而,指令I(lǐng)NSTR 3和INSTR 4占據(jù)了行R3的兩個最右端單元。這兩條指令中的每一條呈現(xiàn)就緒位RDY=1,因此是對于發(fā)布就緒的。然而,因為行R2中的4條指令阻止行R3指令壓縮到行R2中,所以行R3的指令I(lǐng)NSTR 3和INSTR 4分別替而發(fā)布到副隊列215的存儲元件241和242中,如虛線920和925所示。因為指令現(xiàn)在占據(jù)了副隊列存儲元件241和242兩者,所以副隊列存儲元件251和252中的對于發(fā)布就緒的指令I(lǐng)NSTR 5和INSTR 6停頓,因此不能立刻流入存儲元件241和242。
現(xiàn)在參考主發(fā)布隊列陣列210的最高行R4,指令I(lǐng)NSTR 1和INSTR 2各自呈現(xiàn)RDY位=1。因此,這些指令中的每一個都是對于發(fā)布就緒的。因為行R3包括兩個空閑存儲元件,其中VLD=0,該對于發(fā)布就緒的指令I(lǐng)NSTR 1和INSTR2從行R4壓縮或流到行R3中的兩個空閑存儲元件,如虛線930和935所示。發(fā)布控制狀態(tài)機202將發(fā)布隊列204接收的下兩條指令插入行R4中的兩個空閑存儲元件,其中VLD=0,如虛線940和945所示。
圖10示出了信息處理系統(tǒng)(IHS)1000,其包括處理器100。IHS 1000還包括總線1010,其將處理器100連接到系統(tǒng)存儲器1015和視頻圖形控制器1020。顯示器1025連接到視頻圖形控制器1020。非易失性存儲裝置1030,如硬盤驅(qū)動器、CD驅(qū)動器、DVD驅(qū)動器或其他非易失性存儲裝置,連接到總線1010,以向IHS 1000提供永久性信息存儲裝置。操作系統(tǒng)1035載入存儲器1015,以支配IHS 1000的操作。I/O設(shè)備1040,如鍵盤和鼠標定點設(shè)備,連接到總線1010。一個或多個擴展總線1045,如USB、IEEE 1394總線、ATA、SATA、PCI、PCIE及其他總線,可以連接到總線1010,以幫助外圍設(shè)備與IHS1000的連接。網(wǎng)絡適配器1050連接到總線1010,以使得IHS 1000能夠有線或無線連接到網(wǎng)絡和其他信息處理系統(tǒng)。雖然圖10示出了一個采用處理器100的IHS,但是IHS可以采取許多形式。舉例來說,IHS 1000可以采取下列形式臺上式計算機、服務器、便攜式計算機、膝上型計算機、筆記本計算機、或其他形式因素計算機、或數(shù)據(jù)處理系統(tǒng)。IHS 1000還可以采取其他形式因素,如個人數(shù)字助理(PDA)、游戲設(shè)備、便攜式電話設(shè)備、通信設(shè)備或其他包括處理器和存儲器的設(shè)備。
前文公開了可以提供改進的在處理器發(fā)布隊列中的吞吐量的處理器。
參看本發(fā)明的本描述,本發(fā)明的變型或替代實施例對本領(lǐng)域技術(shù)人員將是顯而易見的。因此,本描述向本領(lǐng)域技術(shù)人員教導實施本發(fā)明的方式,并且它意欲被解釋為僅僅是說明性的。所示和所述的本發(fā)明的形式構(gòu)成本實施例。本領(lǐng)域技術(shù)人員可以在部件的形狀、尺寸和布置上進行各種變化。例如,本領(lǐng)域技術(shù)人員可以將在此說明和描述的元件替換成等價元件。此外,本領(lǐng)域技術(shù)人員在從本發(fā)明的本描述獲益后,在不脫離本發(fā)明的范圍的情況下,可以使用本發(fā)明的某些特征,而獨立于其他特征的使用。
權(quán)利要求
1.一種操作處理器的方法,包括由指令提取單元從存儲器提取指令,從而提供已提取指令;由解碼器解碼已提取指令,解碼器將已解碼指令提供到發(fā)布隊列,所述發(fā)布隊列包括存儲元件主陣列和存儲元件輔陣列;由主陣列將已解碼指令存儲到包括在主陣列中的存儲元件行和列的矩陣中,以便無序發(fā)布到執(zhí)行單元;由發(fā)布隊列確定,主陣列是否被主陣列一行中的對于發(fā)布未就緒的第一指令所停頓,發(fā)布隊列搜索主陣列的其他行,以定位對于發(fā)布就緒的第二指令;以及通過發(fā)布隊列將第二指令轉(zhuǎn)發(fā)到輔陣列以便發(fā)布到執(zhí)行單元,而第一指令保留在主陣列中,從而繞過第一指令。
2.如權(quán)利要求1所述的方法,其中,輔陣列包括按照行和列排列的多個存儲元件,所述輔陣列包括發(fā)布行,所述方法還包括由發(fā)布行將對于發(fā)布就緒的指令提供到執(zhí)行單元的步驟。
3.如權(quán)利要求2所述的方法,其中,繞過步驟還包括,發(fā)布行將第二指令提供到執(zhí)行單元。
4.如權(quán)利要求2所述的方法,其中,主陣列的第一行連接到輔陣列的發(fā)布行,所述方法還包括,由主陣列的第一行將對于發(fā)布就緒的指令提供到輔陣列的發(fā)布行。
5.如權(quán)利要求4所述的方法,還包括,由發(fā)布隊列向主陣列駐入多條指令,其中一些指令是對于發(fā)布就緒的,而其他指令是對于發(fā)布未就緒的,發(fā)布隊列首先駐入主陣列的第一行,然后駐入其的其他行。
6.如權(quán)利要求5所述的方法,還包括,由發(fā)布隊列將主陣列的第一行中的、對于發(fā)布就緒的指令發(fā)送到輔陣列的發(fā)布行,從而在主陣列的第一行中留下空閑存儲元件。
7.如權(quán)利要求6所述的方法,還包括,由發(fā)布隊列從主陣列的第二行中的存儲元件發(fā)送指令到主陣列的第一行中的空閑存儲元件。
8.如權(quán)利要求7所述的方法,還包括,由發(fā)布隊列將主陣列的第一行中的先前空閑的存儲元件內(nèi)的指令發(fā)送到輔陣列的發(fā)布行,以便發(fā)布到執(zhí)行單元。
9.如權(quán)利要求7所述的方法,還包括,由發(fā)布隊列將主陣列的第三行中的指令發(fā)送到主陣列的第二行中的空閑存儲元件。
10.一種處理器,包括提取級,被適配成從存儲器提取指令,以提供已提取指令;解碼器,連接到提取級,用于解碼已提取指令;多個執(zhí)行單元;以及發(fā)布隊列,連接于解碼器與所述多個執(zhí)行單元之間,所述發(fā)布隊列包括存儲元件主陣列,其存儲等待由執(zhí)行單元無序執(zhí)行的指令,所述發(fā)布隊列還包括存儲元件輔陣列,其連接到存儲元件主陣列,所述發(fā)布隊列確定主陣列是否被主陣列一行中的對于發(fā)布未就緒的第一指令所停頓,所述發(fā)布隊列搜索主陣列的其他行來定位對于發(fā)布就緒的第二指令,所述發(fā)布隊列通過將第二指令轉(zhuǎn)發(fā)到輔陣列以便發(fā)布到執(zhí)行單元,而第一指令保留在主陣列中,從而繞過第一指令。
11.如權(quán)利要求10所述的處理器,其中,發(fā)布隊列包括發(fā)布控制狀態(tài)機,其確定主陣列是否被主陣列一行中的對于發(fā)布未就緒的第一指令所停頓,所述發(fā)布控制狀態(tài)機還搜索主陣列的其他行,以定位對于發(fā)布就緒的第二指令,所述發(fā)布控制狀態(tài)機還通過將第二指令轉(zhuǎn)發(fā)到輔陣列以便發(fā)布到執(zhí)行單元,而第一指令保留在主陣列中,從而繞過第一指令。
12.如權(quán)利要求10所述的處理器,其中,輔隊列包括按照行和列排列的多個存儲元件,其中發(fā)布行將對于發(fā)布就緒的指令提供到執(zhí)行單元。
13.如權(quán)利要求12所述的處理器,其中,發(fā)布行將第二指令提供到執(zhí)行單元。
14.如權(quán)利要求12所述的處理器,其中,主陣列包括第一行,其連接到輔陣列的發(fā)布行,用于將對于發(fā)布就緒的指令提供到輔陣列的發(fā)布行。
15.如權(quán)利要求14所述的處理器,其中,發(fā)布隊列將等待執(zhí)行的指令駐入主陣列第一行,然后是其的其他行,主陣列被配置成當其第一行將對于發(fā)布就緒的指令發(fā)送到輔陣列的發(fā)布行以便執(zhí)行時,主陣列的第二行中的指令填入主陣列的第一行中的、由發(fā)送到輔陣列的發(fā)布行的對于發(fā)布就緒的指令所留下的空閑存儲元件。
16.一種信息處理系統(tǒng)(IHS),包括處理器,包括提取級,被適配成從存儲器提取指令,以提供已提取指令;解碼器,連接到提取級,用于解碼已提取指令;多個執(zhí)行單元;以及發(fā)布隊列,連接于解碼器與所述多個執(zhí)行單元之間,所述發(fā)布隊列包括存儲元件主陣列,其存儲等待由執(zhí)行單元無序執(zhí)行的指令,所述發(fā)布隊列還包括存儲元件輔陣列,其連接到存儲元件主陣列,所述發(fā)布隊列確定主陣列是否被主陣列一行中的、對于發(fā)布未就緒的第一指令所停頓,所述發(fā)布隊列搜索主陣列的其他行來定位對于發(fā)布就緒的第二指令,所述發(fā)布隊列通過將第二指令轉(zhuǎn)發(fā)到輔陣列以便發(fā)布到執(zhí)行單元,而第一指令保留在主陣列中,從而繞過第一指令;以及存儲器,連接到處理器。
17.如權(quán)利要求16所述的IHS,其中,輔陣列包括按照行和列排列的多個存儲元件,其中發(fā)布行將對于發(fā)布就緒的指令提供到執(zhí)行單元。
18.如權(quán)利要求17所述的IHS,其中,發(fā)布行將第二指令提供到執(zhí)行單元。
19.如權(quán)利要求17所述的IHS,其中,主陣列包括第一行,其連接到輔陣列的發(fā)布行,用于將對于發(fā)布就緒的指令提供到輔陣列的發(fā)布行。
20.如權(quán)利要求19所述的IHS,其中,發(fā)布隊列將等待執(zhí)行的指令駐入主陣列第一行,然后是其的其他行,主陣列被配置成當其第一行將對于發(fā)布就緒的指令發(fā)送到輔陣列的發(fā)布行以便執(zhí)行時,主陣列的第二行中的指令填入主陣列的第一行中的、由發(fā)送到輔陣列的發(fā)布行的對于發(fā)布就緒的指令所留下的空閑存儲元件。
全文摘要
一種信息處理系統(tǒng),包括不按照程序順序發(fā)布指令的處理器。所述處理器包括發(fā)布隊列,即使該隊列中的一些指令對于發(fā)布未就緒,該隊列也可以使指令朝向發(fā)布而前進。發(fā)布隊列包括存儲元件主陣列和連接于其的存儲元件輔陣列。當主陣列的特定行包括對于發(fā)布未就緒的指令時,對于該指令,發(fā)生停頓情況。然而,為了防止整個發(fā)布隊列和處理器停頓,主陣列另一行中的對于發(fā)布就緒的指令可以繞過包括該停頓或?qū)τ诎l(fā)布未就緒的指令的行。為了實現(xiàn)這種繞過,發(fā)布隊列將對于發(fā)布就緒的指令移動到輔陣列的發(fā)布行,以便發(fā)布到適當?shù)膱?zhí)行單元。因此,盡管存在停頓指令,但向執(zhí)行單元的無序指令發(fā)布繼續(xù)。
文檔編號G06F9/38GK1940861SQ20061010196
公開日2007年4月4日 申請日期2006年7月18日 優(yōu)先權(quán)日2005年9月27日
發(fā)明者喬納森·J·德門特, 克里斯托弗·M·阿伯內(nèi)西, 庫爾特·A·費斯特, 戴維·希皮 申請人:國際商業(yè)機器公司