專利名稱:用來在信息處理系統(tǒng)中從發(fā)出隊(duì)列發(fā)出指令的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
本公開在此涉及一種信息處理系統(tǒng),并且更具體地說,涉及在信息處理系統(tǒng)的處理器中發(fā)出指令。
背景技術(shù):
在信息處理系統(tǒng)中的常規(guī)處理器可以包括幾個(gè)流水線級(jí),以增加處理器的有效吞吐量。例如,處理器可以包括從存儲(chǔ)器提取指令的提取級(jí)、把指令譯碼成操作碼和操作數(shù)的譯碼器級(jí)、以及具有執(zhí)行譯碼的指令的各種執(zhí)行單元的執(zhí)行級(jí)。流水線化使處理器能夠通過并行地執(zhí)行這些處理器操作而得到更大的效率。例如,在提取級(jí)提取下一個(gè)指令的同時(shí),譯碼器級(jí)可以對(duì)所提取的指令進(jìn)行譯碼。類似地,在譯碼器級(jí)譯碼另一個(gè)指令的同時(shí),在執(zhí)行級(jí)中的執(zhí)行單元可以執(zhí)行已譯碼的指令。
最簡(jiǎn)單的處理器按程序順序,即處理器在程序中遇到指令的順序,處理指令。處理器設(shè)計(jì)人員通過設(shè)計(jì)亂序(OOO)執(zhí)行指令的處理器提高了處理器效率。設(shè)計(jì)人員發(fā)現(xiàn),如果處理的指令不取決于還未得到的結(jié)果,如來自較早指令的結(jié)果,則處理器可不按程序順序處理指令。換句話說,如果指令不呈現(xiàn)依賴性,則處理器可亂序(OOO)執(zhí)行指令。
為了使處理器能夠亂序(OOO)執(zhí)行指令,處理器可以在譯碼器級(jí)與執(zhí)行級(jí)之間包括發(fā)出隊(duì)列。發(fā)出隊(duì)列起有效地消除譯碼器級(jí)與形成處理器的執(zhí)行級(jí)的執(zhí)行單元間耦合的緩沖器的作用。發(fā)出隊(duì)列包括確定哪些指令發(fā)送到各種執(zhí)行單元和這些指令發(fā)送到執(zhí)行單元的順序的邏輯。
當(dāng)隊(duì)列遇到對(duì)于其他指令呈現(xiàn)依賴性的一個(gè)或多個(gè)指令時(shí),處理器的發(fā)出隊(duì)列可能停住。換句話說,發(fā)出隊(duì)列等待處理器解除這些依賴性。一旦處理器解除這些依賴性,發(fā)出隊(duì)列就可以繼續(xù)發(fā)出指令到執(zhí)行單元并且執(zhí)行繼續(xù)。不幸的是,當(dāng)發(fā)出隊(duì)列呈現(xiàn)停住直到處理器解除引起停住的依賴性時(shí),處理器損失寶貴的時(shí)間。一些現(xiàn)代處理器可以允許多個(gè)指令停住;然而,它們一般不調(diào)節(jié)到高頻操作或調(diào)節(jié)到大發(fā)出隊(duì)列。
所需要的是一種以可擴(kuò)展方式解決上述處理器無效率問題的方法和設(shè)備。
發(fā)明內(nèi)容
因而,在一個(gè)實(shí)施例中,公開了一種用來操作處理器的方法,其中由指令提取器從存儲(chǔ)器提取指令,因而提供所提取的指令。該方法也包括由譯碼器對(duì)所提取的指令進(jìn)行譯碼,以把所譯碼的指令提供給發(fā)出隊(duì)列。該方法還包括由發(fā)出隊(duì)列把譯碼的指令存儲(chǔ)在存儲(chǔ)單元行和列的矩陣中,用于亂序發(fā)出到執(zhí)行單元。該方法還進(jìn)一步包括由發(fā)出隊(duì)列確定發(fā)出隊(duì)列是否被第一指令停住,該第一指令在發(fā)出隊(duì)列的行之一中,并且不準(zhǔn)備發(fā)出。發(fā)出隊(duì)列查找發(fā)出隊(duì)列的其他行,以定位準(zhǔn)備發(fā)出的第二指令。在一個(gè)實(shí)施例中,該方法也包括,在第一指令保持在發(fā)出隊(duì)列中的同時(shí),通過發(fā)出隊(duì)列把第二指令轉(zhuǎn)發(fā)到執(zhí)行單元而旁路第一指令。
在另一個(gè)實(shí)施例中,公開了一種處理器,該處理器包括提取級(jí),該提取器適于從存儲(chǔ)器提取指令,以提供提取的指令。處理器也包括耦合到提取級(jí)上的譯碼器,該譯碼器對(duì)所提取的指令進(jìn)行譯碼。處理器還包括多個(gè)執(zhí)行單元。處理器還進(jìn)一步包括在譯碼器與多個(gè)執(zhí)行單元之間耦合的發(fā)出隊(duì)列。發(fā)出隊(duì)列包括存儲(chǔ)用于亂序發(fā)出到多個(gè)執(zhí)行單元的所譯碼的指令的存儲(chǔ)單元行和列的矩陣。發(fā)出隊(duì)列確定是否存在由在行之一中的不準(zhǔn)備發(fā)出的第一指令引起的停住。在這種情況下,發(fā)出隊(duì)列更深地查找發(fā)出隊(duì)列的其他行,以定位準(zhǔn)備發(fā)出的第二指令。在一個(gè)實(shí)施例中,發(fā)出隊(duì)列配置成,在第一指令保持在發(fā)出隊(duì)列中的同時(shí),通過把第二指令轉(zhuǎn)發(fā)到執(zhí)行單元而使第二指令旁路第一指令。
附圖僅表明本發(fā)明的示例性實(shí)施例,并因此不限制其范圍,因?yàn)榘l(fā)明概念適于其他同樣有效的實(shí)施例。
圖1表示公開的處理器的一個(gè)實(shí)施例的方塊圖。
圖2表示圖1的處理器的發(fā)出隊(duì)列的方塊圖。
圖3表示在公開的處理器中的發(fā)出控制狀態(tài)機(jī)的方塊圖。
圖4A是流程圖,描繪了在公開的處理器的優(yōu)先權(quán)狀態(tài)機(jī)中的處理流程。
圖4B是包括年齡控制信息的發(fā)出隊(duì)列的方塊圖。
圖5是流程圖,描繪了在公開的處理器的插入控制狀態(tài)機(jī)中的處理流程。
圖6是流程圖,描繪了在公開的處理器的底部行發(fā)出控制狀態(tài)機(jī)中的處理流程。
圖7是流程圖,描繪了在公開的處理器的上部行壓縮和副發(fā)出狀態(tài)機(jī)中的處理流程。
圖8是流程圖,描繪了在公開的處理器的準(zhǔn)備狀態(tài)機(jī)中的處理流程。
圖9是標(biāo)記為來表示指令插入、壓縮和發(fā)出的公開的處理器的發(fā)出隊(duì)列的方塊圖。
圖10是采用公開的處理器的信息處理系統(tǒng)的方塊圖。
具體實(shí)施例方式
公開的處理器從存儲(chǔ)器存儲(chǔ)提取指令,并且譯碼這些指令。譯碼的指令歸為兩類,即“準(zhǔn)備發(fā)出”指令和“不準(zhǔn)備發(fā)出”指令。特定指令可能不是準(zhǔn)備發(fā)出的原因包括1)指令呈現(xiàn)依賴性,即指令在執(zhí)行以前要求先前發(fā)出的指令的結(jié)果,2)指令是“上下文同步指令”,即,指令必須等待所有先前指令來結(jié)束執(zhí)行,3)“流水線忙”情況存在,即指令必須等待,因?yàn)樘幚砥飨惹皥?zhí)行了非流水線指令,及4)資源忙情況存在,即指令要求了不可用的資源,如在滿的執(zhí)行單元中的加載或存儲(chǔ)隊(duì)列。
發(fā)出隊(duì)列保持還未準(zhǔn)備發(fā)出到執(zhí)行單元的已譯碼的指令。當(dāng)指令在等待依賴性解除的同時(shí),或者由于其他原因,在發(fā)出隊(duì)列中停住時(shí),隊(duì)列邏輯利用這個(gè)時(shí)間在發(fā)出隊(duì)列中更深地查找,以定位可以亂序發(fā)出(OOO)的任何非依賴性指令。以這種方式,在停住的指令等待依賴性解除或等待阻止發(fā)出的其他原因的解決的同時(shí),有用的處理器活動(dòng)繼續(xù)。
處理器的發(fā)出隊(duì)列包括按行和列排列的指令存儲(chǔ)位置的陣列。發(fā)出隊(duì)列包括行R1、行R2、...、行RN,其中N是發(fā)出隊(duì)列的深度。發(fā)出隊(duì)列把指令發(fā)出到適當(dāng)?shù)膱?zhí)行單元用于執(zhí)行。發(fā)出隊(duì)列的輸出包括發(fā)出點(diǎn),準(zhǔn)備發(fā)出指令從該發(fā)出點(diǎn)發(fā)出到能夠執(zhí)行由該指令規(guī)定的功能的執(zhí)行單元。如果行R1包括不準(zhǔn)備發(fā)出的指令,如呈現(xiàn)依賴性的指令,那么行R1不能前進(jìn)超過發(fā)出點(diǎn)。這種情況停住發(fā)出隊(duì)列的行R1。然而,當(dāng)發(fā)出隊(duì)列以這種方式停住時(shí),發(fā)出隊(duì)列邏輯可更深地進(jìn)入行R(1+1),即行R2,中查找可以發(fā)出的非依賴性指令。如果發(fā)出隊(duì)列邏輯在行R2中找到這樣一個(gè)非依賴性指令,那么該非依賴性指令旁路在該非依賴性指令之前的停住的行R1。以這種方式,在較老的依賴性指令停住的同時(shí),處理器可執(zhí)行有用的工作。
在一個(gè)實(shí)施例中,處理器從行R1、行R2、...、行RN遞歸地重復(fù)上述結(jié)構(gòu),其中N代表發(fā)出隊(duì)列的深度。換句話說,處理器遞歸地相對(duì)于彼此配置行。如果行RN包括一個(gè)不包括依賴性的指令,即準(zhǔn)備發(fā)出的指令,則發(fā)出隊(duì)列邏輯使該指令前進(jìn)到以前的行R(N-1)。以這種方式,當(dāng)其他停住發(fā)生導(dǎo)致發(fā)出隊(duì)列的更深地查找時(shí),指令可以逐行向行R前進(jìn)。當(dāng)前進(jìn)的指令到達(dá)行R1時(shí),發(fā)出隊(duì)列邏輯使指令發(fā)出到適當(dāng)?shù)膱?zhí)行單元。
圖1表示耦合到存儲(chǔ)器105上的處理器100的方塊圖。處理器100包括L2接口110,該L2接口110耦合到存儲(chǔ)器105上,以從其接收指令和數(shù)據(jù)。存儲(chǔ)器105存儲(chǔ)按程序順序組織的指令。提取級(jí)115耦合到L2接口110上,以使處理器100能夠從存儲(chǔ)器105提取指令。更具體地說,提取級(jí)115包括耦合到L2接口110上的提取單元120、和L1指令高速緩沖存儲(chǔ)器125。預(yù)譯碼單元130把L2接口110耦合到L1指令高速緩沖存儲(chǔ)器125上,以對(duì)來自存儲(chǔ)器105的通過提取單元120的指令進(jìn)行預(yù)譯碼。L1指令高速緩沖存儲(chǔ)器125如所示的那樣耦合預(yù)譯碼單元130和分發(fā)單元135。
分發(fā)單元135如所示的那樣直接經(jīng)多路復(fù)用器(MUX)145或可選擇地經(jīng)微碼單元150和MUX 145耦合到譯碼器140上。以這種方式,分發(fā)單元135把要求不分解成較小指令的指令通過MUX 145傳輸?shù)阶g碼器140??蛇x擇地,呈現(xiàn)要求分解成較小指令的大小的所分發(fā)的指令通過微碼單元150。微碼單元150把這些指令分解成較小指令,MUX 145把這些較小指令傳輸?shù)阶g碼器140用于譯碼。
譯碼器140對(duì)由提取級(jí)115向其提供的指令進(jìn)行譯碼。譯碼器140耦合到依賴性檢查器155上,該依賴性檢查器155檢查每個(gè)譯碼的指令,以確定譯碼的指令是否呈現(xiàn)對(duì)于該譯碼的指令以后的指令、或當(dāng)前不可用的操作數(shù)或結(jié)果的依賴性。依賴性檢查器155耦合到發(fā)出級(jí)200上,該發(fā)出級(jí)200包括發(fā)出控制狀態(tài)機(jī)202和發(fā)出隊(duì)列204。發(fā)出級(jí)200把它接收的每個(gè)譯碼的指令傳遞到在定點(diǎn)單元170和/或向量/浮點(diǎn)單元180中的適當(dāng)執(zhí)行單元。發(fā)出級(jí)200高效地確定那些準(zhǔn)備發(fā)出的指令,并且把那些指令迅速發(fā)出到適當(dāng)執(zhí)行單元。
定點(diǎn)單元170包括如圖1中所示耦合在一起的加載/存儲(chǔ)執(zhí)行單元171、定點(diǎn)執(zhí)行單元172、分支執(zhí)行單元173及完成/清除單元174。向量/浮點(diǎn)單元180包括如圖1中所示耦合在一起的向量加載/存儲(chǔ)單元181、向量算術(shù)邏輯單元(ALU)182、浮點(diǎn)單元(FPU)算術(shù)邏輯單元(ALU)183、FPU加載/存儲(chǔ)單元184、向量完成單元185及FPU完成單元186。向量/浮點(diǎn)單元180的向量完成單元185和FPU完成單元186耦合到定點(diǎn)單元170的完成/清除單元174上。完成單元174、185及186按順序執(zhí)行諸如退出指令之類的任務(wù),并且處理在相關(guān)執(zhí)行單元中可能出現(xiàn)的異常情況。
譯碼器140經(jīng)發(fā)出隊(duì)列204把譯碼的指令分發(fā)到適當(dāng)?shù)膱?zhí)行單元。當(dāng)對(duì)于諸如在下面更詳細(xì)討論的這樣的指令解除了依賴性時(shí),發(fā)出隊(duì)列204把排隊(duì)的指令發(fā)出到適當(dāng)?shù)膱?zhí)行單元。如圖2中所示,發(fā)出隊(duì)列204包括按行和列排列的存儲(chǔ)單元或鎖存器212的主發(fā)出隊(duì)列陣列210。每個(gè)鎖存器212存儲(chǔ)由譯碼器140提供的指令。更具體地說,主發(fā)出隊(duì)列陣列210包括行R1、R2、...、RN,其中N是在主發(fā)出隊(duì)列陣列210中的總行數(shù)。在這個(gè)具體例子中,N=4,從而主發(fā)出隊(duì)列陣列包括4行。也在這個(gè)具體例子中,主發(fā)出隊(duì)列陣列210包括4列。主發(fā)出隊(duì)列陣列210可以依據(jù)具體應(yīng)用采用更大或更小數(shù)目的行和列。
在這個(gè)具體實(shí)施例中,當(dāng)完全填充有指令時(shí),主發(fā)出隊(duì)列陣列210可以存儲(chǔ)16個(gè)指令,即4行的每一行有4個(gè)指令。主發(fā)出隊(duì)列陣列210把這些指令分組成8組,其每一組包括2個(gè)指令。因而,當(dāng)完全填充時(shí),主發(fā)出隊(duì)列陣列210包括8組,其中每組2個(gè)指令,即在行R1中的指令組1和2、在行R2中的指令組3和4、在行R3中的指令組5和6、以及在行R4中的指令組7和8。
發(fā)出隊(duì)列204也包括提供到執(zhí)行單元的可選擇路徑的輔助隊(duì)列或副隊(duì)列215。在這個(gè)具體實(shí)施例中,針對(duì)主發(fā)出隊(duì)列陣列210的每行,副隊(duì)列215都包括兩個(gè)存儲(chǔ)單元。與組1和組2指令相對(duì)應(yīng)的行R1存儲(chǔ)單元,耦合到兩個(gè)副隊(duì)列存儲(chǔ)單元221和222上。副隊(duì)列存儲(chǔ)單元221和222形成發(fā)出行,指令從該發(fā)出行發(fā)出到執(zhí)行單元。如圖2中所示每個(gè)副隊(duì)列存儲(chǔ)單元包括多路復(fù)用器和存儲(chǔ)單元。例如,副隊(duì)列存儲(chǔ)單元221包括耦合到鎖存器或存儲(chǔ)單元221B上的MUX 221A。為了說明便利,圖2示出了與存儲(chǔ)單元221B接合在一起的MUX 221A。副隊(duì)列存儲(chǔ)單元222包括耦合到鎖存器或存儲(chǔ)單元222B上的MUX 222A。一旦指令傳送到存儲(chǔ)單元221B和222B,這些指令就發(fā)出到適當(dāng)?shù)膱?zhí)行單元用于執(zhí)行。
在其中針對(duì)主發(fā)出隊(duì)列陣列210的每行,副隊(duì)列215包括兩個(gè)存儲(chǔ)單元的這個(gè)具體實(shí)施例中,每處理器時(shí)鐘周期副隊(duì)列215可以發(fā)出兩個(gè)指令。因而,假定主發(fā)出隊(duì)列陣列210的行R1包括在組1和組2中的總共4個(gè)有效指令,這四個(gè)指令的兩個(gè)可以分別移動(dòng)到副隊(duì)列存儲(chǔ)單元221和222,條件是指令滿足下面討論的一定標(biāo)準(zhǔn)。
如所示的那樣,副隊(duì)列215也包括耦合到行R2的存儲(chǔ)單元212上的副隊(duì)列存儲(chǔ)單元231和232。副隊(duì)列存儲(chǔ)單元231和232一起形成在副隊(duì)列215內(nèi)的行。副隊(duì)列215還包括耦合到行R3的存儲(chǔ)單元212上的副隊(duì)列存儲(chǔ)單元241和242。副隊(duì)列存儲(chǔ)單元241和242一起形成在副隊(duì)列215內(nèi)的另一個(gè)行。副隊(duì)列215還進(jìn)一步包括耦合到行R4的存儲(chǔ)單元212上的副隊(duì)列存儲(chǔ)單元251和252。副隊(duì)列存儲(chǔ)單元251和252一起形成在副隊(duì)列215內(nèi)的另一個(gè)行。當(dāng)在行R1、R2、R3或R4中的存儲(chǔ)單元212之一存儲(chǔ)指令時(shí),則發(fā)出隊(duì)列204把該單元看作存儲(chǔ)有效輸入。然而,如果單元沒有存儲(chǔ)指令,那么發(fā)出隊(duì)列204把這樣一個(gè)未占據(jù)單元看作呈現(xiàn)無效輸入。
在圖1和圖3中表示的發(fā)出控制狀態(tài)機(jī)202可以把從譯碼器140接收的指令存儲(chǔ)到可用的行R1至R4的任何存儲(chǔ)單元中。當(dāng)處理器100初始化時(shí),主發(fā)出隊(duì)列陣列210的所有存儲(chǔ)單元都是空的。類似地,當(dāng)處理器100初始化時(shí),副隊(duì)列215的所有存儲(chǔ)單元都是空的。當(dāng)處理器操作開始時(shí),發(fā)出控制狀態(tài)機(jī)首先填充在陣列210中的最高優(yōu)先權(quán)存儲(chǔ)單元212。在一個(gè)實(shí)施例中,處理器100把底部行,即行R1,定義為陣列210的最高優(yōu)先權(quán)行,該行最接近發(fā)出。這意味著在行R1的存儲(chǔ)單元中存儲(chǔ)的指令比主發(fā)出隊(duì)列陣列210的其他行更接近發(fā)出。行R2呈現(xiàn)在行R1之后的次最高優(yōu)先權(quán)。行R3呈現(xiàn)在行R2之后的次最高優(yōu)先權(quán),并且在陣列中如此向上。較高優(yōu)先權(quán)意味著,在行R1中的指令比在行R2和以上中的指令更接近發(fā)出,如在下面更詳細(xì)解釋的那樣。按照慣例,在主發(fā)出隊(duì)列陣列210的每行中,較接近主發(fā)出隊(duì)列陣列的每行的左端的指令比每行中的右邊的指令呈現(xiàn)較高優(yōu)先權(quán)。其中顛倒這種慣例的可選擇實(shí)施例是可能的。
作為組1或組2存儲(chǔ)在行R1中的指令可以經(jīng)副隊(duì)列存儲(chǔ)單元221或副隊(duì)列存儲(chǔ)單元222發(fā)出到執(zhí)行單元。如圖2中所示,執(zhí)行單元耦合到副隊(duì)列存儲(chǔ)單元221和222的輸出上。在一個(gè)處理器周期中,發(fā)出控制狀態(tài)機(jī)202可以指令多路復(fù)用器221A選擇在行R1中存儲(chǔ)的組1和組2指令的任一個(gè)并把選擇的指令存儲(chǔ)在存儲(chǔ)單元221B中。在同一處理器周期中,發(fā)出控制狀態(tài)機(jī)202也可以指令多路復(fù)用器222A選擇在行R1中還未選擇的組1和組2指令的任一個(gè)并把選擇的指令存儲(chǔ)在存儲(chǔ)單元222B中。副隊(duì)列215以這種方式選擇和存儲(chǔ)來自行R1的兩個(gè)指令。在一個(gè)實(shí)施例中,副隊(duì)列215選擇來自同一組的指令。例如,組1提供兩個(gè)指令,或者組2提供兩個(gè)指令,用來存儲(chǔ)在存儲(chǔ)單元221B或222B中。這樣的其他實(shí)施例是可能的,其中副隊(duì)列215從組1選擇一個(gè)指令并且從組2選擇一個(gè)指令,用來存儲(chǔ)在存儲(chǔ)單元221B和222B中。在隨后的處理器周期中,在副隊(duì)列存儲(chǔ)單元221和副隊(duì)列存儲(chǔ)單元222中存儲(chǔ)的指令發(fā)出到適當(dāng)執(zhí)行單元。
以類似方式,發(fā)出控制狀態(tài)機(jī)202可以指令副隊(duì)列存儲(chǔ)單元231和232存儲(chǔ)來自在行R2中的組3和組4的指令。發(fā)出控制狀態(tài)機(jī)202也可以指令副隊(duì)列存儲(chǔ)單元241和242存儲(chǔ)來自在行R3中的組5和組6的指令。發(fā)出控制狀態(tài)機(jī)202還可以指令副隊(duì)列存儲(chǔ)單元251和252存儲(chǔ)來自在行R4中的組7和組8的指令。通過接著圖2的連接圖案作為模板,主發(fā)出隊(duì)列陣列210和副隊(duì)列215可擴(kuò)展成包括輔助行。更具體地說,主發(fā)出隊(duì)列陣列210和副隊(duì)列215呈現(xiàn)遞歸拓?fù)?,因?yàn)樾蠷2和相關(guān)副隊(duì)列存儲(chǔ)單元231-232重復(fù),并且接著下面的行R1和相關(guān)副隊(duì)列存儲(chǔ)單元221-222的連接圖案。類似地,行R3和相關(guān)副隊(duì)列存儲(chǔ)單元241-242相對(duì)于下面的行呈現(xiàn)遞歸拓?fù)?,并且?duì)于行R4和更高的行(未表示)也是如此。在一個(gè)實(shí)施例中,發(fā)出控制狀態(tài)機(jī)202把準(zhǔn)備發(fā)出指令傳送到副隊(duì)列215。
副隊(duì)列存儲(chǔ)單元231的輸出耦合到副隊(duì)列存儲(chǔ)單元221和222的相應(yīng)輸入上。副隊(duì)列存儲(chǔ)單元232的輸出耦合到副隊(duì)列存儲(chǔ)單元221和222的相應(yīng)輸入上。因而,在副隊(duì)列存儲(chǔ)單元231和232中存儲(chǔ)的指令可以經(jīng)副隊(duì)列存儲(chǔ)單元221和222發(fā)出到適當(dāng)執(zhí)行單元。
副隊(duì)列存儲(chǔ)單元241的輸出耦合到副隊(duì)列存儲(chǔ)單元231和232的相應(yīng)輸入上。副隊(duì)列存儲(chǔ)單元242的輸出耦合到副隊(duì)列存儲(chǔ)單元231和232的相應(yīng)輸入上。因而,在副隊(duì)列存儲(chǔ)單元241和242中存儲(chǔ)的指令可以經(jīng)與行R2相關(guān)的副隊(duì)列存儲(chǔ)單元231和232、及經(jīng)與行R1相關(guān)的副隊(duì)列存儲(chǔ)單元221和222發(fā)出到適當(dāng)執(zhí)行單元。
最后,副隊(duì)列存儲(chǔ)單元251的輸出耦合到副隊(duì)列存儲(chǔ)單元241和242的相應(yīng)輸入上。副隊(duì)列存儲(chǔ)單元252的輸出耦合到副隊(duì)列存儲(chǔ)單元241和242的相應(yīng)輸入上。因而,在副隊(duì)列存儲(chǔ)單元251和252中存儲(chǔ)的指令可以經(jīng)與行R3相關(guān)的副隊(duì)列存儲(chǔ)單元241和242、與行R2相關(guān)的副隊(duì)列存儲(chǔ)單元231和232及經(jīng)與行R1相關(guān)的副隊(duì)列存儲(chǔ)單元221和222發(fā)出到適當(dāng)執(zhí)行單元。準(zhǔn)備發(fā)出的指令可通過副隊(duì)列(每處理器周期副隊(duì)列的一行)向執(zhí)行前進(jìn),如下面更詳細(xì)解釋的那樣。
指令可以取通過發(fā)出隊(duì)列204的兩條路徑到達(dá)與其耦合的執(zhí)行單元。主發(fā)出隊(duì)列陣列210提供一條用于指令通過發(fā)出隊(duì)列204前進(jìn)的路徑,而副隊(duì)列215提供另一條通過發(fā)出隊(duì)列204的路徑。在實(shí)際中,指令在發(fā)出到適當(dāng)執(zhí)行單元用于執(zhí)行之前可以通過主發(fā)出隊(duì)列陣列210的部分和副隊(duì)列215的部分。有可能的是,在主發(fā)出隊(duì)列陣列210中的具體行可能填充有由于依賴性或其他原因不能發(fā)出的指令。這樣的一行成為停住點(diǎn),因?yàn)樗赡茏柚乖谠撏W〉男幸陨系男兄械闹噶钋斑M(jìn)到下部行和發(fā)出到執(zhí)行單元。當(dāng)一行呈現(xiàn)這樣一種停住點(diǎn)時(shí),如由發(fā)出控制狀態(tài)機(jī)202所命令的那樣,停住的行以上的行可以通過把其指令傳送到副隊(duì)列215而旁路該停住的行。一旦在副隊(duì)列215中,傳送的指令就在隨后的處理器周期中在副隊(duì)列中逐行前進(jìn),越來越靠下,直到將它們發(fā)出到耦合到最下部的副隊(duì)列存儲(chǔ)單元221和222上的執(zhí)行單元。
下面的一系列例子解釋在不同操作情況下發(fā)出隊(duì)列204的操作。在一個(gè)例子中,發(fā)出控制狀態(tài)機(jī)202在一個(gè)處理器周期期間把2個(gè)有效指令插入在行R1的組1中。這些指令準(zhǔn)備發(fā)出。換句話說,這些指令沒有呈現(xiàn)它們?yōu)槭裁床荒芰⒓窗l(fā)出到執(zhí)行單元的原因??赡茏柚乖趤y序(OOO)發(fā)出隊(duì)列中指令的立即執(zhí)行的原因是,該指令呈現(xiàn)對(duì)于其他指令的結(jié)果的依賴性。換句話說,由該指令要求的需要的操作數(shù)當(dāng)前不可用。然而,由于在當(dāng)前例子中,行1的組1包括沒有依賴性的兩個(gè)有效指令,所以行1分別把這兩個(gè)準(zhǔn)備發(fā)出的指令供給到副隊(duì)列215的存儲(chǔ)單元221和222,這些指令可以從該存儲(chǔ)單元221和222發(fā)出到耦合到其上的執(zhí)行單元。在發(fā)出控制狀態(tài)機(jī)202把沒有依賴性的2個(gè)有效指令插入在行1的組1中之后的下個(gè)處理器周期中,狀態(tài)機(jī)202把沒有依賴性的2個(gè)有效指令插入在行1的組2中。在下個(gè)處理器周期中,主發(fā)出隊(duì)列陣列210把在行1的組2中的兩個(gè)指令傳送到存儲(chǔ)單元221和222以便執(zhí)行,因?yàn)椴淮嬖谘舆t執(zhí)行的原因。在行1的組2把其兩個(gè)指令發(fā)送到存儲(chǔ)單元221和222以便傳輸?shù)綀?zhí)行單元的同一處理器周期中,狀態(tài)機(jī)202把另外兩個(gè)指令發(fā)送到空的組1存儲(chǔ)單元。因而,我們觀察到“乒乓”效應(yīng),其中1)在第一處理器周期期間,兩個(gè)行1組1指令傳送到存儲(chǔ)單元221和222以便傳送到執(zhí)行單元;2)在第二處理器周期期間,兩個(gè)行1組2指令傳送到單元221和222以便執(zhí)行;及3)在第三處理器周期期間,兩個(gè)行1組1指令再次傳送到單元221和222以便執(zhí)行;等等。因而,發(fā)出隊(duì)列204的拓?fù)錇闆]有依賴性的指令提供最佳指令吞吐量。以另一種方式說,當(dāng)行1接收到?jīng)]有依賴性的指令供給時(shí),這些指令立即發(fā)出到副隊(duì)列215的最下部單元,它們從最下部單元傳送到適當(dāng)執(zhí)行單元用于執(zhí)行。換句話說,組1填充,并且然后在組2填充時(shí)組1發(fā)出;當(dāng)組1重新填充時(shí),組2發(fā)出;當(dāng)組2重新填充時(shí),組1發(fā)出,等等,并且如此類推。
在以上討論的例子中,發(fā)出隊(duì)列204在同一處理器周期中既接收兩個(gè)指令又發(fā)出兩個(gè)指令,以提供良好的吞吐量。換句話說,當(dāng)譯碼器140經(jīng)依賴性檢查器155向發(fā)出級(jí)200和發(fā)出隊(duì)列204提供沒有依賴性的一系列譯碼的指令時(shí),發(fā)出隊(duì)列204不阻止指令發(fā)出。以上討論的例子假定發(fā)出隊(duì)列204當(dāng)它開始接收沒有依賴性的一系列指令時(shí)是空的。在這種情形下,發(fā)出隊(duì)列204實(shí)現(xiàn)100%的吞吐量,而沒有等待解除任何依賴性的空閑時(shí)間。
在如下例子中,底部行即行1填充有四個(gè)呈現(xiàn)依賴性的指令。在行R1中的所有四個(gè)存儲(chǔ)單元212或輸入現(xiàn)在是有效的,因?yàn)橹噶钫紦?jù)這些存儲(chǔ)單元。然而,由于呈現(xiàn)依賴性的指令現(xiàn)在填充整個(gè)行R1,所以來自行R1的指令當(dāng)前不可以發(fā)出到執(zhí)行單元用于執(zhí)行。換句話說,在行R1中的組1和組2指令呈現(xiàn)依賴性,并且直到這些依賴性解除,這些指令才可能發(fā)出。由于行R1當(dāng)前不可能經(jīng)存儲(chǔ)單元221和222發(fā)出到執(zhí)行單元,所以行R1停住,并且在行R1以上的行開始填充有來自譯碼器140的指令。
假定行R2填充有不呈現(xiàn)依賴性的組3和組4指令并且行R1因?yàn)樗尸F(xiàn)依賴性而不能發(fā)出,行R2通過傳送或發(fā)出到副隊(duì)列215而有效地旁路行1。按照慣例,較接近行的左側(cè)的指令比較接近行的右側(cè)的指令呈現(xiàn)較高優(yōu)先權(quán)。因而,如果在行R2中的所有4個(gè)指令不呈現(xiàn)依賴性,那么組3指令在發(fā)出控制狀態(tài)機(jī)202的控制下發(fā)出到副隊(duì)列215。更具體地說,在組3中的最左指令傳送到存儲(chǔ)單元231,并且在組3中的剩余指令傳送到存儲(chǔ)單元232。注意,每個(gè)副隊(duì)列存儲(chǔ)單元對(duì)221-222、231-232、241-242、及251-252耦合到相應(yīng)行R1、行R2、行R3及行R4上,并且可以從這些行接收指令。在這個(gè)實(shí)施例中,每個(gè)處理器周期,兩個(gè)指令可以傳送到副隊(duì)列215。在隨后的處理器周期中,組3指令經(jīng)副隊(duì)列215的存儲(chǔ)單元221和222發(fā)出到適當(dāng)執(zhí)行單元,條件是在行R1中的指令仍然呈現(xiàn)依賴性。以這種方式,發(fā)出到在副隊(duì)列215中的較高存儲(chǔ)單元對(duì)的沒有依賴性的指令向下向的存儲(chǔ)單元對(duì)221-222傳送,該存儲(chǔ)單元對(duì)221-222最終把該指令對(duì)發(fā)出到適當(dāng)執(zhí)行單元用于執(zhí)行。因而,即使行R1包括具有依賴性的指令,行R2也通過經(jīng)副隊(duì)列215發(fā)出而旁路停住的行R1。
以類似方式,如果行R1和行R2完全填充有不準(zhǔn)備發(fā)出的依賴指令,則在行R3中的沒有依賴性的指令可以通過流經(jīng)副隊(duì)列存儲(chǔ)單元對(duì)241-242、231-232及221-222而發(fā)出到適當(dāng)執(zhí)行單元。在一個(gè)實(shí)施例中,兩個(gè)指令在副隊(duì)列215中從存儲(chǔ)單元對(duì)到存儲(chǔ)單元對(duì)流向執(zhí)行單元占一個(gè)處理器周期。而且,如果行R1、行R2及行R3完全填充有不可能立即發(fā)出的依賴指令,則在行R4中沒有依賴性的指令可以通過流經(jīng)副隊(duì)列存儲(chǔ)單元對(duì)251-252、241-242、231-232及221-222而發(fā)出到適當(dāng)執(zhí)行單元。
在另一種操作情形下,假定行R1、行R2、行R3及行R4完全填充有呈現(xiàn)依賴性的指令。在這種情形下,主發(fā)出隊(duì)列陣列210在一個(gè)處理器周期中不包括準(zhǔn)備發(fā)出指令。然而,在下個(gè)處理器周期中,在行R1中的組1指令的依賴性解除。響應(yīng)這種解除,現(xiàn)在準(zhǔn)備發(fā)出組1指令傳送或流到副隊(duì)列存儲(chǔ)單元221和222。假定組3指令現(xiàn)在解除。在隨后的處理器周期中,在存儲(chǔ)單元221和222中的組1指令發(fā)出到適當(dāng)執(zhí)行單元,并且來自行R2的組3指令流入由先前已移動(dòng)到副隊(duì)列215的組1指令所留下的在行R1中的未占據(jù)的存儲(chǔ)單元中。以這種方式,在較高行中的指令向下流到或向下滴入到由移動(dòng)到副隊(duì)列的指令所留下的在下部行中的空缺中。這種下滴動(dòng)作也適用于行R3和行R4。
如果發(fā)出控制狀態(tài)機(jī)202具有把指令從上部行移動(dòng)到在主發(fā)出隊(duì)列陣列210的下部行中的空缺或把該指令移動(dòng)到副隊(duì)列215的選擇,則狀態(tài)機(jī)202把指令移動(dòng)到在主發(fā)出隊(duì)列陣列210中的下部行。
在圖2中表示的發(fā)出隊(duì)列204因?yàn)樵O(shè)計(jì)效率原因是遞歸結(jié)構(gòu)。我們用遞歸指,行R1結(jié)構(gòu)和其相關(guān)存儲(chǔ)單元對(duì)221-222向上重復(fù)3次,以形成在圖2中描繪的完全發(fā)出隊(duì)列204。換句話說,行R2和其相關(guān)存儲(chǔ)單元對(duì)231-232在結(jié)構(gòu)上是行R1和存儲(chǔ)單元對(duì)221-222的重復(fù)。類似地,行R3和其存儲(chǔ)單元對(duì)241-242、及行R4和其存儲(chǔ)單元對(duì)251-252同樣重復(fù)行R1和其存儲(chǔ)單元對(duì)221-222的結(jié)構(gòu)。使用這種遞歸拓?fù)?,發(fā)出隊(duì)列204可以包括更多或更少的行和相關(guān)副隊(duì)列存儲(chǔ)單元對(duì),如對(duì)于具體應(yīng)用希望的那樣。
在另一種情形下,行R1完全填充有不準(zhǔn)備發(fā)出的指令。例如,組1和組2指令都呈現(xiàn)依賴性,并因而行R1停住。然而,行R2包括具有準(zhǔn)備發(fā)出指令的組3。發(fā)出控制狀態(tài)機(jī)202在一個(gè)處理器周期期間把準(zhǔn)備發(fā)出組3指令放置在副隊(duì)列215的存儲(chǔ)單元231和232中。在下個(gè)存儲(chǔ)器周期中,在行R1中的依賴性都解除。因而,在行R1中的所有4個(gè)指令,即組1指令和組2指令,都準(zhǔn)備發(fā)出。而且,存儲(chǔ)單元231和232包括來自行R2的組3的兩個(gè)準(zhǔn)備發(fā)出指令。因而,六個(gè)指令現(xiàn)在準(zhǔn)備發(fā)出,即在行R1中的4個(gè)和在副隊(duì)列存儲(chǔ)單元231-232中的2個(gè)。
由于行R1在行R2之前填充有指令,所以行R1按定義包含比現(xiàn)在在副隊(duì)列存儲(chǔ)單元231-232中的組3指令要老的指令。發(fā)出控制狀態(tài)機(jī)202現(xiàn)在進(jìn)行關(guān)于這六個(gè)指令的哪兩個(gè)可以經(jīng)底部存儲(chǔ)單元221-222發(fā)出的6路決定。如下面更詳細(xì)討論的那樣,發(fā)出控制狀態(tài)機(jī)202把年齡位與在發(fā)出隊(duì)列204中的每個(gè)指令相關(guān)聯(lián)。以這種方式,發(fā)出控制狀態(tài)機(jī)202監(jiān)視在發(fā)出隊(duì)列204中的每個(gè)指令相對(duì)于在發(fā)出隊(duì)列204中的其他指令的年齡。按照慣例,在主發(fā)出隊(duì)列陣列210的任一行中的最左指令比這一行的最右指令老。因而,在行R1中,與組2指令相比,組1指令呈現(xiàn)較大年齡。發(fā)出控制狀態(tài)機(jī)202當(dāng)考慮哪些指令發(fā)出到執(zhí)行單元時(shí),給予呈現(xiàn)較大年齡的這些指令較高優(yōu)先權(quán)。因而,在六個(gè)準(zhǔn)備發(fā)出的指令中,發(fā)出控制狀態(tài)機(jī)202把行R1的組1指令發(fā)送到副隊(duì)列存儲(chǔ)單元221-222,用來發(fā)出到耦合到其上的執(zhí)行單元。行R1的組2指令比現(xiàn)在在副隊(duì)列存儲(chǔ)單元231-232中存儲(chǔ)的組3指令呈現(xiàn)較大年齡。因此,發(fā)出控制狀態(tài)機(jī)202在下個(gè)處理器周期中,把組2指令發(fā)送到副隊(duì)列存儲(chǔ)單元221-222,用來發(fā)出到執(zhí)行單元。發(fā)出控制狀態(tài)機(jī)202監(jiān)視與現(xiàn)在在副隊(duì)列存儲(chǔ)單元231-232中的組3指令相關(guān)的年齡位,并且確定這些指令比流到或下滴到行1的較新組3或組4指令呈現(xiàn)較大年齡。因而,在新填充的行R1指令發(fā)出之前,發(fā)出控制狀態(tài)機(jī)202把在存儲(chǔ)單元231-232中的組3指令發(fā)送到底部副隊(duì)列存儲(chǔ)單元221-222,用來發(fā)出到執(zhí)行單元。
如果發(fā)出控制狀態(tài)機(jī)202發(fā)現(xiàn)在主發(fā)出隊(duì)列陣列210中的指令不準(zhǔn)備發(fā)出,那么發(fā)出控制狀態(tài)機(jī)202可以把該指令發(fā)送到在陣列210中包括空缺或未占據(jù)存儲(chǔ)單元的下部行。這個(gè)動(dòng)作代表豎直壓縮。換一種方式說,發(fā)出控制狀態(tài)機(jī)202可以把不準(zhǔn)備發(fā)出指令在發(fā)出隊(duì)列陣列210中從較高行壓縮或傳送到較低行,條件是這樣的較低行包含空缺或未占據(jù)單元。然而,在這個(gè)實(shí)施例中,發(fā)出控制狀態(tài)機(jī)202可能不把不準(zhǔn)備發(fā)出指令發(fā)出到副隊(duì)列215或發(fā)出到執(zhí)行單元。在一個(gè)實(shí)施例中,主發(fā)出隊(duì)列陣列210也可以以上述方式壓縮準(zhǔn)備發(fā)出指令。
在另一個(gè)實(shí)施例中,發(fā)出控制狀態(tài)機(jī)202包括幾個(gè)狀態(tài)機(jī),以控制發(fā)出級(jí)200的發(fā)出隊(duì)列204。更明確地說,如在圖3中看到的那樣,發(fā)出控制狀態(tài)機(jī)202包括用于指令年齡控制的優(yōu)先權(quán)狀態(tài)機(jī)400、插入控制狀態(tài)機(jī)500、底部行發(fā)出控制狀態(tài)機(jī)600、上部行壓縮和副發(fā)出狀態(tài)機(jī)700及準(zhǔn)備狀態(tài)機(jī)800。這些狀態(tài)機(jī)一起工作,并且合作以提高發(fā)出隊(duì)列204的吞吐量。
圖4A表示流程圖,描繪了管理在發(fā)出隊(duì)列204中的指令年齡的優(yōu)先權(quán)狀態(tài)機(jī)400的操作。年齡是指由軟件編譯器(未表示)所確定的在軟件程序中的指令的程序順序。非易失性存儲(chǔ)裝置(未表示)耦合到處理器100上,從而存儲(chǔ)所編譯的軟件程序。軟件編譯器確定處理器100最終執(zhí)行的軟件程序的程序順序。就指令年齡而論,處理器100將第一指令(軟件編譯器設(shè)置成在第二指令之前執(zhí)行該第一指令)定義為較老指令。類似地,就指令年齡而論,處理器100將第三指令(軟件編譯器設(shè)置成在第四指令之后執(zhí)行該第三指令)定義為較年輕指令。在一個(gè)實(shí)施例中,處理器100給在發(fā)出隊(duì)列204中的較老指令先于較年輕指令的優(yōu)先權(quán)。這種手段往往提高性能,并且減小發(fā)出隊(duì)列204的復(fù)雜性。
圖4B表示填充有來自譯碼器140的指令的發(fā)出隊(duì)列204。發(fā)出控制狀態(tài)機(jī)202確定哪些指令到在發(fā)出隊(duì)列204中的哪些存儲(chǔ)單元212或指令位置。如在圖4B中看到的那樣,存儲(chǔ)指令的每個(gè)存儲(chǔ)單元也存儲(chǔ)年齡位。在逐行基礎(chǔ)上,0的年齡位指示較老指令,而1的年齡位指示較年輕指令。發(fā)出控制狀態(tài)機(jī)202配置在發(fā)出隊(duì)列204的存儲(chǔ)單元中存儲(chǔ)的指令,從而當(dāng)從左向右前進(jìn)時(shí),列變得更年輕。換句話說,按照該慣例,發(fā)出隊(duì)列204的最左列存儲(chǔ)特定行的最老指令,并且最右列存儲(chǔ)該特定行的最年輕指令。如果希望,則其他實(shí)施例可以顛倒這種慣例。
如上所述,來自上部行的指令可以壓縮或向下流到在低部行中的空缺存儲(chǔ)單元。當(dāng)優(yōu)先權(quán)狀態(tài)機(jī)400把年齡位設(shè)置到1(較年輕)時(shí),這在特定行內(nèi)指示該特定指令從該行以上壓縮。因此,該特定壓縮的指令在該特定行中呈現(xiàn)比所有其他非壓縮的指令或輸入年輕的年齡。同樣,就特定行而論,在呈現(xiàn)準(zhǔn)備發(fā)出狀態(tài)的該行中的所有指令中,相對(duì)于到下部行的進(jìn)一步壓縮或到副隊(duì)列215的發(fā)出,較老指令接收先于較年輕指令的優(yōu)先權(quán)。在特定行中具有相同年齡位的指令中,優(yōu)先權(quán)狀態(tài)機(jī)400從左到右給以較高優(yōu)先權(quán)。
返回圖4A的流程圖,當(dāng)發(fā)出控制狀態(tài)機(jī)202首先把每個(gè)指令插入在主發(fā)出隊(duì)列陣列210的行中的空缺存儲(chǔ)單元中時(shí),優(yōu)先權(quán)狀態(tài)機(jī)400按照塊405把這樣初始插入的指令的年齡位設(shè)置為零。然而,當(dāng)指令從上部行壓縮或流到在下部行中的存儲(chǔ)單元中的空缺時(shí),優(yōu)先權(quán)狀態(tài)機(jī)400按照塊410把該壓縮的指令的年齡位設(shè)置為1。這把新壓縮的指令與該壓縮的指令所到達(dá)的同一行中所存在的其他較老指令區(qū)分開。并且按照塊410,當(dāng)指令從在主發(fā)出隊(duì)列陣列210中的行流到或傳送到與該行相對(duì)應(yīng)的存儲(chǔ)單元對(duì)的副隊(duì)列存儲(chǔ)單元時(shí),優(yōu)先權(quán)狀態(tài)機(jī)400把該指令的年齡位設(shè)置到1。在塊415處,優(yōu)先權(quán)狀態(tài)機(jī)400進(jìn)行測(cè)試,以確定在特定行中的所有指令是否都呈現(xiàn)年齡位=1。如果不是,則優(yōu)先權(quán)狀態(tài)機(jī)400繼續(xù)進(jìn)行測(cè)試,直到在特定行中的所有指令都呈現(xiàn)年齡位=1。一旦優(yōu)先權(quán)狀態(tài)機(jī)400確定在特定行中存儲(chǔ)的所有指令都呈現(xiàn)年齡位=1,狀態(tài)機(jī)400就按照塊420對(duì)于在該行中的所有指令復(fù)位年齡位=0。處理流程然后繼續(xù)回到塊410,該塊410對(duì)于在特定行中的每個(gè)壓縮的或副發(fā)出的指令設(shè)置年齡位=1。
返回圖4B的填充的發(fā)出隊(duì)列204,這個(gè)例子示出在發(fā)出隊(duì)列204的存儲(chǔ)單元中與每個(gè)指令一起存儲(chǔ)的年齡位的操作。主發(fā)出隊(duì)列陣列210的行R1-R4的每一個(gè)包括在相應(yīng)存儲(chǔ)單元中的4個(gè)指令,即指令I(lǐng)NSTR 1、INSTR 2、INSTR 3及INSTR 4。副隊(duì)列存儲(chǔ)單元221-222與行R1存儲(chǔ)單元相對(duì)應(yīng),因?yàn)楦标?duì)列存儲(chǔ)單元221-222耦合到R1存儲(chǔ)單元上,以接收發(fā)出到執(zhí)行單元的指令。圖4B把存儲(chǔ)單元221-222標(biāo)為ISSUE INST,因?yàn)檫@些單元的每一個(gè)可存儲(chǔ)發(fā)出到執(zhí)行單元的下個(gè)指令。副隊(duì)列存儲(chǔ)單元231-232與行R2存儲(chǔ)單元相對(duì)應(yīng),因?yàn)楦标?duì)列存儲(chǔ)單元231-232耦合到R2存儲(chǔ)單元上,以接收前進(jìn)到執(zhí)行單元的指令。圖4B把存儲(chǔ)單元231-232標(biāo)為INSTR 5和INSTR 6,因?yàn)檫@些單元的每一個(gè)可從行R2或上方的副隊(duì)列存儲(chǔ)單元241-242接收指令。副隊(duì)列存儲(chǔ)單元241-242與行R3存儲(chǔ)單元相對(duì)應(yīng),因?yàn)楦标?duì)列存儲(chǔ)單元241-242耦合到R3存儲(chǔ)單元上,以接收前進(jìn)到執(zhí)行單元的指令。圖4B把存儲(chǔ)單元241-242標(biāo)為INSTR 5和INSTR 6,因?yàn)檫@些單元的每一個(gè)可從行R3或上方的副隊(duì)列存儲(chǔ)單元251-252接收指令。副隊(duì)列存儲(chǔ)單元251-252與行R4存儲(chǔ)單元相對(duì)應(yīng),因?yàn)楦标?duì)列存儲(chǔ)單元251-252耦合到R4存儲(chǔ)單元上,以接收前進(jìn)到執(zhí)行單元的指令。圖4B把存儲(chǔ)單元251-252標(biāo)為INSTR 5和INSTR 6,因?yàn)檫@些單元的每一個(gè)可從行R4接收指令。
現(xiàn)在參照在行R1中的指令I(lǐng)NSTR 1-INSTR 4,發(fā)出優(yōu)先權(quán)是都呈現(xiàn)年齡=0的INSTR 1、INSTR 3、INSTR 4。由于INSTR 1的位置作為在行R1中的最左指令,INSTR 1首先經(jīng)存儲(chǔ)單元對(duì)221-222發(fā)出。在行R1中從左到右移動(dòng),INSTR 3其次發(fā)出,接著是INSTR 4。現(xiàn)在在行R1中具有年齡=1的任何剩余指令發(fā)出,并因而INSTR 2經(jīng)存儲(chǔ)單元對(duì)221-222發(fā)出。在如以上討論的那樣在行R1指令的發(fā)出之后,指令I(lǐng)NSTR 5和INSTR 6經(jīng)副隊(duì)列存儲(chǔ)單元對(duì)221-222發(fā)出。來自存儲(chǔ)單元對(duì)231-232的指令I(lǐng)NSTR 5和INSTR 6每個(gè)呈現(xiàn)年齡位=1。由于在特定行中的主發(fā)出隊(duì)列陣列指令在從該特定行以上的行接收的副隊(duì)列指令之前發(fā)出,所以在存儲(chǔ)單元對(duì)231-232中的指令I(lǐng)NSTR 5和INSTR 6經(jīng)存儲(chǔ)單元對(duì)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,在這個(gè)行中的所有指令都呈現(xiàn)年齡=1。而且,在相鄰副隊(duì)列存儲(chǔ)單元對(duì)241-242中的指令I(lǐng)NSTR 5-INSTR 6每個(gè)也呈現(xiàn)年齡=1。因而,按照?qǐng)D4A的流程圖的決定塊415和復(fù)位塊420,在決定塊415探測(cè)到這種情況之后的處理器周期中,所有年齡位復(fù)位到年齡=0。
現(xiàn)在參照在行R3和相鄰副隊(duì)列存儲(chǔ)單元251-252中的指令,在行R3中的指令I(lǐng)NSTR 2從行R4壓縮或向下流到行R3。因而,在行R3中的指令I(lǐng)NSTR 2呈現(xiàn)較年輕的年齡位=1。在副隊(duì)列存儲(chǔ)單元251-252中的指令I(lǐng)NSTR 5和INSTR 6從以上的行R4發(fā)出到存儲(chǔ)單元251-252。因而,在副隊(duì)列存儲(chǔ)單元251-252中的指令I(lǐng)NSTR 5和INSTR 6呈現(xiàn)較年輕的年齡位=1。當(dāng)行R1-R3填充有指令時(shí),發(fā)出控制狀態(tài)機(jī)202開始用提取的譯碼的指令填充行R4。發(fā)出控制狀態(tài)機(jī)202用呈現(xiàn)年齡位=0的具有從左到右優(yōu)先權(quán)的指令填充行R4。
圖5是流程圖,描繪了在插入控制狀態(tài)機(jī)500中的處理流程。插入控制狀態(tài)機(jī)500與在發(fā)出控制狀態(tài)機(jī)202中的其他狀態(tài)機(jī)合作,以控制在發(fā)出隊(duì)列204的存儲(chǔ)單元中的指令(也叫做輸入)的插入。在決定塊505處,插入控制狀態(tài)機(jī)500進(jìn)行測(cè)試,以確定發(fā)出隊(duì)列204是否是充滿的。如果發(fā)出隊(duì)列204是充滿的,則上部流水線按照塊510停住。上部流水線包括分發(fā)單元135、微碼單元150、MUX 145、譯碼器140、及依賴性檢查器155。決定塊505繼續(xù)測(cè)試,直到未占據(jù)的存儲(chǔ)單元出現(xiàn)在發(fā)出隊(duì)列204中,因而使發(fā)出隊(duì)列204不再充滿。發(fā)出隊(duì)列204可能包括多個(gè)未占據(jù)的存儲(chǔ)單元。插入控制狀態(tài)機(jī)500找到當(dāng)前不可壓縮的最高優(yōu)先權(quán)存儲(chǔ)單元。如果在該指令下面的行是充滿的,則存儲(chǔ)單元輸入或指令不可能是可壓縮的。按照塊520,插入控制狀態(tài)機(jī)500把進(jìn)來指令插入在塊515中找到的最高優(yōu)先權(quán)未占據(jù)的存儲(chǔ)單元。插入控制狀態(tài)機(jī)500用年齡位=0把如此存儲(chǔ)的指令標(biāo)記為有效。插入控制狀態(tài)機(jī)500然后在決定塊525處進(jìn)行另一種測(cè)試,以確定發(fā)出隊(duì)列204是否再次是充滿的。如果狀態(tài)機(jī)500發(fā)現(xiàn)發(fā)出隊(duì)列204是充滿的,那么上部流水線按照塊530停住。測(cè)試在決定塊525處繼續(xù),直到發(fā)出隊(duì)列204又包含至少一個(gè)未占據(jù)的存儲(chǔ)單元。在這種情況下,處理流程繼續(xù)到塊535,在該塊535處,狀態(tài)機(jī)500確定在發(fā)出隊(duì)列204中的次最高優(yōu)先權(quán)未占據(jù)的存儲(chǔ)單元。在一個(gè)實(shí)施例中,插入控制狀態(tài)機(jī)500把指令插入在主發(fā)出隊(duì)列陣列210的存儲(chǔ)單元中。在另一個(gè)實(shí)施例中,如果指令是準(zhǔn)備發(fā)出,則插入控制狀態(tài)機(jī)500可以把指令插入在最高優(yōu)先權(quán)副隊(duì)列存儲(chǔ)單元中。按照塊540,狀態(tài)機(jī)500然后把下個(gè)進(jìn)入指令插入在塊535中找到的次最高優(yōu)先權(quán)未占據(jù)的單元中。在完成這個(gè)任務(wù)之后,上部流水線按照塊545前進(jìn),并且處理流程繼續(xù)回到?jīng)Q定塊505,該塊505再次測(cè)試發(fā)出隊(duì)列204,以確定隊(duì)列204是否是充滿的。
圖6表示流程圖,描繪了在底部行發(fā)出控制狀態(tài)機(jī)600中的處理流程,該底部行發(fā)出控制狀態(tài)機(jī)600控制來自主發(fā)出隊(duì)列陣列210的底部行R1的指令的發(fā)出。狀態(tài)機(jī)600與準(zhǔn)備狀態(tài)機(jī)800合作,以確定在底部行R1中的指令是否準(zhǔn)備發(fā)出。狀態(tài)機(jī)600按照塊605穿過主發(fā)出隊(duì)列陣列210的底部行R1以年齡從左到右查找。決定塊610測(cè)試在底部行R1中的指令,以確定這些指令中的任意一個(gè)是否準(zhǔn)備發(fā)出。如果決定塊610發(fā)現(xiàn)特定底部行指令不準(zhǔn)備發(fā)出,那么查找按照塊605繼續(xù),直到?jīng)Q定塊610找到準(zhǔn)備發(fā)出的指令。如果決定塊610在查找所有底部行指令之后沒有找到準(zhǔn)備發(fā)出指令,那么狀態(tài)機(jī)600等待一個(gè)處理器周期,并且在塊605處查找再次開始。然而,一旦決定塊610在底部行R1中找到準(zhǔn)備發(fā)出,狀態(tài)機(jī)600就按照塊615把該指令移動(dòng)到兩個(gè)發(fā)出存儲(chǔ)單元221-222之一,即第一發(fā)出槽。發(fā)出存儲(chǔ)單元221-222也可以叫做發(fā)出槽。這些存儲(chǔ)單元或槽耦合到、并且把指令發(fā)出到最終執(zhí)行發(fā)出的指令的執(zhí)行單元。決定塊620執(zhí)行測(cè)試,以確定在底部行R1中的第二指令是否準(zhǔn)備發(fā)出。如果決定塊620未能找到這樣的第二指令準(zhǔn)備發(fā)出,那么處理流程為了另外查找繼續(xù)回到塊605。然而,如果決定塊620找到這樣一個(gè)第二指令準(zhǔn)備發(fā)出,那么決定塊625進(jìn)行測(cè)試,以確定這個(gè)第二指令是否與以前第一指令沖突。沖突是指,第二準(zhǔn)備發(fā)出指令要求與第一準(zhǔn)備發(fā)出指令相同的執(zhí)行單元,并因此,這種第二準(zhǔn)備發(fā)出指令不能在與第一準(zhǔn)備發(fā)出指令相同的處理器周期中發(fā)出。如果決定塊625找到這種沖突,那么處理流程為了在底部行R1中進(jìn)行更多查找繼續(xù)回到塊605。然而,如果決定塊625沒有找到這樣的沖突,那么狀態(tài)機(jī)600按照塊630把第二指令移動(dòng)到第二發(fā)出槽,即存儲(chǔ)單元222。然后處理流程繼續(xù)回到塊605,該塊605在底部行R1中進(jìn)行對(duì)于準(zhǔn)備發(fā)出指令的另外查找。在一個(gè)實(shí)施例中,在發(fā)出決定610和620之前,發(fā)生壓縮、插入和年齡更新。
圖7是流程圖,描繪了在上部行壓縮和副發(fā)出狀態(tài)機(jī)700中的處理流程。上部行包括在主發(fā)出隊(duì)列陣列210中除行R1之外的那些行。對(duì)于在特定上部行中的每個(gè)指令或輸入,狀態(tài)機(jī)700在緊接的下部行中查找未占據(jù)的單元。如果狀態(tài)機(jī)700在緊接的下部行中找到這樣一個(gè)未占據(jù)的單元,則狀態(tài)機(jī)700按照塊705指令主發(fā)出隊(duì)列陣列210把位于上方的輸入壓縮到該未占據(jù)的單元中。狀態(tài)機(jī)700也按照塊705把如此壓縮的所有輸入設(shè)置到年齡位=1,即較年輕。狀態(tài)機(jī)700然后在決定塊710處執(zhí)行測(cè)試,以確定這個(gè)下部行是否是充滿的。如果這個(gè)下部行不是充滿的,那么處理流程為了另外壓縮是否可能繼續(xù)回到塊705。然而,如果決定塊710發(fā)現(xiàn)這個(gè)下部行是充滿的,那么狀態(tài)機(jī)700按照塊715并行地從右到左以年齡查找所有行,以定位準(zhǔn)備發(fā)出指令。換句話說,狀態(tài)機(jī)700對(duì)于所有行同時(shí)進(jìn)行相同查找。如果這種查找沒有找到這樣的準(zhǔn)備發(fā)出指令,那么決定塊720為了壓縮活動(dòng)是否可能把處理流程送回到塊705。然而,如果查找發(fā)現(xiàn)準(zhǔn)備發(fā)出指令,那么決定塊720把處理流程送到塊725。塊725把準(zhǔn)備發(fā)出的指令移動(dòng)到副隊(duì)列215,它以后從該副隊(duì)列215發(fā)出。發(fā)出控制狀態(tài)機(jī)202在上述壓縮和發(fā)出決定之前,執(zhí)行到發(fā)出隊(duì)列204中的插入和指令年齡位更新。
圖8表示流程圖,描繪了確定特定指令是否是準(zhǔn)備發(fā)出的準(zhǔn)備狀態(tài)機(jī)800的處理流程。首先,準(zhǔn)備狀態(tài)機(jī)800按照塊805檢查當(dāng)前指令,以確定該指令是否呈現(xiàn)依賴性。如果決定塊805確定當(dāng)前指令不呈現(xiàn)依賴性,那么狀態(tài)機(jī)800按照塊810把當(dāng)前指令指定為準(zhǔn)備發(fā)出。然而,如果狀態(tài)機(jī)800確定當(dāng)前指令呈現(xiàn)依賴性,那么狀態(tài)機(jī)800按照塊815執(zhí)行依賴性更新。決定塊820然后進(jìn)行測(cè)試,以確定依賴性是否仍然存在。如果依賴性已不存在,那么狀態(tài)機(jī)800按照塊810把指令指定為準(zhǔn)備發(fā)出。然而,如果依賴性仍然存在,則狀態(tài)機(jī)800按照塊825把指令指定為不準(zhǔn)備發(fā)出。在等待一個(gè)處理器周期之后,狀態(tài)機(jī)800為了另外的依賴性測(cè)試把處理流程送回到?jīng)Q定塊805。
圖9是為了清楚起見在除去了在主發(fā)出隊(duì)列陣列210與副發(fā)出隊(duì)列215之間的連接的情況下的發(fā)出隊(duì)列204的簡(jiǎn)化表示。這種發(fā)出隊(duì)列表示提供了在隊(duì)列中的指令插入、在隊(duì)列內(nèi)的壓縮和從隊(duì)列發(fā)出的例子。注意,行R4與副隊(duì)列存儲(chǔ)單元對(duì)251-252相關(guān)。行R3與副隊(duì)列存儲(chǔ)單元對(duì)241-242相關(guān)。行R2與副隊(duì)列存儲(chǔ)單元對(duì)231-232相關(guān)。主發(fā)出隊(duì)列陣列210的底部行與發(fā)出指令存儲(chǔ)單元對(duì)221-222相關(guān)。當(dāng)發(fā)出控制狀態(tài)機(jī)202把指令放置在存儲(chǔ)單元對(duì)221-222中,這樣的指令直接轉(zhuǎn)到或發(fā)出到執(zhí)行這些指令的執(zhí)行單元。圖9把未被指令占據(jù)的所有存儲(chǔ)單元指示為VLD=0,即意味著在這個(gè)單元中的無效/無指令存在。包含指令的存儲(chǔ)單元(例如如在行R1的最左指令中看到那樣)包括指令號(hào)INSTR、年齡位AGE、準(zhǔn)備發(fā)出位RDY、及指令有效位VLD。指令在其RDY位=1時(shí)是準(zhǔn)備發(fā)出的。
如下討論在發(fā)出隊(duì)列204內(nèi)的代表性指令,以表明隊(duì)列的操作。行R1的指令I(lǐng)NSTR 3呈現(xiàn)準(zhǔn)備位RDY位=1,并因而準(zhǔn)備發(fā)出。由于INSTR 3也呈現(xiàn)年齡位=0,所以它在行R1中呈現(xiàn)最高優(yōu)先權(quán),作為在行R1中的最老的準(zhǔn)備發(fā)出的指令。因而,如虛線905指示的那樣,INSTR 3發(fā)出流到存儲(chǔ)單元221,它從該存儲(chǔ)單元221發(fā)出到適當(dāng)執(zhí)行單元。在行1中的剩余指令都呈現(xiàn)準(zhǔn)備位RDY位=0,指示它們還未準(zhǔn)備發(fā)出。因而,這些剩余指令在行R1中停住。在副隊(duì)列存儲(chǔ)單元232中的指令I(lǐng)NSTR 6呈現(xiàn)準(zhǔn)備位RDY位=1,并因而準(zhǔn)備發(fā)出。由于這個(gè)INSTR 6不與現(xiàn)在在存儲(chǔ)單元221中的指令相沖突,所以如虛線910指示的那樣,INSTR 6傳送到存儲(chǔ)單元222,它從該存儲(chǔ)單元222發(fā)出。
在主發(fā)出隊(duì)列陣列210的行R2中,所有指令呈現(xiàn)RDY位=0,因而指示沒有準(zhǔn)備發(fā)出。由于在行R2中的INSTR 1、INSTR 2、INSTR3及INSTR 4不準(zhǔn)備發(fā)出,那么這些存儲(chǔ)單元保持被占據(jù),因而阻止來自以上行,即行R3,的任何指令壓縮到行R2中。在副隊(duì)列215中,在存儲(chǔ)單元241中的INSTR 5呈現(xiàn)RDY位=1,并因而準(zhǔn)備發(fā)出。由于在單元241下面的單元231未被占據(jù)(VLD=0),所以來自存儲(chǔ)單元241的指令I(lǐng)NSTR 5壓縮或流到存儲(chǔ)單元231中,如由虛線915指示的那樣。
現(xiàn)在參照主發(fā)出隊(duì)列陣列210的行R3,在行R3的首先的兩個(gè)最左存儲(chǔ)單元保持未被占據(jù),因?yàn)閷?duì)于這些單元的每一個(gè)VLD=0。然而,指令I(lǐng)NSTR 3和INSTR 4占據(jù)行R3的兩個(gè)最右單元。這兩個(gè)指令的每一個(gè)呈現(xiàn)準(zhǔn)備位RDY位=1,并因而準(zhǔn)備發(fā)出。然而,由于在行R2中的4個(gè)指令阻止行R3指令壓縮到行R2中,所以行R3的INSTR 3和INSTR 4指令取而代之分別發(fā)出到副隊(duì)列215的存儲(chǔ)單元241和242中,如由虛線920和925指示的那樣。由于指令現(xiàn)在占據(jù)兩個(gè)副隊(duì)列存儲(chǔ)單元241和242,所以在兩個(gè)副隊(duì)列存儲(chǔ)單元251和252中的準(zhǔn)備發(fā)出指令I(lǐng)NSTR 5和INSTR 6停住,并且因此不立即流入存儲(chǔ)單元241和242中。
現(xiàn)在參照主發(fā)出隊(duì)列陣列210的最上方的行R4,指令I(lǐng)NSTR 1和INSTR 2每一個(gè)呈現(xiàn)RDY位=1。因而,這些指令的每一個(gè)準(zhǔn)備發(fā)出。由于行R3包括其中VLD=0的兩個(gè)未被占據(jù)的存儲(chǔ)單元,所以來自行R4的準(zhǔn)備發(fā)出指令I(lǐng)NSTR 1和INSTR 2壓縮或流到在行R3中的兩個(gè)未被占據(jù)存儲(chǔ)單元中,如由虛線930和935指示的那樣。發(fā)出控制狀態(tài)機(jī)202把發(fā)出隊(duì)列204接收的下兩個(gè)指令插入在行R4中的兩個(gè)未被占據(jù)存儲(chǔ)單元中,其中VLD=0,如由虛線940和945所指示。
圖10表示包括處理器100的信息處理系統(tǒng)(IHS)1000。IHS 1000還包括把處理器100耦合到系統(tǒng)存儲(chǔ)器1015和視頻圖形控制器1020上的總線1010。顯示器1025耦合到視頻圖形控制器1020上。非易失性存儲(chǔ)器1030,如硬盤驅(qū)動(dòng)器、CD驅(qū)動(dòng)器、DVD驅(qū)動(dòng)器、或其他非易失性存儲(chǔ)器,耦合到總線1010上,為IHS 1000提供信息的永久存儲(chǔ)。操作系統(tǒng)1035加載在存儲(chǔ)器1015中,以管理IHS 1000的操作。I/O裝置1040,如鍵盤和鼠標(biāo)點(diǎn)擊裝置,耦合到總線1010上。一根或多根擴(kuò)展總線1045,如USB、IEEE 1394總線、ATA、SATA、PCI、PCIE及其他總線,可以耦合到總線1010上,以利于外圍和裝置連接到IHS 1000上。網(wǎng)絡(luò)適配器1050耦合到總線1010上,以使IHS 1000能夠通過有線或無線地連接到網(wǎng)絡(luò)和其他信息處理系統(tǒng)上。盡管圖10表示一個(gè)采用處理器100的HIS,但HIS可以采取多種形式。例如,IHS 1000可以采取桌面、服務(wù)器、可攜帶、膝上型、筆記本、或其他形式因素計(jì)算機(jī)或數(shù)據(jù)處理系統(tǒng)的形式。IHS1000也可以采取其他形式因素,如個(gè)人數(shù)字助手(PDA)、游戲裝置、可攜帶電話裝置、通信裝置或包括處理器和存儲(chǔ)器的其他裝置。
以上公開了一種可以在處理器發(fā)出隊(duì)列中提供提高的吞吐量的處理器。
基于本發(fā)明的這種描述,本發(fā)明的修改和可選擇實(shí)施例對(duì)于本領(lǐng)域的技術(shù)人員將是顯然的。因而,這種描述向本領(lǐng)域的技術(shù)人員講授了實(shí)現(xiàn)本發(fā)明的方式,并且應(yīng)當(dāng)理解成僅是說明性的。表示和描述的本發(fā)明的形式構(gòu)成當(dāng)前實(shí)施例。本領(lǐng)域的技術(shù)人員可以在部分的配置、形狀和尺寸方面進(jìn)行各種變更。例如,本領(lǐng)域的技術(shù)人員可以用等效元件代替這里說明和描述的元件。而且,本領(lǐng)域的技術(shù)人員在具有本發(fā)明的這種描述的好處之后,可以獨(dú)立于其他特征的使用而使用本發(fā)明的特定特征,而不脫離本發(fā)明的范圍。
權(quán)利要求
1.一種操作處理器的方法,包括由指令提取器從存儲(chǔ)器提取指令,因而提供所提取的指令;由譯碼器對(duì)所提取的指令進(jìn)行譯碼,該譯碼器把所譯碼的指令提供給發(fā)出隊(duì)列;由發(fā)出隊(duì)列把譯碼的指令存儲(chǔ)在存儲(chǔ)單元行和列的矩陣中,用于亂序發(fā)出到執(zhí)行單元;以及由發(fā)出隊(duì)列確定該發(fā)出隊(duì)列是否被第一指令停住,該第一指令在該發(fā)出隊(duì)列的行之一中,并且不準(zhǔn)備發(fā)出,該發(fā)出隊(duì)列查找發(fā)出隊(duì)列的其他行,以定位準(zhǔn)備發(fā)出的第二指令。
2.根據(jù)權(quán)利要求1所述的方法,還包括在該第一指令保持在發(fā)出隊(duì)列中的同時(shí),通過發(fā)出隊(duì)列把該第二指令轉(zhuǎn)發(fā)到執(zhí)行單元而旁路該第一指令。
3.根據(jù)權(quán)利要求1所述的方法,其中存儲(chǔ)單元行包括相對(duì)于彼此遞歸配置的第一和第二行,第一行耦合到執(zhí)行單元上,該方法還包括當(dāng)未占據(jù)的存儲(chǔ)單元在第一行中出現(xiàn)時(shí),由發(fā)出隊(duì)列通過把在第二行中的指令首先傳送到第一行而使在第二行中的指令前進(jìn)到執(zhí)行單元。
4.根據(jù)權(quán)利要求3所述的方法,其中存儲(chǔ)步驟還包括存儲(chǔ)用于在發(fā)出隊(duì)列中的每個(gè)指令的年齡信息,該年齡信息指示在其中存儲(chǔ)指令的行中特定指令相對(duì)于其他指令的年齡。
5.根據(jù)權(quán)利要求4所述的方法,其中從第二行前進(jìn)到第一行的指令呈現(xiàn)比在第二行中的另一個(gè)指令更老的年齡。
6.根據(jù)權(quán)利要求3所述的方法,其中較接近第二行的一端的指令接收比在第二行中的其他指令更高的關(guān)于前進(jìn)到第一行的優(yōu)先權(quán)。
7.根據(jù)權(quán)利要求1所述的方法,其中確定步驟還包括檢查在發(fā)出隊(duì)列中的每個(gè)指令的依賴性,以確定每個(gè)指令是準(zhǔn)備發(fā)出還是不準(zhǔn)備發(fā)出。
8.根據(jù)權(quán)利要求1所述的方法,其中該發(fā)出隊(duì)列的存儲(chǔ)單元的矩陣包括耦合到執(zhí)行單元上的第一行,該發(fā)出隊(duì)列的每個(gè)剩余行經(jīng)該發(fā)出隊(duì)列的其他行耦合到第一行上,該方法還包括在當(dāng)指令發(fā)出以便執(zhí)行時(shí)存儲(chǔ)單元成為未被占據(jù)時(shí),使指令逐行向第一行前進(jìn)。
9.一種處理器,包括提取級(jí),適于從存儲(chǔ)器提取指令,以提供提取的指令;譯碼器,耦合到提取級(jí)上,該譯碼器對(duì)所提取的指令進(jìn)行譯碼;多個(gè)執(zhí)行單元;及發(fā)出隊(duì)列,耦合在譯碼器與多個(gè)執(zhí)行單元之間,包括存儲(chǔ)用于亂序發(fā)出到多個(gè)執(zhí)行單元的譯碼的指令的存儲(chǔ)單元行和列的矩陣,該發(fā)出隊(duì)列確定是否存在由在行之一中的不準(zhǔn)備發(fā)出的第一指令引起的停住,該發(fā)出隊(duì)列更深地查找發(fā)出隊(duì)列的其他行,以定位準(zhǔn)備發(fā)出的第二指令。
10.根據(jù)權(quán)利要求9所述的處理器,其中在該第一指令保持在發(fā)出隊(duì)列中的同時(shí),通過把該第二指令轉(zhuǎn)發(fā)到執(zhí)行單元,發(fā)出隊(duì)列旁路該第一指令。
11.根據(jù)權(quán)利要求9所述的處理器,其中存儲(chǔ)單元行包括相對(duì)于彼此遞歸配置的第一和第二行,該第一行的存儲(chǔ)單元耦合到多個(gè)執(zhí)行單元上,該發(fā)出隊(duì)列配置成,在該第二行中的存儲(chǔ)單元中的指令通過首先傳送到在該第一行中成為未被占據(jù)的存儲(chǔ)單元,而向發(fā)出前進(jìn)。
12.根據(jù)權(quán)利要求11所述的處理器,其中該發(fā)出隊(duì)列存儲(chǔ)用于該在發(fā)出隊(duì)列中的每個(gè)指令的年齡信息,該年齡信息指示在其中存儲(chǔ)指令的行中特定指令相對(duì)于其他指令的年齡。
13.根據(jù)權(quán)利要求12所述的處理器,其中從該第二行向發(fā)出前進(jìn)到該第一行的指令呈現(xiàn)比在該第二行中的另一個(gè)指令更老的年齡。
14.根據(jù)權(quán)利要求9所述的處理器,還包括耦合到該發(fā)出隊(duì)列上的依賴性檢查器,該檢查器檢查每個(gè)譯碼的指令的依賴性,以確定每個(gè)譯碼的指令是否準(zhǔn)備發(fā)出。
15.根據(jù)權(quán)利要求9所述的處理器,其中該發(fā)出隊(duì)列的存儲(chǔ)單元的矩陣包括耦合到多個(gè)執(zhí)行單元上的第一行,該發(fā)出隊(duì)列的每個(gè)剩余行經(jīng)發(fā)出隊(duì)列的其他行耦合到該第一行上,該處理器還在當(dāng)指令發(fā)出以便執(zhí)行時(shí)存儲(chǔ)單元成為未占據(jù)時(shí),使指令逐行向第一行前進(jìn)。
16.一種信息處理系統(tǒng)(HIS),包括一種處理器,包括提取級(jí),適于從存儲(chǔ)器提取指令,以提供所提取的指令;譯碼器,耦合到提取級(jí)上,該譯碼器譯碼提取的指令;多個(gè)執(zhí)行單元;發(fā)出隊(duì)列,耦合在譯碼器與多個(gè)執(zhí)行單元之間,包括存儲(chǔ)用于亂序發(fā)出到多個(gè)執(zhí)行單元的譯碼的指令的存儲(chǔ)單元行和列的矩陣,該發(fā)出隊(duì)列確定是否存在由在行之一中的不準(zhǔn)備發(fā)出的第一指令引起的停住,該發(fā)出隊(duì)列更深地查找發(fā)出隊(duì)列的其他行,以定位準(zhǔn)備發(fā)出的第二指令;以及存儲(chǔ)器,耦合到處理器上。
17.根據(jù)權(quán)利要求16所述的IHS,其中在該第一指令保持在該發(fā)出隊(duì)列中的同時(shí),通過把該第二指令轉(zhuǎn)發(fā)到執(zhí)行單元,該發(fā)出隊(duì)列旁路該第一指令。
18.根據(jù)權(quán)利要求16所述的IHS,其中存儲(chǔ)單元行包括相對(duì)于彼此遞歸配置的第一和第二行,該第一行的存儲(chǔ)單元耦合到多個(gè)執(zhí)行單元上,該發(fā)出隊(duì)列配置成,在該第二行中的存儲(chǔ)單元中的指令通過首先傳送到在第一行中成為未被占據(jù)的存儲(chǔ)單元,而向發(fā)出前進(jìn)。
19.根據(jù)權(quán)利要求18所述的IHS,其中該發(fā)出隊(duì)列存儲(chǔ)用于在該發(fā)出隊(duì)列中的每個(gè)指令的年齡信息,該年齡信息指示在其中存儲(chǔ)指令的行中特定指令相對(duì)于其他指令的年齡。
20.根據(jù)權(quán)利要求19所述的IHS,其中從該第二行向發(fā)出前進(jìn)到該第一行的指令呈現(xiàn)比在該第二行中的另一個(gè)指令老的年齡。
全文摘要
一種信息處理系統(tǒng)包括不按程序順序發(fā)出指令的處理器。處理器包括發(fā)出隊(duì)列,即使在隊(duì)列中的某些指令不準(zhǔn)備發(fā)出,該發(fā)出隊(duì)列也可以使指令向發(fā)出前進(jìn)。發(fā)出隊(duì)列包括以行和列配置的存儲(chǔ)單元的矩陣,包括耦合到多個(gè)執(zhí)行單元上的第一行。當(dāng)未被占據(jù)存儲(chǔ)單元出現(xiàn)時(shí),指令逐行向發(fā)出前進(jìn)。當(dāng)指令向第一行前進(jìn)時(shí)并且在發(fā)出時(shí),未被占據(jù)單元出現(xiàn)。當(dāng)特定行包括不準(zhǔn)備發(fā)出的指令時(shí),對(duì)于該指令停住情況出現(xiàn)。然而,為了防止整個(gè)發(fā)出隊(duì)列和處理器停住,在另一行中的準(zhǔn)備發(fā)出指令可以旁路包括停住的或不準(zhǔn)備發(fā)出指令的行。到執(zhí)行單元的指令的亂序發(fā)出因而繼續(xù)。
文檔編號(hào)G06F9/38GK1940862SQ20061015389
公開日2007年4月4日 申請(qǐng)日期2006年9月14日 優(yōu)先權(quán)日2005年9月27日
發(fā)明者喬納森·詹姆斯·德門特, 克里斯托弗·邁克爾·阿伯內(nèi)西, 庫爾特·艾倫·費(fèi)斯特, 戴維·希派 申請(qǐng)人:國際商業(yè)機(jī)器公司