TWI773391B - 微處理器和分支處理方法 - Google Patents
微處理器和分支處理方法 Download PDFInfo
- Publication number
- TWI773391B TWI773391B TW110122573A TW110122573A TWI773391B TW I773391 B TWI773391 B TW I773391B TW 110122573 A TW110122573 A TW 110122573A TW 110122573 A TW110122573 A TW 110122573A TW I773391 B TWI773391 B TW I773391B
- Authority
- TW
- Taiwan
- Prior art keywords
- branch
- write
- predictor
- instruction
- queue
- Prior art date
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 19
- 238000011144 upstream manufacturing Methods 0.000 claims 2
- 238000012545 processing Methods 0.000 description 32
- 238000000034 method Methods 0.000 description 22
- 238000006073 displacement reaction Methods 0.000 description 13
- 230000006870 function Effects 0.000 description 10
- 239000000463 material Substances 0.000 description 10
- 230000009977 dual effect Effects 0.000 description 8
- 238000013519 translation Methods 0.000 description 8
- 238000013461 design Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 230000001934 delay Effects 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 239000000872 buffer Substances 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000012913 prioritisation Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000005549 size reduction Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 235000012431 wafers Nutrition 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3848—Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6026—Prefetching based on access pattern detection, e.g. stride based prefetch
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Hardware Redundancy (AREA)
Abstract
本申請涉及微處理器和分支處理方法。在一個實施例中,一種分支處理方法,包括:從至少兩個分支執行單元接收資訊;基於所述資訊在每個時鐘週期將兩個更新寫入到相應的第一寫入佇列和第二寫入佇列;以及從所述第一寫入佇列在每個時鐘週期將多達兩個更新寫入到第一預測器的多個表中,並且在存在預期寫入衝突的情況下,針對單個時鐘週期寫入單個更新,所述第一預測器包括單個寫入或讀取/寫入埠。
Description
相關申請案交叉申請
本專利申請要求於2020年10月23日遞交的發明名稱為 “DUAL BRANCH EXECUTE AND TABLE UPDATE”的第17/078,273號美國專利申請案的在先申請優先權,在先申請的全部內容以引入的方式併入本文中。
本發明通常涉及微處理器,尤其涉及微處理器中的分支預測。
微處理器如今使用流水線處理方案來操作,由此程式設計指令被分解為在流水線的多個階段中併發執行的步驟。指令通常(例如,程式設計代碼的10-20%)包括分支指令或簡單的分支,其中包括無條件分支(例如,始終採取的分支)和條件分支(例如,根據對指定條件的評估而採取或不採取)。直到計算出條件並且條件跳轉經過指令流水線中的執行階段之前,通常不確定地知道採取還是不採取條件跳轉,這可能導致獲取下一條指令的延遲。已經開發了分支預測器以試圖在流水線的前端猜測條件分支將去向哪個方向以及到達哪個目標位址,並且這樣改善了整個流水線中的指令流。
如果在流水線的其餘部分中存在瓶頸,則用以改善整個流水線中的指令流的分支預測沒有實際價值。因此,已經開發了微處理器以在每個時鐘週期解碼並執行兩個分支。在解碼階段,對於前端預測器(例如,通過分支目標位址高速緩存或BTAC(Branch target address cache))未預測的指令,或者甚至對於那些已預測的指令,針對各分支將指令格式化並通過加法器邏輯檢查位移分支的目標位址,這增加了成本和複雜度。進一步沿著流水線,對分支預測表的更新可能會給流程帶來進一步的挑戰,因為用於基於來自兩個分支執行單元的輸出處理更新的至各個預測表的附加寫埠導致更多的硬體,但單次寫入或讀取/寫入埠限制每個週期的更新量。因此,需要對流水線架構進行改進以改善流水線指令流,從而改善微處理器中指令執行的速度和效率。
在一個實施例中,一種微處理器,包括:兩個分支執行單元,其被配置為每個時鐘週期執行兩個分支;寫入邏輯,其被配置為從至少所述兩個分支執行單元接收資訊;第一寫入佇列和第二寫入佇列,所述寫入邏輯被配置為基於所述資訊在每個時鐘週期將兩個更新寫入到相應的所述第一寫入佇列和所述第二寫入佇列;以及第一預測器,其包括多個表,所述多個表被配置為針對每次指令高速緩存拾取而預測多個分支,所述第一預測器包括第一單個寫入或讀取/寫入埠;其中,所述第一寫入佇列被配置為針對單個時鐘週期將多達兩個更新寫入到分開的表中,並且在存在預期寫入衝突的情況下,針對單個時鐘週期寫入單個更新。
在一個實施例中,一種分支處理方法,包括:從至少兩個分支執行單元接收資訊;基於所述資訊在每個時鐘週期將兩個更新寫入到相應的第一寫入佇列和第二寫入佇列;以及從所述第一寫入佇列在每個時鐘週期將多達兩個更新寫入到第一預測器的多個表中,並且在存在預期寫入衝突的情況下,針對單個時鐘週期寫入單個更新,所述第一預測器包括單個寫入或讀取/寫入埠。
通過檢查以下附圖和詳細描述,本發明的其它系統、方法、特徵和優點對於本領域技術人員將是或變得顯而易見。旨在將所有這樣的附加系統、方法、特徵和優點包括在本說明書內、在本發明的範圍內,並由所附權利要求書保護。
公開了分支處理系統和方法的某些實施例,該分支處理系統和方法提供用於在微處理器的分支單元流水線中解碼和更新分支對的高效且簡化的硬體設計。在一個實施例中,格式階段解碼分支單元被配置為將主分支資訊和副分支資訊(例如,分支位址、使用的預測表等)寫入到分支順序表(Branch order table,BOT),其中,基於分支指令被分配為主分支資訊還是副分支資訊,僅需要用於檢查主分支資訊的位移分支的目標位址的邏輯。換句話說,鑒於分配,主分支資訊和副分支資訊沿著具有不同硬體複雜度的分別的流水線處理路徑路由。在一些實施例中,分支處理系統還包括兩個寫入佇列,以在寫入或讀取/寫入埠當前被使用的情況下延遲對具有單個寫入或讀取/寫入埠的給定分支預測器表(也被稱為陣列)的更新。在一個實施例中,寫入佇列在預期衝突(例如,對相同表或子表的寫入)的情況下僅發出單個更新,其中,關於要寫入多個更新中的哪個的確定基於對分支指令的重要性的確定。在預期沒有衝突的情況下,寫入佇列各自允許針對給定時鐘週期的多個更新。通過經由主分支資訊和副分支資訊對兩個分支指令的分配和路由,以及/或者在預期衝突的情況下基於重要性確定從寫入佇列其中之一對給定預測器表的更新,在不增加表大小(例如,通過添加埠)的情況下改善處理速度並降低格式階段解碼分支單元中的硬體複雜度的同時,更均勻地匹配整個流水線中的指令頻寬。
簡而言之,如今已經開發了微架構以沿著分支流水線併發處理和發送兩個分支指令以用於解碼和執行。然而,可能需要通過額外的加法器(加法器邏輯)硬體和/或多個預測器表寫入埠來解決潛在的瓶頸,這增加了晶片的複雜度、成本以及當然還有大小。相反,如本文公開的分支處理系統的某些實施例以減少對附加加法器邏輯的需要的方式選擇性地路由分支指令,以及/或者在分支更新階段中併入兩個寫入佇列以消除對附加預測器表寫入埠的需要,同時確保整個流水線中的分支指令流中的可接受的高性能。
已經總結了本發明的分支處理系統的某些特徵,現在將詳細參考如附圖中所示的分支處理系統的描述。雖然將結合這些附圖描述分支處理系統,但是不旨在將其限制為本文所公開的一個或多個實施例。即,雖然本發明容許修改和替代形式,但是其具體實施例在附圖中以示例的方式示出並且本文將詳細描述為足以使本領域技術人員理解。然而,應當理解,附圖及其詳細描述不旨在將本發明限制為所公開的特定形式。相反,本發明將覆蓋落在由所附權利要求限定的本發明的精神和範圍內的所有修改、等同物和替代物。如貫穿本申請所使用的,詞語“可以”是以許可的意義(即,意味著具有潛在性)而不是強制的意義(即,意味著必須)來使用的。類似地,詞語“包括(include)”、“包括(including)”和“包括(includes)”意味著包括但不限於。
各種單元、模組、電路、邏輯或其它元件可以被描述為“被配置為”進行一個或多個任務。在這樣的背景下,“被配置為”是結構的廣泛敘述,該結構通常意味著“具有電路或其它物理結構”,該電路或其它物理結構在操作期間進行或能夠進行一個或多個任務。電路可以是專用電路,或者是在編碼指令的控制下操作的更通用的處理電路。即,在描述本發明的各種實現的某些方面或特徵時,本文可以使用如“單元”、“模組”、“電路”、“邏輯”和“元件”的術語。本領域技術人員將理解,利用電路來實現相應的特徵,無論該電路是專用電路還是在微編碼指令控制下操作的更通用的電路。
此外,單元/模組/電路/邏輯/元件可以被配置為即使在該單元/模組/電路/邏輯/元件當前不在操作中時也進行任務。敘述被配置為進行一個或多個任務的單元/模組/電路/邏輯/元件明確地旨在針對該單元/模組/電路/邏輯/元件不進行功能性限定。對此,本領域技術人員將瞭解,電路元件的具體結構或互連將通常由設計自動化工具的編譯器(諸如暫存器傳送語言(RTL)編譯器等)來確定。RTL編譯器對非常類似於組合語言代碼的腳本進行操作,以將腳本編譯成用於最終電路的佈局或製造的形式。
即,使用更高級軟體工具來設計積體電路(諸如本發明的積體電路等),以對電路的期望功能操作進行建模。如眾所周知的,“電子設計自動化”(Electronic Design Automation,EDA)是用於設計電子系統(諸如積體電路等)的軟體工具的類別。EDA工具還用於將設計功能程式設計到現場可程式設計閘陣列(field-programmable gate arrays,FPGAs)中。如Verilog和甚高速積體電路(Very high-speed integrated circuit,VHDL)的硬體描述語言(Hardware descriptor languages,HDLs)被用於創建電路的高級表示,從該高級表示可以得到低級表示和最終的實際佈線。實際上,由於現代半導體晶片可以具有數十億個元件,因此EDA工具被認為對於它們的設計是必要的。實際上,電路設計者使用如C/C++的程式設計語言來指定操作功能。EDA軟體工具將該指定功能轉換成RTL。然後,硬體描述語言(例如Verilog)將RTL轉換成離散的門網表。該網表定義由例如鑄造廠生產的實際電路。實際上,這些工具因其在促進電子和數位系統的設計工藝中的作用和用途而眾所周知和理解,因此本文不需要描述。
圖1A示出微處理器10的示例性分支單元流水線的實施例。應當瞭解,為了簡潔以及易於解釋和說明,本文省略了微處理器10的某些已知元件。如已知的,流水線架構提供在執行中重疊的多個指令,其中各個階段稱為管道階段。分支單元流水線中所示的框可以各自根據一個或多個階段來實施,這些階段在框的左側示出並且在所描繪的實施例中由從上至下按順序前進並且被重定向(如箭頭所示)的大寫字母C、I、B、U、L、M、F、G、W、X、E、S、W、Y和Z表示。本領域的普通技術人員應瞭解,圖1A中所描繪的階段的數量和/或佈置僅說明一個示例性實施例,並且在一些實施例中,可以實現階段的不同數量和/或佈置,因此預期在本發明的範圍內。本領域的普通技術人員還應瞭解,框提供對分支流水線的功能性的一般描述,並且為了簡潔,本文省略了本領域的普通技術人員已知的相關聯邏輯或電路。例如,本領域的普通技術人員應瞭解,如已知的,流水線的各階段可以由時鐘流水線暫存器或鎖存器分開。作為另一示例,雖然圖1A中未明確示出,但本領域的普通技術人員應瞭解,前端處的操作涉及與指令高速緩存的資料交換或交互。
指令高速緩存是微處理器內的隨機存取記憶體裝置,微處理器將最近從較大高速緩存(例如,L2高速緩存、L3高速緩存)或系統記憶體獲取和/或預獲取(例如,通過匯流排界面單元從DRAM獲取和/或預獲取)並且由微處理器在運行ISA機器語言程式的過程中進行的ISA機器語言程式的指令(諸如x86 ISA機器語言指令等)放入指令高速緩存中。ISA定義保持要進行的下一ISA指令的記憶體位址(由x86 ISA定義為指令指標(IP),但有時稱為程式計數器(PC))的指令位址暫存器,並且微處理器在其運行機器語言程式以控制程式的流程時更新指令位址暫存器內容。為了隨後在下一次機器語言程式流執行時基於指令位址暫存器內容從指令高速緩存而不是從系統記憶體更快地拾取ISA指令的目的,對ISA指令進行高速緩存,使得暫存器保持指令高速緩存中所存在的ISA指令的記憶體位址。特別地,基於保持在指令位址暫存器中的記憶體位址(例如,IP)而非排他性地基於由載入或存儲指令指定的記憶體位址來訪問指令高速緩存。因此,將ISA指令保持為資料(諸如可存在於採用軟體轉譯器的系統的硬體部分中等)、並且排他地基於載入/存儲位址而不是通過指令位址暫存器值來訪問的專用資料高速緩存不是指令高速緩存。此外,為了本發明的目的,對指令和資料進行高速緩存(即,基於指令位址暫存器值和載入/存儲位址,而不是排他地基於載入/存儲位址所訪問)的統一高速緩存旨在被包括在指令高速緩存的定義中。
特別注意圖1A的微處理器10的分支單元流水線,微處理器10包括流水線微處理器,在一個實施例中,該流水線微處理器的指令集基本上符合x86架構指令集。如本領域的普通技術人員從本文提供的描述中將瞭解的,本發明可以以各種不同的電路結構和架構來實現,並且圖1A中所示的架構僅是許多合適的架構之一。示例性微處理器10包括快速預測器12、分支目標位址高速緩存(BTAC)14、指令位元組佇列(XIB)16、分支解碼器18(包括格式(F)階段解碼分支單元,或者在本文也被稱為F階段分支單元等)、格式指令佇列(FIQ)/迴圈佇列20、指令轉譯器22、暫存器別名表(RAT)/保留站(RS)24、功能單元(例如,整數單元、浮點單元等)26、以及分支表更新器28(在一個實施例中,包括兩個寫入佇列)。微處理器10的各個數位引用的框對應於在相應的多個階段C、I、B、U、L、M、F、G、W、X、E、S、W、Y和Z上實現的邏輯電路,其中流水線架構在每個階段啟用不同指令組。在一個實施例中,可以在每個階段處運行四個或更多個指令,其中控制信號沿著流水線標記各階段。與快速預測器12、BTAC 14和XIB 16相關聯的階段涉及對指令高速緩存(I高速緩存,圖1A中未示出)的訪問。
快速預測器12包括單週期分支預測器,該單週期分支預測器提供單週期預測(例如,花費一個週期來產生目標位址,在一個實施例中在I階段提供該預測)。在一個實施例中,快速預測器12包括存儲先前執行的分支指令的分支目標位址的表(本文也被稱為陣列或目標陣列),該表在隨後遇到所存儲的分支指令時實現分支預測。在一個實施例中,表包括128個條目,但是在一些實施例中可以使用其它大小(例如,64個條目、32個條目等)的表。該表被組織為n路(例如,n是大於1的整數)的組關聯高速緩存。在一個實施例中,各條目存儲八(8)個3位元數目器和當前局部分支模式,該計數器是由3位元局部分支模式而選擇的。快速預測器12還包括條件分支預測器,該條件分支預測器與該表並行地被訪問並且為條件分支提供採取/不採取的方向。快速預測器還包括返回堆疊,該返回堆疊可以提供目標而不是表。在一個實施例中,返回堆疊包括四(4)個條目,並且為返回指令提供目標。注意,以上列出的規範僅用於說明,並且一些實施例可以在不同的規範下進行,因此預期在本發明的範圍內。快速預測器12被配置為立即(在單個週期內)遞送預測分支目標,而沒有採用分支懲罰。在一些實施例中,快速預測器12可以根據其預測機制和/或表配置的其它規範來操作,或者在一些實施例中,可以省略快速預測器12。大多數分支被快速預測器12正確地預測。在一些實施例中,在快速預測器12基於同一所獲取的分支指令而提供與BTAC 14的分支預測不同(例如,在方向和/或目標上不同)的分支預測的情況下,BTAC 14利用BTAC 14所提供的分支預測資訊(例如,方向、目標位址、分支預測類型)來在BTAC 14的一組階段內(例如,在U階段)重寫快速預測器12的分支預測並更新快速預測器表。
I階段和/或B階段對應於對分支單元流水線的各種表(包括I高速緩存、標籤陣列、轉譯後備暫存器(TLB)陣列、BTAC陣列、返回堆疊陣列等)的訪問、(例如,基於標籤)通過多路複用給出方向或路、以及讀出指令。
BTAC 14保持其用於預測後續執行期間的目標位址、方向和類型的與先前執行的分支指令有關的資訊。BTAC 14包括比快速預測器12的表大得多的一個或多個表。在一個實施例中,BTAC 14包括4k條目、m路的組關聯表(本文也被稱為陣列或目標陣列),其中m為大於1的整數。BTAC 14的各條目包括有效位元、分支目標位址預測、方向預測和分支類型。分支類型指定分支指令是呼叫/返回、是間接分支、是條件相對分支、還是無條件相對分支。在一個實施例中,BTAC 14包括具有多條目(例如,12k)基於標籤幾何長度(Tagged geometric length,TAGE)預測器的條件相對分支預測器、多個表、多位(例如,3位)、採取/不採取(T/NT)計數器和多位元全域分支歷史,或與上述這些協作。作為另一示例,間接預測包括多條目(例如,1.5k) TAGE預測器且使用表條目用於靜態間接分支。注意,在一些實施例中,可以使用其它類型的預測機制,包括基於相關性的預測機制、使用全域分支歷史和局部分支歷史的組合的預測器等。對於指令高速緩存的高速緩存行的各部分或拾取量(例如,16位元組),BTAC 14可以保持三個條目(例如,邊A、B和C,但在一些實施例中可以使用較少的邊來存儲較少分支指令的預測資訊),這三個條目可以保持可存在於高速緩存行的一部分中的多達三個分支指令的預測資訊。BTAC 14包括通過一組階段(例如,I、B和U階段)的操作。實際上,分支指令的U階段用作目標的C階段(例如,從B階段到C階段的箭頭反映分支指令在B階段的情形,並且下一個時鐘是目標的C階段,或者在這裡也是高速緩存位址),導致BTAC預測的二時鐘延遲。
BTAC 14具有二時鐘採取懲罰(two-clock taken penalty),這也揭示快速預測器12通過立即將新高速緩存位址引導為目標來提供快速分支預測(無採取懲罰)的益處。在一個實施例中,BTAC 14大於快速預測器12且具有更複雜的分支預測機制,其被配置為(例如,總是)在分支預測中存在不一致(例如,BTAC 14確定的分支預測與快速預測器12所確定的採取判斷和/或分支目標位址不同)時重寫快速預測器12的分支預測。在一些實施例中,BTAC 14被配置為通過將分支預測資訊寫入到快速預測器12的表中(且還寫入BTAC 14的表中)來在BTAC階段其中之一(例如,U階段)期間更新快速預測器12。在一些實施例中,延遲對BTAC 14的更新,直到分支被執行或引退為止,其中對BTAC 14的更新涉及對BTAC表和/或TAGE表的寫入。如下面進一步說明的,在一個實施例中,更新涉及目標資訊更新和/或計數器更新,並且使用兩個寫入佇列來進行更新,以在單個時鐘週期中分別提供多達兩個更新。然而,對快速預測器12的更新不等待那段時間,而在BTAC階段期間發生。注意,不在快速預測器12中的分支在兩個週期之後在與BTAC階段相對應(例如,在BTAC階段期間)的時間被寫入快速預測器12中。
XIB 16是條目佇列,各條目保持來自指令高速緩存的16個位元組的資料。例如,來自XIB 16的高速緩存資料僅是採用16個位元組的塊的指令位元組流,並且鑒於指令具有可變長度,給定x86指令在流內或給定塊內在何處開始或結束是未知的。XIB 16包括用以確定和標記各指令在流內的開始和結束位元組、從而將位元組流分解成x86指令流的已知邏輯,其中該x86指令流被提供給FIQ/迴圈佇列20並存儲在FIQ/迴圈佇列20中以供微處理器流水線的其餘部分處理。在L(長度)階段,XIB 16確定指令長度。在一個實施例中,預解碼器(圖1A中未示出)在U階段處實現,並且被配置為檢測潛在分支指令並且在佇列中針對各指令位元組來如此地標記它們。注意,在該階段,存在關於給定位元組是否為指令的開始的模糊性。如果位元組是在稍後(M階段)確定的分支指令的操作碼位元組,則該指令被確認為分支指令。例如,分支解碼器18包括用於在多路複用或M階段中對指令進行多路複用的指令多路複用(未示出),其中分支指令被這樣確認。指令多路複用還(在M階段)確定各分支指令是包括主分支資訊還是副分支資訊,並且相應地分配或指定分支指令。在一個實施例中,指令多路複用根據分支指令是被分配為主分支資訊還是副分支資訊來將所識別的分支指令沿著具有不同硬體複雜度的流水線路徑路由。如下面進一步描述的,在分支解碼器18的F階段解碼分支單元中,僅針對主分支資訊檢查位移分支的分支目標,並且將主分支資訊(包括所檢查的位移分支的目標)和副分支資訊(不包括分支目標)寫入到分支順序表(BOT)。
在F階段中,如以上所說明的對這些指令進行格式化。在一個實施例中,格式化指令包括基本上符合x86架構指令集的指令。此外,在M階段確定給定指令(可能由預解碼器預先標記)是否確實是分支。例如,在快速預測器12或BTAC 14中發生未命中的情況下(例如,在初始啟動時),分支解碼器18(例如,指令多路複用)決定為當前指令是分支,向BOT寫入,並且在階段G將高速緩存位址重定向到新目標並更新微處理器10的前端中的表。實際上,當在快速預測器12或BTAC 14處未命中時,分支解碼器18提供分支預測,其中分支指令在C階段轉向目標。在一些情況下,諸如在BTAC 14處針對各拾取存在多於有限或預定最大數量的分支(例如,針對各16位元組拾取存在多於三個分支)的情況下,延遲額外分支的分支預測,直到解碼時間為止。
FIQ/迴圈佇列20接收格式化指令並且對它們進行緩存,直到它們可以被轉譯成微指令為止。FIQ/迴圈佇列20還提供初步解碼和快速迴圈功能(例如,在BTAC迴圈分支上,迴圈佇列被啟動並且迴圈指令被重複發送),後者由框20右側的箭頭表示。
W階段提供可選的額外定時時鐘。
在X階段,指令轉譯器22(在X階段或轉譯階段中)將存儲在FIQ/迴圈佇列20中的格式化指令轉譯成微指令。
指令以程式順序被提供至暫存器別名表/保留表(RAT/RS) 24。RAT/RS 24的RAT功能維持和生成針對各指令的依賴性資訊。RAT/RS 24的RAT功能將指令的源和目的地重命名到內部暫存器上,並且將指令分派到RAT/RS 24的保留站,該保留站(可能不按照程式順序)向功能單元26發出指令。包括整數單元的功能或執行單元26在階段E (執行)執行分支指令。執行單元、分支單元和整數單元是本文中可互換使用的術語。在一個實施例中,執行單元26 (例如,兩個執行單元)在單個時鐘週期中執行兩個分支。執行單元26還指示BTAC 14是否已正確地預測分支指令。
在一個實施例中,將執行的結果提供至重排序暫存器(未示出),該重排序暫存器包括關於已經被執行的指令的資訊。如已知的,重排序暫存器在指令發出之後保持指令的原始程式順序,並允許在引退階段期間的結果序列化。在一個實施例中,傳統上存儲在重排序暫存器中的一些資訊替代地存儲在BOT中,BOT具有顯著更小的大小(例如,BOT的四十八(48)個條目相比於重排序暫存器中的192個條目)。例如,存儲在BOT中的資訊可以包括200至250位元的分支資訊,諸如分支的類型、分支模式、目標、在預測中使用的表、以及高速緩存替換策略資訊(例如,最近最少使用或LRU)等。注意,本文描述的位和/或條目的量僅用作說明性示例,並且在一些實施例中可以使用其它值。
分支表更新28包括階段S、W、Y和Z,並且被配置為利用與完全解碼和執行的分支指令有關的資訊(例如,分支的最終結果) (例如,在S階段)更新前端處(例如,BTAC、TAGE)的各種表。在階段S、W、Y和Z處,更新可能涉及表讀取、目標位址寫入和計數器遞增或遞減,這可能涉及一些延遲。在一個實施例中,分支表更新28包括兩個寫入佇列,各寫入佇列可以用於在單個時鐘週期中處置多達兩個更新(例如,對BTAC表、TAGE表或這兩者的組合)。如上所述,佇列在更新中啟用延遲,直到適合的時間為止。在一個實施例中,在預期衝突的情況下,控制邏輯在適合的時間基於優先順序方案(例如,相對重要性)確定所排隊的分支資訊中的哪個要寫入給定表。
現在參考圖1B,繼續參考圖1A,示出在針對圖1A的微處理器10示出的分支單元流水線的前端30處使用的示例快速預測器12和其它示例性源。前端30包括獲取單元32(例如,包括多路複用和時鐘暫存器)、轉譯後備暫存器(TLB) 34、指令高速緩存(I高速緩存資料)36、I高速緩存標籤38(或標籤陣列)、BTAC 14以及快速預測器12。獲取單元32接收多個高速緩存指令位址源,包括順次的指令位址(例如,來自I階段)、經校正指令位址(例如,來自S階段)、解碼時間指令位址(例如,來自G階段)以及來自BTAC 14和快速預測器12的位址。獲取單元32的輸出是作為對TLB 34、I高速緩存資料36、I高速緩存標籤38、BTAC 14和用於訪問I高速緩存資料36的下一指令的快速預測器12的輸入而提供的高速緩存位址。
TLB 34在記憶體管理單元(未示出)的管理下提供如已知的虛擬到物理頁位址轉譯。即,TLB 34存儲最近使用的虛擬位址的物理位址。TLB 34從分段單元(其將來自程式的邏輯位址轉換成線性位址)接收線性位址,並且將該線性位址的一部分與TLB 34的條目進行比較以查找匹配。如果存在匹配,則根據TLB條目計算物理位址。如果不存在匹配,則拾取來自記憶體的頁表條目且將該頁表條目放置到TLB 34中。
I高速緩存資料36包括已經從L2、L3或主記憶體拾取或預拾取的指令的1級高速緩存。I高速緩存資料36包括多個時鐘暫存器。
I高速緩存標籤38包括與I高速緩存資料36中的指令相對應的標籤陣列,並且包括多個時鐘暫存器,並且用於確定與所拾取的高速緩存指令相關聯的資訊(例如,高速緩存位址的標籤或部分)與I高速緩存資料36和BTAC 14之間的匹配。
上文結合圖1A說明了BTAC 14,並且該BTAC 14具有多個時鐘暫存器和二(2)時鐘採取懲罰。同樣在上文中說明的快速預測器12具有零(0)時鐘採取懲罰。例如,假定沿著I高速緩存以每週期16個位元組進行拾取,並且假設高速緩存位址20至高速緩存位址95的分支指令。注意,在該示例中由地址描述暗示十六進位標記法(例如,0x0、0x10、0x20等)。由此,拾取在高速緩存位址0、高速緩存位址10、高速緩存位址20 (分支指令,但由於BTAC 14跨越多個週期進行讀取和多路複用因而尚未解決,其中在一些實施例中,該多個週期是與I高速緩存相同的定時)、高速緩存位址30 (相對時鐘1)、高速緩存位址40 (相對時鐘2)、然後在第3時鐘(相對時鐘3)上發生,高速緩存指令拾取被重定向到緩存位址95。因此在該示例中採取的分支懲罰包括兩個時鐘週期,因為高速緩存位址30和40發生在分支之後。換言之,在沒有快速預測器12的情況下,對於該特定設計示例,採用的分支懲罰總是兩個時鐘。利用更小且更快的快速預測器12,高速緩存位址獲取(在以上示例中)包括0、10、20和95,對高速緩存地址沒有延遲且採取的懲罰為零。如上所述,在一些實施例中,快速預測器12可以被省略。
繼續參考圖1A至1B,關注圖2A,其示出分支處理系統的實施例的、被配置為實現雙分支格式化的格式(F)階段解碼分支單元40的實施例。本領域的普通技術人員應瞭解,圖2A中所描繪的示意圖是一個示例性實施例的說明,並且一些實施例可以提供不同的微架構,包括與所描繪的邏輯不同的邏輯和/或不同的邏輯佈置以進行類似功能性。示出I高速緩存資料36、預解碼器42、包括指令長度標記邏輯44的XIB 16、包括指令多路複用46、F階段解碼分支單元40和指令解碼器48的分支解碼器18、以及FIQ/迴圈佇列20。
來自I高速緩存資料36的指令可以源自若干情況之一。例如,指令可以是先前未遇到或在BTAC 14處未命中的一個或多個分支指令。此外,指令可以包括通過流水線的其餘部分(例如,XIB 16、分支解碼器18、FIQ/迴圈佇列20等)發送以用於進一步處理和檢查從而最終經歷兩個分支執行單元26的處理(例如,檢查條件碼、檢查目標確保正確預測等)和由分支表更新28進行的更新的分支指令。為了避免或消除在流水線的不同階段處的指令頻寬失配,兩個分支的解碼之後應具有執行兩個分支的能力。分支處理系統的某些實施例被配置為通過流水線實現該一致的指令頻寬。
如以上說明的,預解碼器42(或預解碼邏輯)被配置為檢測潛在分支指令。注意,在一些實施例中,預解碼器42可以位於流水線中的其它位置。預解碼器42標記指令,包括分支、前綴等的標識、附加到回饋至XIB 16的指令位元組的預解碼資訊。實際上,預解碼器42進行初步或部分解碼,而指令解碼器48是全指令解碼。
XIB 16包括在L階段或長度階段實現的指令長度標記邏輯44。關於分支長度標記的資訊(在這樣的資訊是補充性的並與本發明的教導一致的程度上)可以在美國專利8,473,862中找到,該專利通過引用結合在本文。
分支解碼器18包括在一個實施例中在階段M、F和G中實現的指令多路複用或指令多路複用邏輯46(多路複用階段或M階段)、F階段解碼分支單元40和指令解碼邏輯48。關於M階段和F階段的資訊(在這樣的資訊是補充性的並與本發明的教導一致的程度上)可以在美國專利8,473,862中找到,該專利通過引用結合在本文。指令多路複用46被配置為將分支指令分配或指定為主分支資訊或副分支資訊。在一個實施例中,主分支資訊包括針對給定時鐘週期的以下分支:週期中的唯一分支、第一採取分支、未預測分支、或第二不採取分支。在一個實施例中,副分支資訊總是包括針對該週期的另一分支之前的第一不採取分支。指令多路複用邏輯46還被配置為將主分支資訊和副分支資訊路由至F階段解碼分支單元40,並且將多個(例如,四個)指令提供至用於全指令解碼處理的指令解碼器48以傳遞至FIQ/迴圈佇列20。
通常,F階段或格式化階段是用於對指令進行解碼並且沿流水線向下發送指令以用於進一步處理(例如,轉譯、執行等)的解碼的早期階段。在F階段中檢查由BTAC 14預測(或未預測)的任何分支。例如,自我修改碼或別名位址可能導致確定為被推測性地預測為分支的實際上不是分支。
F階段解碼分支單元40包括加法器(加法器邏輯)50、比較器52和BOT 54,該加法器50將指令指標與從主分支資訊指令中提取的位移相加以匯出位移分支的目標位址,該比較器52將所匯出的目標位址與BTAC目標位址進行比較,該BOT 54存儲包括位移分支的目標位址的主分支資訊和不包括目標位址的副分支資訊。對於主分支資訊,對照BTAC目標位址來檢查在F階段解碼分支單元40處計算出的位移分支的目標位址,以確保經BTAC預測的目標是正確的。如果BTAC 14提供了位移分支的錯誤分支目標位址,則在BTAC 14處更新正確的目標位址,並且將I高速緩存資料36重定向(在階段G用信號通知)到正確目標。
由F階段解碼分支單元40格式化的兩個分支在單個時鐘週期中被寫入到BOT 54中。在一個實施例中,僅源自主分支資訊的一個(位移分支)目標被寫入到BOT 54。寫入到BOT 54的分支資訊包括諸如分支的類型、分支模式資訊和方向及有效、以及在主分支資訊的情況下的位移分支目標位址等的分支資訊。例如,在給定時鐘週期中僅允許一個採取分支,而次資訊的不採取分支永遠不被採取,因此不需要保存目標。然而,兩組加法和比較器邏輯可實現每週期處理兩個分支,在分支處理系統的某些實施例中,僅單組加法和比較器邏輯被用於主分支資訊(因為副分支資訊總是另一分支之前的不採取分支)。後一種佈置實現了硬體的減少(例如,較少的加法器、較少的複用等)和更快的定時。
在執行時,指令具有引用BOT 54的指示符(例如,標籤或位址),其被讀取並用於更新BTAC表或TAGE表。
現在參考圖2B,示出了示例性分支處理方法的實施例,並且具體地,示出分支處理系統的實施例的雙分支格式化的方法,表示為方法56。方法56從I高速緩存資料36(圖1B)接收多達兩個分支指令(58),並且確定所接收的分支指令是否是時鐘週期中的另一分支之前的第一不採取(NT)分支(60)。如果是(60為“是”),則將分支(例如,通過指令多路複用46)分配或等同地指定為副分支資訊(62)並寫入(沒有目標)到BOT (64)。
如果不是(60為“否”),則(例如,通過指令多路複用46)確定該分支是否是給定時鐘週期的唯一分支(66)。如果是(66為“是”),則將分支指定為主分支資訊(68),對照BTAC目標 (例如,在F階段解碼分支單元40處)檢查位移分支的目標(74),並且將主分支資訊(包括對應的經檢查的位移分支目標)寫入到BOT (64)。
如果不是(66為“否”),則(例如,通過指令多路複用46)確定該分支是否為給定時鐘週期的第一採取分支或未預測分支(70)。如果是(70為“是”),則將分支指定為主分支資訊(68),(例如,在F階段解碼分支單元40處)對照BTAC目標檢查位移分支的目標(74),並且將主分支資訊(包括對應的經檢查的位移分支目標)寫入到BOT (64)。
如果不是(70為“否”),則(例如,通過指令多路複用46)確定為該分支是給定時鐘週期的第二不採取分支(72),並且將該分支指定為主分支資訊(68),(例如,在F階段解碼分支單元40處)對照BTAC目標檢查位移分支的目標(74),並且將主分支資訊(包括對應的經檢查的位移分支目標)寫入到BOT (64)。
注意,在一些實施例中,這些步驟60、66、70和72的順序可以重新佈置,或者在一些實施例中,某些步驟可以併發實施(例如,步驟66至72)。因此,通過該雙分支格式化方法56,F階段解碼分支單元40的僅一個流水線處理路徑需要具有加法器邏輯以處理對主分支資訊(例如,分支位移目標)的處理,並且主分支資訊和副分支資訊這兩者都被寫入到BOT,使得能夠(例如,通過使用用於複雜度降低的副分支資訊的路徑)減少硬體、延遲和複雜度。
圖2A至2B中所示的雙分支格式化方法56和底層邏輯使得能夠(在單個週期中)格式化兩個分支指令,以使得能夠並存執行兩個分支指令。現在將關注圖3A,其示出分支處理系統的實施例的雙分支更新系統76的實施例。雙分支更新系統76在前端讀取正在進行時通過使用兩個寫入佇列來延遲對單個埠的寫入而繼續一次處理兩個分支指令的益處,同時實現對分支預測器的表(例如,BTAC、TAGE)的每寫入佇列多達兩個的更新。例如,寫入可以被延遲,直到在前端中沒有有效讀取訪問(例如,前端暫停)的週期為止。如上文所說明的,擁有僅具有一個相應的寫入或讀取/寫入埠的表(以及甚至子表)的分支預測器在表大小的減小方面提供益處(當與具有兩個寫入埠的陣列或表相比時,例如,在從單個寫入埠到兩個寫入埠時表的大小的加倍),但是當更新涉及多於一個分支指令時,也對更新提出了挑戰(例如,延遲或瓶頸)。如下面進一步說明的,雙分支更新系統76的某些實施例通過使用兩個寫入佇列來解決這些挑戰中的一個或多個,其中各寫入佇列能夠寫入多達兩個更新。在一個實施例中,控制邏輯與分支表更新邏輯以及預測器邏輯表通信,評估衝突(例如,將兩個分支寫入到同一表或子表)的潛在性,以及(在適合的時間)經由兩個分支寫入(無預期衝突)或對表之一的優先單個寫入(當存在預期衝突時)從寫入佇列對分支預測器表(或子表)進行更新。例如,如果在寫入佇列的底部兩個條目中存在預期衝突(例如,對表的同一邊(side)的寫入),則寫入佇列之一發送單個更新,所選擇的更新基於分支指令資訊的重要性。
雙分支更新系統76包括寫入邏輯78A、78B,這些寫入邏輯從分支單元IU1 26A和IU2 26B接收分支執行輸出(例如,誤預測信號和分支標籤) (例如,BOT中的分支的位址,其允許訪問其它分支資訊,包括在BTAC或TAGE陣列中使用哪各邊、在條件預測器中使用哪個表等))。注意,在一些實施例中,寫入邏輯78A、78B可以體現為程式設計代碼的兩個實例。雙分支更新系統76還包括分支表更新28(圖1A)的兩個寫入佇列80 (BTAC)和82 (TAGE),其各自被配置為存儲更新,然後在適合的時間,各自將兩個更新寫入到多邊(例如,邊A、邊B和邊C) BTAC表84、多邊TAGE表86(例如,邊A、邊B和邊C,其為用於使用分支模式資訊的條件分支預測和間接分支預測的預測方法,不同表用於提供採取/不採取確定),或者寫入到BTAC表和TAGE表這兩者。控制邏輯提供對重要性的評估、適合的更新時間、以及分支表更新與預測邏輯之間的協調。
簡而言之,並且如以上至少部分地說明的,分支處理系統的一個實施例中的分支預測器包括BTAC 14、TAGE條件預測器、TAGE間接預測器和BTAC返回堆疊。返回堆疊僅需要在誤預測時被更新,這在一個實施例中是經由讀取/寫入指標的重置來實現的。各個預測器包括具有單個埠(讀/寫、或者寫)但可以獨立於其它表(和子表)被寫入的表(和子表)。例如,BTAC 14可以與條件預測器等同時被寫入。例如,如果分支在BTAC 14的邊A,則可以使用TAGE表86的邊A(如果需要的話)。BTAC 14包括主表,其確定是否將完全預測分支(例如,必須在BTAC中得到命中),並且其包括指示分支的類型的類型位元。在一個實施例中,BTAC 14包括三(3)個邊或表(A、B、C,但在一些實施例中可以使用不同數量的邊)以針對每次拾取處理三(3)個分支。此外,對於至少邊A和B(表A和B)中的各邊,存在單獨的TAGE條件預測器。在一些實施例中,較簡單的gshare預測器可以用於邊C,但在一些實施例中,TAGE條件預測器也可以用於邊C。注意,TAGE是一個示例性預測機制,並且在一些實施例中,可以使用其它預測器,包括基於全域或局部分支的預測中的任何一個或其組合。各TAGE條件預測器具有多個表(例如,為了說明,為九(9)個表,但是也考慮其它數量)。因此,在一個示例性實施例中,存在總共十八(18)個TAGE條件表(並且在一些實施例中,存在附加的單個gshare表)。
在一個實施例中,對寫入佇列80和82的寫入涉及每個時鐘週期的多個(例如,兩個(2))寫入,但在一些實施例中,在給定時鐘週期期間僅寫入單個分支。在一個實施例中,對BTAC表84的更新涉及從佇列80和/或82讀取兩(2)個更新以及對不同邊A、B、C的兩個寫入(無衝突)。在一個實施例中,對TAGE表86的更新涉及從佇列80和/或82讀取兩(2)個更新以及對不同邊A、B、C的兩個寫入(無衝突)。在一些實施例中,可以對BTAC表84和TAGE表86這兩者進行更新。注意,對TAGE表86和BTAC表84的寫入通常是分開的,但可以同時進行以調整預測機制中的置信度(例如,可以涉及偏差調整,或者對較不可靠或更可靠的採取或不採取確定的指示)。注意,可以對表84或表86各自的子表進行寫入。因此,只要兩個寫入涉及不同的邊、不同表或不同子表,就不存在衝突。更新可以包括對計數器的調整(例如,針對正確預測的遞增、針對不正確預測的遞減、調整誤預測的目標等)。更新可以在適合的時間進行並且在兩個更新的情況下並行地進行。適合的時間可以包括當陣列可用于寫入時或者當寫入佇列達到預定義的充滿度或待決性時(例如,更新在佇列中持續例如十二(12)個時鐘週期)。在一些實施例中,可以暫停I高速緩存以啟用這些更新。例如,監視時鐘週期以確定在I高速緩存訪問中是否存在延遲或暫停(諸如來自偵聽操作、閉環等)。
如果存在預期衝突(例如,基於識別出對相同表或子表的條目的更新),則針對給定更新週期,(例如,由控制邏輯)對更新進行優先順序排序。作為示例性說明,假設分支執行單元26A和26B的輸出包括併發誤預測分支。在一個實施例中,出於更新的目的,最重要的分支是較舊的分支(因為較新的或較晚的分支被誤預測為偏離較舊的分支)。
作為另一示例,在預期衝突的情況下,對TAGE表86的更新可能導致確定為誤預測的更新比正確預測的更新更重要(例如,尤其是在正確預測計數器飽和的情況下)。
作為另一說明性示例,在某些情況下(例如,條件分支被正確預測),更新涉及讀取-修改-寫入更新。如果分支到不同的邊(例如,A、B、C),則每個時鐘週期可以處理這些更新中的兩個。否則,更新可以被排隊,或者一個更新可以被丟棄(或者稍後被繞過)。
鑒於圖3A的雙分支更新系統76的描述,應瞭解,示例性分支處理方法的一個實施例,具體地雙分支更新的方法(在圖3B中表示為方法88)的實施例包括確定是否存在表更新機會(例如,緩存暫停、佇列充滿度等) (90)。如果不存在(90為“否”),則監測繼續,否則(“是”),確定是否存在預期衝突(92)。如果存在(92為“是”),則選擇最重要的分支(例如,較舊的、誤預測的相對於正確預測的等) (94)並且進行對預測器表的更新(96)。否則(92為“否”),從寫入佇列更新兩個分支(96)。本領域的普通技術人員應瞭解,在本發明的上下文中,設想了步驟的佈置或順序的變型,其中一些步驟可以併發或以與圖3B中所描繪的不同的順序進行。
已經描述了分支處理系統的某些實施例,應瞭解,示例性分支處理方法的一個實施例(在圖4中表示為方法98)包括將針對給定時鐘週期的多個分支指令分配至主分支資訊和副分支資訊(100);沿著具有加法器邏輯的第一路徑路由主分支資訊,並且沿著不具有加法器邏輯的第二路徑路由副分支資訊(102);以及將包括位移分支目標位址的主分支資訊寫入到分支順序表(BOT),並且將不具有目標位址的副分支資訊寫入到BOT (103)。
已經描述了分支處理系統的某些實施例,應瞭解,另一示例性分支處理方法的一個實施例(在圖5中表示為方法104)包括:從至少兩個分支執行單元接收資訊(106);基於該資訊在每個時鐘週期將兩個更新寫入到相應的第一寫入佇列和第二寫入佇列(108);以及從第一寫入佇列在每個時鐘週期將多達兩個更新寫入到第一預測器的多個表(例如,邊)中,並且在存在預期寫入衝突的情況下針對單個時鐘週期寫入單個更新,所述第一預測器包括單個寫入或讀取/寫入埠(110)。
流程圖中的任何處理描述或框應被理解為表示代碼的模組、段、邏輯或部分(其包括用於在過程中實現特定邏輯功能或步驟的一個或多個可執行指令),並且替代實現包括在實施例的範圍內,其中如本發明領域技術人員將理解的,功能可以不按所示或討論的順序地執行(包括基本上併發執行或以不同循序執行),這取決於所涉及的功能。
雖然已經在附圖和前面的描述中詳細示出和描述了本發明,但是這樣的示出和描述應被認為是說明性的或示例性的而不是限制性的;本發明不限於所公開的實施例。本領域技術人員通過研究附圖、公開內容和所附權利要求書,在實踐要求保護的發明時可以理解並實現所公開的實施例的其它變化。
注意,可以使用所公開的實施例的不同組合,因此參考實施例或一個實施例並不意味著排除來自該實施例的特徵與來自其它實施例的特徵一起使用。在權利要求書中,詞語“包括”不排除其它要素或步驟。
10:微處理器
12:快速預測器
14:分支目標位址高速緩存、BTAC
16:指令位元組佇列、XIB
18:分支解碼器
20:格式指令佇列(FIQ)/迴圈佇列
22:轉譯、指令轉譯器
24:轉譯暫存器別名表(RAT)/保留站(RS)
26A:IU1
26B:IU2
28:分支表更新
30:前端
32:獲取單元
34:轉譯後備暫存器、TLB
36:I高速緩存資料
38:I高速緩存標籤
42:預解碼器
44:指令長度標記
46:指令多路複用
40:F階段解碼分支單元
48:指令解碼、指令解碼器
50:加法器(加法器邏輯)
52:比較器
54:BOT
26A:IU1
26B:IU2
76:雙分支更新系統
78A、78B:寫入邏輯
80:BTAC寫入佇列
82:TAGE寫入佇列
84:BTAC
86:TAGE
56、88、98、104:方法
58、60、62、64、66、68、70、72、74、90、92、94、96、100、102、103、106、108、110:步驟
參考以下附圖可以更好地理解本發明的各個方面。附圖中的組件不一定按比例繪製,而是著重于清楚地示出本發明的原理。此外,在附圖中,在所有的各圖中相同的附圖標記指代對應的部分。
圖1A是示出實現分支處理系統的實施例的微處理器的示例性分支單元流水線的框圖。
圖1B是示出圖1A所示的分支單元流水線的示例性前端的示意圖。
圖2A是示出分支處理系統的實施例的、用於實現雙分支格式化的示例性格式階段分支單元的實施例的示意圖。
圖2B是示出分支處理系統的實施例的雙分支格式化的示例性方法的實施例的流程圖。
圖3A是示出分支處理系統的實施例的雙分支更新系統的實施例的示意圖。
圖3B是示出分支處理系統的實施例的雙分支更新的示例性方法的實施例的流程圖。
圖4是示出示例性分支處理方法的實施例的流程圖。
圖5是示出另一示例性分支處理方法的實施例的流程圖。
26A:IU1
26B:IU2
76:雙分支更新系統
78A、78B:寫入邏輯
80:BTAC寫入佇列
82:TAGE寫入佇列
84:BTAC
86:TAGE
Claims (20)
- 一種微處理器,包括:兩個分支執行單元,其被配置為每個時鐘週期執行兩個分支;寫入邏輯,其被配置為,第一寫入佇列和第二寫入佇列,所述寫入邏輯被配置為基於所述資訊在每個時鐘週期將從至少所述兩個分支執行單元接收的兩個更新寫入到相應的所述第一寫入佇列和所述第二寫入佇列;以及第一預測器,其包括多個表,所述多個表被配置為針對每次指令高速緩存拾取而預測多個分支,所述第一預測器包括第一單個寫入或讀取/寫入埠;其中,所述第一寫入佇列被配置為針對單個時鐘週期將多達兩個更新寫入到分開的表中,並且在存在預期寫入衝突的情況下,針對單個時鐘週期寫入單個更新。
- 如請求項1所述的微處理器,其中,還包括第二預測器,所述第二預測器包括多個表,所述第二預測器包括第二單個寫入或讀取/寫入埠,其中,所述第二寫入佇列被配置為針對單個時鐘週期將多達兩個更新寫入到分開的表中,並且在存在預期寫入衝突的情況下,針對單個時鐘週期寫入單個更新。
- 如請求項2所述的微處理器,其中,所述第一預測器包括分支目標位址高速緩存(Branch target address cache, BTAC),並且所述第二預測器包括標籤幾何長度預測器即TAGE預測器。
- 如請求項2所述的微處理器,其中,所述第一寫入佇列和所述第二寫入佇列各自被配置為基於更新機會來寫入更新。
- 如請求項4所述的微處理器,其中,所述更新機會包括對所述第一預測器、或者所述第二預測器、或者所述第一預測器和所述第二預測器的相應表的寫入的可用性。
- 如請求項4所述的微處理器,其中,所述更新機會包括所述第一寫入佇列和所述第二寫入佇列中的一個或多個為滿的時候。
- 如請求項4所述的微處理器,其中,所述更新機會包括在所述第一寫入佇列和所述第二寫入佇列中的一個或多個中超過了預定待決性。
- 如請求項2所述的微處理器,其中,在存在所述預期寫入衝突的情況下,相對於較新的誤預測的分支指令,更新較舊的誤預測的分支指令。
- 如請求項2所述的微處理器,還包括位於所述兩個分支執行單元上游的分支順序表(Branch order table,BOT),所述寫入邏輯被配置為還從所述BOT接收所述資訊。
- 如請求項2所述的微處理器,其中,所述更新包括目標資訊和對一個或多個計數器的改變中的一項或多項。
- 一種分支處理方法,包括: 基於所述資訊在每個時鐘週期將從至少兩個分支執行單元接收的兩個更新寫入到相應的第一寫入佇列和第二寫入佇列;以及從所述第一寫入佇列在每個時鐘週期將多達兩個更新寫入到第一預測器的多個表中,並且在存在預期寫入衝突的情況下,針對單個時鐘週期寫入單個更新,所述第一預測器包括單個寫入或讀取/寫入埠。
- 如請求項11所述的分支處理方法,還包括:從所述第二寫入佇列針對單個時鐘週期將多達兩個更新寫入到第二預測器的多個表中,並且在存在預期寫入衝突的情況下,針對單個時鐘週期寫入單個更新,所述第二預測器包括第二單個寫入或讀取/寫入埠。
- 如請求項12所述的分支處理方法,其中,所述第一預測器包括分支目標位址高速緩存(Branch target address cache,BTAC),並且所述第二預測器包括標籤幾何長度預測器(Tagged geometric length,TAGE)。
- 如請求項12所述的分支處理方法,還包括基於更新機會從所述第一寫入佇列和所述第二寫入佇列進行更新。
- 如請求項14所述的分支處理方法,其中,所述更新機會包括對所述第一預測器、或者所述第二預測器、或者所述第一預測器和所述第二預測器的相應表的寫入的可用性。
- 如請求項14所述的分支處理方法,其中,所述更新機會包括所述第一寫入佇列和所述第二寫入佇列中的一個或多個為滿的時候。
- 如請求項14所述的分支處理方法,其中,所述更新機會包括在所述第一寫入佇列和所述第二寫入佇列中的一個或多個中超過了預定待決性。
- 如請求項12所述的分支處理方法,其中,在存在所述預期寫入衝突的情況下,相對於較新的誤預測的分支指令,更新較舊的誤預測的分支指令。
- 如請求項12所述的分支處理方法,還包括:從位於所述兩個分支執行單元的上游的分支順序表即BOT接收所述資訊。
- 如請求項12所述的分支處理方法,其中,所述更新包括目標資訊和對一個或多個計數器的改變中的一項或多項。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/078,273 US11461103B2 (en) | 2020-10-23 | 2020-10-23 | Dual branch execute and table update with single port |
US17/078,273 | 2020-10-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202217560A TW202217560A (zh) | 2022-05-01 |
TWI773391B true TWI773391B (zh) | 2022-08-01 |
Family
ID=78127811
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW110122573A TWI773391B (zh) | 2020-10-23 | 2021-06-21 | 微處理器和分支處理方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11461103B2 (zh) |
CN (1) | CN113535237A (zh) |
TW (1) | TWI773391B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2003065179A2 (en) * | 2002-02-01 | 2003-08-07 | John Fairweather | A system and method for mining data |
TWI649759B (zh) * | 2017-09-28 | 2019-02-01 | 慧榮科技股份有限公司 | 資料儲存裝置與將資料寫入記憶體裝置之方法 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6304960B1 (en) | 1998-08-06 | 2001-10-16 | Intel Corporation | Validating prediction for branches in a cluster via comparison of predicted and condition selected tentative target addresses and validation of branch conditions |
US6895498B2 (en) * | 2001-05-04 | 2005-05-17 | Ip-First, Llc | Apparatus and method for target address replacement in speculative branch target address cache |
US6886093B2 (en) * | 2001-05-04 | 2005-04-26 | Ip-First, Llc | Speculative hybrid branch direction predictor |
US7134005B2 (en) * | 2001-05-04 | 2006-11-07 | Ip-First, Llc | Microprocessor that detects erroneous speculative prediction of branch instruction opcode byte |
US7200740B2 (en) * | 2001-05-04 | 2007-04-03 | Ip-First, Llc | Apparatus and method for speculatively performing a return instruction in a microprocessor |
US7165168B2 (en) * | 2003-01-14 | 2007-01-16 | Ip-First, Llc | Microprocessor with branch target address cache update queue |
US7159097B2 (en) * | 2002-04-26 | 2007-01-02 | Ip-First, Llc | Apparatus and method for buffering instructions and late-generated related information using history of previous load/shifts |
US8904156B2 (en) * | 2009-10-14 | 2014-12-02 | Oracle America, Inc. | Perceptron-based branch prediction mechanism for predicting conditional branch instructions on a multithreaded processor |
US8671285B2 (en) * | 2010-05-25 | 2014-03-11 | Via Technologies, Inc. | Microprocessor that fetches and decrypts encrypted instructions in same time as plain text instructions |
US20140195790A1 (en) | 2011-12-28 | 2014-07-10 | Matthew C. Merten | Processor with second jump execution unit for branch misprediction |
US10303481B2 (en) | 2015-12-02 | 2019-05-28 | International Business Machines Corporation | Performance-aware instruction scheduling |
CN106406823B (zh) * | 2016-10-10 | 2019-07-05 | 上海兆芯集成电路有限公司 | 分支预测器和用于操作分支预测器的方法 |
-
2020
- 2020-10-23 US US17/078,273 patent/US11461103B2/en active Active
-
2021
- 2021-06-21 TW TW110122573A patent/TWI773391B/zh active
- 2021-07-14 CN CN202110793205.XA patent/CN113535237A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2003065179A2 (en) * | 2002-02-01 | 2003-08-07 | John Fairweather | A system and method for mining data |
TWI649759B (zh) * | 2017-09-28 | 2019-02-01 | 慧榮科技股份有限公司 | 資料儲存裝置與將資料寫入記憶體裝置之方法 |
TW201916018A (zh) * | 2017-09-28 | 2019-04-16 | 慧榮科技股份有限公司 | 資料儲存裝置與將資料寫入記憶體裝置之方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113535237A (zh) | 2021-10-22 |
TW202217560A (zh) | 2022-05-01 |
US11461103B2 (en) | 2022-10-04 |
US20220129277A1 (en) | 2022-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3301566B1 (en) | Pipelined processor with multi-issue microcode unit having local branch decoder | |
JP3798404B2 (ja) | 2レベルの分岐予測キャッシュによる分岐予測 | |
US9524164B2 (en) | Specialized memory disambiguation mechanisms for different memory read access types | |
US5805853A (en) | Superscalar microprocessor including flag operand renaming and forwarding apparatus | |
US5463745A (en) | Methods and apparatus for determining the next instruction pointer in an out-of-order execution computer system | |
US6502185B1 (en) | Pipeline elements which verify predecode information | |
US20090037697A1 (en) | System and method of load-store forwarding | |
US10310859B2 (en) | System and method of speculative parallel execution of cache line unaligned load instructions | |
US20070033385A1 (en) | Call return stack way prediction repair | |
CN113448626B (zh) | 推测分支模式更新方法和微处理器 | |
TWI773391B (zh) | 微處理器和分支處理方法 | |
TWI788912B (zh) | 可調整分支預測方法和微處理器 | |
US11614944B2 (en) | Small branch predictor escape | |
TWI786691B (zh) | 微處理器和分支處理方法 | |
CN113515311A (zh) | 微处理器和预取指调整方法 | |
TWI844775B (zh) | 快速預測器覆寫方法和微處理器 | |
US7783692B1 (en) | Fast flag generation | |
US11995447B2 (en) | Quick predictor override and update by a BTAC |