專利名稱:多執(zhí)行單元的指令相關(guān)調(diào)度技術(shù)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明主要涉及帶有多執(zhí)行單元的處理系統(tǒng)中的指令調(diào)度技術(shù)。更具體地說,本發(fā)明提供了一種帶有多指令緩沖區(qū)的系統(tǒng),其中,指令被定義為相關(guān)的、非相關(guān)的或依賴于不可獲得的資源的。這些指令按照其定義以及與其它指令的關(guān)系,或者順序執(zhí)行,或者并行執(zhí)行。
在處理系統(tǒng)中設置多執(zhí)行單元的技術(shù)已眾所周知。傳統(tǒng)的絕大多數(shù)系統(tǒng)都包括多個特殊用途的執(zhí)行單元,以完成諸如加、存數(shù)、取數(shù)、減、乘、分支跳轉(zhuǎn)以及類似操作。為了解決指令相關(guān)的問題,傳統(tǒng)系統(tǒng)將特定的指令放置于與對應的特殊用途執(zhí)行單元相關(guān)聯(lián)的緩沖區(qū)中。例如,一條取數(shù)操作指令將被放置于與取數(shù)執(zhí)行單元相關(guān)聯(lián)的緩沖區(qū)中,等等。如果出現(xiàn)了指令相關(guān),傳統(tǒng)系統(tǒng)所做的僅是將后面的那條依賴于前面指令輸出的指令掛起。一旦前面的指令執(zhí)行完畢后,后面的這條相關(guān)指令就可以在特定的執(zhí)行單元中執(zhí)行了。應當注意到,在傳統(tǒng)的系統(tǒng)中,指令可能在與不同執(zhí)行單元相關(guān)聯(lián)的不同緩沖區(qū)之間移位。但是這種移位依賴于指令的類型與可執(zhí)行該類型指令的特定執(zhí)行單元之間的關(guān)系。也就是說,一條取數(shù)指令可以移位到與取數(shù)執(zhí)行單元相關(guān)聯(lián)的緩沖區(qū)中。另外,使用先前的這種技術(shù),多處理單元系統(tǒng)通常不按次序執(zhí)行指令,而本發(fā)明則能夠保持指令之間的次序關(guān)系。
美國專利5,133,077介紹了多重相異的執(zhí)行,每種執(zhí)行只負責特定類型的指令。因而,每條指令都必須按照指令類型,存貯于與某一執(zhí)行單元相關(guān)聯(lián)的特定緩沖區(qū)中。這些指令不能移位到與另外執(zhí)行單元相關(guān)聯(lián)的另外一個緩沖區(qū)中,這是因為它們被限定于某種類型的執(zhí)行單元。這樣,當指令相關(guān)情況出現(xiàn)時,這種系統(tǒng)別無選擇,只有掛起后面的相關(guān)指令,直到該指令所依賴的前面那條指令執(zhí)行完畢為止。
美國專利4,837,678討論了一種具有指令序列器的系統(tǒng),含有移位電路的指令序列器用于接受指令并將它們移位,這種移位取決于指令的類型以及要求哪個執(zhí)行單元來執(zhí)行該指令(第8-30行,第11列),而不是指令間的相關(guān)。
美國專利4,847,755介紹的系統(tǒng)中,具有多個用于分析指令流并給指令流增加智能化成分的處理器單元。例如,該系統(tǒng)尋找自然并發(fā)性(非相關(guān)指令)并為每條指令增加一些智能化成分,其中包括一個邏輯處理器號和一個指令執(zhí)行時刻(第54-60行,第17列),這實質(zhì)上是在對指令進行重排序的工作。然后(第10-25行,第18列),邏輯資源驅(qū)動器將每條指令發(fā)送到選定的處理單元。
美國專利5,075,840討論了一種可以不按次序執(zhí)行指令的多處理器的系統(tǒng)。這個系統(tǒng)能夠延遲執(zhí)行某種特定類型的指令,直到它可以在其適當?shù)男蛄许樞蛑袌?zhí)行為止。
可以看出,所有的傳統(tǒng)系統(tǒng)都沒有提供一種通用的方法以實現(xiàn)在具有多處理單元的系統(tǒng)中既能執(zhí)行相關(guān)指令,又能保持所有指令的順序。許多傳統(tǒng)的系統(tǒng)由于不按次序執(zhí)行指令,從而需要一個復雜的分支跳轉(zhuǎn)機構(gòu),這就大大增加了處理系統(tǒng)的復雜性。正因為如此,通過保持指令的順序,本發(fā)明減小了系統(tǒng)開銷,從而優(yōu)化了系統(tǒng)性能,例如,可以決定何時發(fā)生一個分支跳轉(zhuǎn)。如果一個處理器能工作在多種不同類型的計算機系統(tǒng)中,指令的分析和執(zhí)行僅取決于它們與其它指令的依賴關(guān)系,而不是執(zhí)行單元的能力,那么,這樣的處理器將是十分優(yōu)越的。
與先前的技術(shù)不同,本發(fā)明提出的系統(tǒng)中,指令在譯碼階段被分析,然后系統(tǒng)決定這些指令是否為非相關(guān)的、相關(guān)的、還是“不可利用的”(unavailable)。對本發(fā)明來說,相關(guān)的指令被定義為依賴于相鄰的上一條指令的那些指令。有些指令依賴于某個資源的值是否可用,例如一個寄存器的值,這種指令被定義為“不可利用”,在某些情況下,本發(fā)明可以將這種指令看做是非相關(guān)的,并可以將它們并行移位(但不是不按次序的)。當然,完全不相關(guān)的指令是并行執(zhí)行的。
概括地說,本發(fā)明提出了一種雙執(zhí)行單元處理系統(tǒng),其中,每個執(zhí)行單元帶有一個與之相關(guān)聯(lián)的指令緩沖區(qū)。第1個執(zhí)行單元(單元0)總是包含最“老”的指令,第2個執(zhí)行單元(單元1)則包含最“新”的指令。系統(tǒng)將把處理器指令,諸如取數(shù)、存數(shù)、加和類似指令從指令高速緩沖區(qū)中取到每個指令緩沖區(qū)(0,1)中。第1條指令(最“老”的)存于緩沖區(qū)0中,下一條(第2條)指令存于緩沖區(qū)1中。在譯碼階段,系統(tǒng)判斷這些指令是否是相關(guān)的、非相關(guān)的、或是“不可利用的”,如果是相關(guān)的,那么必須依次執(zhí)行;如果是非相關(guān)的或是“不可利用的”,那么可以并行執(zhí)行。如果第2條指令依賴于第1條,那么(隨著所執(zhí)行的第1條指令)第2條指令將從緩沖區(qū)1中橫向移位到第1個指令緩沖區(qū)0中。這種移位完全取決于第2條指令對第一條指令的依賴性。被移位的指令變成了第1條指令,同時,第2個指令緩沖區(qū)中又接收了一條新的“第2條”指令。應該注意到,所有的指令都將按順序執(zhí)行。如果遇到許多順序相關(guān)的指令,那么,它們將只在執(zhí)行單元0中順序地執(zhí)行。換句話說,系統(tǒng)將發(fā)現(xiàn)前兩條指令是相關(guān)的,于是將它們放在兩個指令緩沖區(qū)中;由于第2個緩沖區(qū)中的指令依賴于第1個中的指令,當?shù)?條指令執(zhí)行完畢后,第2條指令將被移位到第1個指令緩沖區(qū)中,于是,下一條指令將被放到第2個緩沖區(qū)1中,如果該指令仍是一條相關(guān)指令,它又將在前條指令執(zhí)行完畢后,被移位到第1個緩沖區(qū)中…,如此進行下去。如果下一條指令是非相關(guān)的,那么,兩條指令將在第1個和第2個執(zhí)行單元中并行執(zhí)行。采用這種方式,處理器指令能夠有效地執(zhí)行。執(zhí)行的順序取決于指令間的相關(guān)性,而不是執(zhí)行單元的能力。
因此,依據(jù)上面的概要說明,對于在這個技術(shù)領(lǐng)域具有一定技術(shù)的人來說,從下面與附圖有關(guān)的描述、所附的權(quán)利要求中可以明顯看到本發(fā)明的目標、特點和優(yōu)點。
圖1所示的結(jié)構(gòu)框圖顯示了采用本發(fā)明的多執(zhí)行單元處理器中的各組成部分;圖2是關(guān)于本發(fā)明的一個更詳細的圖示,它示意了與每個執(zhí)行單元相關(guān)聯(lián)的指令緩沖區(qū)以及指令流的路徑;圖3a和3b所示的流程圖顯示了本發(fā)明的一個較佳實施例,其中,依照各種判別條件,第1條和第2條指令將作為相關(guān)的指令;圖4所示的時序圖顯示了本發(fā)明執(zhí)行相關(guān)和非相關(guān)指令所需要的機器周期數(shù)的一個示例。
參看圖1,該圖在一個較高的層次上顯示了在本發(fā)明的多執(zhí)行處理器中的各組成部分。1號部件表示一個從指令總線A、B、C、D接收指令的指令緩沖區(qū),指令緩沖區(qū)是一個存貯設備,例如人們熟悉的硬件存貯器。寄存器堆輸入鎖存器10從一個與系統(tǒng)存貯器(未畫出)相連的雙端口高速數(shù)據(jù)緩沖區(qū)(未畫出)中接收數(shù)據(jù)。應該注意到,雖然帶有多于兩個執(zhí)行單元的處理系統(tǒng)也可以考慮,本發(fā)明的較佳實施例是一個具有兩個執(zhí)行單元的處理器,譯碼控制單元3和5(分別對應于執(zhí)行單元0和1)用來解釋從指令緩沖區(qū)1中接收到的指令。譯碼控制單元3和5能夠識別諸如取數(shù)、存數(shù)、加或類似的指令。譯碼單元3和5分別擁有一個相應的寄存器堆7和9,寄存器堆7、9從輸入鎖存器10中接收數(shù)據(jù),該數(shù)據(jù)或者直接來自高速數(shù)據(jù)緩沖區(qū)總線36,或來自回寫數(shù)據(jù)線35。譯碼單元3、5根據(jù)從緩沖區(qū)1中接收到的指令向寄存器7、9提供讀/寫控制信號。這些控制信號決定那些數(shù)據(jù)應該從輸入鎖存器10寫入寄存器堆7、9,以及哪些數(shù)據(jù)應從寄存器堆7、9中讀至執(zhí)行單元輸入鎖存器11中。從圖1中可以看出,寄存器堆7允許從輸入寄存器中寫入4個字的數(shù)據(jù),由執(zhí)行單元鎖存器11從中讀出3個字的數(shù)據(jù)。寄存器堆9則允許從輸入寄存器堆10中寫入4個字的數(shù)據(jù),由執(zhí)行單元鎖存器11從中讀出4個字的數(shù)據(jù)。
需要說明的是,本發(fā)明是用譯碼控制單元3和5中的布爾邏輯實現(xiàn)的。該邏輯用于解釋指令,并決定是將一條還是兩條指令移位到執(zhí)行單元17和19。在這個技術(shù)領(lǐng)域具有一般水平的人可以將圖3a和3b流程圖所示的本發(fā)明邏輯流程轉(zhuǎn)化成由本發(fā)明中譯碼單元3和5實現(xiàn)的硬件邏輯。
在本技術(shù)領(lǐng)域有相當技術(shù)的人還可以認識到,本發(fā)明是一個流水線結(jié)構(gòu)的處理器。這意味著,數(shù)據(jù)在不同的階段被鎖存或保持。按照這種方法,指令的執(zhí)行結(jié)果等數(shù)據(jù)將以某種方式保存起來,以保證不同的指令可以并發(fā)地輸入到處理系統(tǒng)中。這樣,就有可能使處理器中通過連續(xù)的數(shù)據(jù)流。執(zhí)行單元輸入鎖存器先保持由寄存器堆7和9提供的數(shù)據(jù),然后才將數(shù)據(jù)輸入到實際的執(zhí)行單元。在執(zhí)行單元輸入鎖存器11中還包含了多路轉(zhuǎn)換器(未畫出),它可以復合從高速數(shù)據(jù)緩沖區(qū)總線36上接收到的數(shù)據(jù)信號,這樣數(shù)據(jù)就可以走旁路到達執(zhí)行單元了。應該注意到,寄存器堆輸入鎖存器10也包含多路轉(zhuǎn)換器,它用于復合來自高速數(shù)據(jù)緩沖區(qū)總線36和回寫總線35上的數(shù)據(jù)。
執(zhí)行單元17和19都是全功能單元,可以執(zhí)行多個指令。這些單元可以是相同的,但本發(fā)明對此限制并不要求。在較佳實施例中,單元17和19并不是相同的,只是兩個全功能執(zhí)行單元。它們之間的不同之處在于其中的一個可以處理幾條專用指令的特定要求。執(zhí)行單元17包含一個用于執(zhí)行加法操作的二端口加法器21,和一個用于執(zhí)行諸如循環(huán)移位以及類似指令的邏輯單元23。執(zhí)行單元19包含一個三端口加法器25和一個邏輯單元27。三端口加法器25可以縮短諸如取數(shù)、存數(shù)、比較等加法類型指令所需要的機器周期數(shù),其原因在于,在決定哪些指令可以并行執(zhí)行時,本發(fā)明能將所有加類型的指令都作為非相關(guān)指令看待。在以前的系統(tǒng)中,加法類型的指令被認為是相關(guān)的,也就是說,第2條指令必須等待第1條指令執(zhí)行完畢后方可執(zhí)行。例如,指令(1)ADD R1,R2,R3和(2)ADD R5,R1,R4典型地用于將寄存器堆R2,R3中的值相加,并將新得到的值放在寄存器堆R1中。下一條指令必須等待新的值已放在寄存器堆R1中,這是因為該值將與寄存器堆R4中的值相加,以得到所需的結(jié)果,該結(jié)果隨后被放到寄存器堆R5中??梢钥闯觯罱K的結(jié)果實際上是寄存器堆R2、R3、R4中的值的和。為完成此操作,傳統(tǒng)的系統(tǒng)需要付出兩個機器周期來執(zhí)行兩條指令。
相反,通過引入一種機制,本發(fā)明可以在一個機器周期內(nèi)完成與上面相同的操作,這種機制就是允許將加法指令看做是非相關(guān)的,因而可以并行執(zhí)行。仍然采用上面的例子,當指令ADD R1,R2,R3和ADD R5,R1,R4被譯碼單元3和5譯碼后,它們將被解釋為ADDR1,R2,R3和ADD R5,R2,R3,R4,即,相關(guān)的指令被拆解成了非相關(guān)的指令。其中R2、R3的值將用來替換第2條指令中R1的值。第1條指令ADD R1,R2,R3仍然需要執(zhí)行,這是因為存于寄存器堆R1中的值有可能被除了下一條加法指令(ADD R5,R2,R3,R4)以外的指令所需要。進一步,由于加法器25有三個端口,所以這兩條指令可以同時執(zhí)行。也就是說,ADD R1,R2,R3在二端口加法器21中執(zhí)行,ADD R5,R2,R3,R4并發(fā)在三端口加法器25中執(zhí)行。采用這種方法,本發(fā)明可以將加法類型的指令定義為與任何其它指令都不相關(guān)。
圖中還給出了執(zhí)行控制單元13和15,它們從譯碼單元3、5中接收譯碼后的指令,并將之以控制信號的形式分別輸入到執(zhí)行單元17和19。在單元17和19執(zhí)行取數(shù)和存數(shù)指令的期間,加法器21和25為需要處理的數(shù)據(jù)計算有效地址(也就是所引用數(shù)據(jù)在高速緩沖區(qū)中的位置),它們也為存數(shù)指令計算數(shù)據(jù)值本身。然后,該有效地址傳輸?shù)诫p端口的數(shù)據(jù)地址翻譯邏輯單元33,該單元將先前從執(zhí)行單元計算出來的有效地址翻譯成物理地址(也就是數(shù)據(jù)在內(nèi)存中的位置)。數(shù)據(jù)將從總線36上的高速數(shù)據(jù)緩沖區(qū)返回并輸入寄存器堆輸入鎖存器10中,也有可能走旁路到達執(zhí)行單元輸入鎖存器11(經(jīng)過高速數(shù)據(jù)緩沖區(qū)總線36)。對于其它類型的在處理器中處理數(shù)據(jù)的指令,例如加法指令,從執(zhí)行單元17、19計算出的數(shù)據(jù)將輸入到寄存器堆輸入鎖存器10中,也可能走旁路到達執(zhí)行單元輸入鎖存器11(經(jīng)過回寫總線35)。
圖2是關(guān)于圖1中指令緩沖區(qū)1的更詳細的說明。指令總線A、B、C和D從一個高速指令緩沖區(qū)單元或類似的單元中將指令輸入到總線8,該總線將指令直接傳輸?shù)綄嶋H的指令緩沖區(qū)14中,該緩沖區(qū)是一個先進先出的硬件存貯設備。指令輸出緩沖區(qū)2和4或者直接從總線8,或者通過總線12從緩沖區(qū)14接收指令。指令緩沖區(qū)2和4分別對應于執(zhí)行單元17和19。進一步,圖中還提供了一條總線6用以在緩沖區(qū)2和4之間移位或傳輸指令。由于本發(fā)明的較佳實施例包含兩個全功能的處理單元,為使指令在單元17或19中執(zhí)行,系統(tǒng)可以將它們在輸出緩沖區(qū)2和4之間移位。這個功能的重要性將在下面結(jié)合圖3a和3b做詳細說明。將要執(zhí)行的指令接著從緩沖區(qū)2和4中輸出到譯碼控制單元3和5。
圖3a和3b顯示了本發(fā)明定義的指令之間的關(guān)系。一類指令被定義為與前面的、而非緊鄰的指令相關(guān)。也就是說,通過一條LOAD指令從內(nèi)存中取出的一個值可能被幾個機器周期以后執(zhí)行的后續(xù)指令所用到。例如,假定遇到下面的指令(1)LOAD R1,R31,R30(2)ADD R4,R3,R2(3)ADD R5,R1,R2第1條指令(1)取一個值放到寄存器堆R1中。通過R31和R30相加計算出內(nèi)存中的有效地址,在該計算得到該地址處的數(shù)據(jù)被取至R1。下一步,指令(2)把寄存器堆R3和R2中的值相加,并把結(jié)果放到寄存器堆R4中。指令(3)接著將使用先前取到寄存器堆R1中的值,把該值與寄存器堆R2的值相加,然后將結(jié)果放到寄存器堆R5中??梢钥闯鰜恚噶?3)依賴于某個可能無法利用的資源(寄存器堆R1)中的值,也就是說,要取到寄存器堆R1中的值可能來自系統(tǒng)內(nèi)存,而這要花費許多機器周期。
本發(fā)明將那些依賴于前面的非緊鄰指令的指令定義為“不可利用的”,這是因為這種指令依賴于一個潛在的、不可利用的資源(寄存器堆)。系統(tǒng)允許這些“不可利用的”的指令并行地移動到執(zhí)行單元17和19中,就象它們是非相關(guān)的一樣。但是在下面將要詳細講到,存在另外的一些情況,例如一條“不可利用的”的指令出現(xiàn)在一條相關(guān)指令之前,指令必須按順序執(zhí)行,等等。這些“不可利用的”的指令與相關(guān)的指令都被認為是數(shù)據(jù)相關(guān)的指令,也就是具有某種類型數(shù)據(jù)相關(guān)的指令,它或者與緊相鄰的上一條指令相關(guān),或者與前面的其它指令相關(guān)。
因而,按照本發(fā)明,所有的指令被劃分為(1)非相關(guān)的;(2)相關(guān)的;或者(3)不可利用的。本發(fā)明提供了一種機制用以決定這些指令中的哪些組合可以在執(zhí)行單元17和19中同時執(zhí)行,哪些指令必須順序執(zhí)行。指令被成對地送到指令單元緩沖區(qū)2和4中,第一條指令被送到指令緩沖區(qū)0(2號部件),第二條指令被送到緩沖區(qū)1(4號部件)。采用這種方式,所有的指令或者順序地每次執(zhí)行一條;或者并行地執(zhí)行,同時保持原來的順序。能夠保持順序的原因在于,最“老”的指令總是放在指令緩沖區(qū)2中,且被認為先于緩沖區(qū)4中的指令執(zhí)行。如前所述,相關(guān)的指令只定義為與相鄰的上一條指令相關(guān)的、且不使用三端口加法器的指令。對于本發(fā)明來說,使用三端口加法器的加法指令被認為是非相關(guān)的。非相關(guān)的指令指那些不需要使用任何由上一條指令產(chǎn)生或使用的結(jié)果、值、數(shù)據(jù)、資源等等的指令?!安豢衫玫摹敝噶钪干厦娑x的那些依賴于前面非緊鄰指令的指令。
上面提到過,流程圖3a和3b描述了前面所定義指令的執(zhí)行過程。按照本發(fā)明,這個執(zhí)行過程有效地利用了雙執(zhí)行單元17和19。首先,我們將大致地說明一下該過程,然后將舉一個使用前面所定義的常用指令的具體例子。進一步,本文將繼續(xù)說明系統(tǒng)中有兩個執(zhí)行單元的情況,然而,應該注意到,本發(fā)明可以考慮帶有其它不同數(shù)目執(zhí)行單元的處理系統(tǒng)。
第1步開始執(zhí)行過程。在第2步,判斷執(zhí)行單元17和19是否都可用,如果不是,系統(tǒng)將保持在第3步,直到兩個單元都可用為止。一旦兩個單元都可用,系統(tǒng)接著在第4步判斷在指令流中(來自圖2中的指令緩沖區(qū)2和4)的第1和第2條指令是否都是非相關(guān)指令,或都是相關(guān)指令。如果兩條指令都是非相關(guān)指令,那么兩條指令都移位到機器中,在單元3和5中譯碼,然后在執(zhí)行單元17和19中同時執(zhí)行(第8步)。如果第一條和第二條指令不都是非相關(guān)指令,那么本過程進行到第5步,該步判斷第一條和第二條指令是否都是因某種原因被掛起的。這種情況發(fā)生于需要使用某寄存器的內(nèi)容但還不可能馬上得到的時候。這種類型的指令不依賴于相鄰上一條指令的輸出結(jié)果,而是依賴于被定義為“不可利用的”某些指令或資源。如果第一條和第二條指令都是“不可利用的”,那么這兩條指令都將在第8步移位,這是因為,不管指令處于什么位置(在指令緩沖區(qū)中或在譯碼單元中),系統(tǒng)都需要等待這些指令所需要的那些“不可利用的”資源成為可以使用的。所以,“不可利用的”指令可以被移位到執(zhí)行單元17和19中,以允許新的指令移進緩沖區(qū)2和4中。
如果第一條指令依賴于一個“不可利用的”寄存器堆,而第二條指令是非相關(guān)的(第6步),那么這兩條指令都將在第8步移位到執(zhí)行單元。本發(fā)明允許兩條指令在此情況下被移位的原因在于,那條“不可利用的”指令被移位到執(zhí)行單元17等待獲取所需要的數(shù)據(jù),而非相關(guān)的指令則可以在執(zhí)行單元14中等待,直到“不可利用的”指令就緒為止,然后這兩條指令將并行執(zhí)行。然而,如果第一條指令不是“不可利用的”,或者第二條指令不是非相關(guān)的,那么本發(fā)明的指令執(zhí)行過程將進行到第7步,該步將判斷是否第一條指令是非相關(guān)的,以及第2條指令是“不可利用的”。在第7步只移動一條指令,這是因為有必要將那條“不可利用的”指令移動到指令緩沖區(qū)2中,如果緊跟那條“不可利用的”指令其后的指令是一條非相關(guān)或“不可利用的”的指令,那么,在下個機器周期,可以同時移位兩條指令。同時,由于本發(fā)明按順序執(zhí)行指令,因而使指令緩沖區(qū)4處于就緒接收下一條指令的狀態(tài)將是大有好處的。也就是說,如果系統(tǒng)不得不在一條“不可利用的”指令執(zhí)行之前等待的話,那么應該將這條指令放在緩沖區(qū)2中等待,這條指令將作為下一條要執(zhí)行的指令,這種做法是非常有效的。這樣,一條后繼的指令可以被移動到指令緩沖區(qū)4中,從而避免在流水線中產(chǎn)生一個“氣泡”。在資源可以利用后,如果機器必須將“不可利用的”指令橫向移位到緩沖區(qū)2中,那么此時將浪費一個機器周期。這樣,在“不可利用的”指令從緩沖區(qū)4移位到了緩沖區(qū)2中以后,下一條指令就可以放到緩沖區(qū)4中,因而保證了一個連續(xù)的指令流。
如果第7步的條件被滿足,那么,執(zhí)行過程進行到第11步。該步移位一條指令到機器中譯碼并執(zhí)行。應該說明的是,移位一條指令表示將指令緩沖區(qū)2中的指令移位到執(zhí)行單元17,以及將指令緩沖區(qū)4中的指令移位到指令緩沖區(qū)2中;移位兩條指令表示將指令緩沖區(qū)2和4中指令同時移位到執(zhí)行單元17和19中。然而,如果第1條指令不是非相關(guān)的,并且第2條指令不是“不可利用的”,那么,第9步判斷是否第1條指令是非相關(guān)的且第2條指令是相關(guān)的。如果是,執(zhí)行過程進行到第11步,該步將非相關(guān)的指令移位到機器中(從緩沖區(qū)2移位到執(zhí)行單元17)并執(zhí)行之,以及將相關(guān)的指令從指令緩沖區(qū)4中移位到指令緩沖區(qū)2中。應該注意到,這條相關(guān)的指令此時依賴于一條已經(jīng)執(zhí)行的指令,于是系統(tǒng)將不再將它當作相關(guān)指令看待。接著第11步往后,執(zhí)行過程將返回到第2步進行下一輪循環(huán),此時,另外一條指令(第二條)將由總線8或緩沖區(qū)14中提供,這兩條指令將按照第2、4-7、9和10步的判別條件被判斷和處理。
如果在第9步,系統(tǒng)判斷出第一條指令不是非相關(guān)的且第二條不是相關(guān)的,那么在第10步將判斷是否第一條指令為“不可利用的”且第二條指令為相關(guān)的。如果是,執(zhí)行過程進行到第11步,該步將第一條指令送至機器,將第二條指令移位到第一個指令輸出緩沖區(qū)(移位1條指令)。
可以看得出,本發(fā)明的判斷結(jié)構(gòu)(第4-10步)如何處理每種定義類型的指令,以確保最大數(shù)目的指令可以并行執(zhí)行,同時也順序執(zhí)行。
下面,使用了一個典型的指令序列作為本發(fā)明工作過程的例子。假設,緩沖區(qū)1從總線A、B、C、D中接收了下面的指令
(1)LOAD R1,R31,R30(2)LOAD R2,R29,R30(3)ADD R22,R20,R21(4)ADD R24,R22,R23(5)ADD R3,R1,R2(6)LOAD R6,R2,R22(7)LOAD R25,R28,R29(8)ADD R8,R6,R7(9)LOAD R9,R27,R28(10)LOAD R10,R31,R30(11)ADD R11,R9,R3(12)OR R11,R11,R20(13)ADD R13,R11,R12開始兩條指令(1)和(2)被放到了緩沖區(qū)2和4中。這兩條指令分別根據(jù)由寄存器堆R31、R30和R29、R30計算得到的地址取出兩個值放在寄存器堆R1和R2中。由于指令(1)和(2)不依賴于任何其它指令,因而它們是非相關(guān)的,于是按照圖3a中的第4步,它們都同時被移動到執(zhí)行單元17和19中(移位2條指令)。指令(3)和(4)接著被分別放到緩沖區(qū)2和4中。指令(3)是一條加法指令,它將寄存器堆R20和R21中的值相加,并把結(jié)果放到寄存器堆R22中。指令(4)也是一條加法操作,它使用了位于其前的加法指令(3)的結(jié)果,也即,將R22中的值與R23中的值相加,結(jié)果放在寄存器堆R24中。指令(3)和(4)對寄存器堆R20,R21,R23中的值進行了求和。因為本發(fā)明提供了三端口的加法器25,這兩條指令被認為是非相關(guān)的,因而在本發(fā)明中被移位到執(zhí)行單元17和19中并行執(zhí)行(圖3a的第4步)。
指令(5)和(6)接著分別被移動到緩沖區(qū)2和4中。指令(5)是一條加法指令,它依賴于指令(1)和(2),而這兩條指令均不是指令(5)的相鄰上一條指令,于是,指令(5)被認為是“不可利用的”。指令(6)是一條取數(shù)指令,其有效地址依賴于寄存器堆R2和R22中的值。這兩個值不受上一條指令(5)的影響。但是,R2依賴于指令(LOADR2),因而指令(6)也被認為是“不可利用的”。按照本發(fā)明(圖3a中的第5步),兩條“不可獲得的”指令均被移位到執(zhí)行單元17和19,在那里等待訪問不可利用的數(shù)據(jù)。這樣,下兩條指令就可以移動到緩沖區(qū)2和4中了。
指令(7)是一條取數(shù)指令,它從內(nèi)存中取出一個數(shù)放到處理器的寄存器堆R25中,指令(7)不依賴于任何其它的指令或寄存器。指令(8)是一條加法指令,它將寄存器堆R6,R7中的值相加,并把結(jié)果放到R8中。指令(8)由于依賴于指令(6),因而是“不可利用的”。此時的狀況是,第1條指令是非相關(guān)的,而第2條指令是“不可利用的”,于是只有緩沖區(qū)2中的指令(7)被移位(到執(zhí)行單元17),而指令(8)則從緩沖區(qū)4中橫向移位到緩沖區(qū)2中(圖3a中的第7步)。此后,下一條指令(9)被取到緩沖區(qū)4,于是指令(8)和(9)將接受判斷。指令(9)是一條取數(shù)指令,它將內(nèi)存中一個值取至處理器的寄存器堆R9中,系統(tǒng)判斷這條指令是非相關(guān)的。于是,緩沖區(qū)2中有一條“不可利用的”的指令(8),同時,緩沖區(qū)4中有一條非相關(guān)的指令(9)。在這種情況下,只要前面的指令一執(zhí)行完,這兩條指令(8)和(9)將同時移位到執(zhí)行單元17和19中(圖3a中的第6步)。
下兩條指令(10)和(11)將分別輸入到緩中區(qū)2和4中。指令(10)為一條非相關(guān)指令,它將內(nèi)存中的一個值取至處理系統(tǒng)的寄存器堆R10中。指令(11)是“不可利用的”,這是因為它依賴于寄存器堆R9中的值,這個值取決于前面的一條指令(不是相鄰的上一條指令)的執(zhí)行。該步的狀態(tài)是第一條指令(10)為非相關(guān)的,第二條指令(11)是“不可利用的”,第一條指令(10)將從緩沖區(qū)2中移位到執(zhí)行單元17中,第二條指令(11)將從緩沖區(qū)4中移位到緩沖區(qū)2中(圖3a中的第7步)。
指令(12)是一條或指令,它將本例中寄存器堆R11和R20的值進行邏輯或操作,并將結(jié)果放到寄存器堆R11中??梢钥闯鲋噶?12)依賴于前面的指令(11),指令(11)決定寄存器堆R11中的值。因而此時在緩沖區(qū)2中有一條“不可利用的”指令(11),在緩沖區(qū)4中有一條相關(guān)的指令(12)。在這種情況下,只有指令(11)被移動到執(zhí)行單元17(圖3b中的第10步),指令(12)則不能被移位到執(zhí)行單元19,原因是它需要R11中的值。于是,指令(12)被移位到緩沖區(qū)2中,準備在指令(11)以后執(zhí)行。而指令(13)被移動到緩沖區(qū)4中,這條指令將寄存器堆R11和R12中的值相加,并將結(jié)果置于寄存器堆R13中。這時,由于指令(12)所依賴的指令(11)已經(jīng)執(zhí)行完,指令(12)于是被當作是非相關(guān)的。指令(13)依賴于其相鄰上一條指令(12),因而它是一條相關(guān)指令。這樣,在緩沖區(qū)2中有一條非相關(guān)指令(12),而在緩沖區(qū)4中有一條相關(guān)的指令(13)。在這種情況下,非相關(guān)指令(12)被移動到執(zhí)行單元17,相關(guān)指令(13)則被橫向移位到緩沖區(qū)2中(圖3b中的第9步)。
圖4給出了兩個時序圖A和B,它們比較了在兩種情況下執(zhí)行一條取數(shù)指令和加法指令所需要的機器周期數(shù)。其中在一種情況下,這兩條指令是非相關(guān)的(圖A),在另一種情況下則是相關(guān)的(圖B)。
參看圖A,在周期1,取數(shù)和加法指令由于是非相關(guān)的,因而被分別存于指令緩沖區(qū)2和4中(圖3a中的第4步)。然后在周期2均被移動到執(zhí)行單元17和19中執(zhí)行。在周期2末尾,從加法指令得出的數(shù)據(jù)被鎖存到寄存器堆輸入鎖存器10。然后在周期3,系統(tǒng)從高速緩沖區(qū)中訪問取數(shù)指令所需的數(shù)據(jù),并將其鎖存到寄存器堆輸入鎖存器10;還是在周期3中,加法指令的控制信號產(chǎn)生了一個向寄存器堆7、9的回寫。在周期4,將來自輸入寄存器10中的高速緩存的數(shù)據(jù)寫入在寄存器堆7、9中的寄存器11。
圖B顯示了在周期1時指令緩沖區(qū)中(也是在緩沖區(qū)0和1中)的指令,它與圖A中的一樣,然而,此時加法指令依賴于取數(shù)指令,例如,LOAD R1和ADD R1,R2,R3。此時,只有取數(shù)指令在周期2中被移位到執(zhí)行控制單元(按照圖3b中的第9步)。此外,在周期2,加法指令從指令緩沖區(qū)4中被移位到緩沖區(qū)2中,有效地移位這條指令,是為了以后在執(zhí)行單元17中執(zhí)行,而不是在單元19中執(zhí)行。應該注意到,此時,取數(shù)和加法指令將順序地在處理器17中執(zhí)行。當然,另外的指令可以在周期2-5期間從總線8或緩沖區(qū)14中輸送到指令緩沖區(qū)4中,并依照如圖3a和3b所示的過程接受系統(tǒng)分析。不過為了簡化起見,圖A和圖B中并未表示出這些另外的指令。在周期3,取數(shù)指令使系統(tǒng)訪問高速緩沖區(qū),所需要的數(shù)據(jù)被取到輸入寄存器10中,并走旁路到達執(zhí)行單元輸入鎖存器11。同時,加法指令被移位到執(zhí)行控制部件13,并在該部件中延遲等待,因為此時數(shù)據(jù)不可用。然后在周期4中,加法指令被執(zhí)行,同時,取數(shù)指令取出的數(shù)據(jù)被放到寄存器堆7,9中。最后,加法指令的結(jié)果在周期5被回寫到寄存器堆7,9中。
可以看得出,執(zhí)行非相關(guān)指令所花費的機器周期數(shù)要比執(zhí)行同樣的相關(guān)指令所花費的少。圖A和B清楚地顯示了非相關(guān)的指令如何能在不同的執(zhí)行單元中并行地執(zhí)行,而相關(guān)的指令卻必須順序串行地執(zhí)行。圖A中的加法指令要比取數(shù)指令先執(zhí)行,這是因為是非相關(guān)指令。然而在圖B中,由于加法指令依賴于取數(shù)指令,因而它要在取數(shù)指令之后執(zhí)行。
在這方面有一定技術(shù)的人可以看得出,通過在每個周期比傳統(tǒng)系統(tǒng)多執(zhí)行指令,本發(fā)明提高了處理器的性能。例如,假設分別被定義為非相關(guān)的、不可利用的、非相關(guān)的指令(I1,U,I2)被輸送到一個傳統(tǒng)的雙執(zhí)行單元系統(tǒng)中,I1和U將送到處理單元0和1。處理系統(tǒng)將執(zhí)行I1,然后(n個周期后)當資源變?yōu)榭捎脮r,執(zhí)行指令U。這樣,在一個傳統(tǒng)的系統(tǒng)中,n個周期中執(zhí)行了2條指令。然而,本發(fā)明則在I1執(zhí)行后,將指令U移動到執(zhí)行單元0,并將I2移位到執(zhí)行單元1。然后當資源可用時,處理系統(tǒng)將執(zhí)行U和I2兩條指令(n個周期后)。當然,由于I2是非相關(guān)的,因此可以與U并行執(zhí)行。這樣,本發(fā)明允許在n個周期中執(zhí)行3條指令。在前面的例子中,如果U后面跟一條不可利用的指令U2,那么本發(fā)明仍能體現(xiàn)出其優(yōu)點。在此情況下,U和U2很有可能被允許并行執(zhí)行,因為順序的不可利用的指令通常依賴于同一資源,而一旦資源可用時(n個周期以后),兩條指令都可執(zhí)行。因此,本發(fā)明仍然在n個周期內(nèi)執(zhí)行了3條指令,而在傳統(tǒng)系統(tǒng)中,由于U2要等待U的執(zhí)行,在n個周期中只能執(zhí)行2條指令。
盡管我們給出了一些較佳實施例,并對它們作了描述,但對本技術(shù)領(lǐng)域中有一定技術(shù)水平的人來說,在不超過所附權(quán)利要求范圍的條件下,仍可對本系統(tǒng)作出許多改變和修改。
權(quán)利要求
1.一個包含有第1和第2執(zhí)行單元的處理系統(tǒng),其特征在于包含與所述第1和第2執(zhí)行單元相關(guān)聯(lián)的第1和第2指令緩沖區(qū),用以給執(zhí)行單元提供指令;用以解釋在前述的第1和第2指令緩沖區(qū)中的所述指令是否為數(shù)據(jù)相關(guān)的裝置;以及用以向所述的第1執(zhí)行單元提供所述的數(shù)據(jù)相關(guān)指令,使得其它的指令可以并發(fā)地提供給所述的第2執(zhí)行單元的裝置。
2.一個根據(jù)權(quán)利要求1的系統(tǒng),其特征在于所述的提供指令的裝置包含有將指令從所述的第2緩沖區(qū)移動到所述的第1緩沖區(qū)的裝置。
3.一個根據(jù)權(quán)利要求2的系統(tǒng),其特征在于前述的數(shù)據(jù)相關(guān)指令包含相關(guān)的和不可利用的指令,前述的其它指令包含非相關(guān)的指令。
4.一個根據(jù)權(quán)利要求3的系統(tǒng),其特征在于包含一個三端口的加法器,從而將那些對位于3個不同存貯位置的數(shù)據(jù)進行相加的指令定義為非相關(guān)指令。
5.一個根據(jù)權(quán)利要求4的系統(tǒng),其特征在于所述的非相關(guān)指令被并行地從所述的第1和第2指令緩沖區(qū)中分別移位到所述的第1和第2執(zhí)行單元中。
6.一個根據(jù)權(quán)利要求5的系統(tǒng),其特征在于所述的不可利用的指令被并行地從所述的第1和第2指令緩沖區(qū)中分別移位到所述的第1和第2執(zhí)行單元中。
7.一個根據(jù)權(quán)利要求6的系統(tǒng),其特征在于在所述的第1指令緩沖區(qū)中的一條所述的相關(guān)指令被移位到所述的第1執(zhí)行單元中,在所述的第2指令緩沖區(qū)中的一條所述的相關(guān)指令被移動到所述的第1指令緩沖區(qū)中。
8.一個根據(jù)權(quán)利要求7的系統(tǒng),其特征在于在所述的第1指令緩沖區(qū)中的一條所述的不可利用的指令和在所述的第2指令緩沖區(qū)中的一條所述的非相關(guān)指令分別被并行地移位到所述的第1和第2執(zhí)行單元中。
9.一個根據(jù)權(quán)利要求8的系統(tǒng),其特征在于在所述的第1指令緩沖區(qū)中的一條所述的非相關(guān)指令被移位到所述的第1執(zhí)行單元中,以及在所述的第2指令緩沖區(qū)中的一條所述的不可利用的指令被移動到所述的第1指令緩沖區(qū)中。
10.一個根據(jù)權(quán)利要求9的系統(tǒng),其特征在于在所述的第1指令緩沖區(qū)中的一條所述的非相關(guān)指令被移位到所述的第1執(zhí)行單元中,以及在所述的第2指令緩沖區(qū)中的一條所述的相關(guān)指令被移動到所述的第1指令緩沖區(qū)中。
11.一種在包括第1和第2執(zhí)行單元的處理系統(tǒng)中執(zhí)行指令的方法,其特征在于包含下面的步驟向與所述的第1和第2執(zhí)行單元相關(guān)聯(lián)的第1和第2指令緩沖區(qū)提供指令;解釋在所述的第1和第2指令緩沖區(qū)中的所述的指令是否為數(shù)據(jù)相關(guān)指令;以及向所述的第1執(zhí)行單元提供所述的數(shù)據(jù)相關(guān)指令,使得其它的指令可以并發(fā)地提供給所述的第2執(zhí)行單元。
12.一種根據(jù)權(quán)利要求11的方法,其特征在于前述移位步驟包括有將指令從所述的第2指令緩沖區(qū)中移動到所述的第1指令緩沖區(qū)中的步驟。
13.一種根據(jù)權(quán)利要求12的方法,其特征在于前述的數(shù)據(jù)相關(guān)指令包括相關(guān)的和不可獲得的指令,所述的其它指令包括非相關(guān)的指令。
14.一種根據(jù)權(quán)利要求13的方法,其特征在于包含下面的步驟向一個三端口的加法器提供指令,從而把那些對位于3個不同存貯位置的數(shù)據(jù)進行相加的指令定義為非相關(guān)指令。
15.一種根據(jù)權(quán)利要求14的方法,其特征在于包含下面的步驟將所述的非相關(guān)指令并行地從所述的第1和第2指令緩沖區(qū)中分別移位到所述的第1和第2執(zhí)行單元中;以及將所述的不可利用的指令并行地從所述的第1和第2指令緩沖區(qū)中分別移位到所述的第1和第2執(zhí)行單元中。
16.一種根據(jù)權(quán)利要求15的方法,其特征在于包含下面的步驟將在所述的第1指令緩沖區(qū)中的一條所述的相關(guān)指令移位到所述的第1執(zhí)行單元中;以及將在所述的第2指令緩沖區(qū)中的一條所述的相關(guān)指令移動到所述的第1指令緩沖區(qū)中。
17.一種根據(jù)權(quán)利要求16的方法,其特征在于包含下面的步驟將在所述的第1指令緩沖區(qū)中的一條所述的不可利用的指令和在所述的第2指令緩沖區(qū)中的一條所述的非相關(guān)指令分別并行地移動到所述的第1和第2執(zhí)行單元中。
18.一種根據(jù)權(quán)利要求17的方法,其特征在于包含下面的步驟將在所述的第1指令緩沖區(qū)中的一條所述的非相關(guān)指令移位到所述的第1執(zhí)行單元中;以及將在所述的第2指令緩沖區(qū)中一條所述的不可利用的指令移動到所述的第1指令緩沖區(qū)中。
19.一種根據(jù)權(quán)利要求18的方法,其特征在于包含下面的步驟將在所述的第1指令緩沖區(qū)中的一條所述的非相關(guān)指令移位到所述的第1執(zhí)行單元中;以及將在所述的第2指令緩沖區(qū)中的一條所述的相關(guān)指令移動到所述的第1指令緩沖區(qū)中。
20.一個根據(jù)權(quán)利要求10的系統(tǒng),其特征在于包含在所述的第2指令緩沖區(qū)中的所述指令被移動到所述的第1指令緩沖區(qū)中后,向所述的第2指令緩沖區(qū)中提供一條后續(xù)指令的裝置;以及當在前述的第1和第2指令緩沖區(qū)中的所述指令被并行地移位到所述的第1和第2執(zhí)行單元時,向所述的第1和第2指令緩沖區(qū)提供兩條后續(xù)指令的裝置。
21.一種根據(jù)權(quán)利要求19的方法,其特征在于包含下面的步驟在所述的第2指令緩沖區(qū)中的所述指令被移動到所述的第1指令緩沖區(qū)中后,向所述的第2指令緩沖區(qū)中提供一條后續(xù)的指令;以及當所述的第1和第2指令緩沖區(qū)中的所述指令被并行地移位到所述的第1和第2執(zhí)行單元時,向所述的第1和第2指令緩沖區(qū)提供兩條后續(xù)的指令。
全文摘要
本發(fā)明提供了一種多執(zhí)行單元處理系統(tǒng),其中每個執(zhí)行單元有一個相關(guān)聯(lián)的指令緩沖區(qū),并且所有的指令都按順序執(zhí)行。第1執(zhí)行單元(單元0)中總是包含最“老”的指令,而第2執(zhí)行單元(單元1)中則總是包含最“新”的指令。處理器指令,例如取數(shù),存數(shù),加法等將從一個指令高速緩沖區(qū)中取出,然后提供給每個指令緩沖區(qū)(0,1)。第1條指令(最“老”的)被放在緩沖區(qū)0中,下一條(第2條)指令則存于緩沖區(qū)1中。在譯碼階段決定指令是否依賴于其相鄰的上一條指令。
文檔編號G06F9/38GK1120195SQ9411516
公開日1996年4月10日 申請日期1994年9月14日 優(yōu)先權(quán)日1993年9月20日
發(fā)明者D·S·雷, L·E·撒切爾, 小·H·S·沃倫 申請人:國際商業(yè)機器公司