TWI470547B - 非循序執行微處理器及其操作方法 - Google Patents

非循序執行微處理器及其操作方法 Download PDF

Info

Publication number
TWI470547B
TWI470547B TW99112637A TW99112637A TWI470547B TW I470547 B TWI470547 B TW I470547B TW 99112637 A TW99112637 A TW 99112637A TW 99112637 A TW99112637 A TW 99112637A TW I470547 B TWI470547 B TW I470547B
Authority
TW
Taiwan
Prior art keywords
instruction
load
storage
instructions
load instruction
Prior art date
Application number
TW99112637A
Other languages
English (en)
Other versions
TW201042543A (en
Inventor
Matthew Daniel Day
Rodney E Hooker
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 TW201042543A publication Critical patent/TW201042543A/zh
Application granted granted Critical
Publication of TWI470547B publication Critical patent/TWI470547B/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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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, 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)
  • Executing Machine-Instructions (AREA)

Description

非循序執行微處理器及其操作方法
本發明係有關於非循序執行微處理器(out-of-order execution microprocessors),特別是有關於非循序執行微處理器內之記憶體載入指令的效能。
微處理器具有載入指令(load instruction),用以將資料由記憶體來源位置(source memory location)載入至微處理器的暫存器;以及儲存指令,用以將資料由微處理器的暫存器儲存至記憶體目的地位置(destination memory location)。一般而言,微處理器會遭遇的情況是載入指令所指定(specify)的記憶體來源位址等同於較先前的(older)儲存指令之記憶體目的地位址。換言之,較先前的儲存指令將資料寫入至載入指令正在讀取的記憶體位址。這種情況通常稱為儲存碰撞(store collision)。當儲存碰撞發生時,為了要正確地執行程式,微處理器必須確定載入指令接收由較先之位址重疊的儲存指令所寫入的資料。
非循序執行微處理器並不依照程式順序(out of the program order)來執行指令。當儲存碰撞發生時,這會是個問題,原因在於載入指令可能會在較先前的儲存指令之前被發佈(issued)並執行,因此使得載入指令接收到錯誤的資料。在這種情況下,載入指令不能將載入的資料退返(retire)至其架構目的地暫存器(architectural destination register)。更確切地說,載入指令必須接收正確的儲存資料,並且將 正確的資料退返至目的地暫存器(destination register)。
讓載入指令能夠接收正確之儲存資料的一種方法是重新執行(replay)。換言之,微處理器會偵測前述的情況,並在執行儲存指令之後,使得載入指令被重新發出並且重新執行。由於儲存指令已經被執行,故在後續執行動作中,載入指令將可接收到正確的儲存資料。
然而,重新執行指令所付出的代價是相當大的,特別是發生在具有非常多管線級的微處理器中。首先,儲存指令可能依附於其他指令;事實上,儲存指令是位於相依性長鏈結(long chain of dependencies)的一端,所以儲存指令可能不會執行這麼多時脈;因此,載入指令在被重新執行之前可能要等待很多時脈週期。若載入指令在重新執行前須等待的時脈週期愈多,則處理載入指令所造成的效能損失(penalty)也就愈嚴重。此外,當載入指令被重新發佈並重新執行時,載入指令必須藉由相關管線級(relevant pipeline stages)而被再次地傳回(pass back again),並因此花費更多時脈週期。若載入指令需要藉由愈多的管線級才能將載入指令傳回,以處理載入指令之時脈週期數來看,則效能損失也就愈嚴重。
Panwar等人的專利(美國專利號:6,006,326)藉著使用儲存關於載入指令和儲存指令之彩色位元(color bits)的特殊陣列(special array)試圖解決這個問題。彩色位元陣列中所包含的項目(entries)對應於指令快取記憶體之項目,當載入指令或儲存指令由指令快取記憶體(instruction cache)被讀取時,彩色位元陣列亦會被讀取。在發佈早先於儲存指 令之載入指令而造成的重新執行之後,彩色位元陣列中相應的一個項目的彩色位元會被更新為相同的色彩值(color value),用以表示載入指令和儲存指令的相依性(依附關係)。當儲存指令和載入指令再度被設置於管線中而執行時,相依性比對邏輯(dependency checking logic)偵測到儲存指令和載入指令具有相同的色彩值,故將相依性回報至指令排程邏輯(instruction scheduling logic),其中指令排程邏輯在具有類似色彩的儲存指令(similarly colored store instruction)已經被排程後,才對此載入指令進行排程。
因為彩色位元陣列需要為指令快取記憶體的每個載入指令和儲存指令儲存彩色位元,所以彩色位元陣列的大小會是指令快取記憶體項目個數的函數。因為指令快取記憶體的項目數目通常很多,所以彩色位元陣列的潛在缺點是其在微處理器中需要大量的儲存空間。一個大的彩色位元陣列會消耗大量的電源和微處理器的實體空間。
因此,需要一種新的機制,用以減少在非循序執行微處理器中發生儲存碰撞時,重新執行載入指令的次數。
本發明實施例提供一種非循序執行微處理器,用以減少因儲存碰撞而重新執行載入指令的可能性,包括:佇列以及暫存器別名表。佇列包括複數項目,每個項目用以存放載入指令之指令指標和用來識別儲存指令的資訊,資訊會使得第一載入指令在執行時被要求重新執行。暫存器別名表耦接於佇列,用於依據循序排列的複數指令以產生複 數相依性,以便判斷複數指令何時能夠非循序執行,其中暫存器別名表用以在遇到第二載入指令時,判斷第二載入指令之指令指標是否符合於佇列之項目之一者的指令指標,以及當判斷符合時,使得第二載入指令依附於所符合之項目中的資訊所識別之儲存指令。
本發明實施例提供一種非循序執行微處理器之操作方法,用以減少因儲存碰撞而必須在非循序執行微處理器中重新執行載入指令的可能性,非循序執行微處理器具有暫存器別名表,暫存器別名表用於依據循序排列的複數指令以產生複數相依性,以便判斷複數指令何時能夠非循序執行,非循序執行微處理器之操作方法包括:在第一載入指令重新執行時,指派佇列之複數項目之一者;於所指派的項目中存放載入指令之指令指標和用來識別儲存指令的資訊,資訊會使得第一載入指令重新執行;於上述暫存器別名表遇到第二載入指令時,判斷第二載入指令之指令指標是否符合於佇列之項目之一者的指令指標;以及使得第二載入指令依附於所符合之項目中的資訊所識別之儲存指令。
本發明實施例提供一種非循序執行微處理器,用以減少因儲存碰撞而重新執行載入指令的可能性,包括:佇列以及暫存器別名表。佇列包括複數項目,每個項目存放用以識別儲存指令之來源的資訊以及相依性,其中相依性用以識別儲存指令為了其儲存資料所依附之指令,而儲存資料的來源用以計算儲存指令的儲存位址。暫存器別名表耦接於佇列,暫存器別名表用於依據循序排列的複數指令以 產生複數相依性,以便判斷指令何時能夠非循序執行,其中當暫存器別名表遇到載入指令時,暫存器別名表判斷載入指令中用以計算其載入位址的來源是否符合於佇列之一項目中儲存指令的來源,且若符合,則使得載入指令共用所符合之儲存指令的相依性。
本發明實施例提供一種非循序執行微處理器之操作方法,用以減少因儲存碰撞而必須在非循序執行微處理器中重新執行載入指令的可能性,非循序執行微處理器具有暫存器別名表,暫存器別名表用於依據循序排列的複數指令以產生複數相依性,以便判斷指令何時能夠非循序執行,非循序執行微處理器之操作方法包括:當暫存器別名表遭遇到儲存指令時,指派佇列之複數項目之一者;於所指派的項目中,填入用以識別儲存指令的來源之資訊,並且儲存指令的來源位址係用以計算儲存指令之儲存位址;當暫存器別名表遇到載入指令時,判斷用來計算載入指令之載入位址的來源是否符合於佇列之項目之一者中的儲存指令的來源位址;以及若載入指令的來源符合於佇列之項目之一者中的儲存指令的來源,則使得載入指令共用所符合之儲存指令的相依性。
本發明實施例提供一種非循序執行微處理器,用以減少因儲存碰撞而重新執行載入指令的可能性,包括:第一佇列、第二佇列以及暫存器別名表。第一佇列包括複數項目。第二佇列包括複數項目。暫存器別名表耦接於第一和第二佇列,暫存器別名表用以依據循序排列的複數指令以產生複數相依性,以便決定指令何時能夠非循序執行,其 中暫存器別名表用以:當暫存器別名表判斷出載入指令必須被重新執行時,則指派第一佇列之項目,並在所指派的項目中填入載入指令之指令指標;當暫存器別名表遇到儲存指令時,指派第二佇列之項目,並在所指派的項目中填入相依性,而相依性用以識別儲存指令為了其儲存資料所依附之指令;以及當暫存器別名表遇到載入指令被後續執行且判斷後續執行的載入指令之指令指標符合於第一佇列之所指派的項目的指令指標時,使得後續執行的載入指令共用相依性,相依性用以識別第二佇列之所指派項目中儲存指令為了其儲存資料所依附的指令。
本發明實施例提供一種非循序執行微處理器之操作方法,用以減少因儲存碰撞而必須在非循序執行微處理器中重新執行載入指令的可能性,非循序執行微處理器具有暫存器別名表,暫存器別名表用以依據循序排列的複數指令以產生複數相依性,以便決定指令何時能夠非循序執行,非循序執行微處理器之操作方法包括:於判斷出載入指令必須被重新執行時,指派第一佇列之複數項目之一者,並在所指派的項目中填入載入指令之指令指標;當載入指令遇到儲存指令時,指派第二佇列之複數項目之一者,並在所指派的項目中填入相依性,而相依性用以識別儲存指令為了其儲存資料所依附之指令;以及當暫存器別名表遇到載入指令被後續執行且判斷後續執行的載入指令之指令指標符合於第一佇列之所指派的項目的指令指標時,使得後續執行的載入指令共用相依性,相依性用以識別第二佇列之所指派項目中儲存指令為了其儲存資料所依附的指令。
本文所述實施例為管線化(pipelined)的非循序執行微處理器,用以在發生儲存碰撞時,減少載入指令重新執行的次數。微處理器包括一暫存器別名表(register alias table,RAT),用以預測載入指令何時會發生儲存碰撞,並使得載入指令與一個附加指令(additional instruction)具有依附關係,而載入指令通常不會與該附加指令具有依附關係。在本文中,藉由RAT而被載入指令依附的附加指令稱為被依賴者指令(dependee instruction)。這種附加或擴充式的相依性會使得微處理器的發佈邏輯等到被依賴者指令已經執行後(即已經產生其執行結果),才發佈載入指令。故被依賴者指令的執行結果能夠被發送(轉交)至載入指令,或是能夠自資料快取記憶體而被讀取。因此,當發佈邏輯(issue logic)將載入指令發佈來執行時,因為載入指令將會接收到正確的資料,所以載入指令不需被重新執行。
在一實施例中,RAT將用以識別(identify)運算元來源(sources of operands)的資訊儲存在佇列(queue)中,其中用以識別運算元來源的資訊由RAT用以計算所遭遇到的最近之(most recent)儲存指令的儲存位址。當遇到載入指令時,RAT會比較用以計算載入位址的來源與佇列中儲存位址的來源。若符合,則RAT預測儲存碰撞會發生,故使得載入指令和儲存指令具有相依性(依附關係)。換言之,RAT使得載入指令與儲存指令依附於同一個被依賴者指令,而儲存指令則為了其儲存資料亦依附於此被依賴者指令。
在另一實施例中,當載入指令與具有未解析儲存位置之較先的儲存指令發生儲存碰撞而接收到錯誤的資料,並因而被重新執行時,RAT會將此載入指令的指令指標(instruction pointer)和用以識別此儲存指令的資訊儲存在一佇列中。隨後,當RAT遇到另一個載入指令(RAT係由於儲存指令的指令指標值符合於佇列中的其中一個指令指標,而判斷出遇到另一個載入指令)時,RAT使得載入指令依附於相符之佇列項目所識別的儲存指令。
在另一實施例中,當RAT遇到一儲存指令時,RAT將一資訊推入(push into)一第一佇列,其中上述資訊用以識別儲存指令為了其儲存資料所依附到的指令。因此第一佇列用以儲存有關於RAT最近遇到之儲存指令的相依性資訊(dependency information)。當載入指令與不具有儲存資料(儲存資料尚不存在或尚未有效)之較先的儲存指令發生儲存碰撞而接收到錯誤的資料,而載入指令因而被重新執行時,RAT將載入指令的指令指標儲存於一第二佇列中。接著,當RAT遇到另一個儲存指令(RAT係由於儲存指令的指令指標值符合於佇列中的其中一個指令指標,而判斷出遇到另一個儲存指令)時,RAT使得載入指令依附於儲存指令由於其儲存資料而在第一佇列中所依附到的指令。RAT係根據第二佇列中之每個項目中所存放之載入指令的重新執行歷史,由第一佇列中選擇儲存指令。當RAT指派(allocates)載入指令到第二佇列的某一項目時,RAT清除該項目所對應的重新執行歷史,並且在每次該載入指令重新執行後,增加重新執行歷史的次數。若重新執行歷史的次 數超出一既定值,則RAT讓載入指令成為循序的(ordered)載入指令,使得載入指令在所有較先的儲存指令都被發佈後,RAT才會發佈載入指令。
參考第1圖,其顯示本發明中具有擴充式之RAT 134之微處理器100的方塊圖。在一實施例中,微處理器100是x86巨架構微處理器(macroarchitecture microprocessor)。所謂x86巨架構微處理器係指能夠正確地執行為x86架構微處理器設計之大部分應用程式的微處理器。若微處理器100能夠獲得其預期的結果,則稱其應用程式能夠正確地執行。具體而言,微處理器100用以執行x86指令集的指令,並且包括x86可見暫存器集合(x86 user-visible register set)。然而,本文中所述之用以降低載入指令被重新執行的機制(reduction mechanics)亦可使用於目前的或是未來的其他架構的微處理器。
微處理器100包括一指令快取記憶體(instruction cache)106,用以儲存來自系統記憶體(第1圖未圖示)的程式指令。微處理器100亦包括一指令解碼器(instruction decorder)108,用以接收來自指令快取記憶體106的指令並將其解碼。在一實施例中,指令解碼器108包括指令轉譯器(instruction translator),用以將微處理器100之一巨指令集(macroinstruction set)的巨指令轉譯為微處理器100之一微指令集(microinstruction set)的微指令。具體而言,指令解碼器108將記憶體存取指令(memory access instructions)(例如x86 MOV、PUSH、POP、CALL、RET等指令)轉譯為一個微指令的序列,上述序列包括一或多個 載入微指令或儲存微指令,其中為了簡化說明將其稱為一個載入指令或一個儲存指令。在其他實施例中,上述載入指令和儲存指令是微處理器100原生指令集(native instruction set)的一部分。
微處理器100亦包括一RAT 134,耦接於指令解碼器108;一保留站(reservation station)136,耦接於RAT 134;一重整緩衝器(reorder buffer,簡稱為ROB)172,耦接於RAT 134和保留站136;執行單元138,耦接於保留站136和ROB 172;以及架構暫存器(architectural register)162,耦接於ROB 172和執行單元138。
執行單元138包括記憶體重整緩衝器(memory order buffer,簡稱為MOB)182或者稱為記憶體子系統182,用以執行記憶體存取指令,例如載入指令與儲存指令。具體而言,MOB 182係根據載入指令與儲存指令,由與其耦接之資料快取記憶體186中讀出資料,或者是寫入資料至與其耦接之快取記憶體186中。此外,MOB 182對應於一匯流排介面單元(第1圖未顯示),用以將資料由系統計憶體讀出,或者是寫入系統記憶體。雖然MOB 182並非依照程式次序地接收載入和儲存指令來加以執行,但是MOB 182仍可以正確地解析出儲存碰撞。換言之,MOB 182會確保每個載入指令接收到正確的資料,具體而言,接收到來自正確的儲存指令(或複數儲存指令,單一載入指令所指定之資料由複數儲存指令所提供的情況下)的正確的資料以免發生儲存碰撞。如有必要,MOB 182會產生一重新執行訊號166至ROB 172,用以要求ROB 172將載入指令重新執 行,以確保本身(MOB 182)能夠接收到正確的資料。然而,本實施例試圖減少MOB 182必須提出請求以重新執行載入指令的次數。執行單元138亦包括用以執行非記憶體存取指令的其他執行單元184,例如整數指令執行單元、浮點數指令執行單元、多媒體指令執行單元,以及類似的執行單元。
RAT 134依照程式次序地由指令解碼器108接收解碼的指令,並且判斷微處理器100中每一個指令與其他未退返指令的相依性。RAT 134會儲存微處理器100中有關於每個未退返指令的暫存器更名資訊(register renaming information)。暫存器更名資訊包括(incorporates)這些未退返指令的程式次序。此外,RAT 134包括一複雜狀態機(complex state machine),用以根據更名資訊和RAT 134的其他輸入,控制微處理器100的多種動作。
RAT 134包括一相依性產生器(dependency generator)188,用以根據每個指令的程式次序、每個指令所指定的運算元來源,以及更名資訊(renaming information)來產生每個指令的相依性資訊(dependency information)158。相依性資訊158包括指令中每個輸入運算元的一識別符(identifier),即輸入運算元所依附之被依賴者指令的識別符。在一實施例中,識別器是ROB 172中之項目的一個索引(index),用以識別ROB 172中的一個項目,而該項目用以儲存被依賴者指令以及被依賴者指令所相關的狀態資訊,如下所述。
相依性資訊158包括一般的(normal)相依性資訊。相依 性資訊158亦包括有關於載入指令之擴充式或附加的相依性資訊,用以降低由於儲存碰撞導致載入指令被重新執行的可能性。RAT 134係根據提供來源運算元(source operands)之指令的暫存器來產生一般的相依性資訊。舉例而言,在下列表1所示的程式碼序列(code sequence)中,第(1)列中的指令ADD將R5和R6的內容相加並將結果放入R3。第(2)列中的指令SUB將R3的內容減掉R8的內容並將結果放入R7。因為指令ADD在程式次序上先前於指令SUB,且指令SUB指定R3作為其運算元來源之一,並且指令ADD指定R3作為其結果的目的地,所以指令SUB與指令ADD具有相依性(或是依附關係)。因此,指令SUB中第一運算元來源之一般的相依性資訊包括指令ADD的ROB索引,使得保留站136在指令ADD被執行後(即指令ADD已經產生其結果並且該結果對指令SUB是有效的(存在的或可取得的時候))才會發佈指令SUB。在一實施例中,微處理器100執行暫存器更名,ROB 172中由架構暫存器162更名而成的臨時暫存器(temporary register)係作為用以提供輸入運算元的暫存器。
RAT 134被加以擴充(enhanced),用以預測載入指令何時會發生儲存碰撞,並在一般的相依性資訊之外亦產生擴充式相依性資訊,使得載入指令依附於一個附加指令,而載入指令通常不會依附於該附加指令。RAT 134產生擴充 式相依性資訊是為了減少載入指令需被重新執行的可能性。在一實施例中,RAT 134將一被依賴者指令的ROB索引包括於一載入指令之一個未使用的輸入運算元欄位(一第三輸入運算元欄位)內,以便讓上述載入指令依附於上述被依賴者指令。
RAT 134包括複數佇列,RAT 134藉著上述佇列作出儲存碰撞的預測,並產生擴充式的載入指令相依性。上述佇列包括一儲存位址碰撞佇列(store address collision queue,簡稱為SACQ)192、一儲存位址別名佇列(store address alias queue,簡稱為SAAQ)194、一儲存資料別名佇列(store data alias queue,簡稱為SDAQ)196,以及一儲存資料相依性佇列(store data dependency queue,簡稱為SDDQ)198,第2圖、第6圖、第8圖和第9圖將分別詳細說明每個上述佇列的項目。
RAT 134會派送(dispatches)已解碼指令(decoded instruction)和有關於已解碼指令的相依性資訊158至保留站136。在派送指令之前,RAT 134會為指令指派ROB 172的一個項目。因此,指令會依照程式次序地被指派至ROB 172,其中ROB 172是環形佇列(circular queue)。這使得ROB 172得以確保指令能夠依照程式次序地被退返。RAT 134亦將相依性資訊158提供予ROB 172,用以將指令的項目儲存於ROB 172。當ROB 172重新執行一指令(如載入指令)時,ROB 172在重新執行該指令的期間,將儲存在ROB項目中的相依性資訊提供予保留站136。
保留站136包括多個佇列,用以存放(hold)由RAT 134 接收的指令和相依性資訊158。保留站136亦包括一發佈邏輯,用以當指令準備好將被執行時,將指令由佇列發佈至執行單元138。當一指令的所有相依性都是已解析的(resolved)時,該指令是準備好將被發佈且執行的。當被依賴者指令已經執行並使得其執行結果對所依附指令(依賴者指令)是有效的時,依賴者指令的相依性則是已解析的(即此執行結果對即將執行所依附指令的執行單元而言是有效的)。執行單元138經由架構暫存器162、經由ROB 172中由架構暫存器162更名而得的臨時暫存器(第1圖未圖示),或者經由直接來自執行單元138本身的轉發路徑(forwarding paths)176,來接收已執行指令的結果164。執行單元138亦提供其結果164至ROB 172,以便寫入至臨時暫存器。
MOB 182使用由載入指令和儲存指令所指定的來源運算元來為載入指令解析(即計算)載入位址,以及為儲存指令解析儲存位址。運算元的來源包括架構暫存器162、常數,及/或由指令指定的位移(displacements)。MOB 182亦藉由所解析的載入位址(resolved load address)由資料快取記憶體186中讀取載入資料。MOB 182亦藉由所解析儲存位址將儲存資料寫入至資料快取記憶體186中。在一實施例中,MOB 182包括用以執行載入指令的一載入單元,以及用以執行儲存指令的一或多個儲存單元。
如上所述,在一些情況下,MOB 182必須要求載入指令的重新執行,其中重新執行以提供至ROB 172的重新執行訊號166表示。重新執行訊號166指定需被重新執行之 指令(例如載入指令)的ROB索引,使得ROB 172能夠以重新執行所需的指示(indication)將索引項目(indexed entry)加以更新。在一實施例中,重新執行訊號166亦指定與載入指令碰撞之儲存指令的ROB索引,該碰撞使得載入指令必須重新執行。當具有被標記為需被重新執行之ROB索引的指令將緊接著被退返時(即最先之未退反指令),ROB 172重新執行載入指令。換言之,ROB 172將載入指令和其相關的相依性資訊158由ROB 172重新派送(re-dispatches)至保留站136,等待以後重新發佈(re-issuance)至執行單元138並被其重新執行(re-execution)。在一實施例中,ROB 172不僅將載入指令重新執行,亦將後於(newer)載入指令的所有指令重新執行。當ROB 172重新執行載入指令時,ROB 172以重新執行訊號168通知(signals)RAT 134此事件(event)。重新執行訊號168用以指定被重新執行之載入指令的ROB索引。
參考第2圖,其顯示用以說明本發明第1圖之SACQ 192之項目202(以下簡稱SACQ項目202)的方塊圖。SACQ項目202用以存放RAT 134所遇到之儲存指令的資訊。RAT 134會如第3圖和第4圖所述地指派、填入(populates)並使用SACQ項目202。SACQ項目202包括一有效位元(valid bit)204,用以指出此SACQ項目202是否有效。在重置時,微處理器100將所有的SACQ項目202初始化為無效的(invalid),意即清除每個SACQ項目202的有效位元204。SACQ項目202亦包括一srcA欄位(srcA field)206和一srcB(srcB field)欄位208,分別用以識別第一和第二運算元 的來源,其中MOB 182使用srcA欄位206和srcB欄位208來計算儲存指令的儲存位址。srcA欄位206和srcB欄位208用以識別存放有運算元或作為運算元之常數的架構暫存器162。SACQ項目202亦包括一位移欄位(displacement field)212,用以存放由儲存指令所指定的位移,其中MOB 182使用位移欄位212來計算其儲存位址。SACQ項目202亦包括位移有效位元(displacement valid bit)214,用以指出位移欄位212的數值是否有效。若儲存指令為了其儲存資料依附至被依賴者指令,SACQ項目202亦會包括一索引欄位(index field)216,用以存放被依賴者指令的ROB索引。在一實施例中,RAT 134將一既定值填入索引欄位216,用以指出儲存指令與其儲存資料並無相依性。
參考第3圖,其顯示用以說明本發明第1圖之RAT 134之操作的流程圖。流程始於步驟304。
在步驟304,RAT 134解碼一指令並產生其一般的相依性資訊,其中一般的相依性資訊被包括於第1圖的相依性資訊158中。流程前進至判斷步驟306。
在判斷步驟306,RAT 134判斷已解碼指令是否為一儲存指令。若是,流程前進至步驟308;否則,流程前進至判斷步驟312。
在步驟308,RAT 134會指派SACQ項目202。換言之,就邏輯上而言,RAT 134用以將SACQ項目202推入SACQ 192的尾端(tail),亦用以將SACQ項目202由SACQ 192的前端(head)推出。接著,RAT 134將來自儲存指令之合適的資訊填入所指派之SACQ項目202的srcA欄位206、srcB 欄位208和位移欄位212中。若儲存指令指定一位移,則RAT 134設定(sets)位移有效位元214;否則,RAT 134會清除位移有效位元214。儲存指令若由於其儲存資料依附至一被依賴者指令,RAT 134亦會將被依賴者指令的ROB索引填入索引欄位216。最後,RAT 134會設定有效位元204。在一實施例中,儲存指令實際上是兩個獨立的微指令:一個是儲存位址(store address,簡寫為STA)微指令,另一個則是儲存資料(store data,簡寫為STD)微指令。STA微指令被發佈至MOB 182的儲存位址單元,其中儲存位址單元係用以計算儲存位址。STD微指令被發佈至MOB 182的儲存資料單元,其中儲存資料單元用以由來源暫存器(source register)取得儲存資料,並且將儲存資料發佈(posts)至儲存緩衝器,以便後續寫入記憶體。在本實施例中,當RAT 134遇見(sees)STA微指令時,RAT 134會指派SACQ 192的項目202並且將來自儲存指令之合適的資訊填入srcA欄位206、srcB欄位208和位移欄位212中,而當RAT 134遇見(sees)STD微指令時,若儲存指令為了其儲存資料依附至被依賴者指令,RAT 134則會將被依賴者指令的ROB索引填入索引欄位216,並且設定有效位元204。流程退回至步驟304。
在判斷步驟312,RAT 134判斷已解碼指令是否為一載入指令。若是,流程前進至判斷步驟314;否則,流程前進至判斷步驟318。
在判斷步驟314,RAT 134會比較載入指令所指定的來源與SACQ項目202所指定之儲存指令的來源,用以判斷 其(由載入指令指定的來源)是否符合於與SACQ項目202有關之任何儲存指令。換言之,RAT 134會比較載入指令之第一來源運算元的欄位與每個SACQ項目202的srcA欄位206、比較載入指令之第二運算元的欄位與每個SACQ項目202的srcB欄位208,以及比較載入指令的位移欄位與每個SACQ項目202的位移欄位212。在一實施例中,RAT 134亦允許載入指令以調換次序的方式(swapped order)指定相同的來源暫存器。若對任何一個SACQ項目202而言,上述三種欄位均符合,而載入指令用以指定一位移且該位移有效位元214是被設定的,或載入指令未指定一位移且該位移有效位元214是被清除的,則流程前進至步驟316;否則,流程退回步驟304。
在步驟316,RAT 134預測出載入指令將與符合於SACQ項目202之較先的載入指令發生碰撞,故因而使得載入指令為了儲存指令的儲存資料,而分享(共用)儲存指令的相依性。換言之,RAT 134為載入指令產生擴充式相依性(enhanced dependency)158,其中擴充式相依性158用以指定符合於SACQ項目202之指標欄位216的數值,如步驟314所述。在一實施例中,MOB 182的作用在於:若MOB 182在相同時脈週期接收到發生儲存碰撞的載入和儲存指令,則MOB 182能夠將正確的資料由儲存指令轉發(forwarding)至載入指令,使得載入指令不需被重新執行。因此,藉由產生擴充式相依性讓載入指令依附於被預測為將發生碰撞之儲存指令,且儲存指令係為了其儲存資料依附至被依賴者指令,RAT 134將讓保留站136等待至被依 賴者指令之後,才將載入指令和被預測為將發生碰撞的儲存指令發佈出去,而在多數情況中,載入指令將不會早於被預測為將發生碰撞的儲存指令被發佈。流程退回步驟304。
在判斷步驟318,RAT 134判斷已解碼指令是否為能夠修正由任何SACQ項目202之srcA欄位206或srcB欄位208指定為(儲存位址)來源的一指令。若是,則流程前進至步驟322;否則,流程退回步驟304。
在步驟322,RAT 134清除每個SACQ項目202的有效位元204,其中有效位元204用以指定SACQ項目202之srcA欄位206或srcB欄位208中的暫存器是否由步驟318判斷後之已解碼指令所修正。因為載入位址和儲存位址將不會重疊,所以RAT 134會清除有效位元204;因此,讓後續的載入指令與SACQ項目202所相關的儲存指令共用(分享)儲存資料的相依性不太可能會具有助益。流程退回步驟304。
參考第4圖,其顯示用以說明本發明第1圖之ROB 172之操作的流程圖。流程始於步驟402。
在步驟402,ROB 172退返一指令並通知(notify)RAT 134。流程前進至判斷步驟404。
在步驟404,RAT 134掃描SACQ 192,用以判斷是否有任何SACQ項目202的索引欄位216符合於被ROB 172退返之指令的索引。若有,則流程前進至步驟406;否則,流程退回步驟402。
在步驟406中,RAT 134清除符合之SACQ項目202 的有效位元204。這樣能夠確保RAT 134不會為後續的載入指令產生擴充式相依性去依附至一個已被退返的指令。流程退回步驟402。
參考第5圖,其顯示用以說明本發明第1圖之保留站136之操作的流程圖。流程始於步驟502。
在步驟502,保留站136檢查(examines)指令的相依性資訊。流程前進至判斷步驟504。
在步驟504,保留站136判斷由有關於一指令之相依性資訊指定的所有相依性(dependencies)是否都已被解析。在一實施例中,保留站136會檢查由相依性資訊158之ROB索引所指定之ROB 172項目中的完成位元(complete bit)。當所有的完成位元都是設定的時候,則相依性已被解析。當一執行單元138產生一指令的執行結果時,執行單元138會設定ROB172項目中有關於該指令的完成位元。具體而言,在RAT 134為載入指令產生擴充式相依性後(如第3圖步驟316所述),保留站136判斷被預測為將發生碰撞之儲存指令為了其儲存資料所依附的該(載入)指令是否為完成的。若(載入)指令的所有相依性都已被解析,則流程前進至步驟506;否則,流程退回步驟502。
在步驟506,保留站136發佈具有已被解析之相依性的指令至執行單元138。流程退回步驟402。該已被解析之相依性的指令包含載入指令以及其它種類的指令。
根據第2圖至第5圖的實施例,第1圖之微處理器100的操作將以下列表2表3中程式碼序列的處理加以說明。為了簡化,在本實施例中,載入和儲存指令不包括位 移值(displacement value)。第(1)列中的加法指令ADD將暫存器R5和R6的內容相加並將結果放入暫存器R3。第(2)列中的儲存指令ST將暫存器R3的內容儲存至記憶體的儲存位址,其中儲存位址是將暫存器R1和R2的內容相加而得。第(3)列中的載入指令LD將記憶體的載入位址載入暫存器R7,其中載入位址是將暫存器R1和R2的內容相加而得。
當RAT 134遇到第(2)列的儲存指令ST時,RAT 134會執行第3圖的步驟304至步驟308。換言之,RAT 134產生一般的相依性資訊158、指派SACQ 192的項目,以及將暫存器R1和R2分別填入srcA欄位206和srcB欄位208。此外,因為暫存器R3是儲存指令ST之儲存資料的來源暫存器(source register)且暫存器R3亦是加法指令ADD執行結果的目的地暫存器,儲存指令ST會由於其儲存資料(暫存器R3的儲存資料)而依附至加法指令ADD,因此RAT 134會將加法指令ADD的ROB索引填入索引欄位216。最後,RAT 134會清除位移有效位元214並且設定有效位元204。
當RAT 134遇到第(3)行的載入指令LD時,RAT 134執行程式的流程是由第3圖的步驟304,經步驟312至步驟316。換言之,在步驟304時,RAT 134產生一般的相 依性資訊158;在判斷步驟314時,RAT 134偵測到載入位址的來源(即暫存器R1和R2)正好符合於剛才為儲存指令ST所填入之SACQ項目202的srcA欄位206和srcB欄位208,故因而產生擴充式相依性資訊158。擴充式相依性資訊158係為剛才為儲存指令ST所填入之SACQ項目202的索引欄位216的值,並且擴充式相依性資訊158會使得載入指令LD依附至第(1)列的加法指令ADD,意即使得載入指令LD為了儲存指令ST之儲存資料,而共用儲存指令ST的相依性,依附至加法指令ADD。因此,根據第5圖,保留站136在加法指令ADD已經完成後(即加法指令ADD的執行結果對儲存指令ST是有效的)才會發佈載入指令LD,其中儲存指令ST會將執行結果轉發至載入指令LD。
接著,如第4圖所述,當ROB 172退返第(1)列的加法指令ADD時,RAT 134清除有關於第(2)列儲存指令ST所對應之SACQ項目202的有效位元204。
表3中的的程式碼序列類似於表2中的程式碼序列;然而,在第(2)列的儲存指令ST和第(3)列的載入指令LD間的第(2’)列中,有一減法指令SUB,用以將暫存器R8的內容減去暫存器R9的內容,然後將結果放入暫存器R1。
當RAT 134遇到第(2’)列的減法指令SUB時,RAT 134 執行程式的流程是由第3圖的步驟304,經步驟318至步驟322。換言之,因為減法指令SUB修改了被SACQ項目202之scrA欄位206所指定之暫存器R1的內容,所以RAT 134會產生一般的相依性資訊158並且清除有關於第(2)列之儲存指令ST之SACQ項目202的有效位元204。
由第1圖~第5圖和表1~表3中的說明可以發現本發明的優點在於:RAT 134產生的擴充式相依性能夠使得載入指令LD和儲存指令ST依附於相同的指令。當RAT 134遇到載入指令LD和儲存指令ST時,因為載入位址和儲存位址仍未產生,故即使載入位址和儲存位址會發生碰撞,RAT 134亦不會由於儲存指令ST因此為載入指令產生一般的相依性。
相較於Panwar等人以彩色位元陣列為基礎的系統(美國專利案號6,006,326),第2圖~第5圖之實施例的優點是:為了預測儲存碰撞並產生擴充式相依性資訊,在本實施例中,不需要讓載入指令重新執行其先前的執行;更確切地說,本實施例能夠完全避免載入指令的重新執行,意即若用以計算載入位址和儲存位址的來源是相同的,則本實施例能夠避免載入和儲存指令在第一次執行後的重新執行。如前所述,如果時脈週期的嚴重效能損失是源自於指令的重新執行,則這是顯著的優點。
然而,RAT產生之擴充式相依性卻可能是錯誤的相依性。換言之,雖然載入位址和儲存位址並未重疊,但是RAT 134卻錯誤地預測了一次儲存碰撞,這項錯誤實際上會讓微處裡器花費更多時間來執行載入指令,這是因為:載入 指令可能在擴充式相依性的被依賴者指令之前就已經被發佈,而載入指令不需要被重新執行。然而,發明人發現,對多數程式而言,載入指令重新執行次數的減少所得到的益處遠大於錯誤預測的後果。這可能是重新執行的效能損失相對較大所導致,其中在一實施例中,因為重新執行而導致的效能損失為50個時脈週期,而由錯誤預測所導致的效能損失為1或2個時脈週期,並且若載入位址和儲存位址的來源是相同的,則其重疊的機率也很高。
相較於Panwar等人以彩色位元陣列為基礎的系統(美國專利案號6,006,326),第2圖~第5圖之實施例的另一種優點是:相較於彩色位元陣列,本實施例不需要太多的儲存空間,並且具有提供附加(concomitant)空間和節能的優點。雖然SACQ的每個項目都可能儲存比彩色位元實施例更多的位元,但是因為彩色位元陣列的大小相應於指令快取記憶體之每個指令(或指令區塊)的項目數量,而SACQ項目的數量遠少於彩色位元項目的數量,因此,SACQ項目的數量反而比較少。舉例而言,在微處理器的一實施例中,發明人發現具有4個項目的SACQ能夠大幅減少載入指令重新執行的次數。
相較於Panwar等人以彩色位元陣列為基礎的系統(美國專利案號6,006,326),第2圖~第5圖之實施例的另一種優點是:本實施例能夠讓載入指令比彩色位元組更快被發佈。具體而言,彩色位元陣列根據其本身的儲存指令來產生載入指令的相依性,這表示載入指令只能夠在儲存指令執行後被發佈;反之,第2圖~第5圖和第8圖~第11圖的 實施例根據發生碰撞之儲存指令為了其儲存資料而依附的被依賴者指令來產生擴充式相依性,並不是如同Panwar等人是根據有關於發生碰撞的儲存指令本身來產生相依性,這表示在一些情況下,藉由本處所述實施例,載入指令會比Panwar等人的實施例更快被發佈。
如同即將被說明之表4中的程式碼片段,在一些情況下,第2圖~第4圖的實施例並未預測到儲存碰撞。然而,第6圖~第11圖的實施例能夠預測到該等情況下的儲存碰撞。表4中的程式碼片段類似於表2中的程式碼片段;然而,第(3)列的載入指令LD將暫存器R8(而非暫存器R2)的內容和暫存器R1的內容相加以計算載入位址。因為在第(2)列之儲存指令用以計算儲存位址的來源與第(3)列之載入指令用以計算載入位址的來源並不相同,所以即使載入位址儲存位址互相符合,SACQ 192也不會如同第2圖~第5圖預測可能發生的儲存碰撞;然而,第6圖~第11圖的實施例能夠預測到可能的儲存碰撞。
參考第6圖,其顯示用以說明本發明第1圖之SAAQ 194之項目602(以下簡稱SAAQ項目602)的方塊圖。因為載入指令的載入位址與具有仍未被產生之儲存位址之較先的儲存指令發生儲存碰撞,所以載入指令接收到錯誤的資料,且載入指令因此而被重新執行,故SAAQ項目602用 以存放被重新執行之載入指令的資訊。RAT 134會如第7圖所述地指派、填入並使用SAAQ項目602。SAAQ項目602包括一有效位元602,用以指出SAAQ項目602是否有效。在重置時,微處理器100將所有的SAAQ項目602初始化為無效的(即清除每個SAAQ項目602的有效位元604)。此外,在一實施例中,每當x86程式碼片段之片段描述符(segment descriptor)中的程式碼限制數值(code segment limit value)被寫入時,每個SAAQ項目602的有效位元604便被清除。SAAQ項目602亦包括一指令指標(instruction pointer,簡寫為IP)欄位606,用以儲存載入指令所停留的記憶體位址。在一實施例中,IP欄位606用於記錄在載入指令之後的下一個指令的記憶體位址,而非記錄載入指令本身的記憶體位址。SAAQ 602亦包括一差值(delta)欄位608,用以儲存介於載入指令的ROB索引和儲存指令的(在一實施例中,該儲存指令為一STA指令)ROB索引之間的差值,該差值是造成載入指令重新執行的原因,如下所述。
參考第7圖,其顯示本發明中第1圖之微處理器100產生載入指令之擴充式相依性資訊的流程圖,用以說明當發生儲存碰撞時避免重新執行的操作。流程始於步驟702。
在步驟702,因為載入指令與仍未被MOB 182產生之位址之一較先的儲存指令發生儲存碰撞,所以MOB 182偵測到已完成的載入指令接收到錯誤的資料。因此,MOB 182並不知道MOB182或執行單元138必需將發生碰撞之儲存指令的資料轉發至載入指令。在一實施例中,即使MOB 182 知道有一或多個較先之儲存指令的儲存位址仍未被解析,也就是即使MOB 182知道在載入指令和具有未解析儲存位址的儲存指令之間有可能發生儲存碰撞,MOB 182仍允許載入指令存取資料快取記憶體186。MOB 182這樣作是希望儲存碰撞從未發生,在這種情況下,相較於MOB 182在儲存位址被解析後才讓載入指令停止等待(才發佈載入指令),載入指令能夠執行得更快。若存在儲存碰撞的情況,即因為MOB 182應該都已經將正確的資料從具有未解析位址之發生碰撞的儲存指令之處轉發出去,載入指令因而接收到錯誤的資料時,則這麼作的後果是載入指令必須被重新執行。流程前進至步驟704。
在步驟704,MOB 182產生重新執行訊號166至ROB 172,用以指出步驟702所偵測到的情況。具體而言,MOB 182輸出載入指令的ROB索引和儲存指令,其中ROB 172使用載入指令的ROB索引來更新載入指令之ROB項目的狀態,以便指出載入指令需要被重新執行。流程前進至步驟706。
在步驟706,RAT 134監測(snoops)MOB 182在步驟704產生的重新執行訊號166、記錄(notes)載入指令的重新執行請求,以及計算載入指令的ROB索引和儲存指令的ROB索引之間的差值並將該差值儲存於其中。在一實施例中,當RAT 134在計算差值時,RAT 134會考慮ROB 172之環形佇列特性的繞回影響(wrap around affect)。在表4的實施例中,在步驟704,MOB 182輸出第(3)列之載入指令LD的ROB索引和第(4)列之儲存指令ST的ROB索引:因為 上述兩個指令在程式次序上是相鄰的,所以RAT 134計算其ROB索引之間的差值為1。如上所述,在一實施例中,儲存指令ST實際上是兩個獨立的微指令:一個是儲存位址STA微指令,其次是緊接其後的STD微指令。在本實施例中,在步驟704中,ROB 172輸出STA微指令的ROB索引,其中STA微指令在程式次序上先前於STD微指令;因此,RAT 134計算載入指令的ROB索引和STA微指令的ROB索引之間的差值為2。流程前進至步驟708。
在步驟708,ROB 172判斷緊接的載入指令要被退返,即載入指令已經成為ROB 172中最先的指令。ROB 172發現(sees)載入指令被標記為需被重新執行並重新執行載入指令。換言之,ROB 172重新派送載入指令和其相依性資訊158至保留站136,用以等待後續被重新發佈至執行單元138,以便重新執行。在一實施例中,ROB 172不僅將載入指令重新執行,亦將後於載入指令的所有指令重新執行。此外,ROB 172產生重新執行訊號168至RAT 134。流程前進至步驟712。
在步驟712,RAT 134會根據步驟708產生的重新執行指令168而指派SAAQ項目602。換言之,RAT 134將被指派的新SAAQ項目602推入SAAQ 194的尾端(tail),亦將由SAAQ 194的前端推出一個SAAQ項目602。接著,RAT 134將來自儲存指令的IP數值填入IP欄位606。RAT 134亦將步驟706計算的差值填入差值欄位608。最後,RAT 134設定有效位元604。流程前進至步驟714。
在步驟714,RAT 134遇到一第二載入指令並為該載入 指令產生其一般的相依性資訊。此外,RAT 134會比較每個有效之SAAQ項目602的IP欄位606與載入指令的IP數值。流程前進至判斷步驟716。
在判斷步驟716,RAT 134判斷步驟714所執行的比較是否顯示具有任何SAAQ項目602符合於載入指令的IP數值。若無,則流程結束;否則流程前進至步驟718。要注意的是,RAT 134在步驟714/716/718遇到的第二載入指令不同於RAT 134在步驟712填入之IP所屬的載入指令。因此,當載入指令被重新執行時,RAT 134不會將儲存指令目前的(actual)ROB索引填入SAAQ項目602。更確切地說,本發明的優點在於當載入指令被重新執行時,RAT 134會先將第一次遭遇到之載入指令和儲存指令之間ROB索引的差值填入SAAQ項目602,以便RAT 134在下一次遇到第二載入指令或在其之後的載入指令時,RAT 134能夠為較先之儲存指令在先前已決定的差值欄位608和目前的載入指令產生一擴充式相依性,如以下步驟718所述。發明人已經確認載入指令所需要等待之載入指令和儲存指令之間ROB索引的差值極有可能相同於重新執行後的ROB索引。
在步驟718,RAT 134預測載入指令會與較先的儲存指令發生碰撞,因而使得載入指令依附於儲存指令,其中較先的儲存指令的ROB索引是由符合的SAAQ項目602之差值欄位608的數值計算而得。換言之,RAT 134為載入指令產生擴充式相依性158,其中擴充式相依性158用以指定ROB索引,而此ROB索引是一個差值,其等於載入指 令的ROB索引減去在步驟716所決定之符合的SACQ項目602之差值欄位608的數值(即儲存指令的ROB索引)。本發明的優點在於:因為載入指令依附於儲存指令,所以載入和儲存指令將依程式次序被發佈。具體而言,儲存指令會被及時地(in time)執行(即產生其儲存位址),以便MOB 182偵測其與載入位址碰撞的位址。因此,當載入指令到達MOB 182時,而儲存資料是可取得的(有效的、存在的),MOB 182將偵測到載入和儲存指令間發生碰撞,並且將儲存資料轉發給載入指令。若儲存資料是無法取得的(無效的、不存在的),則MOB 182將重新執行載入指令,如以下第8圖~第11圖所討論的實施例。在表4的實施例中,因為差值欄位608的數值為1(若是STA微指令,則數值是2),所以RAT 134將為第(3)列的載入指令LD產生擴充式相依性158,用以指定第(2)列的儲存指令ST,使得保留站136進行等待,然後在儲存指令ST(或STA微指令)已經發佈之後,才發佈載入指令LD。流程中止於步驟718。
根據一實施例,SAAQ 194的IP欄位606的長度少於IP位址之位元數。因此,即使在步驟716判斷有SAAQ項目的IP欄位606符合於載入指令的IP數值,亦不能保證載入指令與在步驟708/712被重新執行的載入指令是相同的。此外,亦不能保證在索引的ROB 172項目中有一個儲存指令,或者是其儲存位址與載入指令的載入位址發生碰撞。更確切地說,RAT 134只是作出預測而已。然而,發明人發現,雖然RAT 134有預測錯誤的可能性,但是使用第6圖~第7圖的實施例仍可大幅減少載入指令重新執行的 次數。
相較於Panwar等人以彩色位元陣列為基礎的系統(美國專利案號6,006,326),上述第6圖~第7圖和下述第8圖~第11圖之實施例的一種優點是:上述實施例所需的儲存空間少於彩色位元陣列,並且具有提供附加空間和節能的優點,如上所述。雖然SAAQ或SAAQ+SDDQ的每個項目都可能比彩色位元陣列儲存更多位元數,但是因為彩色位元陣列的項目必須對應到指令快取記憶體之每個指令(或指令區塊),所以SAAQ或SAAQ+SDDQ項目的數量卻可能遠少於彩色位元陣列的項目數量;因此,SAAQ或SAAQ+SDDQ項目的總記憶體數量反而比較少。舉例而言,在微處理器的一實施例中,發明人發現具有4個項目的SAAQ、具有4個項目的SDAQ,以及具有2個項目的SDDQ能夠大幅減少載入指令重新執行的次數。
相較於Panwar等人以彩色位元陣列為基礎的系統(美國專利案號6,006,326),上述第6圖~第7圖和下述第8圖~第11圖之實施例的另一種優點是:因為上述實施例提供載入指令重新執行之理由較多較細緻,並且試圖根據重新執行之不同理由,使用不同方法來預測儲存碰撞,所以上述實施例能夠大幅減少載入指令重新執行的次數。
只有當重新執行是因為已完成的載入指令接收到錯誤的資料所造成時,第6圖~第7圖的實施例才會填入SAAQ 194的項目,上述成因是載入指令與仍未被MOB 182產生之位址之較先的載入指令發生碰撞,MOB 182因而並未偵測到其必需將發生碰撞的資料轉發至載入指令。然而,發 明人已經確定:有一些儲存碰撞引起的(store collision-induced)載入指令重新執行是不能藉由第6圖~第7圖的實施例而預測的。具體而言,有一些重新執行的起因在於MOB 182偵測到在執行了一載入指令時,MOB 182提供了錯誤的資料給該載入指令(因為其偵測到在載入指令和儲存指令間的儲存碰撞),但是發生碰撞之儲存指令的儲存資料卻是無效的(不存在的或無法取得的)。本發明的優點在於:第8圖~第11圖的實施例解決了這個問題。具體而言,RAT 134會試圖為載入指令產生擴充式相依性,讓載入指令分享儲存指令的相依性,使得載入指令在儲存指令為了其儲存資料所依附的指令已經發佈後,載入指令才會被發佈執行,其細節如下所述。
參考第8圖,其顯示用以說明本發明第1圖之SDAQ 196之項目802(以下簡稱『SDAQ項目802』)的方塊圖。SDAQ項目802用以存放被重新執行之載入指令的資訊,載入指令被重新執行的原因是:當MOB 182執行載入指令時,因為載入指令的載入位址與具有無效之(不存在的或無法取得的)儲存資料的儲存指令發生碰撞,所以載入指令接收到錯誤的資料,載入指令因而被重新執行。RAT 134會如第10圖和第11圖所述地指派、填入並使用SDAQ項目802。SDAQ項目802包括一有效位元804,用以指出SDAQ項目802是否有效。在重置時,微處理器100將所有的SDAQ項目802初始化為無效的(即清除每個SDAQ項目802的有效位元804)。此外,在一實施例中,每當x86程式碼片段之片段描述符中的程式碼限制數值被寫入時,每 個SDAQ項目802的有效位元804便被清除。SDAQ項目802亦包括一IP欄位806,用以儲存載入指令所停留的記憶體位址。在一實施例中,IP欄位806記錄在載入指令之後的下一個指令的記憶體位址,而非載入指令本身的記憶體位址。SDAQ項目802亦包括一歷史欄位(history field)808,用以估計(approximates)載入指令之IP欄位806的重新執行次數,其細節如以下詳述。在一實施例中,歷史欄位808的數值逐漸遞增並在數值等於4時飽和。SDAQ項目802亦包括一索引欄位812,用以存放IP欄位806所指定位址上最近的載入指令之ROB索引。SDAQ項目802亦包括一索引有效欄位814,用以指出索引欄位812的數值是否有效。
參考第9圖,其顯示用以說明本發明第1圖之SDDQ 198之項目902(以下簡稱『SDDQ項目902』)的方塊圖。SDDQ項目902用以存放有關於RAT 134最近遇到之儲存指令的相依性資訊。RAT 134會如第10圖和第11圖所述地指派、填入並使用SDDQ項目902。SDDQ項目902包括一有效位元04,用以指出SDDQ項目902是否有效。在重置時,微處理器100將所有的SDDQ項目902初始化為無效的(即清除每個SDDQ項目902的有效位元904)。此外,類似於第4圖中的ROB 172將SACQ 172無效化(invalidates)的方式,當ROB 172將具有符合於SDDQ項目902之索引欄位906之索引欄位的指令退返時,ROB 172將SDDQ項目902無效化。若儲存指令為了其儲存資料依附至一被依賴者指令,SDDQ項目902亦會包括索引欄位 906,用以存放被依賴者指令的ROB索引。在一實施例中,RAT 134將一既定值填入索引欄位906,指出儲存指令不會由於其儲存資料而具有依附關係。
參考第10圖,其顯示本發明中第1圖之微處理器100產生載入指令之擴充式相依性資訊的流程圖,用以說明當發生儲存碰撞時避免重新執行的操作。流程始於步驟1004。
在步驟1004,RAT 134解碼一指令並產生其一般的相依性資訊,其中一般的相依性資訊被包括於第1圖的相依性資訊158中。流程前進至判斷步驟1006。
在判斷步驟1006,RAT 134判斷已解碼指令是否為一儲存指令。若是,流程前進至步驟1008;否則,流程前進至判斷步驟1012。
在判斷步驟1008,RAT 134指派SDDQ項目902。換言之,在佇列邏輯結構上而言,RAT 134會將SDDQ項目902推入SDDQ 902的尾端(tail),亦會將SDDQ項目902由SDDQ 902的前端(head)推出。接著,若儲存指令為了其儲存資料相依至被依賴者指令,RAT 134則將被依賴者指令的ROB索引填入索引欄位906。最後,RAT 134設定有效位元904。在一實施例中,儲存指令實際上是兩個獨立的微指令:一個是STA微指令,另一個則是STD微指令。在本實施例中,當RAT 134遇見STD微指令時,RAT 134指派SDDQ項目902、將被依賴者指令的ROB索引填入索引欄位906(若儲存指令為了其儲存資料依附至被依賴者指令),以及設定有效位元904。流程退回步驟1004。
在步驟1012,RAT 134判斷已解碼指令是否為一載入 指令。若否,流程退回步驟1004;否則,流程前進至步驟1014。
在步驟1014,RAT 134會比較每個有效之SDAQ項目802的IP欄位806與載入指令的IP數值。流程前進至判斷步驟1016。
在判斷步驟1016,RAT 134判斷步驟1014所執行的比較是否顯示具有任何SDAQ項目802符合於載入指令的IP數值。若無,則流程退回步驟1004;否則,流程前進至步驟1018。根據一實施例,SDAQ 196的IP欄位806長度少於IP位址之位元數。因此,即使在步驟1016判斷有SDAQ項目符合於載入指令的IP數值,亦不能保證載入指令與在步驟1104中(第11圖)被重新執行的載入指令是同一個的。
在步驟1018,RAT 134檢查符合的SDAQ項目802之歷史欄位808的數值。若歷史欄位808的數值為0或1,則RAT 134讓載入指令分享(共用)被較後(新)的SDAQ項目902之索引欄位906所指定之儲存指令的相依性。若歷史欄位808的數值為2或3,則RAT 134讓載入指令共用(分享)較先之SDAQ項目902之索引欄位906所指定之儲存指令的相依性(在一實施例中,SDDQ項目902的數目為2)。若歷史欄位808的數值大於3,則RAT 134讓載入指令成為強制依照順序執行的載入指令。換言之,RAT 134為載入指令產生擴充式相依性158,使得保留站136進行等待,然後在所有較先的儲存指令(或STA微指令)已經發佈之後,才發佈載入指令LD。在其他實施例中,SDDQ項目902的數目不為2,並且隨著歷史欄位808之數值的增加,RAT 134選擇之SDDQ 198中更加老舊的儲存指令。再者,在其他實施例中,歷史欄位808的最大數值大於4,且歷史欄位808的臨界數值亦不同於第10圖的實施例。只有當SDDQ項目902有效時,RAT 134才會讓載入指令共用(分享)SDDQ項目902所指定之儲存指令的相依性;否則,若所有SDDQ項目902都無效時,根據一實施例,則RAT 134讓載入指令成為強制依照順序執行的載入指令,並且根據另一實施例,則RAT 134並不為載入指令產生擴充式相依性。流程前進至判斷步驟1022。
在判斷步驟1022,RAT 134判斷索引有效欄位814是否為了步驟1016被判斷為符合的SDAQ項目802而被設定的。若SQAQ項目802是有效的,流程退回步驟1004;否則,步驟前進至步驟1024。
在步驟1024,RAT 134以目前之載入指令的ROB索引填入SDAQ項目802的索引欄位812,並設定索引有效位元欄位814,其中目前之載入指令的位址是被IP欄位指定的(即RAT 134在步驟1004所遇到之載入指令的ROB索引)。流程退回步驟1004。
參考第11圖,其顯示本發明中第1圖之微處理器100指定並更新SDAQ 196的項目802(以下簡稱『SDAQ項目802』)的流程圖。流程始於步驟1102。
在步驟1102,當MOB 182執行載入指令時,MOB 182偵測到載入指令與不具有儲存資料(即儲存資料是無效的、不存在的或無法取得的)的儲存指令發生碰撞,而且MOB 182提供給載入指令的資料是錯誤的。因此,MOB 182 產生重新執行訊號166給ROB 172,用以告知MOB 182所偵測到的情況。具體而言,MOB 182輸出載入指令的ROB索引給ROB 172,其中ROB 172使用載入指令的ROB索引來更新ROB 172之項目的狀態,以便指出載入指令需要被重新執行。流程前進至步驟1104。
在步驟1104,ROB 172判斷出步驟1105所偵測到的載入指令緊接著要被退返,即載入指令已經成為ROB 172中最先的指令。ROB 172發現載入指令被標記為需被重新執行,因而重新執行載入指令。換言之,ROB 172從ROB 172重新派送載入指令和其相依性資訊158至保留站136,用以等待後續被重新發佈至執行單元138並加以重新執行。在一實施例中,ROB 172不僅將載入指令重新執行,亦將後於載入指令的所有指令重新執行。此外,ROB 172產生重新執行訊號168至RAT 134。流程前進至步驟1106。
在步驟1106,RAT 134會比較重新執行之載入指令的IP數值與每個有效之SDAQ項目802的IP欄位806。流程前進至判斷步驟1108。
在判斷步驟1108,RAT 134判斷步驟1106所執行的比較是否顯示具有任何SDAQ項目802符合於載入指令的IP數值。若無,則流程前進至步驟1112;否則,流程前進至步驟1114。
在步驟1112,RAT 134會指派SDAQ項目802。換言之,邏輯上而言,RAT 134會將SDAQ項目802推入SDAQ 802的尾端(tail),亦會將SDAQ項目802由SDAQ 802的前端(head)推出。接著,RAT 134將載入指令的IP數值填 入IP欄位806。RAT 134亦將歷史欄位808清除為0。最後,RAT 134設定有效位元804。流程中止於步驟1112。
在步驟1114,RAT 134會比較載入指令的ROB索引與每個有效之SDAQ項目802的索引欄位812,其中每個有效之SDAQ項目802的索引有效位元是被設定為有效的。流程前進至判斷步驟1116。
在步驟1116,RAT 134判斷步驟1114所執行的比較是否顯示具有任何SDAQ項目802符合於載入指令的ROB索引。若無,則流程結束;否則,流程前進至步驟1118。
在步驟1118,RAT 134將符合之SDAQ項目802的歷史欄位808增量。因為在步驟1102決定將載入指令重新執行,所以載入指令在步驟1104被重新執行,RAT 134因而將歷史欄位808增量。然而,要注意的是,若載入指令是由於其他原因而被重新執行,例如第7圖的步驟702,則RAT 134不會將歷史欄位808增量。此外,RAT 134將索引有效欄位814清除。流程中止於步驟1118。
根據第8圖~第11圖的實施例,第1圖之微處理器100的操作將以下列表5之中程式碼序列的處理加以說明。為了簡化,在本實施例中,載入和儲存指令不包括位移值。表5的第3列至第5列類似於表4的第1列至第3列。然而,在表5,第1列的加法指令ADD和第2列的儲存指令ST在程式次序上是先前於的第3列至第5列的指令,其中第1列的加法指令ADD將暫存器R8和R9的內容相加並將結果放入暫存器R4。第(2)列中的儲存指令ST將暫存器R4的內容儲存至記憶體的儲存位址,其中儲存位址是將暫 存器R1和R2的內容相加而得。因此,第2列的儲存指令ST與第1列之加法指令ADD具有一般的相依性,如同第4列的儲存指令ST與第3列之加法指令ADD具有一般的相依性。
根據第11圖的步驟1104,假設第5列的載入指令會被重新執行,並且根據第11圖的步驟1112,RAT 134指派SDAQ項目802,並將有關於重新執行之載入指令的IP數值填入SDAQ項目802。一般而言,因為發生碰撞的儲存指令已經被退返,所以當載入指令重新執行時,被重新執行的載入指令將成功地執行和退返,這是因為載入指令會在微處理器100中最先的未退返指令(即較先之發生碰撞的儲存指令)已經退返後,才被重新執行。假設表5中的指令是程式迴圈的一部份,並且接著程式會第二次執行表5中的指令,根據第10圖的步驟1008,RAT 134指派SDDQ項目902,並將第2列儲存指令ST為了其儲存資料所依附之指令的ROB索引填入SDDQ項目902;根據步驟1008,RAT 134係將第4列儲存指令ST為了其儲存資料所依附到之指令的ROB索引填入SDDQ項目902;根據第10圖的步驟1018,RAT 134為第5列的載入指令LD產生擴充式 相依性158,使得第5列的載入指令LD與第4列的載入指令ST共用(分享)相依性;以及根據第10圖的步驟1024,RAT 134以載入指令LD的索引填入IP符合之(IP-matching)SDAQ項目802的索引欄位812,並且將索引有效欄位設定為有效的。這會使得保留站136進行等待,在第3列的加法指令ADD執行後,才會發佈載入指令LD,亦通常會使得載入指令LD不會早於第4列的儲存指令被發佈。藉此將能避免因儲存碰撞而產生的載入指令重新執行。
然而,假設這樣作無法避免重新執行且載入指令LD需要被第二次重新執行(因為步驟1102決定的原因),RAT 134則會根據步驟1118將歷史欄位808增量(此時為1)並且清除索引有效欄位814。進一步假設程式接著第三次執行表5中的指令,RAT 134則會根據步驟1008為兩個儲存指令ST指派SDDQ項目902並且填入SDDQ項目;根據步驟1018,為載入指令LD產生擴充式相依性158,使得載入指令LD共用(分享)儲存指令ST的相依性;並根據步驟1024,以載入指令的ROB索引填入索引欄位812,並且將索引有效欄位814設定為有效的。
假設這樣作仍無法避免重新執行且載入指令LD需要被第三次重新執行(因為步驟1102決定的原因),RAT 134則會根據步驟1118再將歷史欄位808增量(此時為2)並且清除索引有效欄位814。進一步假設程式接著第三次執行表5中的指令,RAT 134則根據步驟1008為兩個儲存指令ST指派SDDQ項目902並且填入SDDQ項目。在第三次重 新執行中,因為歷史欄位808的數值為2,所以RAT 134會根據步驟1018為載入指令LD產生擴充式相依性158,使得載入指令LD共用(分享)第2列儲存指令LD的相依性;並且根據步驟1024,以載入指令的ROB索引填入索引欄位812。藉此將能避免因儲存碰撞而產生的載入指令重新執行。然而,若這樣作仍無法避免重新執行,則在歷史欄位808的數值等於4後,這種模式將不繼續操作下去,根據步驟1018,此時RAT 134為載入指令產生擴充式相依性158,使得載入指令成為強制依照順序執行的載入指令,藉此將能避免因儲存碰撞而產生的載入指令重新執行。
根據本發明之數個實施例,微處理器100能夠藉由多種方式來避免載入指令重新執行。然而如上所述,要注意的是,在本發明實施例中,可能有其他因素會讓微處理器花費更多時間來執行載入指令。舉例而言,在一些情況下,由載入指令指定之來源位址可能不會與由儲存指令指定之目的地位址發生碰撞,這使得RAT產生錯誤的預測,在上述情況中,擴充式相依性讓保留站不必要地延遲了載入指令的發佈。換言之,若無擴充式相依性,則保留站便能夠將載入指令發佈執行,並且載入指令亦能夠正確且快速地被執行而無需被重新執行。然而,發明人發現,對多數程式而言,減少載入指令重新執行次數所得到的益處遠大於錯誤預測的後果。這可能是重新執行的效能損失相對較大所導致,其中在一實施例中,因為重新執行而導致的效能損失為15個時脈週期,而由錯誤預測所導致的效能損失為1或2個時脈週期,並且若載入位址和儲存位址的來源是 相同的,則其重疊的機率也很高。產生上述益處的另外一種原因是RAT能夠極正確地預測儲存碰撞。
雖然本發明已經由數種實施例揭露如上,但其僅用以作為例子,並非用以限定本發明。計算機領域的習知技藝者應能理解,在不脫離本發明之精神的前提下,當可對本發明作些許更動。舉例而言,軟體能夠致能本發明之裝置和方法的功能、製造、模型建立、模擬、各種性質,以及/或測試。其能夠藉由不同的程式語言而達成,例如程式語言(如C、C++)、硬體描述語言(hardware description language,HDL,如Verilog HDL、VHDL),或是其他可能的程式語言。上述軟體能夠設置於任何已知的計算機可讀取儲存媒體(computer usable medium),例如半導體、磁碟,或光碟(如CD-ROM、DVD-ROM)。本發明的裝置和方法可能包括於任何半導體智慧財產核心(semiconductor IP core)之內,例如(以HDL嵌入的)微處理器核心,或是當積體電路製造時,轉移至硬體。此外,本發明可能藉由硬體和軟體的組合而實現。因此,本發明不應被此處所述之任何實施例所限制,本發明應該是根據所附申請專利範圍與其等效的裝置/方法而被定義。特別的是,本發明能夠設置於一般用途計算機的微處理器裝置內。最後,習知技藝者應能理解到:在不脫離由申請專利範圍定義之本發明範疇的前提下,其能夠以本發明揭露的概念和特定的實施例作為基礎,用以設計或修改其他架構來執行與本發明相同之目的。
100‧‧‧微處理器
106‧‧‧指令快取記憶體
108‧‧‧指令解碼器
134‧‧‧暫存器別名表
136‧‧‧保留站
138‧‧‧執行單元
162‧‧‧架構暫存器
172‧‧‧重整緩衝器(ROB)
182‧‧‧記憶體重整緩衝器(MOB)
184‧‧‧其他執行單元
186‧‧‧資料快取記憶體
188‧‧‧相依性產生器
192‧‧‧儲存位址碰撞佇列(SACQ)
194‧‧‧儲存位址別名佇列(SAAQ)
196‧‧‧儲存資料別名佇列(SDAQ)
198‧‧‧資料相依性佇列(SDDQ)
158‧‧‧擴充式相依性
164‧‧‧結果
166、168‧‧‧重新執行訊號
176‧‧‧轉發路徑
202‧‧‧SACQ項目
204‧‧‧有效位元
206‧‧‧srcA欄位
208‧‧‧srcB欄位
212‧‧‧位移欄位
214‧‧‧位移有效欄位
216‧‧‧索引欄位
602‧‧‧SAAQ項目
604‧‧‧有效位元
606‧‧‧IP欄位
608‧‧‧差值欄位
802‧‧‧SDAQ項目
804‧‧‧有效位元
806‧‧‧IP欄位
808‧‧‧歷史欄位
812‧‧‧索引欄位
814‧‧‧索引有效欄位
902‧‧‧有效位元
904‧‧‧索引欄位
第1圖為本發明中具有擴充式RAT之微處理器的方塊圖;第2圖為本發明中第1圖之SACQ 192之項目的方塊圖;第3圖為本發明中第1圖之RAT的操作流程圖;第4圖為本發明中第1圖之ROB的操作流程圖;第5圖為本發明中第1圖之保留站的操作流程圖;第6圖為本發明中第1圖之SAAQ之項目的方塊圖;第7圖顯示第1圖之微處理器產生載入指令之擴充式相依性資訊的流程圖,用以說明當發生儲存碰撞時避免重新執行的操作;第8圖為本發明中第1圖之SDAQ之項目的方塊圖;第9圖為本發明中第1圖之SDDQ之項目的方塊圖;第10圖顯示第1圖之微處理器產生載入指令之擴充式相依性資訊的流程圖,用以說明當發生儲存碰撞時避免重新執行的操作;第11圖為本發明中第1圖之微處理器指定並更新SDAQ項目的流程圖。
100‧‧‧微處理器
106‧‧‧指令快取記憶體
108‧‧‧指令解碼器
134‧‧‧暫存器別名表
136‧‧‧保留站
138‧‧‧執行單元
162‧‧‧架構暫存器
172‧‧‧重整緩衝器(ROB)
182‧‧‧記憶體重整緩衝器(MOB)
184‧‧‧其他執行單元
186‧‧‧資料快取記憶體
188‧‧‧相依性產生器
192‧‧‧儲存位址碰撞佇列(SACQ)
194‧‧‧儲存位址別名佇列(SAAQ)
196‧‧‧儲存資料別名佇列(SDAQ)
198‧‧‧資料相依性佇列(SDDQ)
158‧‧‧擴充式相依性
164‧‧‧結果
166、168‧‧‧重新執行訊號
176‧‧‧轉發路徑

