TWI397816B - 減少在分支目標位址快取記憶體搜尋的方法與裝置 - Google Patents
減少在分支目標位址快取記憶體搜尋的方法與裝置 Download PDFInfo
- Publication number
- TWI397816B TWI397816B TW096130402A TW96130402A TWI397816B TW I397816 B TWI397816 B TW I397816B TW 096130402 A TW096130402 A TW 096130402A TW 96130402 A TW96130402 A TW 96130402A TW I397816 B TWI397816 B TW I397816B
- Authority
- TW
- Taiwan
- Prior art keywords
- cache
- branch
- instruction
- target address
- btac
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 60
- 230000001603 reducing effect Effects 0.000 title claims description 15
- 230000004044 response Effects 0.000 claims description 14
- 239000000284 extract Substances 0.000 claims description 3
- 238000001514 detection method Methods 0.000 claims 4
- 238000006243 chemical reaction Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 239000000463 material Substances 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001010 compromised effect Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000006870 function Effects 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
- 238000012360 testing method Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000013519 translation 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
-
- 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
- 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/30061—Multi-way branch instructions, e.g. CASE
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
-
- 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
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)
- Memory System Of A Hierarchy Structure (AREA)
Description
本發明大體係關於處理器領域,且詳言之係關於藉由減少在分支目標位址快取記憶體中搜尋而改良分支預測之方法。
微處理器在多種應用中執行計算任務。幾乎始終需要改良處理器效能,以允許更快操作及/或經由軟體變化而增大功能性。在許多嵌入式應用(諸如攜帶型電子設備)中,節省功率及更快的通量亦為處理器設計及實施中之目標。
許多現代處理器使用管線式架構,其中順序指令(各具有多個執行步驟)在執行中交迭。為經改良之效能,該等指令應經由管線連續流動。任何引起指令停止於管線中之情況可不利地影響效能。若指令自管線經刷新且隨後經再提取,則效能及功率消耗均受損。
大多數程式包括間接分支指令,其中實際分支行為直至在管線深處評估間接分支指令方才已知。為了避免由於等待間接分支指令之實際評估而導致之停止,現代處理器可使用某形式的分支預測,藉此在管線中早期預測間接分支指令之分支行為。基於經預測的分支評估,處理器推測性地提取(預提取)且處理來自預測位址之指令,該預測位址為分支目標位址(若預測將採取該分支)或分支指令之後下一順序位址(若預測不採取該分支)。是否採取間接分支指令被稱作判定分支方向。
習知分支預測技術包括分支目標存取快取記憶體(BTAC),其位於處理器管線及分支預測邏輯之提取級中。BTAC儲存先前所提取之指令之目標位址且按指令之位址編入索引。指令快取記憶體按照慣例填有各種指令類型之指令,該等指令係擷取自更高階快取記憶體或記憶體。BTAC按照慣例在處理器管線中進一步向下實際解析間接分支指令之後被填充。
操作中,習知分支預測技術對BTAC及指令快取記憶體中之預提取指令並行執行位址搜尋。若在BTAC中存在失敗,則此等習知分支技術因此消耗功率於BTAC搜尋中,而未發現匹配。若BTAC中存在命中,則所搜尋之位址可視為一間接分支指令。在BTAC搜尋之後,習知技術調用分支預測邏輯來判定是否應預測採取自BTAC擷取之分支目標位址。若該分支預測邏輯預測採取,則分支預測邏輯藉由自該分支目標位址開始擷取指令而重定向指令流。
自分支指令起輸入至處理器管線之所有順序指令通常自該管線被刷新。由BTAC搜尋界定之路徑及隨後之分支預測通常為臨界速度路徑,因為此路徑之時序愈短,則在重定向指令流之前需要自處理器管線刷新的指令量愈小。因此,此路徑需要盡可能短,以最小化刷新指令所消耗的功率。
用於減小臨界路徑時間的習知技術包括減小BTAC之大小及/或以多向方式組織BTAC。然而,藉由減小BTAC之大小,潛在命中之數目及因此在BTAC中發現分支目標位址之可能性減小,從而降低了BTAC之整體有效性。此外,藉由將BTAC組織為多向方式,編入BTAC索引可能變得更快,但花費於比較上之時間可能增加。在此等情況下,BTAC可能慢於指令快取記憶體,因此在臨界路徑之並行搜尋部分中變成限制性因素。因此認識到,當在處理器管線中發現間接分支指令時,需要減少用於重定向指令流之時間而不降低分支預測之有效性的裝置與方法。
本揭示案認識到,當並行搜尋指令快取記憶體及BTAC且搜尋在BTAC中失敗時,習知分支預測技術常常不必要地消耗功率。當指令快取記憶體中命中而BTAC中失敗時,此認識更為明顯,此可能係歸因於指令快取記憶體通常儲存所有類型的指令,且BTAC通常儲存分支指令位址。
根據一個實施例,揭示一種用於減少對一分支目標位址快取記憶體(BTAC)搜尋之方法。在此方法中,自該BTAC擷取一分支目標位址,以回應於在一指令快取記憶體(I-cache)中搜尋一指令位址的一失敗。該分支目標位址係與該指令位址相關聯。自該BTAC擷取之分支目標位址係儲存於該指令快取記憶體中。使用此所揭示之技術,在該指令快取記憶體中有利地搜尋隨後之指令位址(不與該BTAC並行進行),因此藉由減少不必要的BTAC搜尋而節省功率。
根據另一實施例,揭示用於將分支指令儲存至一指令快取記憶體中之方法。此方法包括:在一指令快取記憶體(I-cache)中搜尋一分支指令位址;自一分支目標位址快取記憶體(BTAC)擷取一分支目標位址,以回應於一指令快取記憶體失敗;及將該分支目標位址儲存至該指令快取記憶體中之一條目中。
另一實施例係關於一種用於減少對一分支目標位址快取記憶體(BTAC)之搜尋的系統。該系統包括一BTAC及一指令快取記憶體(I-cache),該指令快取記憶體經組態以自該BTAC擷取一分支目標位址,以回應於當搜尋一第一分支指令位址時之一快取記憶體失敗。該指令快取記憶體經進一步組態以儲存該分支目標位址。
應瞭解,對於熟習此項技術者而言,本發明之其他實施例將自以下詳細描述變得顯而易見,其中藉由說明而展示並描述本發明之各種實施例。如將瞭解,本發明能夠進行其他且不同的實施例,且能夠在各種其他方面對其若干細節進行修改,皆不脫離本發明。因此,圖式及實施方式在本質上應被視作說明性的而非限制性的。
圖1描繪一例示性處理器100之功能方塊圖。處理器100根據控制邏輯114在指令執行管線112中執行指令。在一些實施例中,管線112可為具有多個平行管線之超純量設計,如將結合圖6更詳細描述。管線112包括以管線級組織之各種暫存器或鎖存器116A-D,及諸如算術邏輯單元(ALU)118之一或多個執行單元。一通用暫存器(GPR)檔案120提供包含記憶體階層之頂部的暫存器。
自資料快取記憶體(D-cache)140存取資料,且記憶體位址轉換及許可由主轉換後備緩衝器(TLB)142管理。在各種實施例中,ITLB 124可包含TLB 142之部分之一複本。或者,可整合ITLB 124與TLB 142。類似地,在處理器100之各種實施例中,可整合指令快取記憶體122與資料快取記憶體140,或使其成為一體。指令快取記憶體122及/或資料快取記憶體140中之失敗使得在記憶體介面146控制下存取主(晶片外)記憶體144。將結合圖4之論述更詳細描述指令快取記憶體122中之失敗。
處理器100可包括一輸入/輸出(I/O)介面148,其控制對各種周邊設備150之存取。熟習此項技術者將認識到,處理器100之眾多變化係可能的。舉例而言,處理器100可包括一個二層(L2)快取記憶體,用於指令快取記憶體122及資料快取記憶體140中至任一者或兩者。另外,可自一特定實施例省略處理器100中所描繪之功能區塊中的一或多者。
處理器100包括一分支預測系統143。分支預測系統143包括一BTAC 141、一分支預測器(BP)電路126、更新邏輯電路160及一可選預解碼電路156。BTAC 141經組態以儲存一或多個條目,其中每一條目含有一分支指令位址及一對應於一提取位址之分支目標位址。BTAC 141可儲存直接分支指令位址與間接分支指令位址之組合。
當指令位址在指令快取記憶體122中失敗且進行經由記憶體介面146自更高層記憶體接收對應指令之請求時,經由一填充路徑152填充指令快取記憶體122及BTAC 141。在一第一實施例中,一旦自記憶體介面146接收到指令,則可選預解碼邏輯電路156經組態以判定所接收之指令是否為間接分支指令。若是,則經由路徑152在BTAC 141中搜尋所接收指令之位址,以查看是否存在與所接收指令之位址相關聯的目標位址。若BTAC 141中存在命中,則將所接收之指令及對應目標位址寫入指令快取記憶體122中。在間接分支指令經誤預測之情況下,指令快取記憶體122中可能發生失敗,且BTAC 141中可能發生命中,因此在指令快取記憶體122中引起某類型的失效。將結合圖5之論述更詳細討論指令快取記憶體失效之類型。若所接收指令的位址不在BTAC 141中(例如,失敗),則將所接收指令寫入指令快取記憶體122中。
一第二實施例移除預解碼邏輯電路156。在第二實施例中,將在BTAC 141中搜尋經由記憶體介面146接收之指令,而不論所接收之指令是否為間接分支指令。在此第二實施例中,與第一實施例相似,指令經轉發至指令快取記憶體122以用於儲存。然而,在第一實施例中,BTAC搜尋限於間接分支指令。在任一實施例中,若分支目標位址儲存於BTAC 141中,則其亦將儲存至指令快取記憶體122。
在管線112之後續級中發生實際分支解析之後,更新控制邏輯160經由路徑162將目標位址添加至BTAC 141中之條目。BTAC 141經由路徑154更新指令快取記憶體122,以包括間接分支指令及其對應目標位址。術語"預測不採取"指代BP電路126預測不根據分支目標位址而重定向管線112。
在記憶體位址轉換及許可由指令側轉換後備緩衝器(ITLB)124管理的情況下,指令預提取單元128經由路徑125自指令快取記憶體(I-cache或I$)122提取指令。若在指令快取記憶體122中發現(例如,命中)所提取之指令,且所提取的指令與對應分支目標位址相關聯,則BP電路126預測是否採取開始於該目標位址之程式碼路徑。若BP電路126預測應採取該目標位址,則指令預提取單元128調整其程式計數器,以開始自該目標位址提取指令,因此根據該分支目標位址而重定向管線112。若BP電路126預測不應採取該目標位址,則該程式計數器遞增以開始自下一順序位址提取指令。將結合圖4及圖5之論述更詳細描述分支預測系統143之操作。
本揭示案涵蓋一將BTAC 141與指令快取記憶體122組合為一體式組件之實施例。然而,對於將BTAC及指令快取記憶體分離為不同組件存在若干原因。僅在填充該指令快取記憶體期間查詢且讀取所揭示之外部BTAC。每次存取該指令快取記憶體時,存取一與該指令快取記憶體平行定位之習知BTAC。藉由限制目前所揭示之BTAC之諮詢,本揭示案藉由減小BTAC中之活動性而節省功率。此外,對該BTAC之此不頻繁存取允許BTAC 141為一單埠設備,因此降低設計複雜性。
圖2A說明一例示性程式碼段之清單210,其在位址0x000B處含有一間接分支指令212。如所描繪,間接分支指令212之目標係由暫存器1(R1)之內容界定。由於每次執行間接分支指令212時R1之內容可能變化,因此利用分支預測系統143來判定是否自R1之內容所指定之位址開始重定向過程管線112。
圖2B說明指令快取記憶體230之例示性內容。指令快取記憶體230可適當類似於指令快取記憶體122。指令快取記憶體230包括一指令行232、一有效位元行234及一分支目標位址行236。行232中之一條目表示一指令。根據慣例,行234中之"0"值指示行236中之分支目標(若存在)無效,而行234中之"1"值指示行236中同一列中之分支目標有效。如所描繪,在程式計數器指向位址0x000B之時間點,指令快取記憶體230在位址0x000B處不含有間接分支指令212之條目。
圖2C說明BTAC 250之例示性內容。BTAC 250可適當類似於BTAC 141。BTAC 250包括分支指令位址行252及目標位址行254。行252可包括直接分支指令位址、間接分支指令位址或其任何組合。在程式計數器指向位址0x000B之時間點,BTAC 250含有一間接分支指令位址256及其對應目標位址。因此,在指令快取記憶體失敗時,控制邏輯114將使得BTAC 250中之分支指令256及其對應目標位址儲存指令快取記憶體230。應認識到,可將其他資訊儲存於指令快取記憶體230及BTAC 250中,且本揭示案涵蓋指令快取記憶體230及BTAC 250之各種組織。
圖3說明在將與間接分支指令位址256相關聯之間接分支指令及其對應目標位址(0x2000)儲存於指令快取記憶體230之位址0x000B處之後的指令快取記憶體230。因此,下次處理器之程式計數器指向位址0x000B時,指令快取記憶體搜尋將命中,且目標位址0x2000將指派至處理器之程式計數器,以自位址0x2000處之指令開始重定向管線112。與習知BTAC相比,本揭示案中之指令快取記憶體搜尋係對預提取指令執行,而不在BTAC中執行搜尋,從而藉由減少BTAC搜尋數目而節省功率消耗。如所證明,在BTAC 250中搜尋限於在指令快取記憶體230中未發現特定間接分支指令之情況。
圖4為說明一將間接分支指令儲存至指令快取記憶體且自圖1之指令快取記憶體擷取一分支目標位址之方法400的流程圖。區塊410、420、450、455、460、465、470及480界定將間接分支指令及分支目標位址儲存至指令快取記憶體(諸如圖1之指令快取記憶體122)中之過程。區塊410、420、425、435、438、440及445界定用於自指令快取記憶體擷取分支目標位址之過程。區塊410處,查詢基於指令位址之指令的指令快取記憶體。舉例而言,可利用儲存於處理器之程式計數器中之指令位址來查詢指令快取記憶體。區塊420處,方法400判定指令快取記憶體中是否存在命中。若不存在(快取記憶體失敗),則方法400進行至區塊450以自更高層記憶體擷取對應指令資料。區塊450處,自更高層記憶體(諸如第2層(L2)快取記憶體或晶片外記憶體)請求指令資料。區塊455處,接收到自更高層記憶體擷取之指令資料。區塊460處,在BTAC中搜尋指令位址。區塊465處,方法400判定BTAC中指令位址是否命中,或換言之,判定是否與儲存於BTAC中之指令位址匹配。若該指令位址在BTAC中命中,則方法400進行至區塊470,其中將儲存於BTAC中之預測分支目標(若存在)添加至指令資料。BTAC中命中時,預測分支目標將可能儲存於BTAC中,只要先前已解析間接分支指令之先前實例的分支目標位址。方法400進行至區塊480,其中將指令資料儲存於指令快取記憶體中。
返回至區塊465,若BTAC中指令位址失敗,則方法400進行至區塊480。自區塊465至區塊480之此過渡指示以下情況:所查詢之指令位址既不在指令快取記憶體中亦不在BTAC中。在此情況下,在解析所擷取指令資料之實際分支目標之後,將分支目標位址儲存於BTAC中,此將在稍後發生於處理器管線中,如結合圖6更詳細論述。舉例而言,當解析實際分支目標時,更新邏輯電路160將使得BTAC及指令快取記憶體儲存所解析之分支目標。
區塊465及區塊475均進行至區塊480,其中將指令資料儲存於指令快取記憶體中。否則,程式計數器順序遞增。接著方法400進行至區塊410以查詢由程式計數器指定之下一位址。
返回至區塊420,若指令快取記憶體中存在命中(指令快取記憶體中存在對應條目),則方法400進行至區塊425。區塊425處,方法400判定指令快取記憶體中對應條目是否具有分支目標位址。在一個實施例中,區塊425可藉由詢問一對應有效位元(諸如儲存於圖2之有效位元行234中之位元)來完成。若不存在與該指令快取記憶體命中相關聯之有效分支目標位址,則指令位址並非間接分支指令。因此,方法400進行至區塊445,其中自指令快取記憶體擷取且以習知方式處理非分支指令。方法400進行至區塊410以自該程式計數器所指定的指令快取記憶體查詢下一位址。
若存在對應於該條目之有效分支目標位址,則方法400進行至區塊435。區塊435處,方法400預測是否應採取儲存於對應條目中之分支目標位址。在一個實施例中,分支預測電路126進行此預測。應注意,熟習此項技術者將瞭解,分支預測技術可利用統計學、試探法、預定參數及其類似者。區塊438處,方法400測試是否應採取該預測。若採取,則方法400進行至區塊440,其中將分支目標位址發送至諸如指令預提取單元128之程式計數器,以獲得自分支目標位址開始提取之指令。方法400進行至區塊410以查詢由該程式計數器指定之下一位址,該下一位址在流程圖之此路徑中係分支目標位址。
返回至區塊438,若預測不採取該路徑,則方法400進行至區塊445來以習知方式處理儲存於快取記憶體中之指令。區塊445之後,方法400進行至區塊410以查詢程式計數器中之下一位址,該下一位址在流程圖之此路徑中為在間接分支指令之後的順序位址,諸如圖2A中位址0x000C。
圖5為說明在實際分支解析時管理指令快取記憶體之方法500的流程圖。方法500對以下情況執行:第一次計算一間接分支指令之實際分支目標,且諸如分支預測電路126之預測機制誤預測該間接分支指令之目標。區塊510處,解析間接分支指令之實際目標。隨著稍後在處理器管線中處理間接分支指令,可執行該分支解析。
區塊520處,方法500判定實際目標是否匹配預測目標,或者,對於第一次計算實際目標之情況,不存在預測目標。若實際分支目標不匹配預測分支目標,則無需更新BTAC或指令快取記憶體。方法500進行至區塊525,其在進行返回至區塊510之前等待下一分支指令。
若實際分支目標不匹配預測目標,則方法500偵測到一誤預測且進行至區塊530。至少兩種情況可導致不匹配。第一種情況可發生於在先前儲存於BTAC及指令快取記憶體中(無分支目標)之後第一次執行一間接分支指令時。在第一種情況下,該間接分支指令之後的下一順序指令可能已載入於處理器管線中。若預測目標位址不同於實際解析目標位址,則可能發生第二種情況。在第二種情況下,預測目標位址中所指示之下一指令可能已載入於處理器管線中。
區塊530處,在任一情況下,處理器管線自管線刷新其指令,以使管線恢復至分支點,在此情況下,恢復至間接分支指令之位址。因此,將自該處理器管線刷新在間接分支指令之後載入於處理器管線中之指令,而不論彼等指令是否自預測目標位址或該間接分支指令之後下一順序位址開始載入。區塊540處,更新BTAC以將實際分支目標位址儲存於其分支目標位址欄位(諸如行254)中。
區塊550處,管理指令快取記憶體。舉例而言,控制邏輯電路114可包括實施區塊550A至550C之邏輯。區塊550A至550C為區塊550之替代實施例。區塊550A處,對應於預測目標位址之快取記憶體行失效。區塊550B處,對應於預測目標位址之快取記憶體行之分支目標失效。區塊550C處,對應於預測目標位址之快取記憶體行之分支目標位址經更新以反映實際目標位址。當在先前儲存於BTAC及指令快取記憶體中(無分支目標)之後第一次執行一間接分支指令時,區塊550C較佳。
圖6為共用一共同BTAC 611之兩個處理器601及602的功能方塊圖。所共用之BTAC 611與處理器601及602較佳具體化於單個積體電路晶片中。處理器601包括其自身之多級處理器管線620、指令快取記憶體610及分支預測電路615。在級625處,發生實際分支解析,以如先前在圖4及圖5中所述分別以一間接分支指令及分支目標位址更新BTAC 611及指令快取記憶體610。處理器602包括其自身之多級處理器管線640、指令快取記憶體630及分支預測電路635。在級645處,發生實際分支解析,以如先前在圖4及圖5中所述分別以一間接分支指令及分支目標位址更新BTAC 611及指令快取記憶體630。如所描繪,可在處理器之管線中不同級處執行實際分支解析。儘管圖6說明一在兩個處理器之間共用之共同BTAC,但應注意,本揭示案涵蓋在三個或三個以上處理器之間共用一共同BTAC。操作期間,當自含有一有效分支目標位址之指令快取記憶體610或指令快取記憶體630提取一位址時,各別管線620及640開始自分支目標位址起預提取指令。
可以經設計以執行本文中所述之功能的通用處理器、數位信號處理器(DSP)、特殊應用積體電路(ASIC)、場可程式化閘陣列(FPGA)或其他可程式化邏輯組件、離散閘或電晶體邏輯、離散硬體組件或其任何組合來實施或執行結合本文中所揭示之實施例而描述的各種說明性邏輯區塊、模組、電路、元件及/或組件。通用處理器可為微處理器,但在替代實施例中,處理器可為任何習知處理器、控制器、微控制器或狀態機。處理器亦可實施為計算組件之組合,例如,一DSP與一微處理器之組合、複數個微處理器之組合、結合有一DSP核心之一或多個微處理器,或任何其他此組態。
結合本文中所揭示之實施例而描述的方法可直接具體化於硬體中、具體化於藉由處理器執行之軟體模組中,或具體化於兩者之組合中。軟體模組可駐留於RAM記憶體、快閃記憶體、ROM記憶體、EPROM記憶體、EEPROM記憶體、暫存器、硬碟、抽取式碟片、CD-ROM、或此項技術中已知的任何其他形式之儲存媒體中。一儲存媒體可耦接至處理器,使得該處理器可自該儲存媒體讀取資訊且可將資訊寫入至該儲存媒體。在替代實施例中,儲存媒體可與處理器成一體式。
儘管本發明係揭示於實施例之內容中,但應認識到,一般熟習此項技術者可使用與上文論述及下文隨附之申請專利範圍一致的多種實施。
100...處理器
112...指令執行管線
114...控制邏輯/控制邏輯電路
116A...暫存器或鎖存器
116B...暫存器或鎖存器
116C...暫存器或鎖存器
116D...暫存器或鎖存器
118...算術邏輯單元(ALU)
120...通用暫存器(GPR)檔案
122...指令快取記憶體
124...指令側轉換後備緩衝器(ITLB)
125...路徑
126...分支預測器(BP)電路
128...指令預提取單元
140...資料快取記憶體
141...BTAC
142...主轉換後備緩衝器(TLB)
143...分支預測系統
144...主(晶片外)記憶體
146...記憶體介面
148...輸入/輸出(I/O)介面
150...周邊設備
152...路徑
154...路徑
156...可選預解碼電路/可選預解碼邏輯電路
160...更新邏輯電路/更新控制邏輯
162...路徑
210...清單
212...間接分支指令
230...指令快取記憶體
232...指令行
234...有效位元行
236...分支目標位址行
250...BTAC
252...分支指令位址行
254...目標位址行
256...分支指令/間接分支指令位址
601...處理器
602...處理器
610...指令快取記憶體
611...BTAC
615...分支預測電路
620...多級處理器管線
625...級
630...指令快取記憶體
635...分支預測電路
640...多級處理器管線
645...級
圖1為一例示性處理器之功能方塊圖。
圖2A至圖2C(總體為圖2)說明一例示性程式碼段之清單,且當指令快取記憶體不含來自程式碼段之分支指令時,說明指令快取記憶體及BTAC之例示性內容。
圖3說明在圖1之指令快取記憶體填有來自BTAC之指令資料後該指令快取記憶體的例示性內容。
圖4為說明一將間接分支指令儲存至指令快取記憶體且自圖1之指令快取記憶體擷取指令之方法的流程圖。
圖5為說明在實際分支解析時管理指令快取記憶體之方法的流程圖。
圖6為共用一共同BTAC之兩個處理器的功能方塊圖。
100...處理器
112...指令執行管線
114...控制邏輯/控制邏輯電路
116A...暫存器或鎖存器
116B...暫存器或鎖存器
116C...暫存器或鎖存器
116D...暫存器或鎖存器
118...算術邏輯單元(ALU)
120...通用暫存器(GPR)檔案
122...指令快取記憶體
124...指令側轉換後備緩衝器(ITLB)
125...路徑
126...分支預測器(BP)電路
128...指令預提取單元
140...資料快取記憶體(D-cache)
141...BTAC
142...主轉換後備緩衝器(TLB)
143...分支預測系統
144...主(晶片外)記憶體
146...記憶體介面
148...輸入/輸出(I/O)介面
150...周邊設備
152...路徑
154...路徑
156...可選預解碼電路/可選預解碼邏輯電路
160...更新邏輯電路/更新控制邏輯
162...路徑
Claims (21)
- 一種使用一指令快取記憶體(I-cache)以減少對一分支目標位址快取記憶體(BTAC)之搜尋的方法,該方法包含:自該BTAC擷取一第一分支目標位址以回應於搜尋儲存在該I-cache中之一第一分支指令之一第一指令位址的一失敗;及在該I-cache中將擷取自該BTAC之該第一分支目標位址儲存於一與該第一指令位址相關聯之第一位置,其中該I-cache係經組態以儲存包含該第一分支指令之複數個指令,其中自該BTAC所擷取且儲存於該I-cache中之該第一分支目標位址係提供至該BTAC以回應於在一管線之一處理級中該第一分支指令之一先前分支解析之偵測;及當該第一分支目標位址係儲存於該I-cache處時,自該I-cache擷取該第一分支目標位址以回應於在該I-cache處該第一指令位址之一搜尋。
- 如請求項1之方法,其進一步包含:偵測一與該第一分支指令相關聯之一誤預測。
- 如請求項2之方法,其進一步包含執行下述步驟之至少一者:使一與該誤預測相關聯之I-cache行失效;-使在該I-cache行中之該分支目標位址失效;及更新在該I-cache中之該分支目標位址。
- 如請求項2之方法,其中偵測該誤預測包含:計算一與該第一分支指令相關聯之實際分支目標位址;及判定該實際分支目標位址不匹配儲存於該I-cache中之該第一分支目標位址。
- 如請求項1之方法,其進一步包含:自該BTAC接收一第二分支目標位址以回應於搜尋儲存在一第二I-cache中之一第二指令的一第二失敗;及在該第二I-cache中將該第二分支目標位址儲存於一與該第二指令位址相關聯之第二位置。
- 如請求項1之方法,其中在該BTAC中之搜尋係限於一特定間接分支指令未在該I-cache中發現的情況。
- 如請求項1之方法,其進一步包含:更新該BTAC及更新具有一自該管線所接收之經解析目標位址的該I-cache。
- 如請求項1之方法,其進一步包含回應於在該管線處一分支解析之偵測以藉由提供經解析目標位址資料至該I-cache以更新該I-cache。
- 一種減少在一分支目標位址快取記憶體(BTAC)中搜尋的方法,其包含:在一指令快取記憶體(I-cache)中搜尋一與一分支指令相關聯之分支指令位址;自該BTAC擷取一分支目標位址以回應於一與該分支指令相關聯之I-cache失敗;及 將該擷取自該BTAC之分支目標位址儲存於該I-cache中之一條目中,其中在該I-cache中該條目係與該分支指令位址相關聯,其中該擷取自該BTAC之分支目標位址係提供至該BTAC以回應於在一管線之一處理級中該分支指令之一先前分支解析之偵測;及當該分支目標位址係儲存於該I-cache處時,自該I-cache擷取該分支目標位址以回應於在該I-cache處該分支指令位址之一搜尋。
- 如請求項9之方法,其進一步包含:預測一待提取之下一指令係與該分支目標位址相關聯。
- 如請求項10之方法,其進一步包含:在該預測係不正確時,更新在該I-cache中之該分支目標位址。
- 如請求項11之方法,其中更新該分支目標位址包含:自該管線接收該分支指令之一實際分支目標位址;及以該實際分支目標位址取代儲存在該I-cache中且在該BTAC中之該分支目標位址。
- 如請求項9之方法,其進一步包含:搜尋儲存在一第二I-cache中之一第二分支指令位址;自該BTAC擷取一第二分支目標位址以回應於一第二I- cache失敗;及將該擷取自該BTAC之第二分支目標位址儲存於該第二I-cache中之一第一條目中。
- 如請求項9之方法,其中在該BTAC中之搜尋係限於一特定間接分支指令未在該I-cache中發現的情況。
- 一種使用一指令快取記憶體(I-cache)以減少對一分支目標位址快取記憶體(BTAC)之搜尋的裝置,該裝置包含:該BTAC;及該I-cache,其經組態以:儲存包含一第一分支指令之多個指令;當在該I-cache中搜尋一第一分支指令位址時,自該BTAC擷取一分支目標位址以回應於一I-cache失敗其中該第一分支指令位址係與該儲存於該I-cache中之第一分支指令相關聯;儲存自該BTAC所擷取之該分支目標位址;及當該分支目標位址係儲存於該I-cache處時,自該I-cache提供該分支目標位址以回應於在該I-cache處該第一分支指令位址之一搜尋,其中自該BTAC所擷取之該分支目標位址係提供至該BTAC以回應於在一管線之一處理級中該第一分支指令之一先前分支解析之偵測。
- 如請求項15之裝置,其進一步包含:一分支預測電路,其經組態以預測一待提取之第二指令係與儲存於該I-cache中之該分支目標位址相關聯。
- 如請求項16之裝置,其中該I-cache係進一步經組態以回應於提取該第二指令之一請求以提供該分支目標位址。
- 如請求項17之裝置,其進一步包含:一更新邏輯電路,其經組態以解析待提取之該第二指令之一誤預測。
- 如請求項18之裝置,其進一步包含:一控制邏輯電路,其經組態以藉由使一包含該分之目標位址之I-cache行失效、使在該I-cache行中之該分支目標位址失效及更新在該I-cache中之該分支目標位址中之至少一者來管理該I-cache。
- 如請求項15之裝置,其中該BTAC係共享於兩個或兩個以上之處理器間。
- 如請求項15之裝置,其中在該BTAC中之搜尋係限於一特定間接分支指令未在該I-cache中發現的情況。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/464,996 US7640422B2 (en) | 2006-08-16 | 2006-08-16 | System for reducing number of lookups in a branch target address cache by storing retrieved BTAC addresses into instruction cache |
Publications (2)
Publication Number | Publication Date |
---|---|
TW200815981A TW200815981A (en) | 2008-04-01 |
TWI397816B true TWI397816B (zh) | 2013-06-01 |
Family
ID=38799335
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW096130402A TWI397816B (zh) | 2006-08-16 | 2007-08-16 | 減少在分支目標位址快取記憶體搜尋的方法與裝置 |
Country Status (13)
Country | Link |
---|---|
US (1) | US7640422B2 (zh) |
EP (1) | EP2057536B1 (zh) |
JP (1) | JP5415268B2 (zh) |
KR (1) | KR101049319B1 (zh) |
CN (1) | CN101501635B (zh) |
BR (1) | BRPI0715899A2 (zh) |
CA (1) | CA2659310C (zh) |
ES (1) | ES2676303T3 (zh) |
HU (1) | HUE039149T2 (zh) |
MX (1) | MX2009001747A (zh) |
RU (1) | RU2419835C2 (zh) |
TW (1) | TWI397816B (zh) |
WO (1) | WO2008022190A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7865705B2 (en) * | 2008-02-01 | 2011-01-04 | International Business Machines Corporation | Branch target address cache including address type tag bit |
US7844807B2 (en) * | 2008-02-01 | 2010-11-30 | International Business Machines Corporation | Branch target address cache storing direct predictions |
CN105468334A (zh) * | 2008-12-25 | 2016-04-06 | 世意法(北京)半导体研发有限责任公司 | 对非控制流指令减少分支检验 |
EP2798470A4 (en) * | 2011-12-29 | 2015-07-15 | Intel Corp | PRE-ACQUISITION OF ANTEMOTE BY MANAGED INSTRUCTION |
CN104252334B (zh) * | 2013-06-29 | 2017-07-07 | 华为技术有限公司 | 分支目标地址获取方法和装置 |
CN106776367B (zh) * | 2016-12-13 | 2020-05-12 | 上海高性能集成电路设计中心 | 基于位置对应关系的指令Cache一致性的实现方法 |
CN110825442B (zh) * | 2019-04-30 | 2021-08-06 | 成都海光微电子技术有限公司 | 一种指令预取方法及处理器 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4722050A (en) * | 1986-03-27 | 1988-01-26 | Hewlett-Packard Company | Method and apparatus for facilitating instruction processing of a digital computer |
US6427192B1 (en) * | 1998-09-21 | 2002-07-30 | Advanced Micro Devices, Inc. | Method and apparatus for caching victimized branch predictions |
TW200632702A (en) * | 2005-01-19 | 2006-09-16 | Seiko Epson Corp | Asynchronous circuit design tool and computer program product |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2534662B2 (ja) * | 1986-03-25 | 1996-09-18 | 日本電気株式会社 | 命令キヤツシユ制御方法 |
US5136697A (en) * | 1989-06-06 | 1992-08-04 | Advanced Micro Devices, Inc. | System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache |
US5093778A (en) * | 1990-02-26 | 1992-03-03 | Nexgen Microsystems | Integrated single structure branch prediction cache |
US5774710A (en) * | 1996-09-19 | 1998-06-30 | Advanced Micro Devices, Inc. | Cache line branch prediction scheme that shares among sets of a set associative cache |
US6324643B1 (en) | 1999-10-01 | 2001-11-27 | Hitachi, Ltd. | Branch prediction and target instruction control for processor |
US6651162B1 (en) | 1999-11-04 | 2003-11-18 | International Business Machines Corporation | Recursively accessing a branch target address cache using a target address previously accessed from the branch target address cache |
TW564369B (en) * | 2001-07-16 | 2003-12-01 | Ip First Llc | Apparatus and method for handling BTAC branches that wrap across instruction cache lines |
US7096348B2 (en) | 2003-12-15 | 2006-08-22 | Freescale Semiconductor, Inc. | Method and apparatus for allocating entries in a branch target buffer |
KR100630702B1 (ko) * | 2004-10-05 | 2006-10-02 | 삼성전자주식회사 | 명령어 캐쉬와 명령어 변환 참조 버퍼의 제어기, 및 그제어방법 |
-
2006
- 2006-08-16 US US11/464,996 patent/US7640422B2/en active Active
-
2007
- 2007-08-15 BR BRPI0715899-8A patent/BRPI0715899A2/pt not_active Application Discontinuation
- 2007-08-15 CN CN2007800302141A patent/CN101501635B/zh active Active
- 2007-08-15 JP JP2009524785A patent/JP5415268B2/ja active Active
- 2007-08-15 ES ES07814118.1T patent/ES2676303T3/es active Active
- 2007-08-15 HU HUE07814118A patent/HUE039149T2/hu unknown
- 2007-08-15 KR KR1020097005401A patent/KR101049319B1/ko active IP Right Grant
- 2007-08-15 RU RU2009109226/08A patent/RU2419835C2/ru not_active IP Right Cessation
- 2007-08-15 EP EP07814118.1A patent/EP2057536B1/en active Active
- 2007-08-15 MX MX2009001747A patent/MX2009001747A/es active IP Right Grant
- 2007-08-15 WO PCT/US2007/075996 patent/WO2008022190A1/en active Application Filing
- 2007-08-15 CA CA2659310A patent/CA2659310C/en active Active
- 2007-08-16 TW TW096130402A patent/TWI397816B/zh active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4722050A (en) * | 1986-03-27 | 1988-01-26 | Hewlett-Packard Company | Method and apparatus for facilitating instruction processing of a digital computer |
US6427192B1 (en) * | 1998-09-21 | 2002-07-30 | Advanced Micro Devices, Inc. | Method and apparatus for caching victimized branch predictions |
TW200632702A (en) * | 2005-01-19 | 2006-09-16 | Seiko Epson Corp | Asynchronous circuit design tool and computer program product |
Also Published As
Publication number | Publication date |
---|---|
CA2659310C (en) | 2011-11-15 |
HUE039149T2 (hu) | 2018-12-28 |
US7640422B2 (en) | 2009-12-29 |
KR20090042318A (ko) | 2009-04-29 |
CN101501635A (zh) | 2009-08-05 |
WO2008022190A1 (en) | 2008-02-21 |
EP2057536B1 (en) | 2018-04-11 |
CN101501635B (zh) | 2013-10-16 |
JP5415268B2 (ja) | 2014-02-12 |
BRPI0715899A2 (pt) | 2013-07-30 |
MX2009001747A (es) | 2009-02-25 |
RU2009109226A (ru) | 2010-09-27 |
EP2057536A1 (en) | 2009-05-13 |
JP2010501101A (ja) | 2010-01-14 |
ES2676303T3 (es) | 2018-07-18 |
KR101049319B1 (ko) | 2011-07-13 |
TW200815981A (en) | 2008-04-01 |
CA2659310A1 (en) | 2008-02-21 |
US20080046702A1 (en) | 2008-02-21 |
RU2419835C2 (ru) | 2011-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101074621B1 (ko) | 프로액티브 브랜치 타겟 어드레스 캐시 관리를 위한 방법들 및 장치 | |
KR101081662B1 (ko) | 비순차적 명령 어드레스들을 프리패치하기 위한 방법 및 장치 | |
US7444501B2 (en) | Methods and apparatus for recognizing a subroutine call | |
US20070288736A1 (en) | Local and Global Branch Prediction Information Storage | |
JP5734945B2 (ja) | スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ | |
TWI397816B (zh) | 減少在分支目標位址快取記憶體搜尋的方法與裝置 | |
KR20080023723A (ko) | 분기 명령들을 예측하기 위한 방법 및 장치 | |
JP2009536770A (ja) | ブロックに基づく分岐先アドレスキャッシュ | |
US10338923B2 (en) | Branch prediction path wrong guess instruction | |
US20040225866A1 (en) | Branch prediction in a data processing system | |
TWI768547B (zh) | 管線式電腦系統與指令處理方法 | |
US7343481B2 (en) | Branch prediction in a data processing system utilizing a cache of previous static predictions |