專利名稱:流水線安排的處理器方法和電路的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的背景技術(shù)本申請是關(guān)于流水線數(shù)據(jù)處理器,包括數(shù)值信號處理器(DSPs)和通用處理器。本申請尤其與執(zhí)行單元采用流水線技術(shù)的處理器相關(guān)。
流水線技術(shù)是一種處理器架構(gòu)技術(shù),通過使處理器能夠平行的實施多個動作來全面增強總處理能力。流水線技術(shù)將流中的各個指令的執(zhí)行分為不同階段和步驟。各階段的輸出結(jié)果就是下一階段的輸入數(shù)據(jù),因為在流中臨近指令不同階段被平行的處理,增加了操作的頻率和總處理能力。
處理器中所有的功能單元能夠被流水線安排在不同的深度中為了達到總處理能力的最大提高,更進一步參考“流水線”在本文中指的是流水線僅出現(xiàn)在用于計算的執(zhí)行單元中。
深度流水線操作,是將各個指令分成很多階段,因此開始按順序執(zhí)行這些指令,增加并行性和因此增加總處理能力。然而深度流水線操作也有成本。舉例說明深度流水線操作的一種成本為當指令順序需要改變控制時發(fā)生的。改變控制需要所有的指令進入到流水線中,這些指令可能從流水線被部分的運行轉(zhuǎn)儲清除。導致失去了由使用流水線得到的效率。例如,使用十段深度流水線,十個指令在任何時間點上駐留于流水線上。因此,當控制中的變化產(chǎn)生時,所需的控制的改變之前的這十個指令所完成的工作丟失。
如果第二指令依靠第一指令的操作數(shù),接下來這種依存關(guān)系使得停止執(zhí)行流水線,如下所述;第一指令必須在第二指令被載入流水線前完成。當?shù)谝恢噶钔瓿闪?,第二指令有?quán)使用所需的操作數(shù)并且被載入到流水線中。根據(jù)流水線的深度不同其停止的影響程度也不同。
特別是,并且在數(shù)字信號處理中常見的是,例子是當交互操作被實施時深度流水線操作的前述的成本會升高。交互操作是那些需要指令的操作數(shù)定位也是指令結(jié)果的目的文件。迭代是交互操作的執(zhí)行操作。數(shù)值信號處理常常包括交互操作,例如求總數(shù)的和。重復執(zhí)行的指令指定的交互操作形成了一個類似于上面所述的第一和第二指令的模式。在這個模式里,被重復的指令的第一實例作為第一指令,如上,并且被重復的指令的第二實例作為第二指令。這樣,交互操作的結(jié)果導致大量的,可能的長的,流水線的停止。
這個問題已經(jīng)為本領(lǐng)域技術(shù)人員所知,已經(jīng)實施了大量的解決方法,但是每個方法都有它自身的缺點。
一個被提議的解決方法是軟件時序安排,描述如下。使用軟件時序安排,軟件被設計為獨立啟動交互操作的第一實例,同一交互操作的第二實例跟隨其后,但是帶有獨立的數(shù)據(jù)。然后,兩個實例獨立進行,每個都使用并不存在于流水線中的操作數(shù)據(jù)。交互操作最后的實例接下來承擔獨立的計算流的重新組合的成本。為了優(yōu)化具有特定深度的特定流水線的最佳使用,獨立啟動的實例數(shù)量要與特定的深度相同。
軟件時序安排有缺陷,因為所有獨立實例需要的操作數(shù)都需要被存放在寄存器文件中,或其他的可達到需要時即可使用的地方,這樣就比不帶有軟件時序安排的交互需要更多的系統(tǒng)資源。不帶有軟件時序安排的只需兩個寄存器,存儲器和包含新的操作數(shù)的寄存器。采用軟件時序時,每個交互操作的實例都需要數(shù)值存儲寄存器。
軟件時序安排另一個問題是為特定最初處理器使用這種方法設計的軟件與的將來快速變型的處理器不兼容,或者與初始處理器使用的指令集的兼容超集不兼容,以及或者可以與初始軟件兼容,但是與不同深度的流水線不兼容。使用加深流水線的深度來開發(fā)和制造更快的現(xiàn)有的處理器版本在處理器銷售商中是很普遍的。
傳統(tǒng)執(zhí)行單元發(fā)布階段的操作在圖5的流程圖中顯示。發(fā)布階段是將控制指令配給到流水線中的階段。
發(fā)布階段在互鎖的流水線處理器中執(zhí)行一系列開始于決定是否流水線被停止501的步驟,由于獨立指令,如下面描述的。如果執(zhí)行單元沒有被停止,接下來下一個指令被提取502。否則,如果執(zhí)行單元在501被停止,當前指令將保持503。在另外情況下,指令的依存關(guān)系將被發(fā)布并接下來被評估504。如果一個或更多的操作數(shù)在指令中依靠前一個指令的結(jié)果,接下來數(shù)據(jù)依存關(guān)系被稱為存在。如果當前指令被發(fā)現(xiàn)不是依存的505,接下來當前指令被發(fā)布506。發(fā)布階段循環(huán)接下來結(jié)束。如果但是指令在505被發(fā)現(xiàn)是依存的,接下來執(zhí)行單元被停止507并且發(fā)布階段循環(huán)結(jié)束。被停止或不停止的執(zhí)行單元的狀態(tài)將會被一種合適的方法存儲起來,例如在標志寄存器中設置特征位。
在處理器應用在非互鎖的流水線中時,發(fā)布階段不會實施任何上面詳細描述的依存關(guān)系的檢查。僅僅按順序發(fā)布各個指令,進入執(zhí)行單元的流水線。這種處理器的軟件通常這樣編輯,任意一對相互依存的指令被大量的不相關(guān)的指令分隔,例如NOP(無操作)指令,如對于任意給定的指令的操作數(shù)被保證在指令需要時準備好。通常,編譯器程序為這樣的處理器產(chǎn)生指令。
傳統(tǒng)的執(zhí)行單元,如圖6中顯示的,由具有多個階段的執(zhí)行流水線的一個階段反饋,傳統(tǒng)執(zhí)行單元僅包括一個操作單元,例如加法器601,寄存器文件602和控制器603。控制器603依據(jù)上面討論的圖5中的流程圖中的原則指揮執(zhí)行單元。
本發(fā)明的概述根據(jù)本發(fā)明實施例的各個方面,在深度p的流水線中的執(zhí)行單元執(zhí)行指令流的方法,包括加載指令流;探測在已加載指令流中的指令迭代;在流水線中交叉指令的實例的p流,以致流水線為實例的p流提供存儲介質(zhì);探測迭代的結(jié)束;并且在所有程序的迭代結(jié)束后組合從p流獲得的結(jié)果。流水線執(zhí)行單元的深度可能是任意的。該方法可能進一步包括為探測到的指令的迭代使互鎖失效。在該方法的變化中,探測可以進一步包括在帶有相同的操作數(shù)和目標的迭代指令的基礎上識別指令的迭代。例如,指令的迭代可能完成算術(shù)累加,或者可能完成算術(shù)乘積。
根據(jù)本發(fā)明實施例的另外一方面,計算電路包括可以保存體現(xiàn)操作數(shù)和交互操作的結(jié)果的數(shù)值的寄存器;多路(復用)器帶有被連接的用于接收來自存儲器的操作數(shù)的第一輸入、為了交互操作被連接到單位元數(shù)值源的第二輸入,和輸出;以及操作電路帶有連接的接收來自多路器輸出的數(shù)值輸入,和被連接的將結(jié)果返回存儲器的輸出。該電路可能進一步包括被構(gòu)造和排列為用來探測迭代操作的控制電路。例如,操作電路可能包括加法器或多路器??刂齐娐愤M一步包括程序裝置,程序裝置被構(gòu)造和排列為用來在流水線中交叉指令的實例的p流并且在所有程序化的迭代結(jié)束后組合從p流獲得的結(jié)果。電路可能被構(gòu)造以至于探測進一步包括在帶有相同操作數(shù)和目標的迭代的指令的基礎上識別指令迭代。例如,電路可能夠進一步被構(gòu)造以達到指令的迭代完成算術(shù)累加或完成算術(shù)乘積。
仍根據(jù)本發(fā)明的實施例的另一方面,在流水線安排的執(zhí)行單元中運行指令流的方法,包括為執(zhí)行單元提供指令流,作為不帶有軟件時序排列的自然順序排列的指令序列;在指令序列中探測指令的迭代;將一個以上的迭代指令的實例引進流水線安排的執(zhí)行單元的流水線中,每個迭代指令的實例都帶有不同的數(shù)據(jù);以及在流水線中保存一個以上的實例中的每一個的結(jié)果。探測可以進一步包括在帶有操作數(shù)和目標相同的迭代的指令的基礎上識別指令的迭代。方法進一步包括使被探測的指令迭代的互鎖失效。例如,指令迭代可能完成算術(shù)累加或可能完成算術(shù)乘積。
還是根據(jù)本發(fā)明的另一個實施例,一種在流水線安排的執(zhí)行單元中運行指令流的方法,包括在指令流中探測指令的迭代;獨立的運行一個以上的迭代指令的流,而不在流水線安排的執(zhí)行單元之外儲存中間結(jié)果;重新組合獨立的被執(zhí)行的一個以上的流來提供單獨的結(jié)果;其中獨立執(zhí)行和重新組合僅使用一個目標寄存器和一個臨時寄存器。本方法進一步包括引入操作數(shù)其數(shù)值對于在開始階段的指令是同樣的。
在包括指令互鎖和包括帶有深度p的流水線的流水線安排的計算單元的可編程數(shù)據(jù)處理器中,本發(fā)明的各個方面可能體現(xiàn)在包括控制器的電路中,控制器被建造和排列為在引入的指令流中探測交互計算。控制器可能進一步包括被建造和排列來探測帶有被指定作為操作數(shù)的源和作為存儲結(jié)果的目標的寄存器的電路。
控制器可能進一步包括被構(gòu)造和排列為用來探測當指令中的一個缺少被指定為既是操作數(shù)的源頭又是用于儲存結(jié)果的目標的單獨寄存器時迭代的中斷,和帶有不同目標寄存器的指令發(fā)生時探測迭代的中斷的電路。控制器可能進一步包括可使讀-后-寫和寫-后-讀互鎖功能失效的電路。根據(jù)一些變化,控制器被建造和安排來交叉在流水線中重疊的迭代的直到p的流??刂破骺赡苓M一步包括被構(gòu)造和排列為用來將從p流的p中間結(jié)果組合到最后結(jié)果的電路。電路進一步包括不被應用于其他計算中的寄存器T;控制器可被進一步構(gòu)造和排列為在探測到中斷后,將結(jié)果重新定向至寄存器T中。最后控制器還可能進一步包括被建造和排列為在迭代結(jié)束后重新部署互鎖的電路。
仍根據(jù)本發(fā)明另一個實施例,一種在流水線安排的執(zhí)行單元中準備軟件指令序列的方法,包括探測序列中被迭代的指令;和排列被迭代的指令的實例來形成一個以上的獨立的不相互依存的流,直到所有的被迭代的指令的迭代結(jié)束,來自一個以上的獨立的流的每一個結(jié)果不被儲存到流水線之外。
在處理器結(jié)合非互鎖流水線的一種情況中,執(zhí)行單元沒有被修改。但是用來累加操作的指令流被使用一個合適方法修改以至于通過明顯少的循環(huán)過程中得出相同的結(jié)果。
本發(fā)明附圖的簡單描述本發(fā)明將通過實施例參照所附示圖進行描述,其中
圖1是本發(fā)明執(zhí)行單元的具體實施方面的方塊圖,這個單元被假定被流水線化。
圖2是寄存器RO的實施通過帶有4階段執(zhí)行流水線的執(zhí)行單元的流水線圖。
圖3是圖1中描述中累加的清除階段流水線圖。
圖4是本發(fā)明實施方面的方法流程圖。
圖5是發(fā)布指令到在執(zhí)行單元中的執(zhí)行流水線的傳統(tǒng)方法流程圖;和圖6是傳統(tǒng)執(zhí)行單元的一個例子的方塊圖。
本發(fā)明的詳細描述通過閱讀下面對本發(fā)明實施例和相關(guān)附圖描述將對本發(fā)明有更好的了解。
本發(fā)明的各個方面將通過方法和設備實施例說明,本發(fā)明的各個方面可以在帶有流水線執(zhí)行單元的處理器中體現(xiàn)。帶有流水線執(zhí)行單元和體現(xiàn)本發(fā)明各個方面的處理器可以帶有或者不帶有互鎖功能。在流水線處理器中體現(xiàn)本發(fā)明各個方面可以加速實施。在這個意義上所有的循環(huán),在一個迭代操作中,在這里所涉及到為累加。累加包括一次或多次累加指令重復。累加指令為一種指令用于至少一個操作數(shù)寄存器時與指令目標寄存器是相同的,表現(xiàn)在從Rx←Rx()Ry這里“()”表示一個操作和“←”表示作為結(jié)果而發(fā)生的數(shù)值到目標的任務。典型的,盡管不是專有的,累加指令包括加或乘指令。但是其他指令也可以是累加指令;例如,邏輯“OR”指令當計算無用數(shù)值時能成為累加指令。
本發(fā)明探測累加指令方面的實施方法,和將他們嵌入流水線執(zhí)行單元的方法采取的不是傳統(tǒng)方式。特殊的。將在下面詳細解釋,對于一個帶有深度p的流水線,一種實施本發(fā)明在流水線中的交錯方面的方法,累加指令的p流實例,不用賦值給每個數(shù)值存儲器。接下來,當探測到計算的結(jié)束,p流被連接到用來產(chǎn)出設定的結(jié)果,被賦值給被指定的目標寄存器。
如下面的進一步的解釋,累加指令被探測到,使用修改的互鎖電路或使用模擬至少一些這些電路的操作特點的電路,或使用格式的軟件邏輯在軟件編譯器中,舉例說明。在處理器中使用互鎖來防止指令從開始當數(shù)據(jù)被指令需要且不能夠由當前的指令提供時,互鎖被關(guān)閉相關(guān)于上面提到的指令的交錯流?;ユi可以,但是,保持操作相關(guān)于開始一個指令,該指令跟隨著累加指令的最后的實例,在這里被稱作累加間斷。
本發(fā)明中所使用的儀器與傳統(tǒng)的流水線中使用的儀器不相同,在其執(zhí)行單元中添加了幾個元件如調(diào)整來控制邏輯來實現(xiàn)一些操作不同于傳統(tǒng)流水線處理器。特殊的,發(fā)布階段邏輯將在下面介紹。當并且在那些排列指令的流被發(fā)布用來流水線使用執(zhí)行單元實施時發(fā)布被這樣的邏輯定義。
如圖1中顯示的那樣,執(zhí)行單元100包括寄存器文件101和操作單元102,被連接在反饋排列中,操作單元102可能為一個加法器,乘法器或任意其它的可以用來累加的算術(shù)或邏輯操作電路。為了這個目的操作單元被假設有兩個操作數(shù)輸入103,104。操作數(shù)由寄存器文件101的寄存器中獲取并且其結(jié)果返回到寄存器文件101的目標寄存器中,根據(jù)軟件指令執(zhí)行。
根據(jù)本發(fā)明各個方面,多路器105,106沒有在傳統(tǒng)的執(zhí)行單元中使用。被提供給各個操作單元的輸入來允許導入交替輸入值107當交錯流在流水線中開始時,例如“0s”如果操作單元102執(zhí)行加法,并且在連接流過程中也提供交替反饋路徑108,優(yōu)于傳統(tǒng)的反饋路徑109由操作單元102輸出110到寄存器文件101操作數(shù)和目標寄存器被定位在那里。在交替反饋路徑108中,在操作單元102輸出110和一個多路器105的一個輸入中,提供單一臨時寄存器,T。寄存器T,僅在連接交錯流時被使用。
在控制器111中,累計探測電路被提供用來探測累加的開始和結(jié)束。如果處理器被互鎖,控制器包括互鎖電路。在這個例子中,累加探測電路可能被修改為互鎖處理器的互鎖電路。可選擇的,在互鎖的處理器或在非互鎖處理器中,累加探測電路可以是特殊的為探測提供的獨立的電路。另外,在互鎖處理器中電路被提供來控制交錯的流處理,和其在清除階段的重新連接,因為需要達到這個處理的步驟沒有明確的在被處理的指令流中提供。在非互鎖處理器中,指令由編譯器控制,例如實現(xiàn)交錯和清除。
根據(jù)本發(fā)明的原理操作方法和儀器現(xiàn)在將結(jié)合圖2和3中的流程圖詳細介紹。
圖2和圖3中的代表性的流水線為4階段深度,也就是p=4,有實施階段ex0 ex1 ex2和ex3。顯示的流水線深度只是用來顯示目的的,描述的原理為可應用于任何深度的流水線中,包括兩個或更多階段流水線和其它任意深度的流水線。代表流水線舉例說明了累加使用加法指令,盡管原理已準備好應用于其他指令之中。
在這個例子中,“0s”源被要求提供一個操作數(shù)在每個交錯的指令流的開始,如下面描述的。在互鎖的機器上,特殊的指令產(chǎn)生交錯和執(zhí)行清楚需要互鎖被關(guān)閉或繞過??刂破鲗⑿枰3帜切﹨?shù)的軌跡如流水線的深度和當前交錯的數(shù)量,所以程序在清除過程中被結(jié)束。
在所示的例子中,控制邏輯探測累加指令,R0←R0+RM這里RM是跟隨數(shù)值xN加載的,開始于初始值x0被拿來插入到流水線中。加載RM與描述的計算同步進行。這個例子更進一步假設指令的數(shù)量,N=1到n這里n>4將被實施。自然的n能夠為任意的迭代數(shù)量,盡管本發(fā)明的優(yōu)點并需要在至少n>p更好是n>>p的情況下發(fā)生。
如圖2中所顯示的,指令的第一實例,R0←R0+x0被按照通常模式處理。如果需要依靠前面指令來提供原始內(nèi)容R0然后指令R0←R0+x0在普通模式下被停止。一旦前面的指令結(jié)束,接下來的指令R0←R0+x0被插入流水線。R0和x0的值被取得來實施階段ex0在循環(huán)0中。接下來,勝過于等待第一指令結(jié)束,控制邏輯開始另一個p-1指令,在這種情況下為循環(huán)1、2和3中另外3個指令,但是重新設定參考R0為“0”,與之一致的元素(圖1,107)用于累加(加法)被執(zhí)行。如果累加是基礎加法指令,接下來一致的元素將被重新設置為“1”,一致的元素(圖1,107)用于加法。四個原始指令中的任意一個形成每個獨立流的開始,指定流1、2、3和4。在循環(huán)1,處理R0+x0到達執(zhí)行階段ex1,當處理0+x1開始于執(zhí)行階段ex0。接下來,在循環(huán)2,處理開始于0+x2,當處理R0+x0達到執(zhí)行階段ex2和0+x1達到執(zhí)行階段ex1。在循環(huán)3,R0+x0被設置為R0在執(zhí)行階段ex3結(jié)束流1的第一計算。流1重新開始于循環(huán)4,獲得操作數(shù)x4來在R0加上(R0+x0)。R0中的數(shù)值在四個流中循環(huán)每個都按順序完成計算。每個流都在繼續(xù),相對于其他流是獨立的。在那個流中那個最近被執(zhí)行的獲得第四操作數(shù)。這樣例如,流1累加數(shù)值R0+x0+x4+x8+....不需要多余的寄存器來存儲不同流中間數(shù)值,如他們被存儲在流水線中那樣,當他們被處理的時候。流水線本身包括寄存器在那里在處理的指令的中間數(shù)值被存儲。
累加中的間斷發(fā)生在當指令流中的下一個指令不是指令R0←R0+RM中的另一個實例。一旦累加中的中斷被探測到,將進入清除階段,如圖3中描述的那樣。
首先控制器停止程序裝置獲得和插入指令進入流水線。控制器接下來發(fā)布特殊清除指令序列被設計來重新聯(lián)合四個流和存儲結(jié)果在原始指定的目標寄存器中。如果不同的數(shù)量的流被交叉,接下來需要不同的特殊排列的清除指令。
下面介紹的流水線排列,帶有一定的深度,p為4個指令。
當累加中的中斷被探測到,最后的累加計算將開始于流水線中的循環(huán)1中。當來自最后流的第四,現(xiàn)在結(jié)束了,來為臨時寄存器,T賦值。當來自最后流的第三,來結(jié)束循環(huán)2,接下來在循環(huán)三中,寄存器R0被用來連接最后流的第三和第四。其間,在循環(huán)三中,來自最后流結(jié)果的第二個被賦值到寄存器T。最后,在循環(huán)4中,最后流結(jié)束進入寄存器R0。在循環(huán)5中,連接來自最后和最后流來結(jié)束進入寄存T中被開始第二,當在循環(huán)6中,合并來自最后流的第三和第四結(jié)束。在循環(huán)8中,合并來自最后和最后流的第二結(jié)束,并且在循環(huán)9中,兩個部分累加仍然被開始進入R0。在循環(huán)10,下一個指令能夠最終被釋放到流水線中。
現(xiàn)在一種描述本發(fā)明實施例各個方面的方法在圖4中被詳細地描述了。為了更加簡單的描述操作的模式根據(jù)代表性的方法,在圖4中描述的步驟可分為4組41,42,43和44。根據(jù)代表性的方法有三種操作模式普通(組41和跟隨的組43),累加(組41和跟隨組44)和清除組(組42和跟隨組43)。
使用傳統(tǒng)操作模式的方法不會遇到加法指令,普通模式(41,43)與以前的技術(shù)相似,直到遇到累加指令。普通模式(41,43)包括發(fā)布指令,評估在指令之間和在指令之中的依靠性,決定什么時候開始停止指令的發(fā)布和決定什么時候進入累加(41,44)或清除(42,43)階段。操作方法如下。
首先,做出指令的發(fā)布是否被停止的決定(步驟404)。如果指令發(fā)布沒有被停止(步驟404)接下來做出是否指令執(zhí)行進入了清除階段(步驟405)。如果系統(tǒng)沒有進入清除階段(步驟405),接下來則獲取下一個指令(步驟406)。如果指令執(zhí)行被停止了(步驟404),接下來系統(tǒng)經(jīng)保持當前的指令(步驟407)并且不向前去獲取下一個指令。無論下一個指令被獲取(步驟406)或是當前的指令被保持(步驟407),系統(tǒng)都將進行評價依靠性的步驟(步驟408)。
在互鎖機器中,數(shù)據(jù)依靠性在硬件中被檢查。一種普通的方法是通過使用寄存器計分板.任何時候指令被發(fā)布到執(zhí)行單元,一個正在使用的字節(jié)被移動到目標寄存器在特殊目標寄存器中或記憶位置涉及到寄存器計分板。在指令實施結(jié)束并且結(jié)果被記錄在目標寄存器中時正在使用的字節(jié)被清除。各個被發(fā)布指令的依靠性能夠通過檢驗指令在寄存器計分板上的操作數(shù)正在使用的字節(jié)檢測。如果每一個具有正在使用的字節(jié)的操作數(shù)被設定,那么指令就是依靠的。根據(jù)正在使用的字節(jié)被設定當指被發(fā)布到執(zhí)行單元,這個依靠性的檢驗(步驟408)為了自我參考指令,例如迭代操作或累加。正如將被看到的那樣,這將在后面的階段被執(zhí)行。如果被檢測到依賴性(步驟409)并且還沒有進入累加階段(步驟410),那么指令發(fā)布已經(jīng)被停止(步驟411),被保持到以后被檢測當執(zhí)行單元執(zhí)行這些步驟,再一次返回(步驟404)。這種狀態(tài)的信息能夠通過任何合適的方法被保持,例如使用在標志寄存器中的位的狀態(tài)。
返回到依靠性評估(步驟408),如果沒有發(fā)現(xiàn)依靠性(步驟409)并且累加階段沒有在當前情況下達到(步驟412),那么自身參考依靠性就會被檢驗出來決定是否指令被發(fā)布為累加指令(步驟413)。這個檢驗僅僅確定是否指令的目標寄存器也被當作指令的操作數(shù)使用。如果指令被確定不是累加指令,那么指令被發(fā)布(步驟414)并且發(fā)布階段在這個循環(huán)中結(jié)束。如果,盡管指令被確定為累加指令(步驟413),那么進入累加(41,44)階段,累加寄存器可以使用任何合適的方法被存儲,例如,寄存器計分板,和計算器,累加-指令-計算,被設置為零,并且指令被發(fā)布(步驟415)。計算器累加-指令-計算被執(zhí)行單元控制器使用來確定何時插入單位元素在累加階段的前面部分。此時,發(fā)布階段已經(jīng)結(jié)束了其普通模式(41,43)循環(huán)。
當已經(jīng)進入累加階段(41,44),那么發(fā)布階段的后半部分操作會在上面描述的操作中改變(組44,優(yōu)于組43)但是操作的前半部分仍按照以前的進行。
如果依靠性評估(步驟408)決定(步驟409)則指令被發(fā)布是依靠的指令并且發(fā)布階段是累加階段(步驟410),那么指令被發(fā)布被評估來確定是否也是累加指令(步驟416)。如果指令被發(fā)布是真正的累加指令(步驟416),那么進一步的確認通過參考累加寄存器計數(shù)板是否包含數(shù)值存儲器來判斷(步驟417)。如果是,那么指令被發(fā)布是簡單的下一個指令在一系列組成單獨累加和計算器累加-指令-計算被增加,并且指令被發(fā)布(步驟418)。
如果盡管指令被發(fā)布不是累加指令(步驟416)或者是累加指令(步驟416)但是不能包括相同的數(shù)值存儲器寄存器如前面的累加指令(步驟417),那么就離開當前的累加階段,并且進入清除階段(步驟419)。指定和記錄這個狀態(tài)信息能夠通過任意方法實現(xiàn),例如設置旗標位在標志寄存器中。這時,清除-指令-計算計算器被置零,和清除-指令-結(jié)束-計算計算器(步驟419)。計算器清除-指令-結(jié)束-計算在這里描述的控制邏輯外部增加。保持了在清除中結(jié)束的指令的痕跡,所以數(shù)據(jù)路徑控制邏輯可以直接的將一些結(jié)果傳遞到寄存器T如上面所述的那樣。計算器清除-指令-計算保持清除階段前進軌跡所以特殊的清除指令能夠被執(zhí)行。激發(fā)由累加階段退出的指令被保持,并且由NOP指令被代替發(fā)布。
最后如果依靠性評估(步驟408)發(fā)現(xiàn)在前面的指令中(步驟409)沒有依靠性,并且發(fā)布階段是在累加階段中(步驟412),那么當前的指令一定是在累加中的中斷因為累加指令,例如,自身參考指令,通常各個迭代依靠前一個迭代的結(jié)果。這樣,控制通過累加階段退出程序(步驟419),開始于清除階段如上面描述的。發(fā)布階段累加(41,44)循環(huán)接下來結(jié)束。
在清除階段(42,43),前半段發(fā)布階段過程是經(jīng)修改的42,后半部分進行的是普通模式43。如果發(fā)布階段沒有被停止(步驟404)并且進入清除階段(步驟405),接下來做檢驗這里是否處于這樣一種情況,清除-指令-計算要小于流水線的深度,p,(步驟420)。如果這種情況是真的,接下來清楚階段沒有結(jié)束并且發(fā)布階段導致一個指令來連接在累加階段建立的指令中的獨立指令(步驟421)。同時,計算器清除-指令-計算被增加了(步驟421)。當計算器清除-指令-計算達到數(shù)值p,接下來情況就是錯誤的(步驟420),并且清除階段被退出(步驟422)。保持指令(見步驟419)現(xiàn)在被釋放了(步驟422)。在任意情況下這個發(fā)布階段循環(huán)執(zhí)行由評估被發(fā)布的指令的依靠性來繼續(xù)(步驟408),并且像上面的描述那樣繼續(xù)。結(jié)束了發(fā)布階段清除(42,43)循環(huán)。
本發(fā)明各個方面實施例所表現(xiàn)的進步適合于在前述執(zhí)行單元功能單元中各種實際深度的流水線。
本發(fā)明通過互鎖處理器的硬件中的實施例來描述?,F(xiàn)在本發(fā)明進一步通過非互鎖處理器中的軟件方面的實施例描述來描述。正如上面的描述那樣,軟件包括依靠性這樣能夠停止互鎖的處理器能夠被編譯用于在插入了NOP指令的非互鎖處理器上的執(zhí)行,或者由指令流的其他部分的不相關(guān)的指令,使用大量的處理器循環(huán)來分割依靠的指令來允許第一指令來在第一指令的結(jié)果被第二指令需要前結(jié)束。相反的,接下來對本發(fā)明實施例各方面的描述生產(chǎn)的軟件為在圖4中被實施。
根據(jù)這個方面使用四-階段單元流水線執(zhí)行如無限制的例子,當軟件編碼器面對在源碼累加指令,這個指令流為通過在上面圖2中秒數(shù)的那種具有特殊排列處理器來執(zhí)行產(chǎn)生不帶有任何內(nèi)部依靠性的累加的復數(shù)流。累加的第一指令被正常輸出(圖2,循環(huán)0)。第二到第四都帶有被初始元件重置的操作數(shù),例如,總和,“0”(圖2,循環(huán)1-3)。編碼器指令輸出接下來就是那些普通的被要求來累加中的交叉流。直到在累加中探測到中斷。當在累加中探測到中斷,編碼器輸出清除指令,如在上面圖3中的描述的那樣。清除指令可以使用特殊的被提供的臨時寄存器類似于上面描述的寄存器“T”。另外,編碼器可以安排上下開關(guān)釋放到執(zhí)行單元中的寄存器文件中的寄存器中,所以它能夠被當作臨時寄存器使用。接下來,指令連接流是輸出。
把上面所討論的放到另一個方法中,在非互鎖但是為全流水線處理器中,當產(chǎn)生指令時編碼器保持指令等待時間的軌跡。這樣就可以確認這里有足夠多數(shù)量的無聯(lián)系指令在一對依靠指令之間,以至于所有的操作數(shù)被一個給定的指令需要為可用的在指令被發(fā)布到執(zhí)行單元。
在一個排列中N數(shù)值的累加例子能夠被傳統(tǒng)記錄如下I0←加法器;/*緩沖器的頭部*//*在索引寄存器中*/R0←0;/*數(shù)字存儲器歸零*/R1←(I0++);/*加載數(shù)據(jù)到R1中和*//*增加點*/重復(N,4);/*重復 接下來4*//*指令N次*/開始R0←R0+R1,R1←(I0++);/*將R1加到R0上*/NOPNOP結(jié)束NOP在這個例子中,NOP指令是在指令流中被需要以至于在R0中的數(shù)值被任何一個準備好應用于下一個重復中的指令中的任何指令計算。
甚至加載操作也能夠執(zhí)行加法循環(huán),其他合適的技術(shù)能夠通過重新構(gòu)造流水線以至于加載發(fā)生在流水線中要早于加法的問題被傳遞出去,所以,事實上忽略任何加載-使用停止循環(huán)。所以在本發(fā)明的相關(guān)文件中,加載能夠執(zhí)行如同他們在一個循環(huán)中完成那樣。
上面的編碼能夠被編碼器重新排列,以至于流水線軌跡如在圖2和圖3中顯示的那樣。下面為一種編碼的例子I0←加法器;/*緩沖器的頭部*//*索引寄存器*/R0←0;/*數(shù)字存儲器歸零*/R1←(I0++);/*加載數(shù)據(jù)到R1中和*//*增加點*/R0←R0+R1,R1←(I0++);/*第一次重復*/R0←0+R1,R1←(I0++);/*給0s輸入條目2-4*/R0←0+R1,R1←(I0++);/*給0s輸入條目2-4*/R0←0+R1,R1←(I0++);/*給0s輸入條目2-4*/重復(N-8,1)/*重復下一步驟*//*指令N-8次*/開始R0←R0+R1,R1←(I0++);/*將R1加到R0上*//*重復*//*清除指令*//*接下來*/T←0+R1,R1←(I0++);/*最后重復中的第四*/R0←0+R1,R1←(I0++);/*最后重復中的第三*/T←0+R1,R1←(I0++);/*最后重復中的第二*/R0←0+R1,R1←(I0++);/*最后的重復*/NOPT←R0+TNOP
T←R0+TNOPNOPNOPR0←R0+T原始編碼能夠完成4N+4循環(huán),但是新編碼完成N+12循環(huán)。上面的編碼,是本發(fā)明的實施例,不需要硬件方面的任何改動。寄存器T能夠當作任何編碼器使用。這樣能夠減少編碼數(shù)量通過吸收四個指令(沒有顯示)跟隨被循環(huán)的指令進入循環(huán),根據(jù)伴隨的合適的硬件改變能夠為業(yè)內(nèi)人士所了解。
已經(jīng)對本發(fā)明至少一個實施例的幾個方面的描述,能夠做多種變化,調(diào)整和改進對于本領(lǐng)域技術(shù)人員是很容易做到的。這些變化和改進也作為本發(fā)明的一部分,并且同樣屬于本發(fā)明的保護范圍內(nèi)。本發(fā)明紀錄的內(nèi)容及附圖僅作為本發(fā)明的例子表現(xiàn)。
權(quán)利要求
1.一種在具有深度p的流水線執(zhí)行單元中執(zhí)行指令流的方法,包括加載指令流;探測在已加載的指令流中指令的迭代;交叉在流水線中的指令的實例的p流,以致流水線為實例的p流提供存儲介質(zhì);探測迭代的結(jié)束;和在所有的程序化的迭代結(jié)束后組合從p流獲得的結(jié)果。
2.根據(jù)權(quán)利要求1中所描述的方法,其中p至少為2。
3.根據(jù)權(quán)利要求1中所描述的方法,進一步包括使指令中被探測的迭代的互鎖功能失效。
4.根據(jù)權(quán)利要求1中所描述的方法,進一步包括在被迭代的帶有相同的操作數(shù)和目標的指令基礎上識別指令的迭代。
5.根據(jù)權(quán)利要求4中所描述的方法,其中指令的迭代完成算術(shù)的累加。
6.根據(jù)權(quán)利要求4中所描述的方法,其中指令的迭代完成算術(shù)的乘積。
7.計算電路包括寄存器,寄存器能夠保存表現(xiàn)為操作數(shù)和交互操作的結(jié)果的數(shù)值;多路器,多路器帶有被連接的、用于接收來自寄存器的操作數(shù)的第一輸入,和被連接到用于交互操作的等同數(shù)值的源上的第二輸入,和輸出;和操作電路,操作電路帶有被連接的、用來接收多路器的輸出的輸入,和被連接的、用來將結(jié)果返回寄存器的輸出。
8.根據(jù)權(quán)利要求7中所描述的電路,進一步包括控制電路被構(gòu)造和排列為用來探測交互操作。
9.根據(jù)權(quán)利要求7中所描述的電路,操作電路進一步包括加法器。
10.根據(jù)權(quán)利要求8中所描述的電路,操作電路進一步包括乘法器。
11.根據(jù)權(quán)利要求8中所描述的電路,控制電路進一步包括程序裝置,程序裝置被構(gòu)造和排列為用來在流水線中交叉指令的實例的p流并且在所有程序化的迭代結(jié)束后組合從p流獲得的結(jié)果。
12.根據(jù)權(quán)利要求11中所描述的電路,其中探測進一步包括在帶有相同的操作數(shù)和目標的迭代指令的基礎上識別指令的迭代。
13.根據(jù)權(quán)利要求12中所描述的電路,其中指令的迭代完成算術(shù)的累加。
14.根據(jù)權(quán)利要求12中所描述的電路,其中指令的迭代完成算術(shù)的乘積。
15.一種在流水線執(zhí)行單元中執(zhí)行指令流的方法,包括為執(zhí)行單元提供指令流,作為不帶有軟件時序排列的自然順序排列的指令序列;在指令序列中探測指令的迭代;將一個以上的迭代指令的實例引進流水線安排的執(zhí)行單元的流水線中,每個迭代指令的實例都帶有不同的數(shù)據(jù);以及在流水線中保存一個以上的實例中的每一個的結(jié)果。
16.根據(jù)權(quán)利要求15中所描述的方法,其中探測進一步包括在帶有相同的操作數(shù)和目標的迭代指令的基礎上識別指令的迭代。
17.根據(jù)權(quán)利要求16中所描述的方法,進一步包括使指令中被探測的迭代的互鎖功能失效。
18.根據(jù)權(quán)利要求16中所描述的方法,其中指令的迭代完成算術(shù)的累加。
19.根據(jù)權(quán)利要求16中所描述的電路,其中指令的迭代完成算術(shù)的乘積。
20.一種在流水線安排的執(zhí)行單元中實施指令流的方法,包括在指令流中探測指令的迭代;獨立的運行一個以上的迭代指令的流,而不在流水線安排的執(zhí)行單元之外儲存中間結(jié)果;重新組合獨立的被執(zhí)行的一個以上的流來提供單獨的結(jié)果;其中獨立執(zhí)行和重新組合僅使用一個目標寄存器和一個臨時寄存器。
21.根據(jù)權(quán)利要求20中所描述的方法,進一步包括介紹操作數(shù),操作數(shù)的數(shù)值在啟動階段對指令是等同的。
22.在包括指令互鎖和包括帶有深度p的流水線的流水線安排的計算單元的可編程的數(shù)據(jù)處理器中,一種電路包括控制器,控制器被構(gòu)造和排列為用來探測在引入的指令流中的交互計算。
23.根據(jù)權(quán)利要求22中描述的電路,其中控制器進一步包括被構(gòu)造和排列為用來探測帶有被指定為既是操作數(shù)的源又是用于儲存結(jié)果的目標的單獨寄存器的電路。
24.根據(jù)權(quán)利要求23中描述的電路,其中控制器進一步包括被構(gòu)造和排列為用來探測當指令中的一個缺少被指定為既是操作數(shù)的源又是用于儲存結(jié)果的目標的單獨寄存器時迭代的中斷,和帶有不同目標寄存器的指令發(fā)生時探測迭代的中斷的電路。
25.根據(jù)權(quán)利要求24中描述的電路,其中控制器進一步包括禁止讀-后-寫,和寫-后-讀的互鎖的電路。
26.根據(jù)權(quán)利要求22中所描述的電路,其中控制器被構(gòu)造和排列為用來交叉在流水線中重疊的迭代的直到p的流。
27.根據(jù)權(quán)利要求26中所描述的電路,控制器進一步包括被構(gòu)造和排列為用來將從p流的p中間結(jié)果組合到最后結(jié)果的電路。
28.根據(jù)權(quán)利要求27中所描述的電路,進一步包括沒有被用于其它的計算中的寄存器T;控制器被進一步構(gòu)造和排列為在探測到中斷后,將結(jié)果重新定向至寄存器T中。
29.根據(jù)權(quán)利要求25中所描述的電路,控制器進一步包括被構(gòu)造和排列為在迭代結(jié)束后重新部署互鎖的電路。
30.一種在流水線安排的執(zhí)行單元中準備軟件指令序列的方法,包括探測序列中被迭代的指令;和排列被迭代的指令的實例來形成一個以上的獨立的不相互依存的流,直到所有的被迭代的指令的迭代結(jié)束,來自一個以上的獨立的流的每一個結(jié)果不被儲存到流水線之外。
31.根據(jù)權(quán)利要求30中所描述的方法,其中探測進一步包括在帶有相同的操作數(shù)和目標的被迭代的指令基礎上識別指令的迭代。
32.根據(jù)權(quán)利要求31中所描述的方法,其中指令的迭代完成算術(shù)的累加。
33.根據(jù)權(quán)利要求31中所描述的方法,其中指令的迭代完成算術(shù)的乘積。
34.根據(jù)權(quán)利要求30中所描述的方法,進一步包括將清除的序列插入軟件指令序列中,清楚的序列將一個以上的獨立的流的每一個的結(jié)果組合入單獨的目標寄存器內(nèi)。
全文摘要
一種在深度,p流水線執(zhí)行單元中運行指令流的方法,包括加載指令流,探測在加載后的指令流中的指令的迭代;在流水線中交叉指令實例的p流;探測迭代交叉的結(jié)束;和在所有的程序化迭代結(jié)束后連接由p流得到的結(jié)果。一種計算電路包括可以儲存操作數(shù)和迭代操作結(jié)果的數(shù)值表現(xiàn)的寄存器;多路器具有被連接的接收寄存器的操作數(shù)的第一輸入,被連接到迭代操作的獨立數(shù)值源上的第二輸入,和輸出,和具有被連接的接收來自多路器的輸出數(shù)值的輸入的操作電路,和連接的將結(jié)果返回寄存器上的輸出。
文檔編號G06F9/32GK1729446SQ200380106996
公開日2006年2月1日 申請日期2003年10月30日 優(yōu)先權(quán)日2002年11月19日
發(fā)明者艾比希吉特·吉麗 申請人:模擬裝置公司