Claims (44)

  1. 一種非循序執行微處理器,用以減少因儲存碰撞而重新執行載入指令的可能性,包括:一佇列,包括複數項目,每個上述項目用以存放載入指令之一指令指標和用來識別一儲存指令的資訊,上述資訊會使得一第一載入指令在執行時被要求重新執行;以及一暫存器別名表,耦接於上述佇列,用於依據循序排列的複數指令以產生複數相依性,以便判斷上述複數指令何時能夠非循序執行,其中上述暫存器別名表用以在遇到一第二載入指令時,判斷上述第二載入指令之指令指標是否符合於上述佇列之項目之一者的指令指標,以及當判斷符合時,使得上述第二載入指令依附於所符合之項目中的資訊所識別之上述儲存指令。
  2. 如申請專利範圍第1項所述之非循序執行微處理器,更包括:一記憶體重整緩衝器,耦接於上述暫存器別名表,用以執行載入和儲存指令,更用在上述儲存指令先前於上述載入指令,且上述記憶體重整緩衝器執行上述第一載入指令,而上述記憶體重整緩衝器仍未產生上述儲存指令之一儲存位址之時,判斷出上述儲存指令使得上述第一載入指令被重新執行。
  3. 如申請專利範圍第2項所述之非循序執行微處理器,其中當上述記憶體重整緩衝器執行上述載入指令時,上述記憶體重整緩衝器並未產生較先之上述儲存指令的上 述儲存位址,以便辨別上述儲存位址碰撞於上述第一載入指令之一載入位址,因此上述記憶體重整緩衝器並未將上述儲存指令的儲存資料轉發給上述載入指令,因而上述記憶體重整緩衝器判斷出上述儲存指令使得上述載入指令被重新執行。
  4. 如申請專利範圍第2項所述之非循序執行微處理器,其中上述記憶體重整緩衝器更根據上述儲存指令使得上述載入指令被重新執行的判斷結果,輸出與上述載入指令和上述儲存指令所相關的一重整緩衝器索引,上述暫存器別名表係使用上述載入和儲存指令的上述重整緩衝器索引來產生上述用以識別上述儲存指令的資訊。
  5. 如申請專利範圍第1項所述之非循序執行微處理器,更包括:一重整緩衝器,耦接於上述暫存器別名表,上述重整緩衝器包括一陣列,上述陣列包括複數項目,並且上述重整緩衝器依照程式次序地儲存複數未退返指令,每個上述項目是由上述陣列的一索引所識別;其中上述用以識別上述儲存指令的資訊包括上述載入和儲存指令間的一差值。
  6. 如申請專利範圍第5項所述之非循序執行微處理器,其中上述暫存器別名表用以使得上述第二載入指令對上述儲存指令具有一相依性,上述相依性為被上述第二載入指令的一重整緩衝器索引和儲存上述所符合之項目之資訊中的儲存指令之間的差值,並且為上述載入指令之上述重整緩衝器索引的上述差值。
  7. 如申請專利範圍第1項所述之非循序執行微處理器,其中上述暫存器別名表更用以在上述儲存指令使得上述第一載入指令重新執行時被通知,以便指派上述佇列之一項目,並在所指派的項目中填入資訊。
  8. 一種非循序執行微處理器之操作方法,用以減少因儲存碰撞而必須在一非循序執行微處理器中重新執行載入指令的可能性,上述非循序執行微處理器具有一暫存器別名表,上述暫存器別名表用於依據循序排列的複數指令以產生複數相依性,以便判斷上述複數指令何時能夠非循序執行,上述非循序執行微處理器之操作方法包括:在一第一載入指令重新執行時,指派一佇列之複數項目之一者;於所指派的項目中存放一載入指令之一指令指標和用來識別一儲存指令的資訊,上述資訊會使得上述第一載入指令重新執行;於上述暫存器別名表遇到一第二載入指令時,判斷上述第二載入指令之指令指標是否符合於上述佇列之項目之一者的指令指標;以及使得上述第二載入指令依附於所符合之項目中的資訊所識別之上述儲存指令。
  9. 如申請專利範圍第8項所述之非循序執行微處理器之操作方法,更包括:當上述儲存指令先前於上述第一載入指令,且上述記憶體重整緩衝器執行上述儲存指令,而上述記憶體重整緩衝器仍未產生上述儲存指令之一儲存位址之時,判斷出上 述儲存指令使得上述第一載入指令被重新執行。
  10. 如申請專利範圍第8項所述之非循序執行微處理器之操作方法,更包括:當上述記憶體重整緩衝器執行載入指令時,上述記憶體重整緩衝器並未產生較先之上述儲存指令的上述儲存位址,以便辨別上述儲存位址碰撞於上述第一載入指令之一載入位址的,因此上述記憶體重整緩衝器並未將上述儲存指令的儲存資料轉發給上述載入指令,因而判斷出上述儲存指令使得上述載入指令被重新執行。
  11. 如申請專利範圍第9項所述之非循序執行微處理器之操作方法,更包括:更根據上述儲存指令使得上述載入指令被重新執行的判斷結果,輸出與上述載入指令和上述儲存指令所相關的一重整緩衝器索引;以及使用上述載入和儲存指令的上述重整緩衝器索引來產生上述用以識別上述儲存指令的資訊。
  12. 如申請專利範圍第8項所述之非循序執行微處理器之操作方法,其中上述非循序執行微處理器更包括一重整緩衝器,上述重整緩衝器包括一陣列,上述陣列包括複數項目,並且上述重整緩衝器依照程式次序地儲存複數未退返指令,每個上述項目是由上述陣列的一索引所識別,上述用以識別上述儲存指令的資訊包括上述載入和儲存指令間的一差值。
  13. 如申請專利範圍第12項所述之非循序執行微處理器之操作方法,更包括: 上述暫存器別名表用以使得上述第二載入指令對上述儲存指令具有一相依性,上述相依性為被上述第二載入指令的一重整緩衝器索引和儲存上述所符合之項目之資訊中的儲存指令之間的差值,並且為上述載入指令之上述重整緩衝器索引的上述差值。
  14. 一種非循序執行微處理器,用以減少因儲存碰撞而重新執行載入指令的可能性,包括:一佇列,包括複數項目,每個上述項目存放用以識別一儲存指令之來源的資訊以及一相依性,其中上述相依性用以識別上述儲存指令為了其儲存資料所依附之一被依賴者指令,而上述儲存資料的來源用以計算上述儲存指令的一儲存位址;以及一暫存器別名表,耦接於上述佇列,上述暫存器別名表用於依據循序排列的複數指令以產生複數相依性,以便判斷上述指令何時能夠非循序執行,其中當上述暫存器別名表遇到一載入指令時,上述暫存器別名表判斷上述載入指令中用以計算其載入位址的來源是否符合於上述佇列之一項目中上述儲存指令的來源,且若符合,則藉由將上述載入指令相依至上述被依賴者指令,使得上述載入指令共用所符合之儲存指令的相依性。
  15. 如申請專利範圍第14項所述之非循序執行微處理器,更包括:一發佈邏輯,耦接於上述暫存器別名表,用以根據上述暫存器別名表產生的相依性將上述指令非循序地發佈執行,其中當上述載入指令共用上述所符合之儲存指令的相 依性時,上述發佈邏輯在發佈執行上述所符合之儲存指令之後才將上述載入指令發佈執行。
  16. 如申請專利範圍第14項所述之非循序執行微處理器,更包括:一執行單元,用以執行上述載入和儲存指令,其中上述執行單元更用以當一載入指令的載入位址與一較先之未執行儲存指令的一儲存位址發生儲存碰撞時,指出上述載入指令必須被重新執行。
  17. 如申請專利範圍第14項所述之非循序執行微處理器,更包括:一退返單元,耦接於上述佇列,用以退返指令,更用以在上述儲存指令為了其儲存資料所依附的指令被退返時,無效化上述佇列之上述項目之一者,其中上述被退返指令是依據上述佇列之上述項目中的上述相依性所識別的;其中上述暫存器別名表在判斷上述載入指令中上述用以計算其載入位址的來源是否符合於上述佇列之項目中上述儲存指令的來源時,不會考慮上述佇列中已經無效化的項目。
  18. 如申請專利範圍第14項所述之非循序執行微處理器,其中當暫存器別名表遭遇到一指令且上述指令用以修改上述佇列中之一項目中的資訊所指定之上述儲存指令的來源位址之一者時,暫存器別名表則無效化上述佇列的上述項目,其中上述暫存器別名表在判斷上述載入指令中上述用以計算其載入位址的來源是否符合於上述佇列之項目 中上述儲存指令的來源位址時,不會考慮上述佇列中已經無效化的項目。
  19. 如申請專利範圍第14項所述之非循序執行微處理器,其中上述用以識別上述儲存指令之來源的資訊包括一個或多個暫存器之一或多個識別符,其中上述儲存指令的來源用以計算上述儲存指令的儲存位址,上述暫存器用以儲存相應之一或多個輸入運算元,以便進行上述儲存位址的計算。
  20. 如申請專利範圍第14項所述之非循序執行微處理器,其中當上述暫存器別名表遇到一儲存指令時,上述暫存器別名表用以指派上述佇列中之上述項目之一者,並於所指派的項目中填入資訊。
  21. 一種非循序執行微處理器之操作方法,用以減少因儲存碰撞而必須在一非循序執行微處理器中重新執行載入指令的可能性,上述非循序執行微處理器具有一暫存器別名表,上述暫存器別名表用於依據循序排列的複數指令以產生複數相依性,以便判斷上述指令何時能夠非循序執行,上述非循序執行微處理器之操作方法包括:當上述暫存器別名表遭遇到一儲存指令時,指派一佇列之複數項目之一者;於所指派的項目中,填入用以識別上述儲存指令的來源之一資訊,並且上述儲存指令的來源位址係用以計算上述儲存指令之一儲存位址;於所指派的項目中填入一相依性,而上述相依性用以識別上述儲存指令為了其儲存資料所依附之一被依賴者指 令;當上述暫存器別名表遇到一載入指令時,判斷用來計算上述載入指令之載入位址的來源是否符合於上述佇列之上述項目之一者中的上述儲存指令的來源位址;以及若上述載入指令的來源符合於上述佇列之上述項目之一者中的上述儲存指令的來源,則藉由將上述載入指令相依至上述被依賴者指令,使得上述載入指令共用所符合之儲存指令的相依性。
  22. 如申請專利範圍第21項所述之非循序執行微處理器之操作方法,更包括:當上述載入指令共用上述所符合之儲存指令相依性時,在發佈執行上述所符合之儲存指令之後才將上述載入指令發佈執行。
  23. 如申請專利範圍第21項所述之非循序執行微處理器之操作方法,更包括:當上述載入指令的載入位址與一較先前且未執行的指令之一儲存位址發生儲存碰撞時,指出上述載入指令必需被重新執行。
  24. 如申請專利範圍第21項所述之非循序執行微處理器之操作方法,更包括:在上述儲存指令為了其儲存資料所依附的指令被退返時,無效化上述佇列之上述項目之一者,其中上述被退返的指令是依據上述佇列之上述項目中的上述相依性所識別的,並且上述暫存器別名表在判斷上述載入指令中上述用以計算其載入位址的來源是否符合於上述佇列之項目中上 述儲存指令的來源時,不會考慮上述佇列中已經無效化的項目。
  25. 如申請專利範圍第21項所述之非循序執行微處理器之操作方法,更包括:遭遇一指令且上述指令用以修改上述儲存指令的來源位址中之一者的,上述儲存指令的來源位址係由上述佇列中之一項目中的資訊所指定;以及無效化上述佇列的上述項目,其中上述暫存器別名表在判斷上述載入指令中上述用以計算其載入位址的來源是否符合於上述佇列之項目中上述儲存指令的來源時,不會考慮上述佇列中已經無效化的項目。
  26. 如申請專利範圍第21項所述之非循序執行微處理器之操作方法,其中上述用以識別上述儲存指令之來源的資訊包括一個或多個暫存器之一或多個識別符,上述儲存指令的來源用以計算上述儲存指令的儲存位址,上述暫存器用以儲存相應之一或多個輸入運算元,以便進行上述儲存位址的計算。
  27. 一種非循序執行微處理器,用以減少因儲存碰撞而重新執行載入指令的可能性,包括:一第一佇列,包括複數項目;一第二佇列,包括複數項目;以及一暫存器別名表,耦接於上述第一和第二佇列,上述暫存器別名表用以依據循序排列的複數指令以產生複數相依性,以便決定上述指令何時能夠非循序執行,其中上述暫存器別名表用以: 當上述暫存器別名表判斷出一載入指令必須被重新執行時,則指派上述第一佇列之一項目,並在所指派的項目中填入上述載入指令之一指令指標;當上述暫存器別名表遇到一儲存指令時,指派上述第二佇列之一項目,並在所指派的項目中填入一相依性,而上述相依性用以識別上述儲存指令為了其儲存資料所依附之一指令;以及當上述暫存器別名表遇到上述載入指令被後續執行且判斷上述後續執行的載入指令之指令指標符合於上述第一佇列之上述所指派的項目的指令指標時,使得上述後續執行的載入指令共用上述相依性,上述相依性用以識別上述第二佇列之上述所指派項目中上述儲存指令為了其儲存資料所依附的上述指令。
  28. 如申請專利範圍第27項所述之非循序執行微處理器,其中當執行上述載入指令時,若因為上述載入指令與一較先前之儲存指令發生儲存碰撞,且發生碰撞之上述較先前的儲存指令的儲存資料仍然是無效的,而使得上述暫存器別名表判斷出上述載入指令必須被重新執行時,上述暫存器別名表係以指派上述第一佇列之上述項目,並於上述所指派的項目中填入上述載入指令之上述指令指標。
  29. 如申請專利範圍第27項所述之非循序執行微處理器,其中上述暫存器別名表根據上述載入指令之重新執行的歷史,選擇上述第二佇列之上述項目,使得上述後續執行的載入指令共用上述相依性,上述相依性用以識別上述儲存指令為了其儲存資料所依附的上述指令。
  30. 如申請專利範圍第29項所述之非循序執行微處理器,其中上述載入指令之重新執行的上述歷史包括在上述第一佇列之每個上述項目中的一歷史欄位,並且當上述暫存器別名表指派上述第一佇列之上述項目時,清除上述歷史欄位,並根據上述後續執行的載入指令,選擇性地增加上述歷史欄位的數值。
  31. 如申請專利範圍第30項所述之非循序執行微處理器,其中若上述歷史欄位的數值小於一既定數值時,則上述暫存器別名表選擇上述第二佇列之上述項目的最後一者,用以使得上述後續執行的載入指令共用上述相依性,上述相依性用以識別上述儲存指令為了其儲存資料所依附的上述指令,其中若上述歷史欄位的數值大於或等於一既定數值時,則上述暫存器別名表選擇上述第二佇列之上述項目中早於上述最後一者的一較先者,用以使得上述後續執行的載入指令共用上述相依性,上述相依性用以識別上述儲存指令為了其儲存資料所依附的上述指令。
  32. 如申請專利範圍第30項所述之非循序執行微處理器,更包括:一發佈邏輯,耦接於上述暫存器別名表,用以根據上述暫存器別名表所產生的上述相依性,將上述指令非循序地發佈執行;其中若上述歷史欄位大於一既定數值,則上述暫存器別名表用以為上述載入指令產生一相依性,使得上述發佈邏輯在所有上述較先的儲存指令都已被發佈後,才發佈上述載入指令。
  33. 如申請專利範圍第29項所述之非循序執行微處理器,其中當上述暫存器別名表遇到上述後續執行的載入指令,並且判斷出上述後續執行的載入指令之指令指標符合於上述第一佇列之一項目的上述指令指標時,上述暫存器別名表用以於上述第一佇列之所指派的項目之一欄位中填入上述後續執行的載入指令之一識別符,接著當上述暫存器別名表判斷出上述載入指令必須被重新執行時,上述暫存器別名表用以使用上述後續執行的載入指令之上述識別符來判斷是否更新上述載入指令之重新執行的上述歷史欄位。
  34. 如申請專利範圍第27項所述之非循序執行微處理器,更包括:一重整緩衝器,耦接於上述暫存器別名表,上述重整緩衝器包括一陣列,上述陣列包括複數項目,並且上述重整緩衝器依照程式次序地儲存複數未退返指令,上述項目之每一者是由寫入上述陣列的一索引所識別;其中第二佇列之每個上述項目的相依性包括上述儲存指令為了其儲存資料所依附的上述指令之一重整緩衝器索引。
  35. 如申請專利範圍第27項所述之非循序執行微處理器,其中只有當上述載入指令的上述指令指標不符合上述第一佇列之任何上述項目的上述指令指標,上述暫存器別名表才於判斷出上述載入指令必須被重新執行時,指派上述第一佇列之上述項目之一者,並於所指派之項目中填入一載入指令之一指令指標。
  36. 一種非循序執行微處理器之操作方法,用以減少因儲存碰撞而必須在非循序執行微處理器中重新執行載入指令的可能性,上述非循序執行微處理器具有一暫存器別名表,上述暫存器別名表用以依據循序排列的複數指令以產生複數相依性,以便決定上述指令何時能夠非循序執行,上述非循序執行微處理器之操作方法包括:於判斷出上述載入指令必須被重新執行時,指派上述第一佇列之複數項目之一者,並在所指派的項目中填入上述載入指令之一指令指標;當上述載入指令遇到一儲存指令時,指派一第二佇列之複數項目之一者,並在所指派的項目中填入一相依性,而上述相依性用以識別上述儲存指令為了其儲存資料所依附之一指令;以及當上述暫存器別名表遇到上述載入指令被後續執行且判斷上述後續執行的載入指令之指令指標符合於上述第一佇列之上述所指派的項目的指令指標時,使得上述後續執行的載入指令共用上述相依性,上述相依性用以識別上述第二佇列之上述所指派項目中上述儲存指令為了其儲存資料所依附的上述指令。
  37. 如申請專利範圍第36項所述之非循序執行微處理器之操作方法,其中當執行上述載入指令時,若因為上述載入指令與一較先前之儲存指令發生儲存碰撞,且發生碰撞之上述較先前的儲存指令的儲存資料仍然是無效的,而使得上述暫存器別名表判斷出上述載入指令必須被重新執行時,上述暫存器別名表係指派上述第一佇列之上述項 目,並於上述所指派的項目中填入上述載入指令之上述指令指標。
  38. 如申請專利範圍第36項所述之非循序執行微處理器之操作方法,更包括:根據上述載入指令之重新執行的歷史,選擇上述第二佇列之上述項目,使得上述後續執行的載入指令共用上述相依性,上述相依性用以識別上述儲存指令為了其儲存資料所依附的上述指令。
  39. 如申請專利範圍第38項所述之非循序執行微處理器之操作方法,其中上述載入指令之重新執行的上述歷史包括在上述第一佇列之每個上述項目中的一歷史欄位,上述非循序執行微處理器之操作方法更包括:清除上述歷史欄位;以及根據上述後續執行的載入指令,選擇性地增加上述歷史欄位的數值。
  40. 如申請專利範圍第39項所述之非循序執行微處理器之操作方法,其中若上述歷史欄位的數值小於一既定數值時,則上述選擇上述第二佇列之上述項目的步驟包括選擇上述第二佇列之上述項目的最後一者,用以使得後續執行上述載入指令共用上述相依性,上述相依性用以識別上述儲存指令為了其儲存資料所依附的上述指令,其中若上述歷史欄位的數值大於或等於一既定數值時,則上述選擇上述第二佇列之上述項目的步驟包括選擇上述第二佇列之上述項目中早於上述最後一者的一較先者,用以使得上述後續執行的載入指令共用上述相依性,上述相依性用以識 別上述儲存指令為了其儲存資料所依附的上述指令。
  41. 如申請專利範圍第39項所述之非循序執行微處理器之操作方法,其中上述非循序執行微處理器更包括一發佈邏輯,耦接於上述暫存器別名表,用以根據上述暫存器別名表所產生的上述相依性,將上述指令非循序地發佈執行,上述非循序執行微處理器之操作方法更包括:若上述歷史欄位大於一既定數值,則上述暫存器別名表用以為上述載入指令產生一相依性,使得上述發佈邏輯在所有上述較先的儲存指令都已被發佈後,才發佈上述載入指令。
  42. 如申請專利範圍第38項所述之非循序執行微處理器之操作方法,更包括:當上述暫存器別名表遇到上述後續執行的載入指令,並且判斷出上述後續執行的載入指令之指令指標符合於上述第一佇列之一項目的上述指令指標時,上述暫存器別名表用以於上述第一佇列之所指派的項目之一欄位中填入上述後續執行的載入指令之一識別符;以及當上述暫存器別名表判斷出上述載入指令必須被重新執行時,上述暫存器別名表用以接著使用上述後續執行的載入指令之上述識別符來判斷是否更新上述載入指令之重新執行的上述歷史欄位。
  43. 如申請專利範圍第36項所述之非循序執行微處理器之操作方法,其中第二佇列之每個上述項目的相依性包括上述儲存指令為了其儲存資料所依附的上述指令之一重整緩衝器索引。
  44. 如申請專利範圍第36項所述之非循序執行微處理器之操作方法,其中只有當上述載入指令的上述指令指標不符合上述第一佇列之任何上述項目的上述指令指標,上述暫存器別名表才於判斷出上述載入指令必須被重新執行時,指派上述第一佇列之上述項目之一者,並於所指派之項目中填入一載入指令之一指令指標。
