TWI506552B - 迴圈預測器指導的迴圈緩衝器 - Google Patents
迴圈預測器指導的迴圈緩衝器 Download PDFInfo
- Publication number
- TWI506552B TWI506552B TW103138668A TW103138668A TWI506552B TW I506552 B TWI506552 B TW I506552B TW 103138668 A TW103138668 A TW 103138668A TW 103138668 A TW103138668 A TW 103138668A TW I506552 B TWI506552 B TW I506552B
- Authority
- TW
- Taiwan
- Prior art keywords
- loop
- instruction
- branch
- trained
- count
- Prior art date
Links
- 239000000872 buffer Substances 0.000 title claims description 139
- 238000000034 method Methods 0.000 claims description 19
- 238000012549 training Methods 0.000 claims description 13
- 238000010586 diagram Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 4
- 230000001934 delay Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- 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/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
- G06F9/381—Loop buffering
-
- 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
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- 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/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
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)
- Executing Machine-Instructions (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
本發明係有關於一處理器,且特別係有關於一具有一指令快取記憶體、一指令緩衝器和一執行引擎的處理器及方法。
電腦程式普遍包含迴圈。迴圈是通常被稱為迴圈本體的、重複地運行的指令序列,該迴圈本體重複地運行直到導致迴圈退出並進行到接著該迴圈的下一條指令的條件(condition)發生為止。在機器語言級別,一般來說,迴圈以通常回到位於迴圈本體的開始處的指令的條件分支指令來結束,但是當條件發生時,迴圈不再被採用(not taken)並且向下執行順序的下一條指令。例如,條件可以是被初始化為正值然後通過迴圈每次遞減的變數達到0。
對於現代處理器,迴圈呈現潛在的性能問題,因為它們包括條件分支指令,尤其是對於流水線(pipeline)和/或超標量處理器。一般而言,為了足夠快地取指和解碼指令以將它們提供給運行指令的處理器的功能單元,取指單元必須預測指令流中條件分支指令的存在並預測它們的結果,即,它們是將被採用(taken)或是不被採用(not taken)以及它們的目標位址。如果條件分支指令被誤預測,則誤預測必須被糾正,
當流水線的前端開始在被糾正的位址處取指和解碼指令時,會造成執行單元由於缺乏要執行的指令而饑餓的一個時段,常被稱作流水線氣泡。另外,對執行發生之前的所獲取的指令的解碼可能是複雜的,尤其對於一些指令集架構,並且因此引入的延遲也可能導致流水線氣泡。
現代處理器中另外關心的是功耗。這在很多環境中是存在的。例如,在諸如行動電話或筆記型電腦或平板電腦的電池供電的環境中,總是希望減少處理器功耗以便延長所需要的電池再充電之間的時間。又例如,在伺服器環境中,除了環境考慮之外,相對大的-確實有時候巨大的-數量的伺服器導致功耗方面非常顯著的成本。如上面討論的,包括迴圈本體指令的指令解碼可能是複雜的,因此除了由取指邏輯和從其獲取指令的指令快取記憶體以及預測所獲取的迴圈的條件分支指令的分支預測器所消耗的功率之外,解碼邏輯需要消耗相當大量的功率。
因此,理想的是提供一種裝置用於處理器在運行迴圈時提高性能和/或減少功耗。
在本發明的一方面中提供了一種處理器。處理器包括一指令快取記憶體、一執行引擎、一指令緩衝器和一迴圈預測器。該迴圈預測器訓練(train)一分支指令來確定一迴圈的一經訓練的迴圈計數。該迴圈包括以該分支指令的目標開始並以該分支指令結束的指令序列。該迴圈預測器還判斷該迴圈的尺寸是否不大於該指令緩衝器的尺寸。當該迴圈的尺寸不大
於該指令緩衝器的尺寸時,該處理器停止從該指令快取記憶體取指,將該迴圈指令從該指令緩衝器發送到該執行引擎而不從該指令快取記憶體取指該迴圈指令,維持一迴圈彈出計數,其指示該分支指令從該指令緩衝器被發送到該執行引擎而不從該指令快取記憶體取指的次數,當該迴圈彈出計數少於該經訓練的迴圈計數時預測該分支指令為被採用,否則,則預測該分支指令為不被採用。在另一個方面中,本發明提供了通過具有一指令快取記憶體、一指令緩衝器和一執行引擎的處理器執行的方法。該方法包括訓練一分支指令來確定一迴圈的一經訓練的迴圈計數。該迴圈包括以該分支指令的目標開始並以分支指令結束的指令序列。該方法還包括判斷該迴圈的尺寸是否不大於該指令緩衝器的尺寸。該方法還包括,當該迴圈的尺寸不大於該指令緩衝器的尺寸時:停止從該指令快取記憶體取指,將該迴圈指令從該指令緩衝器發送到該執行引擎而不從該指令快取記憶體取指該等迴圈指令,維持一迴圈彈出計數,其該指示分支指令從該指令快取記憶體發送到該執行引擎而不從該指令快取記憶體取指的次數,當該迴圈彈出計數少於該經訓練的迴圈計數時預測該分支指令為被採用,否則,則預測該分支指令為不被採用。
本發明的上述處理器及其執行方法在迴圈緩衝器模式中利用迴圈預測器結合指令緩衝器工作的方式來潛在地精確預測迴圈退出,從而避免不具有迴圈預測器指導的迴圈緩衝器模式操作的優點的常規處理器所經歷的誤預測。
100‧‧‧處理器
102‧‧‧迴圈預測器
104‧‧‧指令快取記憶體
106‧‧‧分支目標位址快取記憶體
108‧‧‧取指單元
112‧‧‧執行引擎
114‧‧‧指令緩衝器(迴圈緩衝器)
116‧‧‧分支歷史表
118‧‧‧解碼單元
201‧‧‧經訓練的迴圈計數表
202‧‧‧有效位元
204‧‧‧標籤
206‧‧‧經訓練的迴圈計數
208‧‧‧第一比較器
212‧‧‧條件分支指令位址
214‧‧‧索引
216‧‧‧標籤
218‧‧‧命中信號
232‧‧‧第二比較器
234‧‧‧迴圈取指計數器
236‧‧‧第一T/NT指示符
242‧‧‧經訓練的迴圈計數寄存器
252‧‧‧第三比較器
254‧‧‧迴圈彈出計數器
256‧‧‧第二T/NT指示符
262‧‧‧控制邏輯
264‧‧‧訓練計數器
272‧‧‧複用器
274‧‧‧模式指示符
276‧‧‧第三T/NT指示符
278‧‧‧經訓練的迴圈分支標誌
302、304、306、308、312、314、402、404、502、503、504、505、508、512、514、518、522、524、526、528、532、534、536、538、542、544、546、548、552、602、604、606‧‧‧框
第1圖是示出處理器的框圖。
第2圖是示出第1圖的迴圈預測器的框圖。
第3圖是示出第1圖的處理器的操作的流程圖。
第4圖是示出第1圖的處理器的操作的流程圖。
第5A圖和第5B圖是示出第1圖的處理器的操作的流程圖。
第6圖是進一步示出根據替換實施例的第1圖的處理器的操作的流程圖。
第7圖是作為示例示出向第1圖的執行引擎提供巢狀迴路的指令的工作在迴圈緩衝器模式中的第1圖的指令緩衝器的框圖。
現在參照第1圖,顯示了示出處理器100的框圖。處理器100包括取指單元108,其控制從指令快取記憶體104的指令的獲取,這些指令被提供到指令解碼單元118。解碼單元118將經解碼的指令提供到指令緩衝器114,在此也被稱為迴圈緩衝器(loop buffer)114,指令緩衝器114將指令提供給執行引擎112用於執行。取指單元108耦接到解碼單元118、指令緩衝器114和執行引擎112。處理器100還包括多個分支預測器。在一個實施例中,分支預測器包括分支歷史表116、分支目標位址快取記憶體(Branch Target Address Cache,BTAC)106和迴圈預測器102,其中每個分支歷史表116、分支目標位址快取記憶體106和迴圈預測器102分別耦接到取指單元108。迴圈預測器102還耦接到解碼單元118、指令緩衝器114和執行引擎
112。
對本公開來說,一個迴圈是以一後向分支的條件分支指令結束並且以該條件分支指令的目標指令(即,條件分支指令分支所到的指令)開始的指令序列。條件分支指令可以被稱為迴圈分支指令。迴圈的反覆運算(iteration)指的是迴圈的全部指令的單次運行。迴圈的執行例程(execution instance)指的是運行多次反覆運算直到由於其迴圈分支指令的不被採用的方向而退出迴圈為止。如在此描述的,迴圈預測器102被有利地用於預測迴圈的退出,並且從而避免分支誤預測及其伴隨的性能損失。有利地,迴圈預測器102可以在兩種模式中的每種模式中被用來預測迴圈的退出。在第一種模式中,迴圈太大而不能適合於迴圈緩衝器114,所以迴圈指令在被提供給執行引擎112之前被重複地從指令快取記憶體104獲取並通過解碼單元118解碼。每次從指令快取記憶體104獲取迴圈分支指令時,迴圈預測器102就進行預測它是否將被採用(taken or not taken)。迴圈預測器102跟蹤在當前的迴圈執行例程期間該迴圈分支指令已經被執行的次數,並且也知道在迴圈的前一個(last)執行例程期間它被採用的次數,並且使用此資訊來進行預測。在被稱為「迴圈緩衝器模式」(loop buffer mode)的第二種模式中,已經解碼的迴圈的指令之大小可以適合於迴圈緩衝器114,並且從迴圈緩衝器114中被彈出(pop)用於提供給執行引擎112,而不需要重複地從指令快取記憶體104中獲取並通過解碼單元118解碼。在迴圈緩衝器模式中,當迴圈分支指令從迴圈緩衝器114中彈出的次數已經達到在迴圈
的前一個執行例程期間它被採用的次數之後,迴圈預測器102則指示迴圈緩衝器退出迴圈。
取指單元108將指令指標或程式計數器值提供給指令快取記憶體104來存取指令快取記憶體104。作為回應,指令快取記憶體104將指令字節區塊提供給解碼單元118。在一個實施例中,該區塊是每個時鐘週期16字節。一般而言,取指單元108取指順序的下一指令區塊;然而,在分支指令的情況中,取指單元108在分支指令的目標位址處取指指令區塊。該分支目標位址可以由分支預測器中之迴圈預測器102/分支目標位址快取記憶體106/分支歷史表116之一的預測而提供,或者在諸如為了糾正分支誤預測而由執行引擎112提供。
分支歷史表116存儲用於先前運行的分支指令的被採用/不被採用(T/NT)預測,也被稱為分支方向或方向。在一個實施例中,分支歷史表116通過分支指令在指令快取記憶體104中的獲取位址與分支歷史圖案的布爾異或(booleanExpr)的值來索引,其中之前執行的N個分支指令中的每一個在該分支歷史圖案中包含一個位元,其中N是預定值,並且每個位元指示該分支指令是否被採用。在一個實施例中,分支歷史表116包括與多個分支指令對應的飽和計數器,並且每個飽和計數器在當分支被採用時遞增計數(count up),而當分支不被採用時遞減計數(count down),並且T/NT預測基於計數器的值。
迴圈預測器102存儲用於先前運行的迴圈分支指令的一經訓練的迴圈計數,其可以用於進行先前被識別為迴圈
分支指令的條件分支指令的T/NT預測。迴圈分支指令是在指令流中後向分支的條件分支指令。因此,迴圈分支指令在程式次序上出現在迴圈的末尾。例如,條件分支指令可以是包括有符號偏移的相對跳轉指令,所述有符號偏移被添加到條件分支指令的指令指標值來計算分支目標位址。優選地,另外,條件分支指令在最近一次的迴圈執行例程中被採用的次數達到一閾值次數,才有資格被稱為迴圈分支指令。所述經訓練的迴圈計數指示在迴圈的前一個執行例程期間該迴圈分支指令被採用的次數,其可能是對於在迴圈的下一個執行例程中將採用的迴圈分支指令的次數的有用指示。例如,如果該經訓練的迴圈計數是37,那麼迴圈預測器102可以預測該迴圈分支指令在它從指令快取記憶體104被取指的前37次都將被採用,並且迴圈預測器102可以預測迴圈分支指令在它被取指的第38次將不被採用,即,迴圈預測器102可以預測迴圈將退出。
有利地,迴圈預測器102也可以用在處理器100的迴圈緩衝器模式中。在迴圈緩衝器模式中,處理器100檢測到它正在運行一全部暫存於迴圈緩衝器114中的迴圈。因此,處理器100停止從指令快取記憶體104取指。替代為,處理器100從迴圈緩衝器114彈出已經解碼的迴圈指令,用於提供給執行引擎112。有利地,迴圈預測器102可以用類似於迴圈預測器102預測從指令快取記憶體104取指的迴圈分支指令的方向(通常因為迴圈太大而不能適合於迴圈緩衝器114,所以處理器100不工作在迴圈緩衝器模式中時)所用的方式,來預測從迴圈緩衝器114彈出的迴圈分支指令何時將被採用或不被採用。有利
地,當處理器100工作在二者的任何模式中時,迴圈預測器102都可以用來預測迴圈分支指令的方向。下面相對於第2圖更詳細地描述迴圈預測器102,並且下面相對於其餘圖更詳細地描述其操作。
BTAC 106存儲用於先前執行的分支指令的方向預測和分支目標位址,並且提供分支指令的方向預測以及指令快取記憶體104取指位址所選擇的分支目標位址。BTAC 106還存儲與每個分支指令有關的其它資訊。例如,其它資訊可以包括分支指令的類型,諸如指令是否是調用指令、返回指令、間接分支指令、條件有關分支指令、非條件有關分支指令或者迴圈分支指令,如在此描述的。有利地,在一個實施例中,額外的資訊還包括一經訓練的迴圈分支標誌(參照第2圖作為經訓練的迴圈分支標誌278),其該指示條件分支指令是否是一個經訓練的迴圈分支指令。在一個實施例中,條件分支指令僅在它具有第2圖的經訓練的迴圈計數表201中的有效的經訓練的迴圈計數206的情況下才將其經訓練的迴圈分支標誌278置位,如下面更詳細地描述的。在一個實施例中,分支歷史表116通過作為指令快取記憶體104的取指位址的值來索引。在一個實施例中,處理器100包括其它分支預測器,諸如基於堆疊的調用/返回預測器。優選地,BTAC 106提供來自分支歷史表116、迴圈預測器102(例如,經由經訓練的迴圈分支標誌278的設置值)或BTAC 106自身的預測是否應該被用來預測分支指令的指示。
解碼單元118解碼從指令快取記憶體104取指的指令。解碼可以包括根據處理器100的指令集架構(ISA)將從指
令快取記憶體104接收的未分化的(undifferentiated)指令字節流打斷(break)為分立的(distinct)指令。這也被稱為指令格式化。例如,在一個實施例中處理器100是x86 ISA處理器。x86 ISA中的指令是可變長度,並且可以在記憶體中的任何字節邊界處開始。因此,x86指令可以跨越從指令快取記憶體104取指的多個區塊。目前,x86 ISA指令可以在1和15字節長之間。又例如,在一個實施例中,處理器100是高級RISC機器(ARM)ISA處理器。在ARM ISA處理器的某些模式中的指令也可以是可變長度。例如,在一些模式中,ARM ISA指令可以是16位元長或32位元長。可以包括或不包括可變長度指令的其它ISA的實施例是預期的。
通常,解碼/格式化可變長度指令需要大量邏輯,這可能需要顯著的功耗並且可能在提供經解碼/格式化的指令給執行引擎112時造成延遲。更具體地,依賴於指令混合,解碼單元118可能難以足夠快地向指令緩衝器114提供經解碼的指令來保持執行引擎112的高利用率。有利地,當工作在迴圈緩衝器模式中時,迴圈緩衝器114可能能夠以足夠的速率將迴圈指令提供給執行引擎112來充分地利用執行引擎112,尤其是具有如在此描述的通過迴圈預測器102來預測迴圈分支指令的方向的額外優勢,以避免當迴圈退出發生時的誤預測,從而潛在地改善處理器100的性能。另外,有利地,當工作在迴圈緩衝器模式中時,可以節省大量電力,因為在迴圈緩衝器模式的操作期間中相當長的一段時間,可以臨時關閉指令快取記憶體104、取指單元108、分支歷史表116和/或解碼單元118。在
一個實施例中,緩衝器(未顯示)存在於指令快取記憶體104和解碼單元118之間用於緩衝指令字節的區塊;當工作在迴圈緩衝器模式中時也可以關閉此緩衝器。
常規地,在迴圈緩衝器模式中的操作有效地總是預測迴圈分支指令將被採用,這意味著,在迴圈退出時,即,運行迴圈分支指令的最後一次,誤預測將發生,這將必須由處理器100糾正。有利地,在此描述的實施例中,在迴圈緩衝器模式中迴圈預測器102結合迴圈緩衝器114工作來潛在地精確預測迴圈退出,並且從而避免不具有迴圈預測器指導的迴圈緩衝器模式操作的優點的常規處理器100所經歷的誤預測。
解碼也可以包括解碼指令字節來生成額外的微架構控制位元,其隨著它們流下處理器100流水線而變為指令的一部分。例如,額外的控制位元可以被執行引擎112用來減少執行引擎112所需要的解碼量,從而改善性能和/或功耗。無論ISA和/或微架構,處理器100可以從如在此描述的基於迴圈預測的迴圈緩衝器操作中受益。
指令緩衝器114或迴圈緩衝器114從解碼單元118接收經解碼的指令,並且要求將它們提供給執行引擎112。優選地,指令緩衝器114包括構成一循環(circular)佇列的多個項目(entry),解碼單元118將經解碼的指令推入(push)到這些項目中,並且執行引擎112將它們從這些項目中彈出(pop)。推送指標被維持用以指向指令被推入到其中的下一項目,並且彈出指標被維持用以指向從其彈出指令的下一項目。指針值被用來確定哪些項目是有效的,並且也用來確定指令緩衝器114
何時是滿的以及何時是空的。在一個實施例中,迴圈緩衝器114的尺寸或長度是24個項目,即,迴圈緩衝器114能夠保存24個經解碼的指令。在這樣的實施例中,包括24個指令或者更短的迴圈將可以完全適合於迴圈緩衝器114。迴圈緩衝器114的尺寸大於或小於24的其它實施例是預期的。
指令緩衝器114還包括控制邏輯,其與迴圈預測器102合作地控制如在此描述的操作,諸如指標的更新。如在此描述的,當處理器100確定它遇到完全適合於迴圈緩衝器114的迴圈(「完全適合」意思是迴圈的尺寸不大於迴圈緩衝器114的尺寸)並且進入迴圈緩衝器模式時,暫停從指令快取記憶體104的取指,這有利地避免迴圈緩衝器114中的迴圈指令被覆寫。當進入迴圈緩衝器模式時控制邏輯重新調整指標。具體地,彈出指標被更新為指向迴圈分支指令的目標。當迴圈預測器102有效地預測在迴圈疊代的末尾該迴圈分支指令將被採用時,控制邏輯將彈出指標更新為迴圈分支指令的目標。
執行引擎112執行從指令緩衝器114接收的格式化的指令。在一個實施例中,指令緩衝器114每個時鐘週期能夠向執行引擎112提供多達三個指令。執行引擎112包括根據處理器100的ISA來執行指令以產生結果的執行單元。在一個實施例中,執行引擎112包括一超標量亂序運行微架構。然而,具有其它微架構的實施例也是可以預期的。在一個實施例中,執行引擎112還包括指令翻譯器(未顯示),指令翻譯器將每個格式化的ISA指令翻譯成被執行單元運行的一個或多個微指令。在一個實施例中,處理器100包括微指令緩衝器(未顯示),指令
翻譯器將等待被發送到執行單元的微指令寫到該微指令緩衝器中。微指令緩衝器充當不同於指令緩衝器114的迴圈緩衝器或者除了指令緩衝器114之外的迴圈緩衝器的實施例是可以預期的。執行引擎112還可以包括指令結果被寫入的架構狀態,諸如架構寄存器集。執行引擎112還可以包括資料運算元被寫到/從其讀取的記憶體子系統,諸如快取記憶體層級和記憶體次序緩衝器。
現在參照第2圖,顯示更詳細地示出第1圖的迴圈預測器102的框圖。迴圈預測器102包括經訓練的迴圈計數表201、迴圈取指計數器234、迴圈彈出計數器254、經訓練的迴圈計數寄存器242和訓練計數器264。第2圖中還顯示了經訓練的迴圈分支標誌278。經訓練的迴圈分支標誌278表示多個經訓練的迴圈分支標誌278。經訓練的迴圈分支標誌278優選地存儲在與各個分支指令對應的BTAC 106的項目中,並且當根據包括各個分支指令的指令快取記憶體104區塊的取指位址對BTAC 106進行存取時,經訓練的迴圈分支標誌278被提供給迴圈預測器102的控制邏輯262。如在此描述的,控制邏輯262按照需要來清除和/或增加迴圈取指計數器234、迴圈彈出計數器254和訓練計數器264。優選地,控制邏輯262包括組合和時序邏輯,其可以包括狀態機器。
經訓練的迴圈計數表201包括多個項目,每個項目包括有效位元202、標籤204和經訓練的迴圈計數206。按照需要使用訓練計數器264的值來更新給定項目的該經訓練的迴圈計數206,如下面參照第3圖描述的。經訓練的迴圈計數表201
通過條件分支指令位址212的索引214部分來索引。通常,當經訓練的迴圈計數表201被讀取時,條件分支指令位址212是用來存取指令快取記憶體104和BTAC 106的指令指標,例如,如在下面描述的第5A圖的框503。通常,當經訓練的迴圈計數表201被寫入時,條件分支指令位址212是使用中的分支指令的位址,例如,如在下面描述的第3圖的框312或第4圖的框404處。在一些實施例中,經訓練的迴圈計數表201可以是直接映射的或集合關聯的。通過第一比較器208將條件分支指令位址212的標籤216部分與所選擇的項目的標籤204比較來生成被提供給控制邏輯262的命中(hit)信號218。通過第二比較器232將所選擇的經訓練的迴圈計數206與迴圈取指計數器234比較來生成提供給2輸入複用器272的一個輸入端的第一採用/不採用(T/NT)指示符236。所選擇的經訓練的迴圈計數206還被提供給一經訓練的迴圈計數寄存器242,該經訓練的迴圈計數寄存器242存儲當處理器100處於迴圈緩衝器模式中時使用的經訓練的迴圈計數206的經流水線向下輸送的版本(piped-down version)。在一個實施例中,經訓練的迴圈計數寄存器242包括用於存儲多個經訓練的迴圈計數206的多個寄存器242。通過第三比較器252將存儲在經訓練的迴圈計數寄存器242中的經訓練的迴圈計數206的經流水線向下輸送的版本與迴圈彈出計數器254比較來生成提供給2輸入複用器272的另一輸入端的第二T/NT指示符256。由控制邏輯262生成的模式指示符274控制複用器272選擇輸入之一以輸出提供給控制邏輯262的第三T/NT指示符276。當處理器100在迴圈緩衝器模式(下面會更詳細地
描述)中時,控制邏輯262生成模式指示符274的值來使得複用器272選擇第三比較器252的輸出,否則生成模式指示符274的值來使得複用器272選擇第二比較器232的輸出。下面參照其餘圖來更詳細地描述迴圈預測器102的操作。
現在參照第3圖,顯示了示出第1圖的處理器100的操作的流程圖。流程在框302處開始。
在框302處,執行引擎112運行後向分支的條件分支指令。即,執行引擎112確定分支指令的正確的方向和正確的目標位址。優選地,如果分支指令被誤預測,即,正確的方向和目標位址不匹配於預測的方向和目標位址,則執行引擎112糾正誤預測。更具體地,執行引擎112使得處理器100的前端被刷新(flush),並且使得取指單元108在正確的目標位址處開始取指。另外,執行引擎112將分支指令的執行通知迴圈預測器102。流程進行到判定框304。
在判定框304,迴圈預測器102從執行引擎112確定分支指令的正確方向是否被採用。如果被採用,則流程進行到框306;否則,流程進行到判定框308。
在框306處,迴圈預測器102增加訓練計數器264。流程在框306處結束。
在判定框308處,迴圈預測器102確定分支指令是否滿足迴圈分支的標準。優選地,如果該分支指令後向分支,且經訓練的迴圈計數表201沒有包括用於該分支指令的項目,並且訓練計數器264的值足夠大,則該分支指令滿足迴圈分支標準。例如,在一個實施例中,訓練計數器264的值必須至少
為24。在一個實施例中,為了滿足迴圈分支標準,迴圈預測器102還必須確定對於該迴圈的至少N個連續的例程都具備相同的訓練計數器264值。在一個實施例中,例如N是3。在另一個實施例中,例如N是7。如果分支指令滿足標準,流程進行到框312;否則,流程結束。
在框312處,迴圈預測器102在經訓練的迴圈計數表201中分配項目。優選地,迴圈預測器102基於條件分支指令位址212的索引部分214來分配項目。優選地,分配項目包括設置項目的有效位元202。迴圈預測器102還使用條件分支指令位址212的標籤部分來填充所分配的項目的標籤欄位204,並且使用訓練計數器264值來填充所分配的項目的經訓練的迴圈計數欄位206。流程進行到框314。
在框314處,迴圈預測器102使得在與分支指令相關的BTAC 106的項目中的經訓練的迴圈分支標誌278被設置。流程在框314處結束。
現在參照第4圖,顯示了進一步示出第1圖的處理器100的操作的流程圖。流程在框402處開始。
在框402處,執行引擎112執行了誤預測的迴圈分支指令並通知迴圈預測器102。優選地,執行引擎112知道條件分支指令是迴圈分支指令,因為由BTAC 106提供的經訓練的迴圈分支標誌278被經流水線向下輸送到執行引擎112。流程進行到框404。
在框404處,迴圈預測器102使與誤預測的迴圈分支指令對應的經訓練的迴圈計數表201中的項目無效。另外,
迴圈預測器102使得在與迴圈分支指令對應的BTAC 106的項目中的經訓練的迴圈分支標誌278被清除。迴圈分支指令可以在其迴圈的隨後的執行例程中被再次訓練。流程在框404處結束。
現在參照由第5A圖和第5B圖,顯示了進一步示出第1圖的處理器100的操作的流程圖。流程在框502處開始。
在框502處,取指單元108從指令快取記憶體104取指分支指令。同時,以用於存取指令快取記憶體104的取指位址來存取BTAC 106。回應地,BTAC 106向取指單元108提供分支指令的預測,並且向迴圈預測器102提供所取指的分支指令的經訓練的迴圈分支標誌278。流程進行到框503。
在框503處,假設分支指令是迴圈分支指令並且存在一經訓練的迴圈計數206可用,迴圈預測器102從分支指令的經訓練的迴圈計數表201獲得其經訓練的迴圈計數206。流程進行到判定框504。
在判定框504處,迴圈預測器102通過判斷經訓練的迴圈分支標誌278是否被設置來確定所取得的分支指令是已經被訓練的迴圈分支。如果如此,則流程進行到判定框508;否則,流程進行到框506。
在框506中,取指單元108使用由BTAC 106和/或分支歷史表116所提供的預測來預測分支指令。流程在框506處結束。
在判定框508處,迴圈預測器102確定迴圈取指計數器234是否已經被分配用於該迴圈分支指令。如果如此,則流程進行到框514;否則,流程進行到框512。
在框512處,針對該迴圈分支指令,迴圈預測器102分配一迴圈取指計數器234。分配迴圈取指計數器包括將它重置為0。在一個實施例中,只存在一個迴圈取指計數器234,所以分配迴圈取指計數器234僅包括重置它。然而,在另一實施例中,迴圈預測器102包括保存多個迴圈取指計數器的一迴圈取指計數器表,在這種情況下分配迴圈取指計數器234包括選擇表項目之一。優選地,該迴圈取指計數器表中的不同迴圈取指計數器通過它們各自的迴圈分支位址來區分。這可以適用於巢狀迴路(nested loops),該巢狀迴路的多個迴圈分支指令均可以通過迴圈預測器102精確地預測。流程進行到框514。
在框514處,迴圈預測器102增加所分配的迴圈取指計數器234。流程進行到框518。
在框518,迴圈預測器102確定迴圈的長度或尺寸。優選地,指令緩衝器114的控制邏輯為指令緩衝器114中的每個指令維持一指令指標值或一程式計數器值。如下所述,迴圈預測器102使用這些指令指標值來找到迴圈分支指令的目標指令並確定迴圈的尺寸。優選地,迴圈預測器102將BTAC 106提供的迴圈分支指令的目標位址與所維持的指令指標值進行比較來找到匹配。在指令緩衝器114中具有匹配於該目標位址的指令指標值的、按程式次序最新的指令便是迴圈分支指令的目標指令。然後,迴圈預測器102減去(考慮指令緩衝器114的迴圈性質)迴圈分支指令的索引和匹配的目標指令的索引來計算該迴圈的長度。流程進行到判定框522。
在判定框522處,迴圈預測器102基於在框518處確
定的長度和指令緩衝器114的尺寸來確定迴圈是否適合於指令緩衝器114。如果迴圈的尺寸不大於指令緩衝器114的尺寸,則流程進行到框532;否則,流程進行到判定框524。
在判定框524處,迴圈預測器102確定在框514處增加的迴圈取指計數器234的值是否小於在框503處獲得的經訓練的迴圈計數206的值。如果迴圈取指計數器234的值小於經訓練的迴圈計數206的值,則流程進行到框526;否則,流程進行到框528。
在框526處,迴圈預測器102預測迴圈分支指令被採用,並且取指單元108重定向在由BTAC 106(或其它分支預測器)提供的目標位址處取指。流程在框526處結束。
在框528處,迴圈預測器102預測迴圈分支指令不被採用,並且取指單元108繼續在下一連續的取指位址處取指。流程在框528處結束。
在框532處,迴圈預測器102使得取指單元108停止從指令快取記憶體104取指,並且使得處理器100進入迴圈緩衝器模式,這包括提供關於模式指示符274的值來指示如此。優選地,進入迴圈緩衝器模式還包括關閉處理器100流水線的前端的一些功能單元,諸如指令快取記憶體104、取指單元108、解碼單元118和/或分支歷史表116。在一個實施例中,關閉功能單元包括關閉功能單元的時鐘。在一個實施例中,關閉功能單元還包括關斷到功能單元的電源,尤其是如果經訓練的迴圈計數206相當大時。在這樣的實施例中,在達到經訓練的迴圈計數206之前將電源恢復到這些功能單元。流程進行到框534。
在框534,在框503獲得的經訓練的迴圈計數206與迴圈分支指令一起被經流水線向下輸送,以便它可以在迴圈緩衝器模式期間與迴圈彈出計數器比較,如下面描述。優選地,經流水線向下輸送的經訓練的迴圈計數206被存儲在第2圖的經訓練的迴圈計數寄存器242中。流程進行到框536。
在框536,迴圈預測器102將迴圈分支指令推入到指令緩衝器114中。這裡值得注意的是,迴圈本體指令已經在指令緩衝器114中。流程進行到框538。
在框538處,迴圈預測器102分配迴圈彈出計數器254用於該迴圈分支指令。分配迴圈彈出計數器包括將它重置為0。在一個實施例中,只存在一個迴圈彈出計數器254,所以分配迴圈彈出計數器254僅包括重置它。然而,在另一實施例中,迴圈預測器102包括保存多個迴圈彈出計數器的一迴圈彈出計數器表,在這種情況下分配迴圈彈出計數器254包括選擇表項目之一。優選地,迴圈彈出計數器表中的不同迴圈彈出計數器通過它們各自的迴圈分支位址來區分。這可以適用於可適合(fit)於迴圈緩衝器114之內的巢狀迴路(nested loops),該巢狀迴路的多個迴圈分支指令均可以通過迴圈預測器102精確地預測,如下面相對於第7圖描述的。流程進行到框542。
在框542,工作在迴圈緩衝器模式中的處理器100從指令緩衝器114中彈出從迴圈分支指令的目標處開始的迴圈本體的指令,並且將它們發送到執行引擎112用於執行。優選地,在框518處確定的迴圈的長度被提供給迴圈緩衝器114的控制邏輯,使得它知道多少指令要彈出並提供給執行引擎112(包
括在下面的框544的迴圈分支指令),也知道何時增加迴圈彈出計數器254(在下面的框546處)。流程進行到框544。
在框544,處理器100從指令緩衝器114彈出迴圈分支指令,並且將它發送到執行引擎112用於執行,並且通知迴圈預測器102。流程進行到框546。
在框546處,迴圈預測器102增加在框538處分配的迴圈彈出計數器254,因為迴圈分支指令已經從指令緩衝器114彈出。流程進行到判定框548。
在判定框548處,迴圈預測器102判斷迴圈彈出計數器254的值是否小於在框534處經流水線向下輸送的經訓練的迴圈計數206的值。如果是,迴圈預測器102有效地預測迴圈分支指令被採用,並且流程返回到框542以開始迴圈的另一次反覆運算;否則,流程進行到框552。
在框552,迴圈預測器102有效地預測迴圈分支指令不被採用,並且使得取指單元108甦醒並且在迴圈分支指令之後的順序下一指令處恢復從指令快取記憶體104取指。迴圈預測器102還使得處理器100退出迴圈緩衝器模式,這包括提供關於模式指示符274的值來指示如此。流程在框552處結束。
現在參照第6圖,顯示了進一步示出第1圖的處理器100的操作的流程圖。流程在框602處開始。與從第5B圖的框546到判定框548的流程同時地,流程從框546進行到框602。
在框602處,迴圈預測器102計算一個值X。X的值是經訓練的迴圈計數206減去((A * C)/B)表示的值,其中A、B和C如下。A的值是處理器100從指令快取記憶體取指一指令字
節區塊、解碼它們並將經解碼的指令提供給指令緩衝器所需要的處理器時鐘週期數。優選地,此值是基於處理器100的設計而預定的。B的值是在框518處確定的迴圈中的指令數量。C的值是每個時鐘週期處理器100能夠從指令緩衝器114提供給執行引擎112的指令數量。流程進行到判定框604。
在判定框604處,迴圈預測器102確定迴圈彈出計數器254是否等於在框602處計算的值X。如果如此,則流程進行到框606;否則,流程結束。
在框606,迴圈預測器102使得處理器100留在迴圈緩衝器模式中,但是使得取指單元108甦醒,並且開始在迴圈分支指令之後的順序下一指令處從指令快取記憶體104獲取指令。有利地,比起等到迴圈執行例程的最後一次反覆運算才恢復取指的實施例,這可以基本上避免將氣泡引入到處理器100的流水線中,並且從而改善執行引擎112的利用率。流程在框606處結束。
現在參照第7圖,顯示了作為示例示出工作在迴圈緩衝器模式中的第1圖的指令緩衝器114向第1圖的執行引擎112提供巢狀迴路的指令的框圖。在第7圖的示例中,指令緩衝器114包括24個項目,表示為項目0至23。項目0位於指令緩衝器114的頂部,並且項目23位於底部。指令被推入到指令緩衝器114的頂部,並且從指令緩衝器114的底部彈出。第7圖描繪了嵌套在外部迴圈之內的內部迴圈。當處理器100進入迴圈緩衝器模式時,內部迴圈分支指令位於項目4,內部迴圈分支目標指令位於項目19,外部迴圈分支指令位於項目1,並且外部
迴圈分支目標指令位於項目23。因而,在該示例中,內部迴圈和外部迴圈二者的全部指令都可適合(fit)於迴圈緩衝器114之內。
在第7圖的示例中,假定內部迴圈和外部迴圈分支指令已經按照第3圖被訓練,而沒有按照第4圖被使無效。根據上述處理器100的操作,在框502處從指令快取記憶體104第一次取指內部迴圈分支指令(在已經被訓練之後),或不久之後,直到但不包括內部迴圈分支指令的外部迴圈的迴圈本體指令已經被解碼並分別被推入到迴圈緩衝器114的項目23至項目5中,其包括了內部迴圈的本體指令(到項目19至項目5中),並且按照框503從經訓練的迴圈計數表201獲得內部經訓練的迴圈計數206。隨後,處理器100按照框532進入迴圈緩衝器模式,按照框534在經訓練的迴圈計數寄存器242中捕捉內部經訓練的迴圈計數206,按照框536將內部迴圈分支指令推入到項目4中,按照框538分配內部迴圈彈出計數器254,並且處理器100開始將內部迴圈的指令從迴圈緩衝器114發送給執行引擎112用於迴圈緩衝器模式下的內部迴圈的第一執行例程。
最後,迴圈預測器102按照框548預測內部迴圈的第一執行例程的退出,並且處理器100按照框552退出迴圈緩衝器模式,並且開始取得被解碼並且被推入到迴圈緩衝器114中的外部迴圈的其餘指令。當在框502處從指令快取記憶體104取指外迴圈分支指令時,按照框503從經訓練的迴圈計數表201獲得外部經訓練的迴圈計數206。隨後,處理器100按照框532進入迴圈緩衝器模式,按照框534在另一分配的經訓練的迴圈計
數寄存器242中捕捉外部經訓練的迴圈計數206,按照框536將外部迴圈分支指令推到項目1中,按照框538分配外部迴圈彈出計數器254,並且處理器100開始將外部迴圈的指令從迴圈緩衝器114發送給執行引擎112用於外部迴圈的第二次反覆運算,其在迴圈緩衝器模式中執行,並且其將包括迴圈緩衝器模式下的內部迴圈的另一執行例程。優選地,本發明包括用於檢測巢狀迴路的機制。例如,可以包括嵌套級計數器,該計數器被初始化為0,並且每次在框532進入另一級包含迴圈緩衝器(loop buffer-contained)的嵌套時所述計數器遞增計數,並且每次在框552退出一包含迴圈緩衝器的嵌套級時所述計數器遞減計數。處理器100僅當嵌套級計數器具有值0時才在框552處退出迴圈緩衝器模式。另外,在框552處,迴圈預測器102將執行例程是的迴圈的迴圈彈出計數器254重置為0。
最後,迴圈預測器102按照框548預測外部迴圈的執行例程的退出,並且處理器100按照框552退出迴圈緩衝器模式。然後,如可看到的,在迴圈緩衝器模式中更多迴圈可以被嵌套並被迴圈預測器102預測,迴圈的數量多達可分配的迴圈彈出計數器254、經訓練的迴圈計數器206和經訓練的迴圈計數器寄存器242的數量,只要所嵌套的迴圈全部適合於迴圈緩衝器114。
雖然已經在此描述了本發明的各種實施例,但是應該理解它們作為示例而不是限制被呈現。對於相關電腦領域的技術人員來說將顯而易見的是,在不脫離本發明的範圍的情況下,可以在此進行形式和細節上的各種改變。例如,軟體可
以使能例如在此描述的裝置和方法的功能、構造、建模、模擬、描述和/或測試。這可以通過通用程式設計語言(例如,C、C++)、包括Verilog HDL、VHDL等等的硬體描述語言(HDL)或者其它可用程式的使用來實現。這樣的軟體可以被佈置在任何已知的電腦可用介質中,諸如磁帶、半導體、磁片、或光碟(例如,CD-ROM、DVD-ROM等)、網路、有線、無線或其它通信介質。在此描述的裝置和方法的實施例可以包括在半導體智慧財產權核心中,諸如處理器核心(例如,用HDL實現或指定的),並在積體電路的生產中被轉換為硬體。另外,在此描述的裝置和方法可以被實現為硬體和軟體的組合。因此,本發明不應該被在此描述的任何示範性實施例限制,但是應該僅根據以下權利要求及其等效物來限定。具體地,本發明可以在可以用在通用電腦中的處理器設備之內實現。最終,本領域技術人員應該理解,在不脫離由所附權利要求所限定的本發明的範圍的情況下,他們可以容易地使用所公開的構思和特定實施例作為設計或修改用於實踐本發明的相同目的的其它結構的基礎。
102‧‧‧迴圈預測器
201‧‧‧經訓練的迴圈計數表
202‧‧‧有效位元
204‧‧‧標籤
206‧‧‧經訓練的迴圈計數
208‧‧‧第一比較器
212‧‧‧條件分支指令位址
214‧‧‧索引
216‧‧‧標籤
218‧‧‧命中信號
232‧‧‧第二比較器
234‧‧‧迴圈取指計數器
236‧‧‧第一T/NT指示符
242‧‧‧經訓練的迴圈計數寄存器
252‧‧‧第三比較器
254‧‧‧迴圈彈出計數器
256‧‧‧第二T/NT指示符
262‧‧‧控制邏輯
264‧‧‧訓練計數器
272‧‧‧複用器
274‧‧‧模式指示符
276‧‧‧第三T/NT指示符
278‧‧‧經訓練的迴圈分支標誌
Claims (15)
- 一種處理器,包括:一指令快取記憶體;一執行引擎;一指令緩衝器;以及一迴圈預測器,其執行;訓練一分支指令來確定一迴圈的一經訓練的迴圈計數,其中該迴圈包括以該分支指令的目標開始並且以該分支指令結束的指令序列;以及判斷該迴圈的尺寸是否不大於該指令緩衝器的尺寸;以及其中,當該迴圈的尺寸不大於該指令緩衝器的尺寸時,該處理器執行:停止從該指令快取記憶體取指(fetch);將迴圈指令從該指令緩衝器發送到該執行引擎而不從該指令快取記憶體取指該等迴圈指令;維持一迴圈彈出計數,其指示將該分支指令從該指令緩衝器發送到該執行引擎而不從該指令快取記憶體取指的次數;以及當該迴圈彈出計數小於該經訓練的迴圈計數時,預測該分支指令為被採用,否則,則預測該分支指令為不被採用。
- 如申請專利範圍第1項所述之處理器,進一步包括:其中,當該迴圈的尺寸大於該指令緩衝器的尺寸時,該處理器更執行:從該指令快取記憶體取指該等迴圈指令,解碼該等迴圈指 令並將其發送到該執行引擎;維持一迴圈取指計數,其指示從該指令快取記憶體取指該分支指令的次數;以及當該迴圈取指計數小於該經訓練的迴圈計數時,預測該分支指令為被採用,否則,則預測該分支指令為不被採用。
- 如申請專利範圍第1項所述之處理器,進一步包括:一迴圈取指表,保存多個經訓練的分支指令的每個的各自的迴圈取指計數。
- 如申請專利範圍第1項所述之處理器,其中該迴圈預測器進一步包括一經訓練的迴圈計數寄存器,該經訓練的迴圈計數寄存器存儲要與該迴圈彈出計數比較的該經訓練的迴圈計數的一經流水線向下輸送的版本。
- 如申請專利範圍第1項所述之處理器,其中該迴圈彈出計數達到一閾值,該處理器在該分支指令之後的順序下一指令處恢復從該指令快取記憶體取指;其中該閾值是該經訓練的迴圈計數減去((A*C)/B);其中A是該處理器從該指令快取記憶體獲取指令、解碼指令並將指令提供給該指令緩衝器所需要的處理器時鐘週期的預定數量;其中B是該等迴圈指令的數量;以及其中C是每個時鐘週期該處理器能夠從該指令緩衝器發送到該執行引擎的指令的數量。
- 如申請專利範圍第1項所述之處理器,其中該指令緩衝器保存已經從該指令快取記憶體取指然後被解碼但是尚未發送 到該執行引擎的指令。
- 如申請專利範圍第1項所述之處理器,進一步包括:一迴圈彈出表,其保存多個經訓練的分支指令的每個的各自的迴圈彈出計數。
- 如申請專利範圍第1項所述之處理器,進一步包括:一經訓練的迴圈計數表,其保存用於多個經訓練的分支指令的每個的各自的經訓練的迴圈計數。
- 如申請專利範圍第1項所述之處理器,進一步包括:一分支快取記憶體,包括多個項目,其中該等多個項目中的每個項目保存:基於先前的該分支指令的運行的歷史的該分支指令的預測;以及一標誌,用以指示該分支指令是否是具有該經訓練的迴圈計數的一經訓練的分支指令;並且其中當所述標誌該指示分支指令是該經訓練的分支指令時,該處理器使用該經訓練的迴圈計數來預測該分支指令,否則,則使用該分支快取記憶體的預測。
- 一種通過具有一指令快取記憶體、一指令緩衝器和一執行引擎的處理器執行的方法,該方法包括:訓練一分支指令來確定一迴圈的一經訓練的迴圈計數,其中該迴圈包括以該分支指令的目標開始並且以該分支指令結束的指令序列;判斷該迴圈的尺寸是否不大於該指令緩衝器的尺寸;以及當該迴圈的尺寸不大於該指令緩衝器的尺寸時: 停止從該指令快取記憶體取指;將迴圈指令從該指令緩衝器發送到該執行引擎而不從該指令快取記憶體取指該等迴圈指令;維持一迴圈彈出計數,其指示該分支指令從該指令緩衝器被發送到該執行引擎而不從該指令快取記憶體取指的次數;以及當該迴圈彈出計數小於該經訓練的迴圈計數時,預測該分支指令為被採用,否則,則預測該分支指令為不被採用。
- 如申請專利範圍第10項所述之方法,進一步包括:當該迴圈的尺寸不大於該指令緩衝器的尺寸時:從該指令快取記憶體取指該等迴圈指令,解碼該等迴圈指令將其發送到該執行引擎;維持一迴圈取指計數,其指示從該指令快取記憶體取指該分支指令的次數;以及當該迴圈取指計數小於該經訓練的迴圈計數時,預測該分支指令為被採用,否則,則預測該分支指令為不被採用。
- 如申請專利範圍第10項所述之方法,其中當該迴圈的尺寸不大於該指令緩衝器的尺寸時,該方法進一步包括:將該經訓練的迴圈計數經流水線向下輸送,並且將該經流水線向下輸送的該經訓練的迴圈計數與該迴圈彈出計數比較。
- 如申請專利範圍第10項所述之方法,進一步包括:當該迴圈彈出計數達到一閾值時,在該分支指令之後的順序下一指令處恢復從該指令快取記憶體取指; 其中該閾值是該經訓練的迴圈計數減去((A*C)/B);其中A是該處理器從該指令快取記憶體獲取指令、解碼指令並將指令提供給該指令緩衝器所需要的處理器時鐘週期的預定數量;其中B是該等迴圈指令的數量;以及其中C是每個時鐘週期該處理器能夠從該指令緩衝器發送到該執行引擎的指令的數量。
- 如申請專利範圍第10項所述之方法,進一步包括:在該指令緩衝器中保存已經從該指令快取記憶體取指然後解碼但尚未發送到該執行引擎的指令。
- 如申請專利範圍第10項所述之方法,其中該處理器還包括一分支快取記憶體,該分支快取記憶體包括多個項目,其中該等多個項目中的每個項目保存基於先前的該分支指令的運行的歷史的該分支指令的預測,以及用以指示該分支指令是否是具有該經訓練的迴圈計數的經訓練的分支指令的一標誌;其中所述方法進一步包括:當該標誌指示該分支指令是該經訓練的分支指令時,使用該經訓練的迴圈計數來預測該分支指令,否則,則使用該分支快取記憶體的預測。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410512577.0A CN104298488B (zh) | 2014-09-29 | 2014-09-29 | 循环预测器指导的循环缓冲器 |
Publications (2)
Publication Number | Publication Date |
---|---|
TWI506552B true TWI506552B (zh) | 2015-11-01 |
TW201612744A TW201612744A (en) | 2016-04-01 |
Family
ID=51951701
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW103138668A TWI506552B (zh) | 2014-09-29 | 2014-11-07 | 迴圈預測器指導的迴圈緩衝器 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9891923B2 (zh) |
EP (1) | EP3001308B1 (zh) |
CN (2) | CN104298488B (zh) |
TW (1) | TWI506552B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI738744B (zh) * | 2016-03-23 | 2021-09-11 | 英商Arm股份有限公司 | 用於程式迴圈控制的設備、方法及電腦程式產品 |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103262027B (zh) * | 2010-10-12 | 2016-07-20 | 索夫特机械公司 | 用于存储具有可可靠预测的指令序列的分支的指令序列缓冲器 |
EP2628072B1 (en) | 2010-10-12 | 2016-10-12 | Soft Machines, Inc. | An instruction sequence buffer to enhance branch prediction efficiency |
US9875106B2 (en) * | 2014-11-12 | 2018-01-23 | Mill Computing, Inc. | Computer processor employing instruction block exit prediction |
US20170039071A1 (en) * | 2015-08-05 | 2017-02-09 | International Business Machines Corporation | Method for branch prediction |
GB2542831B (en) * | 2015-09-30 | 2018-05-30 | Imagination Tech Ltd | Fetch unit for predicting target for subroutine return instructions |
US9830152B2 (en) * | 2015-12-22 | 2017-11-28 | Qualcomm Incorporated | Selective storing of previously decoded instructions of frequently-called instruction sequences in an instruction sequence buffer to be executed by a processor |
US10223118B2 (en) * | 2016-03-24 | 2019-03-05 | Qualcomm Incorporated | Providing references to previously decoded instructions of recently-provided instructions to be executed by a processor |
JP2018005488A (ja) * | 2016-06-30 | 2018-01-11 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US10067875B2 (en) * | 2016-11-14 | 2018-09-04 | Via Alliance Semiconductor Co., Ltd. | Processor with instruction cache that performs zero clock retires |
US10417560B2 (en) * | 2016-12-01 | 2019-09-17 | Via Alliance Semiconductor Co., Ltd. | Neural network unit that performs efficient 3-dimensional convolutions |
CN108255518B (zh) * | 2016-12-29 | 2020-08-11 | 展讯通信(上海)有限公司 | 处理器及循环程序分支预测方法 |
US10592244B2 (en) * | 2017-02-02 | 2020-03-17 | Intel Corporation | Branch type logging in last branch registers |
US11531552B2 (en) * | 2017-02-06 | 2022-12-20 | Microsoft Technology Licensing, Llc | Executing multiple programs simultaneously on a processor core |
US10915322B2 (en) * | 2018-09-18 | 2021-02-09 | Advanced Micro Devices, Inc. | Using loop exit prediction to accelerate or suppress loop mode of a processor |
JP7205174B2 (ja) * | 2018-11-09 | 2023-01-17 | 富士通株式会社 | 演算処理装置および演算処理装置の制御方法 |
US11216279B2 (en) * | 2018-11-26 | 2022-01-04 | Advanced Micro Devices, Inc. | Loop exit predictor |
KR102601152B1 (ko) * | 2019-05-10 | 2023-11-13 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러 및 그 동작 방법 |
US10732945B1 (en) * | 2019-05-24 | 2020-08-04 | Texas Instruments Incorporated | Nested loop control |
CN112230992B (zh) * | 2019-07-15 | 2023-05-23 | 杭州中天微系统有限公司 | 一种包含分支预测循环的指令处理装置、处理器及其处理方法 |
CN110688160B (zh) * | 2019-09-04 | 2021-11-19 | 苏州浪潮智能科技有限公司 | 一种指令流水线处理方法、系统、设备及计算机存储介质 |
US11269642B2 (en) | 2019-09-20 | 2022-03-08 | Microsoft Technology Licensing, Llc | Dynamic hammock branch training for branch hammock detection in an instruction stream executing in a processor |
US11132200B1 (en) * | 2020-09-28 | 2021-09-28 | Arm Limited | Loop end prediction using loop counter updated by inflight loop end instructions |
CN112241390B (zh) * | 2020-10-22 | 2022-08-30 | 上海兆芯集成电路有限公司 | 主机互连装置及其方法 |
US20220283811A1 (en) * | 2021-03-03 | 2022-09-08 | Microsoft Technology Licensing, Llc | Loop buffering employing loop characteristic prediction in a processor for optimizing loop buffer performance |
CN113626084B (zh) * | 2021-09-03 | 2023-05-19 | 苏州睿芯集成电路科技有限公司 | 一种tage分支预测算法针对超大循环次数指令流优化的方法 |
CN114138341B (zh) * | 2021-12-01 | 2023-06-02 | 海光信息技术股份有限公司 | 微指令缓存资源的调度方法、装置、程序产品以及芯片 |
CN114528025B (zh) * | 2022-02-25 | 2022-11-15 | 深圳市航顺芯片技术研发有限公司 | 指令处理方法、装置、微控制器及可读存储介质 |
US11983533B2 (en) * | 2022-06-28 | 2024-05-14 | Arm Limited | Control flow prediction using pointers |
CN115113934B (zh) * | 2022-08-31 | 2022-11-11 | 腾讯科技(深圳)有限公司 | 指令处理方法、装置、程序产品、计算机设备和介质 |
CN116679985B (zh) * | 2023-07-28 | 2023-11-10 | 北京开源芯片研究院 | 循环分支指令的处理方法、系统、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6041404A (en) * | 1998-03-31 | 2000-03-21 | Intel Corporation | Dual function system and method for shuffling packed data elements |
US7023445B1 (en) * | 2004-04-12 | 2006-04-04 | Advanced Micro Devices, Inc. | CPU and graphics unit with shared cache |
TW201234265A (en) * | 2010-10-31 | 2012-08-16 | Apple Inc | Prefetch instruction |
TW201327385A (zh) * | 2011-12-15 | 2013-07-01 | Intel Corp | 經由使用混洗表及遮罩儲存表之向量指令來最佳化程式迴路的方法 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2693572B1 (fr) | 1992-07-13 | 1994-09-30 | Texas Instruments France | Système de traitement de données comportant un dispositif amélioré de traitement des boucles de programme. |
US5909573A (en) * | 1996-03-28 | 1999-06-01 | Intel Corporation | Method of branch prediction using loop counters |
US6003128A (en) * | 1997-05-01 | 1999-12-14 | Advanced Micro Devices, Inc. | Number of pipeline stages and loop length related counter differential based end-loop prediction |
JP3570855B2 (ja) * | 1997-05-29 | 2004-09-29 | 株式会社日立製作所 | 分岐予測装置 |
EP0992894A1 (en) | 1998-10-06 | 2000-04-12 | Texas Instruments Inc. | Apparatus and method for loop execution |
US6438682B1 (en) * | 1998-10-12 | 2002-08-20 | Intel Corporation | Method and apparatus for predicting loop exit branches |
EP1050804A1 (en) | 1999-05-03 | 2000-11-08 | STMicroelectronics SA | Execution of instruction loops |
US20040123075A1 (en) * | 2002-12-19 | 2004-06-24 | Yoav Almog | Extended loop prediction techniques |
US7010676B2 (en) * | 2003-05-12 | 2006-03-07 | International Business Machines Corporation | Last iteration loop branch prediction upon counter threshold and resolution upon counter one |
US7454596B2 (en) * | 2006-06-29 | 2008-11-18 | Intel Corporation | Method and apparatus for partitioned pipelined fetching of multiple execution threads |
US20080010635A1 (en) * | 2006-07-07 | 2008-01-10 | O'brien John Kevin | Method, Apparatus, and Program Product for Improving Branch Prediction in a Processor Without Hardware Branch Prediction but Supporting Branch Hint Instruction |
US9557999B2 (en) * | 2012-06-15 | 2017-01-31 | Apple Inc. | Loop buffer learning |
US9317291B2 (en) * | 2013-02-14 | 2016-04-19 | International Business Machines Corporation | Local instruction loop buffer utilizing execution unit register file |
-
2014
- 2014-09-29 CN CN201410512577.0A patent/CN104298488B/zh active Active
- 2014-09-29 CN CN201410652252.2A patent/CN105511838B/zh active Active
- 2014-11-06 US US14/534,841 patent/US9891923B2/en active Active
- 2014-11-07 TW TW103138668A patent/TWI506552B/zh active
- 2014-11-24 EP EP14194420.7A patent/EP3001308B1/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6041404A (en) * | 1998-03-31 | 2000-03-21 | Intel Corporation | Dual function system and method for shuffling packed data elements |
US7023445B1 (en) * | 2004-04-12 | 2006-04-04 | Advanced Micro Devices, Inc. | CPU and graphics unit with shared cache |
TW201234265A (en) * | 2010-10-31 | 2012-08-16 | Apple Inc | Prefetch instruction |
TW201327385A (zh) * | 2011-12-15 | 2013-07-01 | Intel Corp | 經由使用混洗表及遮罩儲存表之向量指令來最佳化程式迴路的方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI738744B (zh) * | 2016-03-23 | 2021-09-11 | 英商Arm股份有限公司 | 用於程式迴圈控制的設備、方法及電腦程式產品 |
Also Published As
Publication number | Publication date |
---|---|
CN105511838B (zh) | 2018-06-29 |
US20160092230A1 (en) | 2016-03-31 |
CN104298488B (zh) | 2018-02-23 |
EP3001308A2 (en) | 2016-03-30 |
US9891923B2 (en) | 2018-02-13 |
EP3001308B1 (en) | 2017-12-20 |
TW201612744A (en) | 2016-04-01 |
CN104298488A (zh) | 2015-01-21 |
CN105511838A (zh) | 2016-04-20 |
EP3001308A3 (en) | 2017-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI506552B (zh) | 迴圈預測器指導的迴圈緩衝器 | |
US7685410B2 (en) | Redirect recovery cache that receives branch misprediction redirects and caches instructions to be dispatched in response to the redirects | |
JP5313279B2 (ja) | 非アラインドメモリアクセス予測 | |
JP5799465B2 (ja) | ループバッファ学習 | |
EP2602711B1 (en) | Next fetch predictor training with hysteresis | |
US9367471B2 (en) | Fetch width predictor | |
US20100262813A1 (en) | Detecting and Handling Short Forward Branch Conversion Candidates | |
US20090024838A1 (en) | Mechanism for suppressing instruction replay in a processor | |
US8856496B2 (en) | Microprocessor that fuses load-alu-store and JCC macroinstructions | |
US20120079255A1 (en) | Indirect branch prediction based on branch target buffer hysteresis | |
JP2008530714A5 (zh) | ||
US9092225B2 (en) | Systems and methods for reducing branch misprediction penalty | |
JP7301955B2 (ja) | ループ終了予測を用いたプロセッサのループモードの促進又は抑制 | |
JP7232331B2 (ja) | ループ終了予測器 | |
CN116302106A (zh) | 用于促进分支预测单元的改善的带宽的设备、方法和系统 | |
CN106293639B (zh) | 使用微分支目标缓冲器的高性能零气泡条件分支预测 | |
US11526360B2 (en) | Adaptive utilization mechanism for a first-line defense branch predictor | |
US10846093B2 (en) | System, apparatus and method for focused data value prediction to accelerate focused instructions | |
TW202217557A (zh) | 微處理器和分支處理方法 |