專利名稱:在計算機(jī)處理器中發(fā)出指令的方法以及計算機(jī)處理器的制作方法
技術(shù)領(lǐng)域:
一般地說,本發(fā)明涉及計算機(jī)處理器領(lǐng)域,更具體地說,涉及提高同時多線程處理器中的吞吐量。
背景技術(shù):
計算機(jī)處理器是任何計算機(jī)系統(tǒng)的心臟。它們負(fù)責(zé)處理使計算機(jī)的所有功能成為可能的那些指令。計算機(jī)處理器還被稱作中央處理單元(CPU)和微處理器。一個流水線式計算機(jī)處理器有多個級,在處理階段每個指令必須穿過這些級。一個示例性五級流水線式處理器含有如下各級取指、解碼、存儲器訪問、執(zhí)行和寫回。在取指級,一個指令被從寄存器或緩沖器取來,該指令在解碼級被解碼,以確定要進(jìn)行的操作的類型以及需要什么操作數(shù)來完成該操作。在存儲器訪問級提取所需要的操作數(shù),并在執(zhí)行階段執(zhí)行該指令。然后,執(zhí)行指令的結(jié)果在寫回級就寫回存儲器。許多處理器有多于五級,一些處理器有不只一條流水線。然而,流水線式處理器的一些特性對于所有流水線都是相同的。具體地說,一旦一個指令進(jìn)入一個流水線,由該指令造成的任何拖延(stall)將造成整個流水線拖延,當(dāng)該流水線被拖延時,便沒有輸出產(chǎn)生,于是性能下降。這樣,防止流水線拖延是實現(xiàn)微處理器最佳性能的一個重要因素。
微處理器按照由時鐘協(xié)調(diào)的定時調(diào)度運(yùn)行。時鐘提供定時信號,稱作周期。指令,操作數(shù)和結(jié)果的運(yùn)動最好在每個時鐘周期上完成。在一個流水線內(nèi)的一個給定級,如執(zhí)行級,可能用不只一個時鐘周期來完成。然而,該執(zhí)行級最好被分成多個子級,從而在每個時鐘周期結(jié)束時能產(chǎn)生某種輸出并允許進(jìn)入下一級。以這種方式,微處理器在每個時鐘周期結(jié)束時產(chǎn)生某種輸出。時鐘周期和時鐘頻率二者都能用來描述處理器的速度。時鐘周期短的計算機(jī)將有高的時鐘頻率。一般地,時鐘頻率越高,則計算機(jī)越快,或者更準(zhǔn)確地說,該計算機(jī)能更快速地處理指令。
一個線程是若干計算機(jī)指令形成的線或流,當(dāng)它被處理時能達(dá)到計算機(jī)或計算機(jī)用戶的某個目的。同時多線程處理器允許并發(fā)地執(zhí)行兩個或更多個可能獨立的指令流。盡管在一個時刻只有一個指令能占有一個流水線的任何一級,讓來自其他線程的指令準(zhǔn)備好供處理能提高系統(tǒng)性能。為最有效地使用可得到的硬件和避免功能重復(fù),某些流水線資源在所有線程當(dāng)中共享。如果一個給定線程占有一個共享資源,它的指令流必定在某一點與其他線程的指令流匯合。為了本申請的目的,來自任何給定線程的指令匯合到一個共享流水線資源中的動作被定義為“發(fā)出(issue)”。在一個指令發(fā)出后,數(shù)據(jù)依賴性會使它拖延在一個共享資源中,直至依賴性解除為止,于是拖延了需要這同一資源的所有線程。這一問題的影響在高頻設(shè)計中被放大,因為流水線深度要求在知道操作數(shù)可用性之前一個或多個周期時做出發(fā)出一個特定指令的決定。這增加了一個不獨立的指令為等待所需操作數(shù)而在共享資源中拖延的機(jī)會。如果不是這樣,而是讓指令的發(fā)出延遲到知道操作數(shù)可用性之時,那么在不獨立指令需要一些操作數(shù)時這些操作數(shù)本已準(zhǔn)備好的情況下,系統(tǒng)的總體性能會受到負(fù)面影響。由于這增大的延遲,單個線程的性能也會受到影響,而多線程性能和/或效率會由于沒有利用每個可能的機(jī)會從給定線程發(fā)出指令而受到影響。
先前克服這一問題的嘗試涉及封鎖一個具有依賴性的線程使其操作數(shù)數(shù)據(jù)準(zhǔn)備好轉(zhuǎn)發(fā)之前不發(fā)出指令。對于較低頻的設(shè)計,這是一個適當(dāng)?shù)慕鉀Q方案,但對于高頻設(shè)計,這不是最佳的,因為高頻設(shè)計由于其流水線深度使它必須在知道操作數(shù)可用性之前一個或多個周期時做出發(fā)出指令的決定。在高時鐘頻率的處理器中使用這一先有方法,會使得在每次遇到依賴性時對特定線程的總延遲引入一些懲罰性周期,因為沒能在操作數(shù)數(shù)據(jù)變?yōu)榭捎脮r立即使用該操作數(shù)數(shù)據(jù)。
發(fā)明內(nèi)容
在同時多線程微處理器中發(fā)出指令的方法。該微處理器包括至少一個多級流水線用于處理指令。該處理器還包括一個高速緩沖存儲器、用于每個線程的多個獨立的輸入緩沖器以及指令發(fā)出邏輯。指令發(fā)出邏輯位于輸入緩沖器和多級流水線之間。該方法包含以等于微處理器時鐘速率的速率在指令發(fā)出邏輯中接收指令組的步驟,其中每個指令組包含來自每個獨立輸入緩沖器的一個指令。然后指令發(fā)出邏輯預(yù)測在其中每個指令的結(jié)果將可用于轉(zhuǎn)發(fā)的流水線級。然后存儲這一流水線級信息直至該指令達(dá)到所預(yù)測的級。然后指令發(fā)出邏輯識別需要來自先前指令的結(jié)果的任何不獨立指令,該先前指令處在該不獨立指令的臨界距離之內(nèi)。臨界距離等于該不獨立指令將需要結(jié)果的那一級和將會得到該結(jié)果的那一級之間的級數(shù)?;谠摿魉€的當(dāng)前內(nèi)容,指令發(fā)出邏輯發(fā)出那些將要完成流水線中所有各級而不會造成拖延的概率超過預(yù)定閾值的所有指令。指令發(fā)出邏輯保持其概率低于預(yù)定閾值的所有指令,其中被指令發(fā)出邏輯保持的指令將在其不造成流水線中拖延的概率上升到該閾值之上以后被發(fā)出。
本發(fā)明的一個目的是提高同時多線程微處理器的性能。
本發(fā)明的又一個目的是確定一個指令造成拖延的概率并根據(jù)所確定的概率推測性地發(fā)出指令。
現(xiàn)在將參考附圖更詳細(xì)地描述本申請的發(fā)明,這些附圖僅是作為舉例給出,其中圖1是在其中能利用本發(fā)明的一個計算機(jī)系統(tǒng)的方塊圖;圖2是具有本指令發(fā)出邏輯的中央處理單元的示意圖;圖3是本指令發(fā)出邏輯的方塊圖;圖4是本方法的一般流程圖;圖5是本指令發(fā)出邏輯的示例性決策樹;以及圖6顯示一個具有雙流水線的處理器中的指令發(fā)出邏輯。
具體實施例方式
這里描述的解決方案是根據(jù)當(dāng)指令需要操作數(shù)時將得到所需操作數(shù)的概率推測性地發(fā)出來自給定線程的指令。如果當(dāng)前流水線狀態(tài)表明有大的概率該指令將需要拖延在一個共享資源中以等待操作數(shù),則指令的發(fā)出被封鎖。一旦指令將會拖延的概率低于某個閾值,則該指令被允許發(fā)出。
圖1是方塊圖,顯示一個能利用本方法的計算機(jī)系統(tǒng)的主要部件。有多線程能力的CPU 100是一個微處理器,它能處理指令的多個線程。多線程CPU通常比單線程CPU效率高,所以能比嚴(yán)格地在一個指令線程上操作的CPU有更好的總體性能。CPU 100與存儲器105、控制單元110、電源控制單元115、顯示控制單元125以及I/O控制單元135電連接。存儲器105是隨機(jī)存取存儲器(RAM),它與高速緩沖存儲器的區(qū)別在于高速緩沖存儲器位于CPU 100內(nèi)部??刂茊卧?10向CPU 100內(nèi)的多個寄存器和緩存器提供控制信號,告訴寄存器何時接受和何時不接受新的數(shù)據(jù)。這些控制信號與系統(tǒng)時鐘同步。系統(tǒng)時鐘與圖1中的每個部件電連接,唯電源控制單元115除外。為了清楚,這些連接沒有示出。電源控制單元115向圖1中的每個部件分配電源。顯示控制單元125接收來自CPU 100的顯示信息并控制如何在顯示單元120上顯示該信息。I/O控制單元135接收來自鍵盤130和鼠標(biāo)器140的輸入并將輸入轉(zhuǎn)換成機(jī)器可讀形式,然后將其轉(zhuǎn)發(fā)給CPU 100。當(dāng)打印機(jī)連接到圖1的系統(tǒng)時,I/O控制單元135還會接收來自CPU 100的信息并將這一信息轉(zhuǎn)換成打印機(jī)指令。
圖2是多線程CPU 100的更詳細(xì)示意圖。CPU輸入緩沖器205為來自多個指令線程每一個的三個指令擔(dān)任暫時存儲器。當(dāng)然,在其他實施例中能有多于三個或少于三個緩沖器用于每個指令流。第一列緩沖器保持來自第一指令線程的三個指令。第二列緩沖器保持來自第二指令線程的三個指令。這一暫時存儲器系統(tǒng)重復(fù)CPU上存在的那么多緩沖器列,即直至第n列緩沖器被來自第n線程的指令充滿。本指令發(fā)出方法是靈活的,能用于CPU所能接受的任何數(shù)量線程。來自每列緩沖器的一個指令進(jìn)入指令發(fā)出邏輯200,在那里識別那一組中任何指令的依賴性問題。如果發(fā)現(xiàn)一個指令需要一個操作數(shù)而當(dāng)該指令需要它時它可能不會被得到,則作為該指令來源的線程被從供發(fā)出的候選線程池中拋出,這里“發(fā)出”是指向流水線轉(zhuǎn)發(fā)一個指令供處理。然后,最不可能在流水線中造成拖延的指令線程被發(fā)出。這并不是說保證整個線程穿過該流水線而不受中斷。在優(yōu)選實施例中,指令發(fā)出邏輯200評估每個時鐘周期上造成拖延的概率。這樣,如果發(fā)現(xiàn)來自當(dāng)前被處理的線程的一個指令有造成拖延的高概率,則那個線程將被延時,而來自另一線程的一個指令將會發(fā)出。當(dāng)一個指令被發(fā)出時,它進(jìn)入該線程流水線各級210的第一級“A”。不同的流水線有不同的級數(shù),圖2顯示本指令發(fā)出邏輯與具有任何級數(shù)的流水線兼容。在流水線210的每一級,對指令進(jìn)行不同的操作。級A、B、C、W、X、Y和Z是被共享的資源,它們含有來自不同線程的指令的混合,然而,任何一級在任何給定時刻只含有一個指令。指令發(fā)出邏輯200必須從n個線程中選擇適當(dāng)?shù)闹噶顓R合到被共享的資源中。在這個例子中,要求指令在離開級B之前解除它們的依賴性。在級B,需要由該指令操作的操作數(shù)。級Y代表流水線中的其指令結(jié)果可能被轉(zhuǎn)發(fā)到級B中的不獨立指令的第一次機(jī)會。這樣,在這個例子中,該流水線有一個四個時鐘周期的“臨界范圍”,如果假定總共有七級而且每級只需一個時鐘周期的話。臨界范圍定義在能發(fā)出一個不獨立指令而不在流水線中造成拖延之前在它所依賴的指令發(fā)出之后該不獨立指令必須延遲多久。當(dāng)把本方法應(yīng)用于這個例子時,有依賴性的指令將被封鎖發(fā)出,直至它所依賴的指令達(dá)到級W。通過以這種方式延遲發(fā)出,不獨立指令將在它所依賴的指令達(dá)到級Y的同時達(dá)到級B,假定不存在流水線保持的話。在發(fā)出之后,該不獨立指令能繼續(xù)深入該水線210而不會在任何被共享的資源中拖延,從而對其他線程的執(zhí)行造成的影響最小。這一技術(shù)實現(xiàn)多線程吞吐量最大化。如果這不獨立指令的發(fā)出不被延遲的話,這不獨立指令將在它所依賴的指令到達(dá)級Y之前到達(dá)級B,造成該流水線拖延并影響所有其他線程的性能。封鎖不獨立指令的發(fā)出允許其他無關(guān)聯(lián)的指令使用“指令時隙(instruction slot)”,否則的話這些“指令時隙”會被封鎖該流水線的不獨立指令浪費掉了。
圖3是指令發(fā)出邏輯200的更詳細(xì)示圖,指令發(fā)出邏輯200有若干輸入緩沖器300,其數(shù)量與CPU輸入緩沖器的數(shù)量相等。輸入緩沖器300與結(jié)果預(yù)測單元305相連,它預(yù)測并暫時存儲流水線內(nèi)的一級,在該級每個指令將首次使其結(jié)果可被不獨立指令使用,結(jié)果預(yù)測單元305還確定每個指令在該流水線內(nèi)進(jìn)行處理期間需要什么資源。這樣,也能避免在共享資源上的沖突,如特定存儲器陣列資源。結(jié)果預(yù)測單元305連接于識別與延時單元310,它識別不獨立指令并使不獨立指令延遲,直至它們的操作數(shù)來源指令不再處在臨界距離之內(nèi)時為止。識別與延時單元310根據(jù)該流水線的當(dāng)前內(nèi)容以及由結(jié)果預(yù)測單元305提供的信息,確定一個特定指令是否應(yīng)被延遲發(fā)出。識別與延時單元310還延時那些對一共享資源(如特定存儲器陣列)有沖突的指令。在指令發(fā)出邏輯中的最后一個單元含有邏輯輸出緩沖器315。對于單流水線處理器,邏輯輸出緩沖器的作用是具有“n”個輸入和只有一個輸出的多路復(fù)用器。在優(yōu)選實施例中,在輸出緩沖器315中的所有指令都已被確定為不大可能在該流水線中造成拖延。所以輸出緩沖器315只是簡單地作為一個多路復(fù)用的FIFO(先進(jìn),先出)緩沖器。在每個時鐘周期從輸出緩沖器315發(fā)出的指令直接進(jìn)入該流水線的第一級接受處理。
圖4是一個流程圖,顯示由指令發(fā)出邏輯完成的步驟。優(yōu)選地,每個步驟在一個時鐘周期內(nèi)執(zhí)行,任何需要不只一個周期的步驟能被分成若干子步驟,從而在每個時鐘周期結(jié)束時產(chǎn)生一個輸出。在步驟400,發(fā)出邏輯從CPU中的每個指令線程接收一個指令。在步驟405,預(yù)測一個指令在其結(jié)果可供轉(zhuǎn)發(fā)之前必須達(dá)到的級。這些預(yù)測用于確定其后的一個不獨立指令是否在該指令的臨界范圍內(nèi)。在優(yōu)選實施例中,在這些指令達(dá)到流水線中可用它們的結(jié)果的級之后,被預(yù)測的級信息被清倉。還有,在指令發(fā)出(進(jìn)入流水線)之后,根據(jù)流水線的當(dāng)前內(nèi)容,以每個時鐘周期的頻率,對預(yù)測的級信息進(jìn)行更新。在步驟410,至少是部分地通過對指令解碼,識別出指令所需操作數(shù)。以這種方式還能識別共享資源沖突。在步驟415,流水線的當(dāng)前內(nèi)容被檢驗,由此得到的信息用于更新級預(yù)測結(jié)果,操作數(shù)可用性以及其他共享資源的沖突(如特定存儲器)。在步驟420,可能有沖突的那些指令被加以標(biāo)志,從而使指令發(fā)出邏輯能計算那些指令造成拖延的概率。在步驟425,確定造成拖延的似然性。如果造成拖延的似然性低于一個閾值水平,例如50%,則允許該指令發(fā)出(步驟435)。如果確定在一個流水線中造成拖延的概率超過閾值水平,則該指令被延遲一個或多個時鐘周期(步驟430)。被延遲的指令在每個時鐘周期都被重新估價,并在流水線內(nèi)容表明造成拖延的概率已降到閾值水平之下時立即被允許發(fā)出。
圖5是流程圖,顯示一旦一個指令已被標(biāo)記為有潛在沖突時的后續(xù)步驟。在步驟500中,確定這潛在沖突是否是一個操作數(shù)沖突。如果沒有操作數(shù)沖突,則在步驟505確定是否存在一個共享資源沖突。如果沒有共享資源沖突,則在步驟510允許該指令發(fā)出。然而,如果在步驟500或505中確定存在一個沖突,則指令發(fā)出邏輯在步驟515確定這兩個沖突的指令是否在彼此的臨界范圍內(nèi)。使用圖2的例子,那里操作數(shù)沖突的臨界范圍是四個時鐘周期,如果這不獨立指令落后于它所依賴的指令(“獨立”指令)、四個或更多個流水線級,則在步驟510允許發(fā)出這不獨立指令。然而,如果這不獨立指令在這“獨立”指令之后不足四級,則必須計算造成拖延的概率。共享資源沖突的臨界范圍將比操作數(shù)沖突的臨界范圍少一個或多個時鐘周期,這取決于所涉及的資源。在步驟520中,在流水線中造成拖延的概率是根據(jù)該臨界范圍以及流水線的當(dāng)前內(nèi)容確定的。在步驟525,該概率與一個閾值進(jìn)行比較,該閾值可以改變。如果概率低于閾值,則該指令被允許發(fā)出。然而,如果造成拖延的概率在該閾值之上,則該指令被延遲。被延遲的指令可在每個時鐘周期有被重計算的概率。當(dāng)造成拖延的概率最終降到閾值以下時,該指令被允許發(fā)出。
圖6顯示具有雙指令流水線210和605的CPU 600中處于操作狀態(tài)的當(dāng)前指令發(fā)出邏輯200。在這一實施例中,指令發(fā)出邏輯200仍從多個線程,從CPU緩沖器205,接收多個指令。然而,指令發(fā)出邏輯200在每個時鐘周期發(fā)出兩個指令,從而在每個時鐘周期每個流水線210和605各接收一個指令供處理。在這一實施例中的指令發(fā)出邏輯在確定造成拖延的概率時考慮兩個流水線的內(nèi)容。
使用本方法還能實現(xiàn)單線程微處理器的最小遲時。根據(jù)將能得到其操作數(shù)的概率推測性地發(fā)出不獨立指令,通過在“最佳”時刻發(fā)出指令,能改善單線程的性能。封鎖不獨立指令的發(fā)出,直至它有高概率得到它的操作數(shù),這就不會招致對帶有依賴性的線程的懲罰。預(yù)測性發(fā)出的指令仍能在它們的操作數(shù)恰好變?yōu)榭捎脮r使用這些操作數(shù)。通過允許處理器利用在給定線程上能取得進(jìn)展時的每個可能的發(fā)出機(jī)會,來減小正在進(jìn)行的全部指令流的總延遲,從而改善多線程和單線程性能。
如果根據(jù)某些預(yù)測,預(yù)測性地允許發(fā)送指令,則有可能該預(yù)測是不正確的。這種情況的一個例子是一個依賴于可高速緩存負(fù)載的指令的發(fā)出。為使單線程延遲盡可能小,可能在假定一個指令所依賴的負(fù)載將是一個高速緩存命中的情況下預(yù)測性地發(fā)出這一指令。如果在發(fā)出時刻之后認(rèn)識到該負(fù)載是一個高速緩存未命中,則這個不獨立指令將被迫等在共享資源中直至高速緩存未命中被解決為止。
前文中對具體實施例的描述如此充分地揭示了本發(fā)明的一般特性,以致其他人應(yīng)用當(dāng)前的知識能容易地修改這些具體實施例和/或使其適應(yīng)于其他應(yīng)用而不脫離其通用概念。所以,這些適應(yīng)和修改應(yīng)該成為和打算成為處于所公開的實施例的等效物的意義和范圍內(nèi)。應(yīng)該理解,這里所用術(shù)語的措辭是為了描述的目的,而不是為了限制。
權(quán)利要求
1.一種在多線程計算機(jī)處理器中發(fā)出指令的方法,該方法包括如下步驟在指令發(fā)出邏輯中接收計算機(jī)指令組,其中每組指令包含來自多個獨立的指令線程中每一個的一指令;在計算機(jī)處理器的多級指令流水線中預(yù)測一個級,在該級每個指令的結(jié)果將是可得到的;把所收到的需要從作為先決條件的指令得到結(jié)果的那些指令識別為不獨立指令;為每個所收到的指令確定一個置信因子,它指出該指令將完成該水線所有各級而不造成拖延的概率;以及,由指令發(fā)出邏輯發(fā)出其置信因子在預(yù)定閾值之上的指令。
2.權(quán)利要求1的方法,進(jìn)一步包括如下步驟存儲每個指令的預(yù)測流水線級;以及根據(jù)流水線當(dāng)前內(nèi)容,動態(tài)地更新存儲的每個指令的預(yù)測流水線級。
3.權(quán)利要求2的方法,其中一個指令的置信因子是根據(jù)當(dāng)前位置和作為先決條件的指令的預(yù)測級而確定的。
4.權(quán)利要求3的方法,進(jìn)一步包括如下步驟根據(jù)流水線當(dāng)前內(nèi)容動態(tài)地重新計算每個指令的置信因子。
5.權(quán)利要求2的方法,進(jìn)一步包括如下步驟把所收到的對共享資源有沖突的那些指令識別為不獨立指令,其中的共享資源是該計算機(jī)處理器在其中進(jìn)行操作的計算機(jī)系統(tǒng)內(nèi)的資源。
6.權(quán)利要求5的方法,其中一個不獨立指令的置信因子是根據(jù)當(dāng)前位置和任何作為先決條件的指令的預(yù)測級以及任何被識別出的共享資源沖突的預(yù)測解決方案而確定的。
7.權(quán)利要求6的方法,進(jìn)一步包括如下步驟根據(jù)流水線當(dāng)前內(nèi)容和任何共享資源的當(dāng)前狀態(tài)動態(tài)地重新計算每個指令的置信因子。
8.一種在單線程計算機(jī)處理器中發(fā)出指令的方法,該方法包括在指令發(fā)出邏輯中接收計算機(jī)指令組,其中每組指令包含來自單一指令線程的多個指令;在計算機(jī)處理器的多級指令流水線中預(yù)測一個級,在該級每個指令的結(jié)果將是可得到的;把所收到的需要從作為先決條件的指令得到結(jié)果的那些指令識別為不獨立指令;為每個所收到的指令確定一個置信因子,它指出該指令將完成流水線所有各級而不造成拖延的概率;以及由指令發(fā)出邏輯發(fā)出其置信因子在預(yù)定閾值之上的指令。
9.權(quán)利要求8的方法,進(jìn)一步包括如下步驟存儲每個指令的預(yù)測流水線級;以及根據(jù)流水線的當(dāng)前內(nèi)容,動態(tài)更新存儲的每個指令的預(yù)測流水線級。
10.權(quán)利要求9的方法,其中一個指令的置信因子是根據(jù)當(dāng)前位置和作為先決條件的指令的預(yù)測級而確定的。
11.權(quán)利要求10的方法,進(jìn)一步包括如下步驟根據(jù)流水線的當(dāng)前內(nèi)容動態(tài)地重新計算每個指令的置信因子。
12.權(quán)利要求9的方法,進(jìn)一步包括如下步驟把所收到的需要來自一個存儲器的操作數(shù)的那些指令識別為不獨立指令,其中的存儲器是該計算機(jī)處理器在其中運(yùn)行操作的計算機(jī)系統(tǒng)內(nèi)的存儲器。
13.權(quán)利要求12的方法,其中一個不獨立指令的置信因子是根據(jù)當(dāng)前位置和任何作為先決條件的指令的預(yù)測級以及任何所需要的操作數(shù)將在該處理器的高速緩沖存儲器中被找到的概率而確定的。
14.權(quán)利要求13的方法,進(jìn)一步包括如下步驟根據(jù)流水線的當(dāng)前內(nèi)容和該處理器高速緩沖存儲器的當(dāng)前內(nèi)容,動態(tài)地重新計算每個指令的置信因子。
15.權(quán)利要求1的方法,其中在每個時鐘周期從指令發(fā)出邏輯發(fā)出一個或多個指令。
16.一種具有能增大吞吐量的預(yù)測性指令發(fā)出能力的同時多線程計算機(jī)處理器,該計算機(jī)處理器包括多個獨立的輸入緩沖器,其中為多個獨立的指令線程中的每一個提供一組緩沖器;與獨立的輸入緩沖器連接的指令發(fā)出邏輯,其中該指令發(fā)出邏輯從每個指令線程接收指令;在處理器的多級流水線中預(yù)測一個級,在該級每個指令的結(jié)果將是可得到的;把所收到的需要從作為先決條件的指令得到結(jié)果的那些指令識別為不獨立指令;為每個指令確定一個置信因子,它指出該指令將完成多級流水線所有各級而不造成拖延的概率;以及發(fā)出其置信因子在預(yù)定閾值之上的指令;而且,其中多級流水線的第一級與指令發(fā)出邏輯的輸出緩沖器相連接。
17.權(quán)利要求16的計算機(jī)處理器,其中該指令發(fā)出邏輯存儲每個指令的預(yù)測流水線級,并根據(jù)流水線的當(dāng)前內(nèi)容動態(tài)地更新存儲的每個指令的預(yù)測流水線級。
18.權(quán)利要求16的計算機(jī)處理器,其中一個指令的置信因子是根據(jù)當(dāng)前位置和作為先決條件的指令的預(yù)測級而確定的。
19.權(quán)利要求17的計算機(jī)處理器,其中的指令發(fā)出邏輯根據(jù)流水線的當(dāng)前內(nèi)容動態(tài)地重新計算每個指令的置信因子。
20.權(quán)利要求16的計算機(jī)處理器,其中每個時鐘周期由指令發(fā)出邏輯發(fā)出一個或多個指令。
21.權(quán)利要求16的計算機(jī)處理器,其中指令發(fā)出邏輯進(jìn)一步把所收到的對共享資源有沖突的那些指令識別為不獨立指令,其中的共享資源是該計算機(jī)處理器在其中進(jìn)行操作的計算機(jī)系統(tǒng)內(nèi)的資源。
22.權(quán)利要求21的計算機(jī)處理器,其中一個不獨立指令的置信因子是根據(jù)當(dāng)前位置和任何作為先決條件的指令的預(yù)測級以及任何被識別出的共享資源沖突的預(yù)測解決方案而確定的。
23.權(quán)利要求22的計算機(jī)處理器,其中的指令發(fā)出邏輯根據(jù)流水線的當(dāng)前內(nèi)容和任何共享資源的當(dāng)前狀態(tài)動態(tài)地重新計算每個指令的置信因子。
24.一種具有能增大吞吐量的預(yù)測性指令發(fā)出能力的單線程計算機(jī)處理器,該計算機(jī)處理器包括多個輸入緩沖器,用于接收來自一個指令線程的指令;與輸入緩沖器連接的指令發(fā)出邏輯,其中該指令發(fā)出邏輯從輸入緩沖器接收指令;在處理器的多級流水線中預(yù)測一個級,在該級每個指令的結(jié)果將是可得到的;把所收到的需要從作為先決條件的指令得到結(jié)果的那些指令識別為不獨立指令;為每個指令確定一個置信因子,它指出該指令將完成流水線所有各級而不造成拖延的概率;以及發(fā)出其置信因子在預(yù)定閾值之上的指令;而且,其中多級流水線的第一級與指令發(fā)出邏輯的輸出緩沖器相連接。
25.權(quán)利要求24的計算機(jī)處理器,其中該指令發(fā)出邏輯存儲每個指令的預(yù)測流水線級,并根據(jù)流水線當(dāng)前內(nèi)容動態(tài)地更新存儲的每個指令的預(yù)測流水線級。
26.權(quán)利要求24的計算機(jī)處理器,其中一個指令的置信因子是根據(jù)當(dāng)前位置和作為先決條件的指令的預(yù)測級而確定的。
27.權(quán)利要求25的計算機(jī)處理器,其中的指令發(fā)出邏輯根據(jù)流水線當(dāng)前內(nèi)容動態(tài)地重新計算每個指令的置信因子。
28.權(quán)利要求24的計算機(jī)處理器,其中指令發(fā)出邏輯進(jìn)一步把所收到的對共享資源有沖突的那些指令識別為不獨立指令,其中的共享資源是該計算機(jī)處理器在其中進(jìn)行操作的計算機(jī)系統(tǒng)內(nèi)的資源。
29.權(quán)利要求28計算機(jī)處理器,其中一個不獨立指令的置信因子是根據(jù)當(dāng)前位置和任何作為先決條件的指令的預(yù)測級以及任何被識別出的共享資源沖突的預(yù)測解決方案而確定的。
30.權(quán)利要求29的計算機(jī)處理器,其中的指令發(fā)出邏輯根據(jù)流水線當(dāng)前內(nèi)容和任何共享資源的當(dāng)前狀態(tài)動態(tài)地重新計算每個指令的置信因子。
全文摘要
在能夠同時處理多個指令線程的微處理器中優(yōu)化吞吐量的方法。在輸入緩沖器和微處理器流水線之間提供一個指令發(fā)出邏輯。該指令發(fā)出邏輯根據(jù)一個概率預(yù)測性地發(fā)出來自給定線程的指令,該概率是當(dāng)該指令達(dá)到流水線中需要操作數(shù)的一級時將能得到這些操作數(shù)的概率。如果當(dāng)前的流水線狀態(tài)表明有大的概率該指令將需要拖延在一個共享資源中以等待操作數(shù),則該指令的發(fā)出被封鎖。根據(jù)當(dāng)前流水線狀態(tài)一旦指令將會拖延的概率低于某一閾值,該指令將被允許發(fā)出。
文檔編號G06F9/30GK1598763SQ20041007026
公開日2005年3月23日 申請日期2004年7月30日 優(yōu)先權(quán)日2003年9月17日
發(fā)明者M·S·麥基爾文, R·W·史密斯, T·A·薩托里爾斯, J·T·布里奇斯, V·R·奧格斯堡 申請人:國際商業(yè)機(jī)器公司