TW99112637A 2009-05-29 2010-04-22 非循序執行微處理器及其操作方法 TWI470547B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US18228309P 2009-05-29 2009-05-29
US12/604,930 US8464029B2 (en) 2009-05-29 2009-10-23 Out-of-order execution microprocessor with reduced store collision load replay reduction
US12/604,767 US8930679B2 (en) 2009-05-29 2009-10-23 Out-of-order execution microprocessor with reduced store collision load replay by making an issuing of a load instruction dependent upon a dependee instruction of a store instruction
US12/604,863 US20100306509A1 (en) 2009-05-29 2009-10-23 Out-of-order execution microprocessor with reduced store collision load replay reduction

Publications (2)

Publication Number Publication Date
TW201042543A TW201042543A (en) 2010-12-01
TWI470547B true TWI470547B (zh) 2015-01-21

Family

ID=43221601

Family Applications (1)

Application Number Title Priority Date Filing Date
TW99112637A TWI470547B (zh) 2009-05-29 2010-04-22 非循序執行微處理器及其操作方法

Country Status (3)

Country Link
US (3) US8930679B2 (zh)
CN (1) CN102087591B (zh)
TW (1) TWI470547B (zh)

Families Citing this family (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9405545B2 (en) * 2011-12-30 2016-08-02 Intel Corporation Method and apparatus for cutting senior store latency using store prefetching
EP2862069A4 (en) 2012-06-15 2016-12-28 Soft Machines Inc DEFINING INSTRUCTIONS TO REORDER AND OPTIMIZE LOADING AND STORAGE
EP2862062B1 (en) 2012-06-15 2024-03-06 Intel Corporation A virtual load store queue having a dynamic dispatch window with a distributed structure
KR101818967B1 (ko) 2012-06-15 2018-01-16 인텔 코포레이션 명확화 없는 비순차 load store 큐
CN104823154B (zh) 2012-06-15 2017-12-29 英特尔公司 包括虚拟加载存储队列的处理器和系统
WO2013188701A1 (en) 2012-06-15 2013-12-19 Soft Machines, Inc. A method and system for implementing recovery from speculative forwarding miss-predictions/errors resulting from load store reordering and optimization
WO2013188306A1 (en) 2012-06-15 2013-12-19 Soft Machines, Inc. Reordered speculative instruction sequences with a disambiguation-free out of order load store queue
US9158691B2 (en) * 2012-12-14 2015-10-13 Apple Inc. Cross dependency checking logic
US9047092B2 (en) * 2012-12-21 2015-06-02 Arm Limited Resource management within a load store unit
US9182986B2 (en) * 2012-12-29 2015-11-10 Intel Corporation Copy-on-write buffer for restoring program code from a speculative region to a non-speculative region
US9201791B2 (en) * 2013-01-08 2015-12-01 Apple Inc. Flow-ID dependency checking logic
US9535695B2 (en) * 2013-01-25 2017-01-03 Apple Inc. Completing load and store instructions in a weakly-ordered memory model
US9772827B2 (en) * 2013-04-22 2017-09-26 Nvidia Corporation Techniques for determining instruction dependencies
US9766866B2 (en) * 2013-04-22 2017-09-19 Nvidia Corporation Techniques for determining instruction dependencies
US10209996B2 (en) 2014-12-14 2019-02-19 Via Alliance Semiconductor Co., Ltd. Apparatus and method for programmable load replay preclusion
US9703359B2 (en) * 2014-12-14 2017-07-11 Via Alliance Semiconductor Co., Ltd. Power saving mechanism to reduce load replays in out-of-order processor
WO2016097814A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude shared ram-dependent load replays in out-of-order processor
KR101819315B1 (ko) 2014-12-14 2018-01-16 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 비순차 프로세서에서 작성 결합 메모리 공간 접근에 따라 로드 리플레이를 억제하기 위한 장치 및 방법
KR101837817B1 (ko) 2014-12-14 2018-03-12 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 비순차 프로세서에서 페이지 워크에 따라 로드 리플레이를 억제하는 메커니즘
WO2016097790A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude non-core cache-dependent load replays in out-of-order processor
US10228944B2 (en) 2014-12-14 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus and method for programmable load replay preclusion
KR101837816B1 (ko) 2014-12-14 2018-03-12 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 비순차 프로세서에서 i/o­의존 로드 리플레이를 불가능하게 하는 메커니즘
US10089112B2 (en) 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor
JP6286067B2 (ja) 2014-12-14 2018-02-28 ヴィア アライアンス セミコンダクター カンパニー リミテッド アウトオブオーダープロセッサでの長いロードサイクルに依存するロードリプレイを除外するメカニズム
US10146539B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd. Load replay precluding mechanism
US10120689B2 (en) 2014-12-14 2018-11-06 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
US10108430B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
US10114646B2 (en) 2014-12-14 2018-10-30 Via Alliance Semiconductor Co., Ltd Programmable load replay precluding mechanism
US10108420B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor
WO2016097811A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on fuse array access in out-of-order processor
US10114794B2 (en) * 2014-12-14 2018-10-30 Via Alliance Semiconductor Co., Ltd Programmable load replay precluding mechanism
US10088881B2 (en) 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude I/O-dependent load replays in an out-of-order processor
WO2016097815A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude x86 special bus cycle load replays in out-of-order processor
US10083038B2 (en) 2014-12-14 2018-09-25 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on page walks in an out-of-order processor
US10175984B2 (en) 2014-12-14 2019-01-08 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor
US10146540B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor
KR101819316B1 (ko) * 2014-12-14 2018-01-16 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 비순차 프로세서에서 캐시 불가­의존 로드 리플레이를 억제하는 메커니즘
US10127046B2 (en) 2014-12-14 2018-11-13 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude uncacheable-dependent load replays in out-of-order processor
WO2016097797A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Load replay precluding mechanism
US10108421B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude shared ram-dependent load replays in an out-of-order processor
US9804845B2 (en) 2014-12-14 2017-10-31 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor
US10437595B1 (en) * 2016-03-15 2019-10-08 Apple Inc. Load/store dependency predictor optimization for replayed loads
US11687345B2 (en) 2016-04-28 2023-06-27 Microsoft Technology Licensing, Llc Out-of-order block-based processors and instruction schedulers using ready state data indexed by instruction position identifiers
US11036514B1 (en) 2016-08-23 2021-06-15 Apple Inc. Scheduler entries storing dependency index(es) for index-based wakeup
CN106406822B (zh) * 2016-09-18 2019-02-15 上海兆芯集成电路有限公司 具有改进的别名队列和存储冲突检测的处理器
US11175923B2 (en) 2017-02-13 2021-11-16 International Business Machines Corporation Comparing load instruction address fields to store instruction address fields in a table to delay issuing dependent load instructions
CN108874447B (zh) * 2018-06-05 2020-09-15 上海兆芯集成电路有限公司 处理器电路及其操作方法
CN108920191B (zh) * 2018-06-05 2020-11-20 上海兆芯集成电路有限公司 处理器电路及其操作方法
US11144321B2 (en) * 2019-02-20 2021-10-12 International Business Machines Corporation Store hit multiple load side register for preventing a subsequent store memory violation
US11455171B2 (en) * 2019-05-29 2022-09-27 Gray Research LLC Multiported parity scoreboard circuit
US11061683B2 (en) * 2019-06-13 2021-07-13 Microsoft Technology Licensing, Llc Limiting replay of load-based control independent (CI) instructions in speculative misprediction recovery in a processor
GB2593513B (en) * 2020-03-25 2022-09-21 Nordic Semiconductor Asa Method and system for optimizing data transfer from one memory to another memory
US11392387B2 (en) 2020-11-04 2022-07-19 Microsoft Technology Licensing, Llc Predicting load-based control independent (CI) register data independent (DI) (CIRDI) instructions as CI memory data dependent (DD) (CIMDD) instructions for replay in speculative misprediction recovery in a processor

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5737629A (en) * 1994-04-26 1998-04-07 Advanced Micro Devices, Inc. Dependency checking and forwarding of variable width operands
US6463523B1 (en) * 1999-02-01 2002-10-08 Compaq Information Technologies Group, L.P. Method and apparatus for delaying the execution of dependent loads
US20030065909A1 (en) * 2001-09-28 2003-04-03 Jourdan Stephan J. Deferral of dependent loads until after execution of colliding stores
US6622237B1 (en) * 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Store to load forward predictor training using delta tag
US6625723B1 (en) * 1999-07-07 2003-09-23 Intel Corporation Unified renaming scheme for load and store instructions

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6006326A (en) 1997-06-25 1999-12-21 Sun Microsystems, Inc. Apparatus for restraining over-eager load boosting in an out-of-order machine using a memory disambiguation buffer for determining dependencies
US5987595A (en) 1997-11-25 1999-11-16 Intel Corporation Method and apparatus for predicting when load instructions can be executed out-of order
US5974525A (en) 1997-12-05 1999-10-26 Intel Corporation System for allowing multiple instructions to use the same logical registers by remapping them to separate physical segment registers when the first is being utilized
US6182210B1 (en) * 1997-12-16 2001-01-30 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
US6240509B1 (en) * 1997-12-16 2001-05-29 Intel Corporation Out-of-pipeline trace buffer for holding instructions that may be re-executed following misspeculation
US6463522B1 (en) 1997-12-16 2002-10-08 Intel Corporation Memory system for ordering load and store instructions in a processor that performs multithread execution
JPH11212788A (ja) * 1998-01-28 1999-08-06 Toshiba Corp プロセッサのデータ供給装置
US7779236B1 (en) 1998-12-31 2010-08-17 Stmicroelectronics, Inc. Symbolic store-load bypass
US6266744B1 (en) 1999-05-18 2001-07-24 Advanced Micro Devices, Inc. Store to load forwarding using a dependency link file
US6442677B1 (en) * 1999-06-10 2002-08-27 Advanced Micro Devices, Inc. Apparatus and method for superforwarding load operands in a microprocessor
US6591342B1 (en) * 1999-12-14 2003-07-08 Intel Corporation Memory disambiguation for large instruction windows
US6694424B1 (en) * 2000-01-03 2004-02-17 Advanced Micro Devices, Inc. Store load forward predictor training
US6651161B1 (en) 2000-01-03 2003-11-18 Advanced Micro Devices, Inc. Store load forward predictor untraining
US7062638B2 (en) 2000-12-29 2006-06-13 Intel Corporation Prediction of issued silent store operations for allowing subsequently issued loads to bypass unexecuted silent stores and confirming the bypass upon execution of the stores
US7181598B2 (en) 2002-05-17 2007-02-20 Intel Corporation Prediction of load-store dependencies in a processing agent
US20040044881A1 (en) 2002-08-28 2004-03-04 Sun Microsystems, Inc. Method and system for early speculative store-load bypass
US7415597B2 (en) * 2004-09-08 2008-08-19 Advanced Micro Devices, Inc. Processor with dependence mechanism to predict whether a load is dependent on older store
US7590825B2 (en) 2006-03-07 2009-09-15 Intel Corporation Counter-based memory disambiguation techniques for selectively predicting load/store conflicts
US7461238B2 (en) * 2006-06-07 2008-12-02 International Business Machines Corporation Simple load and store disambiguation and scheduling at predecode
US7600099B2 (en) * 2007-03-08 2009-10-06 International Business Machines Corporation System and method for predictive early allocation of stores in a microprocessor
US7721066B2 (en) * 2007-06-05 2010-05-18 Apple Inc. Efficient encoding for detecting load dependency on store with misalignment
US7822951B2 (en) 2007-08-01 2010-10-26 Advanced Micro Devices, Inc. System and method of load-store forwarding
US7958336B2 (en) * 2008-06-30 2011-06-07 Intel Corporation System and method for reservation station load dependency matrix

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5737629A (en) * 1994-04-26 1998-04-07 Advanced Micro Devices, Inc. Dependency checking and forwarding of variable width operands
US6463523B1 (en) * 1999-02-01 2002-10-08 Compaq Information Technologies Group, L.P. Method and apparatus for delaying the execution of dependent loads
US6625723B1 (en) * 1999-07-07 2003-09-23 Intel Corporation Unified renaming scheme for load and store instructions
US6622237B1 (en) * 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Store to load forward predictor training using delta tag
US20030065909A1 (en) * 2001-09-28 2003-04-03 Jourdan Stephan J. Deferral of dependent loads until after execution of colliding stores

Also Published As

Publication number Publication date
US20100306508A1 (en) 2010-12-02
TW201042543A (en) 2010-12-01
US8930679B2 (en) 2015-01-06
CN102087591B (zh) 2014-10-29
US20100306509A1 (en) 2010-12-02
US8464029B2 (en) 2013-06-11
CN102087591A (zh) 2011-06-08
US20100306507A1 (en) 2010-12-02

Similar Documents

Publication Publication Date Title
TWI470547B (zh) 非循序執行微處理器及其操作方法
TWI428825B (zh) 微處理器以及相關儲存方法
CN101853150B (zh) 非循序执行的微处理器及其操作方法
US11379234B2 (en) Store-to-load forwarding
JP4856100B2 (ja) 非アラインドメモリアクセス予測
JP5850532B2 (ja) アウトオブオーダー型マイクロプロセッサにおけるオペランド・ストア比較ハザードの予測及び回避
US7822951B2 (en) System and method of load-store forwarding
CN102156627B (zh) 执行快速重复载入数据串操作的微处理器
US7895421B2 (en) Mechanism for using performance counters to identify reasons and delay times for instructions that are stalled during retirement
CN101847094A (zh) 非循序执行的微处理器及其操作方法
US8856496B2 (en) Microprocessor that fuses load-alu-store and JCC macroinstructions
JP2008530714A5 (zh)
US20130152048A1 (en) Test method, processing device, test program generation method and test program generator
US10203957B2 (en) Processor with improved alias queue and store collision detection to reduce memory violations and load replays
CN101901132B (zh) 微处理器以及相关储存方法
US20090198967A1 (en) Method and structure for low latency load-tagged pointer instruction for computer microarchitechture
TW201108109A (en) Method for updating a branch target address cache in a microprocessor and related microprocessor
CN105005463A (zh) 具有世代重命名的计算机处理器
TW201042545A (en) A microprocessor, and an execution method thereof
US10007524B2 (en) Managing history information for branch prediction
US9594564B2 (en) Arithmetic processing device and control method of arithmetic processing device
JP2004038256A (ja) プログラムカウンタ制御方法及びプロセッサ
US20220188118A1 (en) Arithmetic processing circuit and arithmetic processing method
JP6107904B2 (ja) プロセッサ及びストア命令の変換方法
CN117642741A (zh) 用于指针认证的装置和方法