專利名稱:超標量處理器內的指令發出控制的制作方法
技術領域:
本發明涉及數據處理系統。更具體地說,本發明涉及超標量數據處理系統內的指令發出控制。
背景技術:
眾所周知,提供包括多條指令流水線的超標量數據處理系統以使多程序指令流可被并行執行,從而增加處理器的總處理能力的。與這樣的系統有關的問題是程序指令之間的數據相依性可能請求將一個指令的輸出用作另一個指令的輸入,這樣,如果這兩個指令被一起發出的話,則較新指令的真實輸入在需要時將無法得到,因為較舊指令還未計算出該值。為了處理這種情形,已知提供了數據相依冒險檢查機制,該機制對將要發出的程序指令的源和目的寄存器說明符有響應,以在那些指令被一起發出時可識別具有將導致錯誤的數據相依性的任何指令組合。如果檢測到這樣的冒險檢測,則可取消較新指令并使其在稍后的循環中發出以使冒險檢測不再出現。這降低了處理性能,因為并行執行能力未被充分利用。
發明內容
從一個方面來觀察,本發明提供了用于處理數據的設備,所述設備包含多條執行流水線,用于并行執行程序指令序列的程序指令以生成輸出操作數值,各自對應的執行流水線包括相應的多個執行階段,不同類型程序指令的輸出操作數值在不同的執行階段生成;冒險檢測檢查邏輯單元,可用來檢測將要并行發出給所述多條執行流水線的各自對應執行流水線的候選程序指令之間的數據相依冒險,據此所述候選程序指令的第一程序指令的輸出操作數值是所述候選程序指令的第二程序指令的輸入操作數值,并且在檢測到這樣的數據相依冒險時用來生成數據相依冒險信號;數據冒險克服(override)邏輯單元,可用來檢測在請求所述候選程序指令的所述第二程序指令的所述輸入操作數值之前是否會生成所述候選程序指令的所述第一程序指令的所述輸出操作數值,并生成數據冒險克服信號;指令發出控制邏輯單元,可響應所述數據冒險克服信號的接收而克服任何數據相依冒險信號,并允許所述候選程序指令的所述第一程序指令和所述候選程序指令的所述第二程序指令并行發出;以及操作數發送邏輯單元,可用來控制將在執行流水線之間傳送的所述候選程序指令的所述第一程序指令的所述輸出操作數值,以用作所述候選程序指令的所述第二程序指令的所述輸入操作數值。
本發明人認識到,在每條執行流水線上存在多個執行階段并根據有關的程序指令類型在不同執行階段生成輸出操作數值的處理系統內,能夠將程序指令的某些組合一起發出以并行地執行,即使相依兩個指令之間存在數據相依。如果導致數據相依冒險的數據值是這樣的數據值,即其中,輸出操作數值在一個先于其中被請求為相依程序指令形成輸入操作數(若這些指令被一起發出)的執行階段的執行階段被生成,則這是可能的。在這種情形下,盡管存在檢測出的數據相依冒險,可一起并行發出的程序指令組合被檢測并且由這個檢測產生的信號被用來克服數據相依冒險。該機制還可用來控制輸出操作數值在執行流水線之間的傳輸/發送,以在相依程序指令沿指令流水線行進時用作必要的輸入操作數值。
當會了解,本方法可用來保證在具有多條指令流水線(包括兩條以上指令流水線)的系統中數據相依冒險檢查的克服,但是本方法更適合具有兩條指令流水線并且按次序實施程序指令執行的系統。如果允許無序執行,則能夠以相當大地增加處理無序控制所需的復雜性為代價減輕與數據相依性關聯的問題。
當有關的執行階段具有可用來實施不同數據處理操作的不同指令執行邏輯單元時,其中在不同執行階段得到輸出操作數值的情形尤其可能出現。在這樣的系統內,隨著不同類型的操作在不同階段實施,執行工作量在執行階段之間分配。某些指令可能請求將要實施的多個不同類型的操作,這些不同類型的操作在不同執行階段實施,例如在一個階段的移位后面跟有另一個階段的ALU操作。
在各執行階段提供的不同指令執行邏輯單元可采取各種不同的形式,但是在優選實施例中包含了可用來實施數據移位操作、ALU操作和裝入/存儲操作的多個操作之一的邏輯單元。可以方便地將這些操作布置在流水線內,以按順序在各執行階段實施。
在這種配置下,相互之間具有數據相依冒險卻仍可被一起并行發出的候選程序指令包括后面跟有ALU程序指令的移位程序指令;后面跟有裝入/存儲程序指令的移位程序指令;以及后面跟有裝入/存儲程序指令的ALU程序指令。在所有這些情形中,較早指令的輸出操作數值將在其作為已經隨其并行發出的下一個程序指令的輸入操作數值被請求之前在執行流水線階段內獲得。
從另一個方面來觀察,本發明提供了用于處理數據的設備,所述設備包含多個執行流水線部件,用于并行地執行程序指令序列的程序指令以生成輸出操作數值,各執行流水線包括對應的多個執行階段部件,不同類型程序指令的輸出操作數值在不同的執行階段部件內生成;數據冒險檢查部件,用于檢測將要并行地發出給所述多個執行流水線部件的各執行流水線部件的候選程序指令之間的數據相依冒險,從而所述候選程序指令的第一程序指令的輸出操作數值是所述候選程序指令的第二程序指令的輸入操作數值,并且在檢測到這樣的數據相依冒險時來生成數據相依冒險信號;數據冒險克服部件,用于檢測在所述候選程序指令的所述第二程序指令的所述輸入操作數值被請求之前是否生成了所述候選程序指令的所述第一程序指令的所述輸出操作數值,并生成數據冒險克服信號;指令發出控制部件,響應所述數據冒險克服信號的接收,以克服任何數據相依冒險信號,并允許所述候選程序指令的所述第一程序指令和所述候選程序指令的所述第二程序指令并行發出;以及操作數發送部件,用于控制將在執行流水線部件之間傳送的所述候選程序指令的所述第一程序指令的所述輸出操作數值,以用作所述候選程序指令的所述第二程序指令的所述輸入操作數值。
從又一個方面來觀察,本發明提供了用于處理數據的方法,所述方法包含下列步驟在多條執行流水線內并行地執行程序指令序列的程序指令以生成輸出操作數值,各執行流水線包括對應的多個執行階段,不同類型程序指令的輸出操作數值在不同執行階段生成;檢測將要并行發出給所述多個執行流水線的各執行流水線的候選程序指令之間的數據相依冒險,從而所述候選程序指令的第一程序指令的輸出操作數值是所述候選程序指令的第二程序指令的輸入操作數值,并且在檢測到這樣的數據相依冒險時生成數據相依冒險信號;檢測在請求所述候選程序指令的所述第一程序指令的所述輸入操作數值之前是否生成了所述候選程序指令的所述第一程序指令的所述輸出操作數值并生成數據冒險克服信號;響應所述數據冒險克服信號的生成,克服任何數據相依冒險信號,并允許所述候選程序指令的所述第一程序指令和所述候選程序指令的所述第二程序指令并行發出;以及控制將在執行流水線之間傳送的所述候選程序指令的所述第一程序指令的所述輸出操作數值,以作為所述候選程序指令的所述第二程序指令的所述輸入操作數值。
通過下面對說明性實施例的詳細描述并結合附圖,本發明上述的和其他的目的、特征和優點將將會顯而易見。
圖1示意說明訪問共享寄存器組的多條執行流水線的執行階段;圖2示意說明包括冒險檢測檢測、冒險克服和交叉發送邏輯單元的兩條指令流水線的部分;圖3是示意說明用于控制指令發出以及并行發出指令的操作數交叉發送的電路部分的圖示;以及圖4是示意說明指令發出和交叉發送的控制的流程圖。
具體實施例方式
圖1示意說明包括兩條執行流水線的多發出數據處理系統。應知,圖1是高度示意的表示且實際上在系統內大體上會需要并存在許多附加的功能元件。為了簡便起見,不在圖1中對這些功能元件進行說明。
圖1說明了每條執行流水線是如何從共享寄存器組2中得到它的源輸入操作數值的。來自每條執行流水線的目的輸出操作數值被同樣地寫回到寄存器堆2中。在這個示范實施例中,每條執行流水線被表示為具有三個執行階段E1、E2和E3,它們分別包括了移位器4和4′、算術邏輯部件6和6′、以及裝入/存儲部件8和8′。
沿各執行流水線行進的指令連同所選擇的源操作數值可通過移位器4和4′被移位操作、通過算術邏輯部件6和6′被算術和邏輯操作、通過裝入/存儲部件8和8′被存儲器訪問操作。將會了解到,還可利用不同數量的執行階段,且相依指令執行邏輯單元(即移位器4和4′、算術邏輯部件6和6′、以及裝入/存儲部件8和8′)的設置可以根據特定的實際應用而變化。還將了解到,許多的或大部分的指令將僅僅使用這些不同指令執行電路的子電路來實施它們預定的處理操作。作為一例,純移位操作的指令將通常只使用移位器4和4′。到第一執行階段E1結束時將獲得來自該移位操作的輸出操作數值。同樣地,純算術/邏輯指令將可能只使用ALU部件6和6′并且到第二執行階段E2結束時將獲得其輸出操作數值。在第二執行階段E2開始之前,算術邏輯部件6和6′不請求其輸入操作數值被提供。因此,如果在另一條執行流水線上利用移位操作計算這些輸入操作數值,則到第一執行階段E1結束時在該另一條執行流水線上將提供這個移位值并可在執行流水線之間發送這個移位值,以在第二操作階段E2的開始時作為請求該值的ALU部件6和6′的輸入操作數值。這代表并行進入兩條執行流水線的指令的操作數的交叉發送。以類似的方式,在第三執行階段E3開始之前,裝入/存儲部件8和8′不請求其輸入操作數值,并且因此可接收已經由ALU部件6和6′或移位器4和4′生成的、相鄰執行流水線輸出操作數值作為輸入操作數值。
圖2示意說明使用上述方法的兩條指令流水線的部分。讀取和指令發出塊10的作用是從指令高速緩沖存儲器中取得多個程序指令(候選程序指令),并檢測這些程序指令是需要個別發送(沿流水線0)還是可以沿兩條流水線(流水線0和1)并行發出。數據冒險檢測部件12的作用是檢查(部分解碼)作為候選指令的指令,它們用以被并行發出以確定新指令是否為請求在用作將要發出的舊候選程序指令的目的寄存器的寄存器內的輸入操作數值。這就是數據冒險檢測,按照慣例實施并可使用記分板記錄數據相依性。這樣的標準數據冒險檢測不僅適用于沿執行流水線并行發出的候選程序指令,而且還可出現在試圖發出對已經沿執行流水線行進的指令有相依性的、但在正被檢查的候選程序指令請求該目的值時還未及時生成其目的(輸出)值的指令時。在指令流水線內的待處理程序指令之間的這類數據冒險檢測是公知的,將不再這里做進一步描述。
當兩個指令沿執行流水線并行行進時,由較舊指令生成、被較新指令請求的輸出數據將在該數據被較新指令實際請求之前生成,如果那些指令是這樣,則當這些數據冒險在并行發出的候選指令之間發生時,本方法利用冒險克服邏輯單元16提供了克服已檢測數據冒險的額外能力。如果此條件滿足,則可使有關的數據在執行流水線之間交叉發送并使兩個指令一起發出。發送控制邏輯單元18同時響應于常規的數據冒險檢測邏輯單元12和冒險克服檢測邏輯單元16,以發出來自正被檢查的候選指令對的單個或兩個指令。如果被請求在執行流水線之間發送且在冒險克服檢測邏輯單元16涉及的定時條件下該發送被檢測為可能,則該發送由發送控制邏輯單元20控制。
在執行流水線自身內,在達到多執行階段之前,分別是解碼器階段。如前所述,執行階段可實施不同的數據操作形式。正如由階段之間雙線箭頭表示的,指定解碼控制信號的指令和操作數在階段之間傳遞。在被請求時,可利用多路復用器22、24使操作數在執行流水線之間發送以在由發送控制邏輯單元20生成的交叉發送控制信號的控制下用選自另一條流水線的操作數值代替沿該操作數的流水線行進的當前操作數值(或實際上為空格保持器)。在此示范實施例中,較舊指令總是被發進流水線0,并且因此只請求從流水線0到流水線1的交叉發送。
圖3示意說明控制信號的生成,所述控制信號用于檢測可能出現的冒險并克服該冒險以及控制交叉發送。解碼器26、28、30分別為指定用于較舊指令的目的寄存器以及由較新指令指定的兩個源寄存器解碼。比較器32、34確定用于較舊指令的目的寄存器是否與用于較新指令的兩個源寄存器中的任一個是相同的,并且在檢測到這種情況時生成數據冒險信號。
解碼器26、28、30還對它們的指令作出響應來確定執行階段,從而在較舊指令時將獲得目的寄存器值并且較新指令將請求源寄存器值。在這些條件被滿足的執行階段根據有關的指令類型而改變。作為一例,在圖1的系統中的移位指令將請求其源值被早提供(在執行階段E1開始時),但是還將早生成其目的值(在執行階段E1結束時)。相反地,裝入/存儲操作將不請求提供其源值直到很晚(在執行階段E3開始時),但是生成其目的值同樣很晚(在執行階段E3結束時)。比較器36、38的作用是檢測由較舊指令產生的目的值是否將在因為需要較新指令而被請求的源值中的任一個之前獲得。如果出現這樣的情形,則這些比較器36、38的輸出可以和“與”門40、42一起使用以克服任何檢測到的數據冒險信號。“或”門42對還未被重寫的任何數據冒險信號(用于較新指令的任一輸入操作數值)作出響應,如果這樣的數據冒險存在且不能被交叉發送解決則禁止雙重發出。如果數據冒險已被檢測并已被重寫,則“與”門44、46為必要之處的各源操作數生成交叉發送使能信號。這些交叉發送控制信號被用來或者直接地控制圖2的多路復用器22、24,或者在作了進一步處理后以適應另外出現的發送請求。進一步處理的另一例可涉及對由解碼器26生成的信號之跟蹤,將目的階段生成其結果值的時間表示為該時或該時之后,可在執行流水線之間傳送操作數值以解決數據相依性。
圖4是示意說明多指令發出的控制的流程圖。在步驟48,雙發出的兩個候選指令被接收。步驟50確定在這兩個指令之間是否存在有數據冒險,例如較新指令請求將較舊指令的目的值作為其源之一。如果這樣的數據冒險不存在,則處理可轉到步驟52,在該步驟可將兩個指令并行發出至兩個執行流水線。
如果在步驟50檢測到數據冒險,則處理轉到步驟54,進行關于是否由于交叉發送可行而克服這個數據冒險的檢查。交叉發送是否可行將取決于有關指令的特定類型。如果較舊指令是移位指令,則在圖1的示例中,這個指令可以和ALU指令或裝入/存儲指令一起發出。如果較舊指令是ALU指令,則這個指令可以和裝入/存儲指令一起并行發出。這些特例并不對本技術范圍的普遍性構成限制。
如果步驟54確定交叉發送不能克服在步驟50處檢測到的數據冒險,則處理轉到步驟56,在該步驟較舊指令被單獨發送并且在下一個處理循環中發出的、提供別的數據相依性的較新指令不會阻止該發出。如果在步驟54處交叉發送作為適合于克服數據冒險而被確定,則處理轉到步驟58,在該步驟必要的交叉發送被設置成在適當的時間發生,此時指令沿執行流水線行進并且兩個指令在步驟52一起發出。
如上所述,圖2說明了由一起被并行發出至兩條執行流水線的指令使用的交叉發送路徑。本領域的技術人員當會了解,為除了在同一時間并行發出到這兩條執行流水線的那些指令,還在執行流水線之間實施其他指令的發送。依照常規方法,這種類型的發送可在對保持在記分板14中的數據的相依性上得到控制。圖2所示的實施例被簡化,實際上在流水線之間任一方向上的發送可在各個階段被實施,不僅可處理同一時間并行發出至兩條執行流水線的指令,而且可處理不同時間發出的指令。對于為了在不同時間發出的指令而實施的被記分板控制時的正常發送操作和為了在同一時間一起發出的指令而依照本方法實施的發送,對關于哪個操作數應當在執行流水線之間傳遞以及在何時進行的選擇可被合并。沿流水線行進以控制發送多路復用器的控制信號和對這兩個不同類型的選擇可被合并而由相同的硬件來實施。執行發送的硬件不必了解發送是為了在不同時間發出的指令而實施的傳統記分板類型發送的結果還是為了在相同時間發出的指令而實施的發送的結果,因為其被確定執行流水線之間的交叉發送可解決數據相依性,即使那些指令是在同一時間發出的。因此,與記分板14一起操作的數據冒險檢測邏輯單元12連同冒險克服檢測邏輯單元16提供了給圖2的發送控制部件20的輸入,發送控制部件20產生與指令一起沿執行流水線行進的全部發送控制信號以控制由兩類情形產生的發送。在兩個指令沿執行流水線行進的期間,在通過發送控制邏輯單元20發送控制可解決該數據相依性的場合盡管存在來自數據冒險檢測邏輯單元12的數據相依性信號,冒險克服檢測邏輯單元16還向發送控制邏輯單元18提供輸入以允許雙指令在同一時間的并行發出。
盡管已經參考附圖對本發明的說明性實施例進行了詳細地描述,但是應當理解,本發明不限于那些明確的實施例,在不背離如所附權利請求書規定的本發明的范圍和精神的條件下,本領域技術人員可對它們作出各種變更和修改。
權利要求
1.一種處理數據的設備,所述設備包括多條用于并行地執行一程序指令序列的程序指令來生成輸出操作數值的執行流水線,各執行流水線包含對應的多個執行階段,不同類型程序指令的輸出操作數值在不同執行階段生成;數據冒險檢測邏輯單元,可檢測要并行地發出到所述多條執行流水線的各執行流水線的候選程序指令之間的數據相依冒險,所述候選程序指令的第一程序指令的輸出操作數值是所述候選程序指令的第二程序指令的輸入操作數值,并在檢測到這樣的數據相依冒險時生成數據相依冒險信號;數據冒險克服邏輯單元,可檢測在所述候選程序指令的所述第二程序指令的所述輸入操作數值被請求之前是否生成了所述候選程序指令的所述第一程序指令的所述輸出操作數值,并生成數據冒險克服信號;指令發出控制邏輯單元,可響應所述數據冒險克服信號之接收而克服任何數據相依冒險信號,并允許所述候選程序指令的所述第一程序指令和所述候選程序指令的所述第二程序指令并行地發出;以及操作數發送邏輯單元,可控制將在執行流水線之間傳送的所述候選程序指令的所述第一程序指令的所述輸出操作數值,以用作所述候選程序指令的所述第二程序指令的所述輸入操作數值。
2.如權利要求1所述的設備,其中,所述多條執行流水線包括按序進行程序指令的執行的兩條執行流水線。
3.如權利要求1所述的設備,其中,所述多個執行階段包含各個不同的指令執行邏輯單元,可按請求為執行在所述多個執行階段之間行進的程序指令而實施不同的數據處理操作。
4.如權利要求3所述的設備,其中,對于至少某些類型的程序指令,生成至少一個輸出操作數值所需的所有被請求的處理操作,在所述多個執行階段的最后一個階段到達之前完成。
5.如權利要求3所述的設備,其中,對于至少某些類型的程序指令,至少一個輸入操作數值在所述多個執行階段的第一個階段到達后才被請求。
6.如權利要求3所述的設備,其中,所述各個不同的指令執行邏輯單元實施下列操作中的一個或多個數據移位操作;ALU操作;以及裝入/存儲操作。
7.如權利要求1所述的設備,其中,各執行流水線的所述多個執行階段構成一個執行階段序列,其中包括可實施數據移位操作的移位執行階段、可實施ALU操作的ALU執行階段、可實施裝入/存儲操作的裝入/存儲執行階段。
8.如權利要求7所述的設備,其中,候選程序指令具有數據相依冒險ALU程序指令所跟隨的移位程序指令被并行地發出;裝入/存儲程序指令所跟隨的移位程序指令被并行地發出;以及裝入/存儲程序指令所跟隨的ALU程序指令被并行地發出。
9.一種用于處理數據的設備,所述設備包括多個執行流水線部件,用于并行地執行一個程序指令序列的程序指令來生成輸出操作數值,各執行流水線包含對應的多個執行階段部件,不同類型程序指令的輸出操作數值在不同執行階段部件內生成;數據冒險檢測部件,用于檢測要并行地發出到所述多個執行流水線部件的各執行流水線部件的候選程序指令之間的數據相依冒險,所述候選程序指令的第一程序指令的輸出操作數值是所述候選程序指令的第二程序指令的輸入操作數值,并在檢測到這樣的數據相依冒險時生成數據相依冒險信號;數據冒險克服部件,用于檢測在所述候選程序指令的所述第二程序指令的所述輸入操作數值被請求之前是否生成了所述候選程序指令的所述第一程序指令的所述輸出操作數值,并生成數據冒險克服信號;指令發出控制部件,響應所述數據冒險克服信號的接收而克服任何數據相依冒險信號,并允許所述候選程序指令的所述第一程序指令和所述候選程序指令的所述第二程序指令并行地發出;以及操作數發送部件,用于控制將在執行流水線部件之間傳送的所述候選程序指令的所述第一程序指令的所述輸出操作數值,以用作所述候選程序指令的所述第二程序指令的所述輸入操作數值。
10.一種用于處理數據的方法,所述方法包括下列步驟在多條執行流水線內并行地一個執行程序指令序列的程序指令來生成輸出操作數值,各執行流水線包含對應的多個執行階段,不同類型程序指令的輸出操作數值在不同執行階段生成;檢測要并行地發出到所述多個執行流水線的各執行流水線的候選程序指令之間的數據相依冒險,所述候選程序指令的第一程序指令的輸出操作數值是所述候選程序指令的第二程序指令的輸入操作數值,并在檢測到這樣的數據相依冒險時生成數據相依冒險信號;檢測在所述候選程序指令的所述第二程序指令的所述輸入操作數值被請求之前是否生成了所述候選程序指令的所述第一程序指令的所述輸出操作數值,并生成數據冒險克服信號;響應所述數據冒險克服信號的生成來克服任何數據相依冒險信號,并允許所述候選程序指令的所述第一程序指令和所述候選程序指令的所述第二程序指令并行地發出;以及控制將在執行流水線之間傳送的所述候選程序指令的所述第一程序指令的所述輸出操作數值,以用作所述候選程序指令的所述第二程序指令的所述輸入操作數值。
全文摘要
一種數據處理系統包括多條執行流水線,每條執行流水線具有多個執行階段(E1、E2、E3),該數據處理系統可具有被一起并行發出的指令,盡管它們之間有數據相依性,其條件是檢測到較舊指令的結果操作數值將在一個請求該結果操作數值作為較新指令的輸入操作數的執行階段之前的執行階段生成,且因此所述操作數值能夠在執行流水線之間交叉發送來解決數據相依性。
文檔編號G06F9/38GK1869920SQ20061009242
公開日2006年11月29日 申請日期2006年5月25日 優先權日2005年5月26日
發明者D·J·威廉遜, G·A·哈里斯, S·J·希爾 申請人:Arm有限公司