TWI436274B - 一種微處理器及其執行方法 - Google Patents

一種微處理器及其執行方法 Download PDF

Info

Publication number
TWI436274B
TWI436274B TW99115908A TW99115908A TWI436274B TW I436274 B TWI436274 B TW I436274B TW 99115908 A TW99115908 A TW 99115908A TW 99115908 A TW99115908 A TW 99115908A TW I436274 B TWI436274 B TW I436274B
Authority
TW
Taiwan
Prior art keywords
instruction
branch
branch instruction
microprocessor
needs
Prior art date
Application number
TW99115908A
Other languages
English (en)
Other versions
TW201042545A (en
Inventor
Rodney E Hooker
Gerard M Col
Bryan Wayne Pogor
Original Assignee
Via Tech Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Via Tech Inc filed Critical Via Tech Inc
Publication of TW201042545A publication Critical patent/TW201042545A/zh
Application granted granted Critical
Publication of TWI436274B publication Critical patent/TWI436274B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Description

一種微處理器及其執行方法
本發明係有關於非循序執行的微處理器領域,特別是有關於其分支指令的執行。
超純量微處理器(superscalar microprocessors)具有複數執行單元(execution units),用以執行微處理器的指令集(instruction set)。超純量微處理器藉由多重執行單元(multiple execution unit)來改善處理效能,因此超純量微處理器能夠在每一個時脈週期中同時地執行多重指令。使得超純量微處理器具有這種潛在效能改善的關鍵是必須讓指令持續地供應給執行單元來執行;否則,超純量微處理器的效能並不會比純量微處理器的效能更好,並且超純量微處理器會比純量微處理器花費更多的硬體成本。舉例而言,執行單元用以載入並儲存指令運算元(instruction operands)、計算位址、執行邏輯和計算操作,以及解析(resolve)分支指令(branch instructions)。若使用愈多數量及類型的執行單元,在每一個時脈週期,微處理器要為每一個執行單元找回指令之程式指令串流(program instruction stream)的範圍也愈大。這通常稱為微處理器的預尋找能力(lookahead capability)。
有一種方法已經被用來改善微處理器的預尋找能力,其允許指令不依照程式的順序執行,並且通稱為非循序執行微處理器(out-of-order execution microprocessor)。雖然指令可以非循序地執行,但是多數微處理器架構仍需將指令依照程式順序引退(retired in program order)。換言之,被指令結果影響之微處理器架構的狀態僅能依照程式順序被更新。
非循序執行暨循序引退微處理器通常包括相當多的管線級(pipeline stages),所以有時候稱為超級管線化(super-pipelining)。微處理器具有這麼多管線級的原因之一是:若微處理器的指令集架構允許指令改變長度,則在管線前端通常便需要相當多的管線級,用以將未差異化指令位元組(undifferentiated instruction bytes)的串流作語法分析(parse),並且將已語法分析的指令(parsed instructions)轉譯成微指令。
雖然在微處理器設計領域,使用分支預測器對效能是有助益的,但在超級管線化的微處理器中,發生分支指令對效能的不利影響是眾所皆知的。具體而言,在用以根據分支預測器所提供之預測分支目標位址(predicted branch target address)提取指令的級,與使得提取器(fetcher)在不同於預測分支目標位址之解析出的目標位址(resolved target address)開始提取指令的級之間,若管線級的數量越多,則相關於分支錯誤預測(branch mispredictions)的效能損失(penalty)也越大。
因此,亟需一種有效的執行方法,用以在非循序執行暨循序引退的微處理器內執行分支指令。
本發明一實施例提供一種微處理器,用以非循序執行暨循序引退指令,其包括:分支預測器、提取單元以及至少一執行單元。分支預測器用以預測分支指令的預測目標位址。提取單元耦接於分支預測器,用以從上述預測目標位址提取分支指令。執行單元,耦接於提取單元,用以:解析分支指令的目標位址,並且預測目標位址與所解析出的目標位址是否不同;當預測目標位址與所解析出的目標位址不同時,判斷是否具有程式順序較舊於分支指令且需要被校正之未引退指令;若沒有程序順序較舊於分支指令且需要被校正之未引退指令,則清除由預測目標位址所提取的錯誤預測的分支指令,並使得提取單元由所解析出的目標位址進行提取,以便執行分支指令;以及若有程式順序較舊於上述分支指令且需要被校正之指令,則暫緩執行分支指令。
本發明另一實施例提供一種執行方法,用以在管線化非循序執行暨循序引退微的處理器中執行分支指令,包括:預測分支指令將被解析至第一提取路徑且根據上述預測由第一提取路徑提取分支指令;在上述預測和提取步驟之後,解析分支指令至第二提取路徑,第二提取路徑不同於第一提取路徑;判斷是否具有程式順序較舊於分支指令且需要被校正之未引退指令;若沒有程式順序較舊於分支指令且需要被校正之未引退指令,則清除由第一提取路徑所提取的錯誤預測分支指令,並改由第二提取路徑提取分支指令,以執行分支指令;以及若有程式順序較舊於分支指令且需要被校正之未引退指令,則暫緩執行分支指令。
第1圖為本發明之微處理器100的方塊圖。微處理器100包括由複數級(stages)或功能單元(functional units)所構成的管線,此管線包括提取單元(instruction fetch unit)122、指令快取記憶體(instruction cache)102、指令格式器(instruction formatter)124、已格式化指令佇列(formatted instruction queue)126、指令轉譯器(instruction translator)104、已轉譯指令佇列(translated instruction queue)128、暫存器別名表(register alias table)106、保留站(reservation station)108、執行單元(execution unit)112,以及引退單元(retire unit)114。微處理器100還包括分支預測器(branch predictor)118,耦接到提取單元122。微處理器100還包括重整緩衝器(reorder buffer)116,耦接到暫存器別名表106、保留站108、執行單元112以及引退單元114。
執行單元112包括載入單元(load unit)166、執行邏輯單元(execution logic)164,以及分支指令比對邏輯單元(branch checking logic)162,上述每一者均耦接至控制邏輯單元(control logic)158。執行單元112也包括暫存器(register)156、暫存器154,以及暫存器152。暫存器156用以儲存最舊的錯失之載入指令(oldest missing load instruction)的重整緩衝器標籤(ROB tag);暫存器154用以儲存最舊的被重新執行的整數指令(oldest replaying integer instruction)的重整緩衝器標籤;暫存器152用以儲存最舊的被錯誤預測之分支指令(oldest mispredicted branch instruction)的重整緩衝器標籤,上述每一個暫存器均耦接至控制邏輯單元158。控制邏輯單元158產生正確分支位址(correct branch address)136至提取單元122。控制邏輯單元158也產生分支校正信號(branch correct signal)134至提取單元122、指令格式器124、已格式化指令佇列126、指令轉譯器104、已轉譯指令佇列128,以及暫存器別名表106。在一實施例中,執行單元112中除了載入單元166之外所有的單元均包括於單一的執行單元(即複數個整數單元(integer unit)之一者)內,而載入單元166是與整數單元分立的執行單元112。
在一實施例中,微處理器100為x86架構微處理器。能夠正確地執行為x86架構微處理器設計之大部分應用程式的微處理器稱為x86架構微處理器。若微處理器希望得到正確的結果,則應用程式需要被正確地執行。微處理器100將指令非循序地執行且循序地引退。因此,即使執行單元112非循序地產生指令的結果,引退單元114會等到該指令是微處理器100中最舊的完成的指令為止,才會藉由指令的結果來更新微處理器100的架構狀態。
提取單元122提供提取位址170至指令快取記憶體102,用以指定下一個提取位址而從指令快取記憶體102提取指令。加法器172將提取位址170增量(increment)以產生接續於提取位址170的下一個接續的提取位址174,提取位址174被提供至提取單元122。提取單元122也從分支預測器118接收預測目標位址(predicted target address)176。提取單元122也從執行單元112接收正確分支位址136。如下所述,提取單元122係由前述所提供的多個位址中選擇一者作為提供至指令快取記憶體102的提取位址170。
若控制邏輯單元158發出分支校正信號134,則提取單元122選擇正確分支位址136;若分支預測器118預測分支方向已經發生,則提取單元122選擇預測目標位址176;否則,提取單元122選擇接續的提取位址174。分支指令的預測分支位址是隨著沿管線而下的分支指令而被提供。若分支預測器118預測分支不發生,則預測分支位址即為接續的提取位址174;若分支預測器118預測分支發生,則預測分支位址即為預測目標位址176。分支預測器118可能會錯誤預測(mispredict)分支指令,故需微處理器100以校正該錯誤預測,使得正確的指令能夠被提取並執行。若執行單元112接著校正分支(如稍後的討論),則預測分支位址變成正確分支位址136。預測分支位址是隨著分支指令和有關於指令178的其他資訊而被提供至執行單元112。
在微處理器100中,有益於校正錯誤預測之分支指令的技術方案可由以下步驟分述之。
步驟1:執行單元112解析分支指令。換言之,執行單元112接收用以解析分支指令的輸入運算元(input operands)並根據輸入運算元來判斷分支方向和分支位址。具體而言,執行單元112檢查分支指令所指定的條件碼(condition code),以判斷該條件碼是否符合由分支指令所指定的分支條件而使得分支即將發生或不會發生,並且執行單元112亦根據分支指令所指定的來源運算元(source operands)來計算分支指令的目標位址。在解析分支指令的分支方向和目標位址後,無論因為分支預測器118預測了錯誤的方向(分支發生或不發生)及/或錯誤的分支目標位址,執行單元112都會判斷出分支預測器118錯誤預測了分支。為了簡化說明,以下說明假設:分支預測器118預測路徑A(path A)並且提取單元122由路徑A提取;但是,路徑B(path B)才是正確的路徑。
步驟2:接著,執行單元112執行分支指令。換言之,執行單元112:(1)通知(tell)暫存器別名表106停止派送(dispatch)指令;(2)清除(flush)管線前端;以及(3)由執行單元112提供的正確分支位址136指出正確的路徑B,以通知提取單元122在正確的路徑B開始提取。暫存器別名表106是管線的最後一級(last stages),並依照程式順序接收指令。管線的前端即為在暫存器別名表106之前的部分。在很多情況中,微處理器100經常具有很多較舊於(older)錯誤預測的分支指令的指令,必須在錯誤預測的分支指令成為最舊的指令並被引退之前先依照程式順序被引退。因此,在分支指令成為最舊的指令的期間,微處理器100提取並處理良好(good)的指令(提取自正確之路徑B的指令),並以此填滿管線的前端。
步驟3:最後,因為管線的末端包括不應該被執行的指令(因為提取自錯誤的路徑A),引退單元114將分支指令引退並清除管線的末端。管線的末端即為在暫存器別名表106之後的部分。
步驟4:引退單元114通知暫存器別名表106再次開始派送指令,即當執行單元112在步驟2執行分支指令時由正確的路徑B提取並處理的指令。
因為在引退單元114將錯誤預測的分支指令引退前,微處理器100也許就可以在管線前端中的正確分支位址136開始提取並處理指令,故步驟2中所述之分支指令若能不依照程式順序地被執行(即錯誤預測的早期校正)是有助益的。換言之,由正確的路徑B提取的指令將被執行的N個時脈週期會短於執行單元112並未根據錯誤預測而執行分支指令,卻空等著直到分支指令準備好要引退為止的時間。N的最大值係由當微處理器100開始執行分支指令(即校正錯誤預測)開始算起,直到來自『正確的』分支路徑B之第一個指令到達暫存器別名表106為止的時脈週期。在一實施例中,因為分支損失(branch penalty)高達17個時脈週期,故這麼作是特別有助益的。具體而言,在一實施例中,一旦提取位址170被重新導向(redirected)至新的分支路徑,直到來自於新分支路徑的第一個指令到達暫存器別名表106為止,需花費10個時脈週期。換言之,藉由早期校正,分支損失的時脈週期被隱藏(hidden)了;要注意的是,微處理器100會將介於校正開始與引退單元114備妥要引退錯誤預測的指令之間的時脈數目隱藏起來。
然而,非循序地執行/校正分支指令並不一定是有助益的。以下說明微處理器100非循序地執行/校正分支指令卻未產生助益的情況。具體而言,此情況為分支預測器118確實已正確地預測分支指令,然而執行單元112卻因為接收到不正確的輸入運算元(例如條件碼及/或目標位址計算運算元),而不正確地解析分支指令。接著,執行單元112錯誤地認定分支預測器118錯誤預測分支(即執行單元112判斷預測之分支方向及/或分支位址不符合已解析之分支方向及/或分支位址),並執行/校正該分支。執行單元112之所以接收到錯誤的輸入運算元,是因為分支指令不論是直接或間接透過相關性的鏈結(chain of dependencies)與較舊的分支指令的條件碼及/或來源運算元有關,而沒有提供正確的輸入運算元給執行單元112。舉例而言,較舊的載入指令在資料快取記憶體內之相關性鏈結的某處被錯失而提供過期資料(stale data)。為了簡化說明無助益之技術方案,以下假設分支預測器118正確地預測路徑A並且提取單元122由路徑A提取,其步驟分述如下:
步驟1:如同上述有助益之技術方案的步驟1,即執行單元112解析了分支指令指向路徑B。
步驟2:如同上述有助益之技術方案的步驟2,即執行單元112執行/校正分支指令至路徑B。
步驟3:接續於步驟2的執行/校正,比步驟1和2之已執行/已校正分支指令舊的指令成為最舊的指令,並且引退單元114開始重新執行(replay)重整緩衝器116中最舊的指令和所有較新的指令,其中包括已執行/已校正的分支指令。重新執行表示引退單元114清除管線的末端,以及從重整緩衝器116發送重新執行指令138至保留站108,亦即將重整緩衝器116中全部有效的指令循序地重新派送(re-dispatch)至保留站108。(若被重新執行之較舊的指令是錯誤預測的分支指令,則當執行單元112執行/校正目前正重新執行中之較舊的分支指令時,管線的前端也會被清除)
步驟4:在重新執行步驟2中被執行/校正之相同的分支指令時,執行單元112解析分支指令後判斷路徑A是正確的路徑而非路徑B。這表示:在步驟2中,由管線前端被清除的指令實際上即為正確地被提取的指令。很不幸地,這也表示:微處理器100現在必須校正在步驟2中執行的『校正』。(要注意的是,在重新執行中,執行單元112見到的『預測』為路徑B,即執行單元112在步驟2中所校正的路徑;然而,往路徑B的『預測』卻不是分支預測器118所預測的;確切地說,該『預測』是由執行單元112在步驟2中當其執行/校正該分支指令時所預測的。)
步驟5:類似於上述步驟2,根據步驟4中重新執行所作的解析,執行單元112執行/校正分支。然而,在步驟4中,執行單元112是將路徑校正為路徑A。因此步驟2所作的執行/校正是個缺點,這是因為步驟2所作的執行/校正造成微處理器100清除了那些分支預測器在步驟1之前已經正確地預測路徑A,且已經開始提取和處理的指令,而那些相同的指令現在必須在管線前端被重新提取(re-fetched)和重新處理(re-processed)。
以下摘要說明上述無助益的校正錯誤預測分支指令的技術方案,即分支預測器118首先預測路徑A,而提取單元122由路徑A提取分支指令。接著,執行單元112解析分支為路徑B,事實上因為執行單元112接收錯誤的輸入運算元,所以路徑B是不正確的,並且在步驟2執行/校正,使得提取單元122由(錯誤的)路徑B提取分支指令。然而,分支指令仍被重新執行(因為較舊的一個指令使其如此),並且在重新執行期間,執行單元112解析分支為路徑A,其中路徑A是正確的路徑。因為執行單元112在重新執行期間接收到分支指令之正確的輸入運算元,所以執行單元112在重新執行期間解析分支為路徑A。這是因為在第一次解析中沒有提供正確結果之相關性鏈結內的指令現在產生正確結果,而正確結果被提供給執行單元112,用以解析分支指令。換言之,相較於執行單元112第一次解析分支,在本次重新執行中所用的條件碼旗標及/或目標位址計算運算元是不同的。因此,執行單元112執行/校正使得提取單元122能夠由路徑A提取分支指令。
針對此問題(既能享有有助益之方案的優點,也能減少無助益之方案的可能性),微處理器100通常會非循序地執行錯誤預測的分支;然而,微處理器100也會試圖分辨(identify)一些最常見地將分支指令錯誤地解析為錯誤預測(即分支預測器118正確地預測)的狀況,並且微處理器100在這些狀況中並不會非循序地執行/校正已解析之『錯誤預測的』分支。更具體地說,微處理器100會試圖分辨出這些分支指令將必須被重新執行,而在重新執行中卻被解析為已經正確地預測之最常見的情況。在一實施例中,上述最常見的情況發生在較舊於分支指令的一個指令將被重新執行時,即:
(1)一個較舊的分支被解析為錯誤預測的
(2)一個較舊的載入指令是被錯失的(missed)
(3)一個較舊的整數指令是錯誤的(faulted)
藉由暫緩執行已解析之『錯誤預測的』分支,微處理器100不需在管線前端重新提取和重新處理相同的指令,因為其已經在分支第一次被預測時被提取和處理過了。
何種情況會被納入考量是在設計上可決定的,而該決定權衡於:因為考量一個給定的情況而使得複雜度/操作速度/功率消耗增加且成本增加,以及因為不考量上述情況而使得效能不佳之間的得失,其中上述得失本質上是與在一些時脈週期中其發生頻率和平均的效能損失有關。
參考第1圖,重整緩衝器116被組織成一環形佇列(circular queue)並且具有複數項目(entry)分配給每個由暫存器別名表106派送至保留站108的指令。重整緩衝器116中每個項目都有一個相關的索引(index),其值的範圍為0至(n-1),其中n為重整緩衝器116中項目的數目。暫存器別名表106依照程式順序為每個指令循序地指派(allocates)重整緩衝器116中的項目。因此,可對重整緩衝器116中兩個指令的索引或標籤作比較,並且判斷何者在程式的順序上是最舊的。
微處理器100執行載入指令的預測執行(speculative execution)。換言之,微處理器100假設載入指令總是會命中(hit)資料快取記憶體。接著,在不知道是否能夠取得正確之載入資料的情況下,保留站108發出使用載入資料作為來源運算元的指令至執行單元112。因此,指令(例如分支指令)可能會接收到不正確的資料,這是直接或間接地歸因於較舊的指令使用了錯誤的載入資料。當載入單元166在偵測到載入指令(load instruction)在資料快取記憶體中錯失了,且必須將載入指令重新執行時,載入單元166將在資料快取記憶體所錯失之載入指令的載入指令錯失標籤146輸出至控制邏輯單元158,而載入指令錯失標籤146為重整緩衝器的標籤。控制邏輯單元158將暫存器156內的標籤(最舊的錯失之載入指令的標籤)與載入指令錯失標籤146作比較。若載入指令錯失標籤146是比較舊的,則控制邏輯單元158以載入指令錯失標籤146更新暫存器156。控制邏輯單元158藉此維持微處理器100內最舊的被錯失之載入指令的標籤。
類似地,當執行邏輯單元164偵測到一個整數指令(integer instruction)需要被重新執行時,執行邏輯單元164將需要被重新執行的整數指令之整數指令重新執行標籤144輸出至控制邏輯單元158,而且整數指令重新執行標籤144為重整緩衝器的標籤。控制邏輯單元158將暫存器154內的標籤(最舊的被重新執行之整數指令的標籤)與整數指令重新執行標籤144作比較。若整數指令重新執行標籤144是比較舊的,則控制邏輯單元158以整數指令重新執行標籤144更新暫存器154。控制邏輯單元158藉此維持微處理器100內最舊的被重新執行之整數指令的標籤。
再者,當分支指令被解析且被分支指令比對邏輯單元162偵測到是錯誤預測時,分支指令比對邏輯單元162將被錯誤預測的分支指令之分支指令錯誤預測標籤142輸出至控制邏輯單元158,而分支指令錯誤預測標籤142為重整緩衝器的標籤。控制邏輯單元158將暫存器152內的標籤(最舊的被錯誤預測之分支指令的標籤)與分支指令錯誤預測標籤142作比較。若分支指令錯誤預測標籤142是比較舊的,則控制邏輯單元158以分支指令錯誤預測標籤142更新暫存器152。控制邏輯單元158藉此維持微處理器100內最舊的被錯誤預測之分支指令的標籤。
根據本發明,第2圖為第1圖微處理器100的操作流程圖,其用以說明微處理器100選擇性地非循序執行分支指令的操作。流程始於步驟202。
在步驟202,執行單元112解析分支指令且判斷其為錯誤預測的。流程前進至判斷步驟204。
在判斷步驟204,執行單元112將分支指令錯誤預測標籤142與暫存器152內的標籤(最舊的被錯誤預測之分支指令的標籤)作比較,用以判斷是否有較舊之未引退的分支指令是錯誤預測且因此需要校正的。若有,則流程前進至步驟206;否則,流程前進至判斷步驟208。
在步驟206,執行單元112會暫緩去非循序地校正/執行在步驟202中被解析為錯誤預測之較新的(newer)分支指令。在步驟202中被解析為錯誤預測之較新的分支指令將不會被引退,因為在較新之錯誤預測的分支指令有機會成為最舊之錯誤預測的分支指令之前,較舊之錯誤預測的分支指令會使得較新之錯誤預測的分支指令於管線末端被清除。本發明的優點在於藉由暫緩非循序地校正/執行在步驟202中被解析為錯誤預測的分支指令,微處理器100能夠避免上述較差之技術方案的缺點。換言之,若證明分支預測器118已經正確地預測分支指令的路徑,則從正確預測的路徑提取的指令不需在管線前端被重新提取和重新處理。流程終止於步驟206。
在判斷步驟208,執行單元112將暫存器156內的標籤(最舊的錯失之載入指令的標籤)與錯誤預測分支的載入指令錯失標籤146作比較,用以判斷是否有較舊於錯誤預測分支的載入指令被錯失。若有,流程前進至步驟212;否則,流程前進至判斷步驟214。
在步驟212,執行單元112會暫緩去非循序地校正/執行在步驟202中被解析為錯誤預測之分支指令。在步驟202中被解析為錯誤預測之分支指令將不會被引退,因為在錯誤預測之分支指令有機會成為最舊的指令前,錯失的載入指令在計算機中成為最舊的指令時會使錯誤預測之分支指令重新執行。本發明的優點在於藉由暫緩非循序地校正/執行在步驟202中被解析為錯誤預測的分支指令,微處理器100能夠避免上述較差之技術方案的缺點。流程終止於步驟212。
在判斷步驟214,執行單元112將暫存器154內的標籤(最舊的被重新執行之整數指令的標籤)與錯誤預測分支的整數指令重新執行標籤144作比較,用以判斷是否有為了重新執行而被標記(marked)且較舊於錯誤預測之分支指令的整數指令。若有,流程前進至步驟216;否則,流程前進至步驟218。
在步驟216,執行單元112會暫緩去非循序地校正/執行在步驟202中被解析為錯誤預測之分支指令。在步驟202中被解析為錯誤預測之分支指令將不會被引退,因為在錯誤預測之分支指令有機會成為最舊的指令前,重新執行的整數指令在計算機中成為最舊的指令時會使錯誤預測之分支指令重新執行。本發明的優點在於藉由暫緩去非循序地校正/執行在步驟202中被解析為錯誤預測的分支指令,微處理器100能夠避免上述較差之技術方案的缺點。流程終止於步驟216。
在步驟218,執行單元112的控制邏輯單元158提供正確分支位址136至提取單元122。控制邏輯單元158也發出分支校正信號134,其中分支校正信號134使提取單元122選擇正確分支位址136作為下一個提取位址170,並且使管線前端校正在步驟202中被解析為錯誤預測的分支指令。換言之,藉由發出分支校正信號134,控制邏輯單元158使錯誤預測的分支指令是非循序地被執行,並藉此實現關於有助益之技術方案的上述優點。流程前進至步驟222。
在步驟222,暫存器別名表106會根據所發出的分支校正信號134停止配送指令。流程前進至步驟224。
在步驟224,在暫存器別名表106之前的部分管線根據所發出的分支校正信號134將所有指令清除(flush)(或無效化(invalidate)),並在正確分支位址136上提取指令和處理指令。流程前進至步驟226。
在步驟226,引退單元114判斷出錯誤預測的分支指令現在已經準備好要引退(即被錯誤預測的分支指令為計算機中最舊的指令),因此發出清除信號132以清除暫存器別名表106之後的所有指令,即引退單元114清除較新於被錯誤預測之分支指令的所有指令。所發出的清除信號132也提供至暫存器別名表106,以通知暫存器別名表106目前情況。流程前進至步驟228。
在步驟228,暫存器別名表106根據所發出的清除信號132重新派送指令。流程終止於步驟228。
雖然本發明已經由數種實施例揭露如上,但其僅用以作為例子,並非用以限定本發明。計算機領域的習知技藝者應能理解,在不脫離本發明之精神的前提下,當可對本發明作些許更動。舉例而言,軟體能夠致能本發明之裝置和方法的功能、製造、模型建立、模擬、各種性質,以及/或測試。其能夠藉由不同的程式語言而達成,例如程式語言(如C、C++)、硬體描述語言(hardware description language,HDL,如Verilog HDL、VHDL),或是其他可能的程式語言。上述軟體能夠設置於任何已知的計算機可讀取儲存媒體(computer usable medium),例如半導體、磁碟,或光碟(如CD-ROM、DVD-ROM)。本發明的裝置和方法可能包括於任何半導體智慧財產核心(semiconductor IP core)之內,例如(以HDL嵌入的)微處理器核心,或是當積體電路製造時,轉移至硬體。此外,本發明可能藉由硬體和軟體的組合而實現。因此,本發明不應被此處所述之任何實施例所限制,本發明應該是根據所附申請專利範圍與其等效的裝置/方法而被定義。特別的是,本發明能夠設置於一般用途計算機的微處理器裝置內。最後,習知技藝者應能理解到:在不脫離由申請專利範圍定義之本發明範疇的前提下,其能夠以本發明揭露的概念和特定的實施例作為基礎,用以設計或修改其他架構來執行與本發明相同之目的。
100...微處理器
102...指令快取記憶體
124...指令格式器
126...已格式化指令佇列
104...指令轉譯器
128...已轉譯指令佇列
106...暫存器別名表
108...保留站
166...載入單元
164...執行邏輯單元
162...分支指令比對邏輯單元
158...控制邏輯單元
152、154、156...暫存器
112...執行單元
114...引退單元
118...分支預測器
116...重整緩衝器
122...提取單元
172...加法器
170、174...提取位址
176...預測目標位址
138...重新執行指令
136...正確分支位址
134...分支校正信號
178...指令
146...載入指令錯失標籤
144...整數指令重新執行標籤
142...分支指令錯誤預測標籤
132...清除信號
第1圖為根據本發明之微處理器的方塊圖;
第2圖為第1圖微處理器的操作流程圖,其用以說明非循序微處理器的選擇性執行。
100...微處理器
102...指令快取記憶體
124...指令格式器
126...已格式化指令佇列
104...指令轉譯器
128...已轉譯指令佇列
106...暫存器別名表
108...保留站
166...載入單元
164...執行邏輯單元
162...分支指令比對邏輯單元
158...控制邏輯單元
152、154、156...暫存器
112...執行單元
114...引退單元
118...分支預測器
116...重整緩衝器
122...提取單元
172...加法器
170、174...提取位址
176...預測目標位址
138...重新執行指令
136...正確分支位址
134...分支校正信號
178...指令
146...載入指令錯失標籤
144...整數指令重新執行標籤
142...分支指令錯誤預測標籤
132...清除信號

Claims (14)

  1. 一種微處理器,用以非循序執行暨循序引退指令,包括:一快取記憶體;一分支預測器,用以預測一分支指令的一預測目標位址;一提取單元,耦接於上述分支預測器,用以從上述預測目標位址提取上述分支指令;以及至少一執行單元,耦接於上述提取單元,用以:解析上述分支指令的目標位址,並且偵測上述預測目標位址與所解析出的目標位址是否不同;當上述預測目標位址與上述所解析出的目標位址不同時,判斷是否具有程式順序較舊於上述分支指令且需要被校正之一未引退指令;若沒有程序順序較舊於上述分支指令且需要被校正之上述未引退指令,則清除由上述預測目標位址所提取的一錯誤預測的分支指令,並使得上述提取單元由上述所解析出的目標位址進行提取,以便執行上述分支指令;以及若有程式順序較舊於上述分支指令且需要被校正之上述未引退指令,則暫緩執行上述分支指令;其中該微處理器更包括具有一前端之一管線,其中該前端包括該快取記憶體、該分枝預測器及 該提取單元,但不包括該執行單元;其中該微處理器用以於:暫緩引退已解析之錯誤預測之上述分枝指令;以及重新執行一載入指令、該分枝指令及從該預測目標位址提取之指令,而不用重新從該快取記憶體提取,也不用在該管線之該前端重新處理。
  2. 如申請專利範圍第1項所述的微處理器,其中上述執行單元藉由下列條件之一者判斷是否具有程式順序較舊於上述分支指令且需要被校正之上述未引退指令:是否上述分支預測器已預測出程式順序較舊於上述分支指令之一未引退分支指令的目標位址,且上述提取單元已從所預測之上述未引退分支指令的目標位址提取指令,且上述執行單元已解析出上述未引退分支指令的目標位址,並且偵測到所解析出之上述未引退分支指令的目標位址與所預測之上述未引退分支指令的目標位址不同;在上述微處理器之一快取記憶體內是否有程式順序較舊於上述分支指令之一未引退載入指令被錯失;以及是否具有程式順序較舊於上述分支指令之一未引退整數指令需要被重新執行。
  3. 如申請專利範圍第1項所述的微處理器,更包括一儲存元件,用以存放在程式順序上最舊且需要被校正的未引退指令的重整緩衝器標籤,其中上述執行單元藉由比較上述分支指令的重整緩衝器標籤與上述在程式順序上最舊 且需要被校正的未引退指令的重整緩衝器標籤,以判斷是否具有程式順序較舊於上述分支指令且需要被校正之上述未引退指令。
  4. 如申請專利範圍第3項所述的微處理器,其中上述儲存元件用以為複數指令型態之每一者存放上述在程式順序上最舊且需要被校正之未引退指令的重整緩衝器標籤,其中上述執行單元藉由為上述指令型態之每一者比較上述分支指令的重整緩衝器標籤與上述在程式順序上最舊且需要被校正的未引退指令的重整緩衝器標籤,以判斷是否具有程式順序較舊於上述分支指令且需要被校正的上述未引退指令。
  5. 如申請專利範圍第4項所述的微處理器,其中上述複數指令型態包括下列指令型態的至少一者:一第一指令型態,用以表示一載入指令在上述微處理器之一指令快取記憶體發生錯失;一第二指令型態,用以表示上述分支預測器對上述分支指令所預測到的目標位址與上述執行單元對上述分支指令所解析出的目標位址是不同的;以及一第三指令型態,用以表示一整數指令需要被重新執行。
  6. 如申請專利範圍第1項所述的微處理器,更包括:一暫存器別名表,用以依照程式順序地接收複數程式指令,並且將上述程式指令派送至上述微處理器的複數上述執行單元以便進行非循序執行;以及第一複數管線級,位於上述暫存器別名表之前,上述 第一複數管線級包括上述分支預測器與上述提取單元,其中上述執行單元藉由提供上述所解析出的目標位址至上述提取單元以及發出一信號來執行上述分支指令,上述暫存器別名表根據上述信號停止派送指令,上述第一複數管線級根據上述信號清除其內所有的指令,並且上述提取單元根據上述信號由上述所解析出的目標位址開始提取指令。
  7. 如申請專利範圍第6項所述的微處理器,更包括:一引退單元,用以依照程式順序地引退上述程式指令;以及第二複數管線級,位於上述暫存器別名表之後,包括複數上述執行單元和上述引退單元,其中當上述引退單元判斷出上述分支指令為上述微處理器內之最舊的未引退指令時,上述引退單元使上述第二複數管線級的所有程式指令被清除,並且在上述引退單元使上述第二複數管線級的所有程式指令被清除之後,上述暫存器別名表開始派送程式指令至複數上述執行單元。
  8. 一種執行方法,用以在一管線化非循序執行暨循序引退的微處理器中執行一分支指令,包括:預測上述分支指令將被解析至一第一提取路徑且根據上述預測由上述第一提取路徑提取上述分支指令;在上述預測和提取步驟之後,解析上述分支指令至一第二提取路徑,上述第二提取路徑不同於上述第一提取路 徑;判斷是否具有程式順序較舊於上述分支指令且需要被校正之一未引退指令;若沒有程式順序較舊於上述分支指令且需要被校正之上述未引退指令,則清除由上述第一提取路徑所提取的一錯誤預測的分支指令,並改由上述第二提取路徑提取上述分支指令,以執行上述分支指令;以及若有程式順序較舊於上述分支指令且需要被校正之上述未引退指令,則暫緩執行上述分支指令;暫緩引退已解析之錯誤預測之上述分枝指令;以及重新執行一載入指令、該分枝指令及從該預測目標位址提取之指令,而不用重新提取,也不用重新處理。
  9. 如申請專利範圍第8項所述之執行方法,其中上述判斷是否具有程式順序較舊於上述分支指令且需要被校正之上述未引退指令的步驟包括下列步驟之一者:判斷是否有程式順序較舊於上述分支指令之一未引退分支指令被解析至不同於一第三提取路徑的一第四提取路徑,且上述微處理器先前是預測上述第三提取路徑並由上述第三提取路徑提取上述未引退分支指令;判斷在上述微處理器的一快取記憶體內是否有程序順序較舊於上述分支指令之一未引退戴入指令被錯失;以及判斷是否有程式順序較舊於上述分支指令之一未引退整數指令需要被重新執行。
  10. 如申請專利範圍第8項所述之執行方法,更包括:存放在程式順序上最舊且需要被校正的未引退指令的 重整緩衝器標籤,其中上述判斷是否具有程式順序較舊於上述分支指令且需要被校正之上述未引退指令的步驟包括藉由比較上述分支指令的重整緩衝器標籤與上述在程式順序上最舊且需要被校正的未引退指令之重整緩衝器標籤,以判斷是否具有程式順序較舊於上述分支指令且需要被校正之上述未引退指令。
  11. 如申請專利範圍第10項所述之執行方法,其中上述存放在程式順序上最舊且需要被校正的未引退指令的重整緩衝器標籤是為了複數指令型態之每一者而存放,並且上述判斷是否具有程式順序較舊於上述分支指令且需要被校正之上述未引退指令的步驟包括藉由為上述指令型態之每一者分別比較上述分支指令的重整緩衝器標籤與上述在程式順序上最舊且需要被校正的未引退指令之重整緩衝器標籤,以判斷是否具有程式順序較舊於上述分支指令且需要被校正之上述未引退指令。
  12. 如申請專利範圍第11項所述之執行方法,其中上述複數指令型態包括下列指令型態的至少一者:一第一指令型態,用以表示一載入指令在上述微處理器之一指令快取記憶體發生錯失;一第二指令型態,用以表示上述分支指令所被預測到的上述第一提取路徑與所解析出的上述第二提取路徑是不同的;以及一第三指令型態,用以表示一整數指令需要被重新執行。
  13. 如申請專利範圍第8項所述之執行方法,其中上述執行上述分支指令的步驟更包括:停止派送指令;以及清除在上述微處理器之管線級內位於派送指令之節點以上的所有指令。
  14. 如申請專利範圍第13項所述之執行方法,更包括:在清除在上述微處理器之管線級內位於派送指令之節點之前的所有指令之後,判斷上述分支指令是否為上述微處理器內最舊的未引退指令;當上述分支指令為上述微處理器內最舊的未引退指令時,使在上述微處理器之管線級內位於派送指令之節點之後的所有指令被清除;以及上述微處理器之管線級內位於派送指令之節點之後的所有指令被清除之後,重新開始派送指令。
TW99115908A 2009-05-29 2010-05-19 一種微處理器及其執行方法 TWI436274B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US18229709P 2009-05-29 2009-05-29
US12/582,975 US8909908B2 (en) 2009-05-29 2009-10-21 Microprocessor that refrains from executing a mispredicted branch in the presence of an older unretired cache-missing load instruction

Publications (2)

Publication Number Publication Date
TW201042545A TW201042545A (en) 2010-12-01
TWI436274B true TWI436274B (zh) 2014-05-01

Family

ID=43221600

Family Applications (2)

Application Number Title Priority Date Filing Date
TW99115908A TWI436274B (zh) 2009-05-29 2010-05-19 一種微處理器及其執行方法
TW103105436A TWI506551B (zh) 2009-05-29 2010-05-19 一種微處理器及其執行方法與電腦程式產品

Family Applications After (1)

Application Number Title Priority Date Filing Date
TW103105436A TWI506551B (zh) 2009-05-29 2010-05-19 一種微處理器及其執行方法與電腦程式產品

Country Status (2)

Country Link
US (1) US8909908B2 (zh)
TW (2) TWI436274B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013101560A1 (en) * 2011-12-29 2013-07-04 Intel Corporation Programmable predication logic in command streamer instruction execution
US20140365749A1 (en) * 2011-12-29 2014-12-11 Venkateswara R. Madduri Using a single table to store speculative results and architectural results
US9442735B1 (en) * 2012-04-13 2016-09-13 Marvell International Ltd. Method and apparatus for processing speculative, out-of-order memory access instructions
US9348599B2 (en) 2013-01-15 2016-05-24 International Business Machines Corporation Confidence threshold-based opposing branch path execution for branch prediction
US20190087184A1 (en) * 2017-09-15 2019-03-21 Qualcomm Incorporated Select in-order instruction pick using an out of order instruction picker
US10402263B2 (en) * 2017-12-04 2019-09-03 Intel Corporation Accelerating memory fault resolution by performing fast re-fetching
US10761856B2 (en) * 2018-07-19 2020-09-01 International Business Machines Corporation Instruction completion table containing entries that share instruction tags
US11360773B2 (en) * 2020-06-22 2022-06-14 Microsoft Technology Licensing, Llc Reusing fetched, flushed instructions after an instruction pipeline flush in response to a hazard in a processor to reduce instruction re-fetching

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ES2138051T3 (es) * 1994-01-03 2000-01-01 Intel Corp Metodo y aparato para la realizacion de un sistema de resolucion de bifurcaciones en cuatro etapas en un procesador informatico.
US5584037A (en) * 1994-03-01 1996-12-10 Intel Corporation Entry allocation in a circular buffer
US20060095732A1 (en) * 2004-08-30 2006-05-04 Tran Thang M Processes, circuits, devices, and systems for scoreboard and other processor improvements
US8069339B2 (en) * 2009-05-20 2011-11-29 Via Technologies, Inc. Microprocessor with microinstruction-specifiable non-architectural condition code flag register

Also Published As

Publication number Publication date
US20100306506A1 (en) 2010-12-02
US8909908B2 (en) 2014-12-09
TW201042545A (en) 2010-12-01
TW201426543A (zh) 2014-07-01
TWI506551B (zh) 2015-11-01

Similar Documents

Publication Publication Date Title
CN101866280B (zh) 微处理器及其执行方法
TWI436274B (zh) 一種微處理器及其執行方法
EP1849063B1 (en) System and method of handling a branch misprediction
EP0661625B1 (en) Method and apparatus for implementing a four stage branch resolution system in a computer processor
TWI506550B (zh) 管線式微處理器、執行兩種條件分支指令的方法以及其電腦程式產品
EP2069915B1 (en) Methods and system for resolving simultaneous predicted branch instructions
JP5313279B2 (ja) 非アラインドメモリアクセス予測
US7237098B2 (en) Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence
US5634103A (en) Method and system for minimizing branch misprediction penalties within a processor
US9021240B2 (en) System and method for Controlling restarting of instruction fetching using speculative address computations
US20080250271A1 (en) Error recovery following speculative execution with an instruction processing pipeline
JPH1069385A (ja) 命令ループを推論的に実行するプロセッサ及び方法
US6205542B1 (en) Processor pipeline including replay
US9513925B2 (en) Marking long latency instruction as branch in pending instruction table and handle as mis-predicted branch upon interrupting event to return to checkpointed state
US5918046A (en) Method and apparatus for a branch instruction pointer table
US7010676B2 (en) Last iteration loop branch prediction upon counter threshold and resolution upon counter one
JP3721002B2 (ja) メモリ要求を形成するために並列に生成される複数の取出アドレスのうちの1つを選択する、プロセッサおよび命令取出方法
JP2006228257A (ja) 命令制御方法