TWI574155B - 資料預取方法、電腦程式產品以及微處理器 - Google Patents
資料預取方法、電腦程式產品以及微處理器 Download PDFInfo
- Publication number
- TWI574155B TWI574155B TW105108032A TW105108032A TWI574155B TW I574155 B TWI574155 B TW I574155B TW 105108032 A TW105108032 A TW 105108032A TW 105108032 A TW105108032 A TW 105108032A TW I574155 B TWI574155 B TW I574155B
- Authority
- TW
- Taiwan
- Prior art keywords
- address
- memory
- cache
- level cache
- microprocessor
- Prior art date
Links
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Description
本發明係有關於一般微處理器之快取記憶體,特別係有關將資料預取至微處理器之快取記憶體。
以最近的電腦系統而言,在快取失敗(cache miss)時,微處理器存取系統記憶體所需的時間,會比微處理器存取快取記憶體(cache)多上一或兩個數量級。因此,為了提高快取命中率(cache hit rate),微處理器整合了預取技術,用來檢查最近資料存取樣態(examine recent data access patterns),並且企圖預測哪一個資料為程式下一個存取的對象,而預取的好處已是眾所皆知的範疇。
然而,申請人注意到某些程式的存取樣態並不為習知微處理器之預取單元所能偵測的。例如,第1圖所示為當執行之程式包括經由記憶體進行一序列之儲存動作時,第二級快取記憶體(L2 Cache)之存取樣態,而圖中所描繪者為各時間之記憶體位址。由第1圖可知,雖然總趨勢為隨著時間而增加記憶體位址,即由往上之方向,然而在許多狀況下,所指定之存取記憶體位址亦可較前一個時間往下,而非總趨勢之往上,使其不同於習知預取單元實際所預測的結果。
雖然就數量相對大的樣本而言,總趨勢係朝一個方向前進,但習知預取單元在面臨小樣本時卻可能出現混亂狀況的原因有兩個。第一個原因為程式係依循其架構存取記憶體,不論是由演算法特性或是不佳的編程(poor programming)所造成。第二個原因為非循序(out-of-order)微處理器核心之管線與佇列在正常功能下執行時,常常會用不同於其所產生的程式順序來進行記憶體存取。
因此,需要一個資料預取單元(器)能夠有效地為程式進行資料預取,其必須考慮到在較小時窗(time windows)進行記憶體存取指令(動作)時並不會呈現明顯之趨勢(no clear trend),但當以較大樣本數進行審查時則會出現明顯之趨勢。
本發明揭露一種微處理器,包括一第一級快取記憶體、一第二級快取記憶體以及一預取單元。預取單元用以偵測出現在第二級快取記憶體中之最近存取要求之一方向以及樣態,以及根據方向以及樣態,將複數快取線預取至第二級快取記憶體中、從第一級快取記憶體接收第一級快取記憶體所接收之一存取要求之一位址,其中位址與一快取線相關、決定在方向中所相關之快取線之外被樣態所指出之一個或多個快取線、並且導致一個或多個快取線被預取至第一級快取記憶體中。
本發明揭露一種資料預取方法,用以預取資料至具有一第二級快取記憶體之一微處理器之一第一級快取記憶體,資料預取方法包括偵測出現在第二級快取記憶體中之最近
存取要求之一方向以及樣態,以及根據方向以及樣態,將複數快取線預取至第二級快取記憶體中;從第一級快取記憶體接收第一級快取記憶體所接收之一存取要求之一位址,其中位址與一快取線相關;決定在方向中所相關之快取線之外被樣態所指出之一個或多個快取線;以及導致一個或多個快取線被預取至第一級快取記憶體中。
本發明揭露一種電腦程式產品,編碼於至少一電腦可讀取媒體之上,並適用於一計算裝置,電腦程式產品包括一電腦可讀程式編碼。該電腦可讀程式編碼儲存於電腦可讀取媒體中,用以定義一微處理器,電腦可讀程式包括一第一程式碼、一第二程式碼以及一第三程式碼。第一程式碼,用以定義一第一級快取記憶體裝置。第二程式碼,用以定義一第二級快取記憶體裝置。第三程式碼,用以定義一預取單元,使得預取單元用以偵測出現在第二級快取記憶體中之最近存取要求之一方向以及樣態,以及根據方向以及樣態,將複數快取線預取至第二級快取記憶體中、從第一級快取記憶體,接收第一級快取記憶體所接收之一存取要求之一位址,其中位址與一快取線相關、決定在方向中所相關之快取線之外被樣態所指出之一個或多個快取線、並且導致一個或多個快取線被預取至第一級快取記憶體中。
100‧‧‧微處理器
102‧‧‧指令快取記憶體
104‧‧‧指令解碼器
106‧‧‧暫存器別名表
108‧‧‧保留站
112‧‧‧執行單元
132‧‧‧其他執行單元
134‧‧‧載入/儲存單元
124‧‧‧預取單元
114‧‧‧引退單元
116‧‧‧第一級資料快取記憶體
118‧‧‧第二級快取記憶體
122‧‧‧匯流排介面單元
162‧‧‧虛擬雜湊表
198‧‧‧佇列
172‧‧‧第一級資料搜尋指標器
178‧‧‧第一級資料樣態位址
196‧‧‧第一級資料記憶體位址
194‧‧‧樣態預測快取線位址
192‧‧‧快取線配置要求
188‧‧‧快取線資料
354‧‧‧記憶體區塊虛擬雜湊位址欄
356‧‧‧狀態欄
302‧‧‧區塊位元遮罩暫存器
303‧‧‧區塊號碼暫存器
304‧‧‧最小指標暫存器
306‧‧‧最大指標暫存器
308‧‧‧最小改變計數器
312‧‧‧最大改變計數器
314‧‧‧總計數器
316‧‧‧中間指標暫存器
318‧‧‧週期匹配計數器
342‧‧‧方向暫存器
344‧‧‧樣態暫存器
346‧‧‧樣態週期暫存器
348‧‧‧樣態區域暫存器
352‧‧‧搜尋指標暫存器
332‧‧‧硬體單元
322‧‧‧控制邏輯
328‧‧‧預取要求佇列
324‧‧‧提取指標器
326‧‧‧推進指標器
2002‧‧‧雜湊虛擬位址庫
2102A‧‧‧核心A
2102B‧‧‧核心B
2104‧‧‧高度反應式的預取單元
2106‧‧‧共享之高度反應式的預取單元
第1圖所示為當執行經由記憶體包括一序列儲存操作的程式時,一種對第二級快取記憶體之存取樣態示意圖。
第2圖為本發明的一種微處理器的方塊圖。
第3圖為本發明第2圖之預取單元細部方塊圖。
第4圖為本發明第2圖之微處理器以及特別係第3圖之預取單元的操作流程圖。
第5圖為本發明第3圖之預取單元對第4圖之步驟的操作流程圖。
第6圖為本發明第3圖之預取單元對第4圖之步驟的操作流程圖。
第7圖為本發明第3圖之預取要求佇列的操作流程圖。
第8圖為本發明一記憶體區塊之兩個圖型存取點,用以表示本發明之定界框預取單元。
第9圖為本發明第2圖所示之微處理器之操作範例的方塊圖。
第10圖為本發明延續第9圖之範例的第2圖所示之微處理器之操作範例的方塊圖。
第11圖為本發明延續第9以及10圖之範例的第2圖所示之微處理器之操作範例的方塊圖。
第12圖為本發明另一實施例之一種微處理器之方塊圖。
第13圖為本發明第12圖所示之預取單元之操作流程圖。
第14圖為本發明根據第13圖步驟之第12圖所示之預取單元的操作流程圖。
第15圖為本發明另一實施例具有一定界框預取單元之一種微處理器的方塊圖。
第16圖為本發明第15圖之虛擬雜湊表的方塊圖。
第17圖為本發明第15圖之微處理器的操作流程圖。
第18圖為本發明根據經由第17圖範例所述之在預取單元之操作後之第16圖之虛擬雜湊表的內容。
第19圖(統合第19A以及19B圖)為本發明第15圖之預取單元的操作流程圖。
第20圖為本發明另一實施例之用在第15圖之預取單元之一雜湊實體位址至雜湊虛擬位址庫的方塊圖。
第21圖本發明之一多核微處理器的方塊圖。
以下將詳細討論本發明各種實施例之製造及使用方法。然而值得注意的是,本發明所提供之許多可行的發明概念可實施在各種特定範圍中。這些特定實施例僅用於舉例說明本發明之製造及使用方法,但非用於限定本發明之範圍。
定界框預取器
廣泛而言,關於上述問題之解決方法可以後續敘述加以解釋。當一記憶體之所有存取(指令、動作或要求)皆表示在一張圖上時,所有存取(指令、動作或要求)之一集合可被一定界框(bouding box)圈起來。當外加的存取要求亦表示於同一圖上時,這些存取要求亦可被調整大小後之定界框圈起來。第8圖之首張圖繪示對一記憶體區塊的兩次存取(指令或動作),第8圖之X軸表示指令存取之時間順序,Y軸表示具有4KB區塊之存取的64位元組快取線之索引。首先,描繪第一次之兩個存取:第一個存取係對快取線5進行存取,第二個存取要求係對快取線6進行存取。如圖所示之一定界框將代表存取要求的兩點
圈起來。
再者,第三個存取要求發生於快取線7,定界框變大使得代表第三個存取要求的新點可被定界框圈在內部。隨著新的存取不斷發生,定界框必隨著X軸擴大,並且定界框之上緣亦隨著Y軸擴大(此為向上的例子)。上述定界框上緣以及下緣的移動之歷史記錄將用以決定存取樣態之趨勢為向上、向下或者都不是。
除了追蹤定界框之上緣以及下緣的趨勢以決定一趨勢方向外,追蹤個別的存取要求也是必要的,因為存取要求跳過一或兩個快取線的事件時常發生。因此,為了避免預取可能被跳過快取線的事件發生,一旦偵測到一向上或向下之趨勢,預取單元將使用額外的準則決定所要預取之快取線。由於存取要求趨勢會被重新排列,預取單元會以刪除時間記錄的方式顯示這些存取歷史記錄。此動作係藉由標記位元(marking bit)在一位元遮罩(bit mask)中完成的,每一位元對應於一記憶體區塊之一快取線,且當特定之區塊被存取時,對應位元遮罩之位元將被設置。一旦對記憶體區塊的存取要求已達到一充分數量,預取單元會使用位元遮罩(其中位元遮罩不具有存取時間順序的指示),並基於如下所述之較大的存取觀點(廣義large view)去存取整個區塊,而非基於較小的存取觀點(狹義small view)以及習知預取單元般僅根據存取的時間去做預取決策。
第2圖所示為本發明之微處理器100的方塊圖。微處理器100包括一個具有複數階層之管線,並且管線中亦包括各種功能單元。管線包括一指令快取記憶體102,指令快取記
憶體102耦接至一指令解碼器104;指令解碼器104耦接至一暫存器別名表106(register alias table,RAT);暫存器別名表106耦接至一保留站108(reservation station);保留站108耦接至一執行單元112(execution unit);最後,執行單元112耦接至一引退單元114(retire unit)。指令解碼器104可包括一指令轉譯器(instruction translator),用以將巨集指令(例如x86架構之巨集指令)轉譯為微處理器100之類似精簡指令集(reduce instruction set computer RISC)之巨集指令。保留站108產生並且傳送指令至執行單元112,用以使執行單元112以非循序方式來執行。引退單元114包括一重新排序緩衝器(reorder buffer),用以依據程式順序執行指令之引退(Retirement)。執行單元112包括載入/儲存單元134以及其他執行單元132(other execution unit),例如整數單元(integer unit)、浮點數單元(floating point unit)、分支單元(branch unit)或者單指令多重資料串流(Single Instruction Multiple Data,SIMD)單元。載入/儲存單元134用以讀取第一級資料快取記憶體116(level 1 data cache)之資料,並且寫入資料至第一級資料快取記憶體116。一第二級快取記憶體118作為第一級資料快取記憶體116以及指令快取記憶體102之備份。第二級快取記憶體118用以經由一匯流排介面單元122讀取以及寫入系統記憶體,匯流排介面單元122係微處理器100與一匯流排(例如一區域匯流排(local bus)或是記憶體匯流排(memory bus))間之一介面。微處理器100亦包括一預取單元124,用以自系統記憶體預取資料到第二級快取記憶體118及/或第一級資料快取記憶體116。
第3圖所示為第2圖之預取單元124細部方塊圖。預取單元124包括一區塊位元遮罩暫存器302。區塊位元遮罩暫存器302中之每一位元對應一記憶體區塊之一快取線,其中記憶體區塊之區塊號碼係儲存在一區塊號碼暫存器303內。換言之,區塊號碼暫存器303儲存了記憶體區塊之上層位址位元(upper address bits)。當區塊位元遮罩暫存器302中之一位元的數值為真(true value)時,係指出所對應之快取線已經被存取了。初始化區塊位元遮罩暫存器302將使得所有的位元值為假(false)。在一實施例中,記憶體區塊的大小為4KB,並且快取線之大小為64位元組。因此,區塊位元遮罩暫存器302具有64位元之容量。在某些實施例中,記憶體區塊之大小亦可與實體記憶體分頁(physical memory page)之大小相同。然而,快取線之大小在其他實施例中可為其他各種不同之大小。再者,區塊位元遮罩暫存器302上所維持之記憶體區域之大小是可改變的,並不需要對應於實體記憶體分頁的大小。更確切的說,區塊位元遮罩暫存器302上所維持之記憶體區域(或區塊)之大小可為任何大小(二的倍數最好),只要其擁有足夠的快取線以利於預取方向與樣態的偵測即可。
預取單元124亦可包括一最小指標暫存器304(min pointer register)以及一最大指標暫存器306(max pointer register)。最小指標暫存器304以及最大指標暫存器306分別用以在預取單元124開始追蹤一記憶體區塊之存取後,持續地指向此記憶體區塊中已被存取之最低以及最高之快取線的索引(index)。預取單元124更包括一最小改變計數器308以及一最大
改變計數器312。最小改變計數器308以及最大改變計數器312分別用以在預取單元124開始追蹤此記憶體區塊之存取後,計算最小指標暫存器304以及最大指標暫存器306改變之次數。預取單元124亦包括一總計數器314,用以在預取單元124開始追蹤此記憶體區塊之存取後,計算已被存取之快取線的總數。預取單元124亦包括一中間指標暫存器316,用以在預取單元124開始追蹤此記憶體區塊之存取後,指向此記憶體區塊之中間預取記憶體線之索引(例如最小指標暫存器304之計數值以及最大改變計數器312之計數值的平均)。預取單元124亦包括一方向暫存器342(direction register)、一樣態暫存器344,一樣態週期暫存器346、一樣態區域暫存器348以及一搜尋指標暫存器352,其各功能如下所述。
預取單元124亦包括複數週期匹配計數器318(period match counter)。每一週期匹配計數器318維持一不同週期之一計數值。在一實施例中,週期為3、4以及5。週期係指中間指標暫存器316左/右之位元數。週期匹配計數器318之計數值在區塊的每一記憶體存取進行之後更新。當區塊位元遮罩暫存器302指示在週期中對中間指標暫存器316左邊的存取與對中間指標暫存器316右邊的存取相匹配時,預取單元124則接著增加與該週期相關之週期匹配計數器318之計數值。關於週期匹配計數器318更詳細之應用以及操作,將特別在下述之第四、五圖講述之。
預取單元124亦包括一預取要求佇列328、一提取指標器324(pop pointer)以及一推進指標器326(push pointer)。
預取要求佇列328包括一具有許多項目(entry)的循環佇列,上述項目的每一者用以儲存預取單元124之操作(特別是關於第4、6以及7圖)所產生之預取要求。推進指標器326指出預取要求佇列328中下一個被分派的項目(entry)。提取指標器324指出將從預取要求佇列328移出之下一個項目。在一實施例中,因為預取要求可能以非循序的方式(out of order)結束,所以預取要求佇列328係可以非循序的方式提取(popping)已完成的(completed)項目。在一實施例中,預取要求佇列328的大小係由於管線流程中,所有於管線裡欲進入第二級快取記憶體118之標記管線(tag pipeline)的要求數量而定的,於是使得預取要求佇列328中項目之數目至少和第二級快取記憶體118內之管線層級(stages)一樣多。預取要求將維持直至第二級快取記憶體118之管線結束,在這個時間點,要求可能是三個結果之一,如第7圖更詳細之敘述,亦即命中(hit in)第二級快取記憶體118、重新執行(replay)、或者推進一填入佇列項目(fill queue entry),用以從系統記憶體預取需要的資料。
預取單元124亦包括控制邏輯322,控制邏輯322控制預取單元124之各元件執行其功能。
雖然第3圖只顯示出一組與一主動(active)記憶體區塊有關之硬體單元332(區塊位元遮罩暫存器302、區塊號碼暫存器303、最小指標暫存器304、最大指標暫存器306、最小改變計數器308、最大改變計數器312、總計數器314、中間指標暫存器316、樣態週期暫存器346、樣態區域暫存器348以及搜尋指標暫存器352),但預取單元124可包括複數個如第3圖所
示之硬體單元332,用以追蹤多個主動記憶體區塊的存取。
在一實施例中,微處理器100亦包括一個或多個高度反應式的(highly reactive)預取單元(未圖示),高度反應式的預取單元係在非常小的時間樣本(sample)中使用不同的演算法來進行存取,並且與預取單元124配合動作,其說明如下。由於此處所述之預取單元124分析較大記憶體存取之數目(相較於高度反應式的預取單元),其必趨向使用更長的時間去開始預取一新的記憶體區塊(如下所述),但比高度反應式的預取單元更精確。因此,使用高度反應式的預取單元與預取單元124同時動作,微處理器100可擁有高度反應式的預取單元之更快反應時間以及預取單元124之高精確度。另外,預取單元124可監控來自其他預取單元之要求,並且在其預取演算法中使用這些要求。
第4圖所示為第2圖之微處理器100的操作流程圖,並且特別是第3圖之預取單元124的動作。流程開始於步驟402。
在步驟402中,預取單元124接收一個對一記憶體位址進行存取之一載入/儲存記憶體存取要求。在一實施例中,預取單元124在判斷預取哪些快取線時,會將載入記憶體存取要求與儲存記憶體存取要求加以區分。在其他實施例中,預取單元124並不會在判斷預取哪些快取線時,辨別載入以及儲存。在一實施例中,預取單元124接收載入/儲存單元134所輸出之記憶體存取要求。預取單元124可接收來自不同來源之記憶體存取要求,上述來源包括(但不限於)載入/儲存單元134、第一
級資料快取記憶體116(例如第一級資料快取記憶體116所產生之一分派要求,於載入/儲存單元134記憶體存取未擊中第一級資料快取記憶體116時),及/或其他來源,例如微處理器100中執行與預取單元124不同預取演算法以預取資料之其他預取單元(未圖示)。流程進入步驟404。
在步驟404中,控制邏輯322根據比較記憶體存取位址與每一區塊號碼暫存器303之數值,判斷是否對一主動區塊之記憶體進行存取。也就是,控制邏輯322判斷第3圖所示之硬體單元332是否已被分派給記憶體存取要求所指定之記憶體位址所相關的記憶體區塊。若是,則進入步驟406。
在步驟406中,控制邏輯322分派第3圖所示之硬體單元332給相關之記憶體區塊。在一實施例中,控制邏輯322以一輪替(round-robin)的方式分派硬體單元332。在其他實施例,控制邏輯322為硬體單元332維持最久未用到的頁取代法(least-recently-used)之資訊,並且以一最久未用到的頁取代法(least-recently-used)之基礎進行分派。另外,控制邏輯322會初始化所分派之硬體單元332。特別是,控制邏輯322會清除區塊位元遮罩暫存器302之所有位元,將記憶體存取位址之上層位元填寫(populate)至區塊號碼暫存器303,並且清除最小指標暫存器304、最大指標暫存器306、最小改變計數器308、最大改變計數器312、總計數器314以及週期匹配計數器318為0。流程進入到步驟408。
在步驟408中,控制邏輯322根據記憶體存取位址更新硬體單元332,如第5圖所述。流程進入步驟412。
在步驟412中,硬體單元332測試(examine)總計數器314用以判斷程式是否已對記憶體區塊進行足夠之存取要求,以便偵測一存取樣態。在一實施例中,控制邏輯322判斷總計數器314之計數值是否大於一既定值。在一實施例中,此既定值為10,然而此既定值有很多種本發明不限於此。若已執行足夠之存取要求,流程進行至步驟414;否則流程結束。
在步驟414中,控制邏輯322判斷在區塊位元遮罩暫存器302中所指定的存取要求是否具有一個明顯的趨勢。也就是說,控制邏輯322判斷存取要求有明顯向上的趨勢(存取位址增加)或是向下的趨勢(存取位址減少)。在一實施例中,控制邏輯322根據最小改變計數器308以及最大改變計數器312兩者的差值(difference)是否大於一既定值來決定存取要求是否有明顯的趨勢。在一實施例中,既定值為2,而在其他實施例中既定值可為其他數值。當最小改變計數器308之計數值大於最大改變計數器312之計數值一既定值,則有明顯向下的趨勢;反之,當最大改變計數器312之計數值大於最小改變計數器308之計數值一既定值,則有明顯向上的趨勢。當有一明顯的趨勢已產生,則進入步驟416,否則結束流程。
在步驟416中,控制邏輯322判斷在區塊位元遮罩暫存器302所指定的存取要求中是否為具有一明顯的樣態週期贏家(pattern period winner)。在一實施例中,控制邏輯322根據週期匹配計數器318之一者與其他週期匹配計數器318計數值之差值是否大於一既定值來決定是否有一明顯的樣態週期贏家。在一實施例中,既定值為2,而在其他實施例中既定值可
為其他數值。週期匹配計數器318之更新動作將於第5圖加以詳述。當有一明顯的樣態週期贏家產生,流程進行到步驟418;否則,流程結束。
在步驟418中,控制邏輯322填寫方向暫存器342以指出步驟414所判斷之明顯的方向趨勢。另外,控制邏輯322用在步驟416偵測之明顯贏家樣態週期(clear winning pattern period)(N)填寫樣態週期暫存器346。最後,控制邏輯322將步驟416所偵測到之明顯贏家樣態週期填寫至樣態暫存器344中。也就是說,控制邏輯322用區塊位元遮罩暫存器302之中間指標暫存器316至右側或者左側N位元(根據第5圖步驟518所述而匹配)來填寫樣態暫存器344。流程進行到步驟422。
在步驟422中,控制邏輯322根據所偵測到之方向以及樣態開始對記憶體區塊中尚未被預取之快取線(non-fetched cache line)進行預取(如第6圖中所述)。流程在步驟422結束。
第5圖所示為第3圖所示之預取單元124執行第4圖所示之步驟408的操作流程。流程開始於步驟502。
在步驟502中,控制邏輯322增加總計數器314之計數值。流程進行到步驟504。
在步驟504中,控制邏輯322判斷目前的記憶體存取位址(特別是指,最近記憶體存取位址所相關之快取線之記憶體區塊的索引值)是否大於最大指標暫存器306之值。若是,流程進行到步驟506;若否則流程進行至步驟508。
在步驟506中,控制邏輯322用最近記憶體存取位
址所相關之快取線之記憶體區塊的索引值來更新最大指標暫存器306,並增加最大改變計數器312之計數值。流程進行到步驟514。
在步驟508中,控制邏輯322判斷被最近記憶體存取位址所相關之快取線之記憶體區塊的索引值是否小於最小指標暫存器304之值。若是,流程進行至步驟512;若否,則流程進行至步驟514。
在步驟512中,控制邏輯322用最近記憶體存取位址所相關之快取線之記憶體區塊的索引值來更新最小指標暫存器304,並增加最小改變計數器308之計數值。流程進行到步驟514。
在步驟514中,控制邏輯322計算最小指標暫存器304與最大指標暫存器306之平均值,並且用所算之出平均值更新中間指標暫存器316。流程進行到步驟516。
在步驟516中,控制邏輯322檢查區塊位元遮罩暫存器302,並且以中間指標暫存器316為中心,切割成左側與右側各N位元,其中N為與每一週期匹配計數器318相關之位元數。流程進行到步驟518。
在步驟518中,控制邏輯322決定在中間指標暫存器316之左側的N位元是否與中間指標暫存器316之右側的N位元相匹配。若是,流程進行到步驟522;若否,則流程結束。
在步驟522中,控制邏輯322增加具有一N週期之週期匹配計數器318之計數值。流程結束於步驟522。
第6圖所示為第3圖之預取單元124執行第4圖之步
驟422的操作流程圖。流程開始於步驟602。
在步驟602中,控制邏輯322初始化會在偵測方向外之中間指標暫存器316的樣態週期暫存器346中,對搜尋指標暫存器352以及樣態區域暫存器(patten location)348進行初始化。也就是說,控制邏輯322會將搜尋指標暫存器352以及樣態區域暫存器348初始化成中間指標暫存器316與所偵測到之週期(N)兩者之間相加/相減後的值。例如,當中間指標暫存器316之值為16,N為5,並且方向暫存器342所示之趨勢為向上時,控制邏輯322將搜尋指標暫存器352以及樣態區域暫存器348初始化為21。因此,在本例中,為了比較之目的(如下所述),樣態暫存器344之5位元可設置於區塊位元遮罩暫存器302之位元21到25。流程進行到步驟604。
在步驟604中,控制邏輯322測試區塊位元遮罩暫存器302中在方向暫存器342所指之位元以及樣態暫存器344中之對應位元(該位元係位於樣態區域暫存器348中,用以對應區塊位元遮罩暫存器者),用以預測是否預取記憶體區塊中之對應快取線。流程進行到步驟606。
在步驟606中,控制邏輯322預測是否需要所測試之快取線。當樣態暫存器344之位元為真(true),控制邏輯322則預測此快取線係需要的,樣態預測程式將會存取此快取線。若快取線係需要的,流程進行到步驟614;否則,流程進行到步驟608。
在步驟608中,控制邏輯322根據方向暫存器342是否已到達區塊位元遮罩暫存器302之末端,判斷在記憶體區塊
中是否有其他未測試之快取線。若已無未測試之快取線,則流程結束;否則,流程進行至步驟612。
在步驟612中,控制邏輯322增加/減少方向暫存器342之值。另外,若方向暫存器342已超過樣態暫存器344的最後一位元時,控制邏輯322將用方向暫存器342之新數值更新樣態區域暫存器348,例如將樣態暫存器344移位(shift)至方向暫存器342之位置。流程進行到步驟604。
在步驟614中,控制邏輯322決定所需要之快取線是否已被預取。當區塊位元遮罩暫存器302之位元為真,控制邏輯322則判斷所需要之快取線已被預取。若所需要之快取線已被預取,流程進行到步驟608;否則,流程進行到步驟616。
在判斷步驟616中,若方向暫存器342為向下,控制邏輯322自最小指標暫存器304判斷列入考量之快取線是否多於一既定值(既定值在一實施例中為16);或者若方向暫存器342為向上,控制邏輯322自最大指標暫存器306判斷列入考量之快取線是否多於一既定值。若控制邏輯322於上述的判斷為真,則流程結束;否則,流程進行到判斷步驟618。值得注意的是,若快取線大幅多於(遠離)最小指標暫存器304/最大指標暫存器306則流程結束,但這樣並不代表預取單元124將不接著預取記憶體區塊之其它快取線,因為根據第4圖之步驟,對記憶體區塊之快取線的後續存取亦會再觸發對該記憶體區塊更多的預取動作。
在步驟618中,控制邏輯322判斷預取要求佇列328是否已滿。若是預取要求佇列328已滿,則流程進行到步驟622,
否則流程進行到步驟624。
在步驟622中,控制邏輯322暫停(stall)直到預取要求佇列328未滿(non-full)為止。流程進行到步驟624。
在步驟624中,控制邏輯322推進一項目(entry)至預取要求佇列328,以預取快取線。流程進行到步驟608。
第7圖所示為第3圖之預取要求佇列328的操作流程圖。流程開始於步驟702。
在步驟702中,在步驟624中被推進到預取要求佇列328中之一預取要求被允許進行存取(其中此預取要求用以對第二級快取記憶體118進行存取),並繼續進行至第二級快取記憶體118的管線。流程進行到步驟704。
在步驟704中,第二級快取記憶體118判斷快取線位址是否命中第二級快取記憶體118。若快取線位址命中第二級快取記憶體118,則流程進行到步驟706;否則,流程進行到判斷步驟708。
在步驟706中,因為快取線已經在第二級快取記憶體118中準備好,故不需要預取快取線,流程結束。
在步驟708中,控制邏輯322判斷第二級快取記憶體118之回應是否為此預取要求必須被重新執行。若是,則流程進行至步驟712;否則,流程進行至步驟714。
在步驟712中,預取快取線之預取要求係重新推進(re-pushed)至預取要求佇列328中。流程結束於步驟712。
在步驟714中,第二級快取記憶體118推進一要求至微處理器100之一填入佇列(fill queue)(未圖示)中,用以要求
匯流排介面單元122將快取線讀取至微處理器100中。流程結束於步驟714。
第9圖所示為第2圖之微處理器100的操作範例。如第9圖所示為對一記憶體區塊進行十次存取後,區塊位元遮罩暫存器302(在一位元位置上之星號表示對所對應之快取線進行存取)、最小改變計數器308、最大改變計數器312、以及總計數器314在第一、第二以及第十存取之內容。在第9圖中,最小改變計數器308稱為”cntr_min_change”,最大改變計數器312稱為”cntr_max_change”,以及總計數器314稱為”cntr_total”。中間指標暫存器316之位置在第9圖中則以”M”所指示。
由於對位址0x4dced300所進行的第一次存取(如第4圖之步驟402)係在記憶體區塊中位於索引12上的快取線上進行,因此控制邏輯322將設定區塊位元遮罩暫存器302之位元12(第4圖之步驟408),如圖所示。另外,控制邏輯322將更新最小改變計數器308、最大改變計數器312以及總計數器314(第5圖之步驟502、506以及512)。
由於對位址0x4ced260之第二次存取係在記憶體區塊中位於索引9上的快取線進行,控制邏輯322根據將設定區塊位元遮罩暫存器302之位元9,如圖所示。另外,控制邏輯322將更新最小改變計數器308以及總計數器314之計數值。
在第三到第十次存取中(第三到第九次存取之位址未予圖示,第十次的存取位址為0x4dced6c0),控制邏輯322根據會對區塊位元遮罩暫存器302進行適當元之設置,如圖所示。另外,控制邏輯322對應於每一次存取更新最小改變計數器308、
最大改變計數器312以及總計數器314之計數值。
第9圖底部為控制邏輯322在每個執行十次的記憶體的存取中,當執行完步驟514到522後的週期匹配計數器318之內容。在第9圖中,週期匹配計數器318稱為”cntr_period_N_matches”,其中N為1、2、3、4或者5。
如第9圖所示之範例,雖然符合步驟412的準則(總計數器314至少為十)以及符合步驟416的準則(週期5之週期匹配計數器318較其他所有之週期匹配計數器318至少大於2),但不符合步驟414的準則(最小改變計數器308以及區塊位元遮罩暫存器302之間的差少於2)。因此,此時將不會在此記憶體區塊內執行預取操作。
第9圖底部亦顯示在週期3、4以及5中,從週期3、4以及5至中間指標暫存器316之右側與左側的樣態。
第10圖所示為第2圖之微處理器100延續第9圖所示之範例的操作流程圖。第10圖描繪相似於第9圖之資訊,但不同處於在對記憶體區塊之進行第十一次以及第十二次的存取(第十二次存取之位址為0x4dced760)。如圖所示,其符合步驟412的準則(總計數器314至少為十)、步驟414的準則(最小改變計數器308以及區塊位元遮罩暫存器302之間的差至少為2)以及步驟416的準則(週期5之週期匹配計數器318在週期5之計數較其他所有之週期匹配計數器318至少大於2)。因此,根據第4圖之步驟418,控制邏輯322填寫(populate)方向暫存器342(用以指出方向趨勢為向上)、樣態週期暫存器346(填入數值5)、樣態暫存器344(用樣態”**”或者”01010”)。控制邏輯
322亦根據第4圖之步驟422與第6圖,為記憶體區塊執行預取預測,如第11圖所示。第10圖亦顯示控制邏輯322在第6圖之步驟602操作中,方向暫存器342在位元21之位置。
第11圖所示為第2圖之微處理器100延續第9以及10圖之範例的操作流程圖。第11圖經由範例中描繪十二不同範例之每一者(表標示成0到11)經過第6圖之步驟604到步驟616直到記憶體區塊之快取線被預取單元124預測發現需要被預取之記憶體區塊的操作。如圖所示,在每一範例中,方向暫存器342的值是根據第6圖步驟612而增加。如第11圖所示,在範例5以及10中,樣態區域暫存器348會根據第6圖之步驟612被更新。如範例0、2、4、5、7以及10所示,由於在方向暫存器342之位元為假(false),樣態指出在方向暫存器342上之快取線將不被需要。圖中更顯示,在範例1、3、6以及8中,由於在方向暫存器342中樣態暫存器344之位元為真(ture),樣態暫存器344指出在方向暫存器342上的快取線將被需要,然而快取線已經準備被取出(fetched),如區塊位元遮罩暫存器302之位元為真(ture)之指示。最後如圖所示,在範例11中,由於在方向暫存器342中樣態暫存器344之位元為真(ture),所以樣態暫存器344指出在方向暫存器342上之快取線將被需要,但是因區塊位元遮罩暫存器302之位元為假(false),所以此快取線尚未被取出(fetched)。因此,控制邏輯322根據第6圖之步驟624推進一預取要求至預取要求佇列328中,用以預取在位址0x4dced800之快取線,其對應於在區塊位元遮罩暫存器302之位元32。
在一實施例中,所描述之一或多個既定值係可藉
由操作系統(例如經由一樣態特定暫存器(model specific register,MSR))或者經由微處理器100之熔絲(fuses)來編程,其中熔絲可在微處理器100的生產過程中熔斷。
在一實施例中,區塊位元遮罩暫存器302之大小可為了節省電源(power)以與及裸片晶片大小機板(die real estate)而減小。也就是說,在每一區塊位元遮罩暫存器302中的位元數,將少於在一記憶體區塊中快取線之數量。例如,在一實施例中,每一區塊位元遮罩暫存器302之位元數僅為記憶體區塊所包含之快取線之數量的一半。區塊位元遮罩暫存器302僅追蹤對上半區塊或者下半區塊的存取,端看記憶體區塊的那一半先被存取,而一額外之位元用以指出記憶體區塊之下半部或者上半部是否先被存取。
在一實施例中,控制邏輯322並不如步驟516/518所述測試中間指標暫存器316上下N位元,而是包括一序列引擎(serial engine),一次一個或兩個位元地掃描區塊位元遮罩暫存器302,用以尋找週期大於一最大週期之樣態(如前所述為5位元)。
在一實施例中,若在步驟414沒有偵測出明顯的方向趨勢、或者在步驟416並未偵測出明顯的樣態週期、以及總計數器314之計數值到達一既定臨界值(用以指出在記憶體區塊中之大部份的快取線已被存取)時,控制邏輯322繼續執行以及預取在記憶體區塊中剩下的快取線。上述既定臨界值係為記憶體區塊之快取記憶體數量之一相對高的百分比值,例如區塊位元遮罩暫存器302之位元的值。
結合第二級快取記憶體以及第一級資料快取記憶體之預取單元
近代的微處理器包括具有一階層結構之快取記憶體。典型地,一微處理器包括一又小又快的第一級資料快取記憶體以及一較大但較慢之第二級快取記憶體,分別如第2圖之第一級資料快取記憶體116以及第二級快取記憶體118。具有一階層結構之快取記憶體有利於預取資料至快取記憶體,以改善快取記憶體之命中率(hit rate)。由於第一級資料快取記憶體116之速度較快,故較佳的狀況為預取資料至第一級資料快取記憶體116。然而,由於第一級資料快取記憶體116之記憶體容量較小,快取記憶體命中率可能實際上較差且慢,由於如果預取單元不正確地預取資料進第一級資料快取記憶體116,當最後發現這些資料係不需要的,便要以其他需要的資料做替代。因此,載入第一級資料快取記憶體116或者第二級快取記憶體118的選擇,係預取單元是否能正確預測資料是否被需要的函數(function)。因為第一級資料快取記憶體116被要求較小的尺寸,第一級資料快取記憶體116傾向較小之容量以及因此具有較差的準確性;反之,由於第二級快取記憶體標籤以及資料陣列之大小使得第一級快取記憶體預取單元之大小顯得很小,所以一第二級快取記憶體預取單元可為較大之容量因此具有較佳之準確性。
本發明實施例所述微處理器100的優勢,在於一載入/儲存單元134用以作為第二級快取記憶體118以及第一級資料快取記憶體116之預取需要之基礎。本發明之實施例提升載
入/儲存單元134(第二級快取記憶體118)之準確性,用以應用在解決上述預取進入第一級資料快取記憶體116之問題。再者,實施例中也完成了運用單一邏輯(single body of logic)來處理第一級資料快取記憶體116以及第二級快取記憶體118之預取操作的目標。
第12圖所示為根據本發明各實施例之微處理器100。第12圖之微處理器100相似於第2圖之微處理器100並具有如下所述之額外的特性。
第一級資料快取記憶體116提供第一級資料記憶體位址196至預取單元124。第一級資料記憶體位址196係藉由載入/儲存單元134對第一級資料快取記憶體116進行載入/儲存存取的實體位址。也就是說,預取單元124會隨著載入/儲存單元134存取第一級資料快取記憶體116時進行竊聽(eavesdrops)。預取單元124提供一樣態預測快取線位址194至第一級資料快取記憶體116之一佇列198,樣態預測快取線位址194為快取線之位址,其中之快取線係預取單元124根據第一級資料記憶體位址196預測載入/儲存單元134即將對第一級資料快取記憶體116提出要求者。第一級資料快取記憶體116提供一快取線配置要求192至預取單元124,用以從第二級快取記憶體118要求快取線,而這些快取線之位址係儲存於佇列198中。最後,第二級快取記憶體118提供所要求之快取線資料188至第一級資料快取記憶體116。
預取單元124亦包括第一級資料搜尋指標器172以及第一級資料樣態位址178,如第12圖所示。第一級資料搜尋
指標器172以及第一級資料樣態位址178之用途與第14圖相關且如下所述。
第13圖所示為第12圖之預取單元124的操作流程圖。流程開始於步驟1302。
在步驟1302中,預取單元124從第一級資料快取記憶體116接收第12圖之第一級資料記憶體位址196。流程進行到步驟1304。
在步驟1304中,預取單元124偵測到一記憶體區塊(例如分頁(page))落入預取單元124為先前所測得之存取樣態所預取之快取線中,並已開始從系統記憶體預取這些快取線進入第二級快取記憶體118,如第1至11圖中相關處所述。仔細而言,預取單元124維持一區塊號碼暫存器303,其指定所偵測之存取樣態所預取記憶體區塊之基底位址。預取單元124藉由偵測區塊號碼暫存器303之位元是否匹配第一級資料記憶體位址196之對應位元,來偵測第一級資料記憶體位址196是否落在記憶體區塊中。流程進行到步驟1306。
在步驟1306中,從第一級資料記憶體位址196開始,預取單元124在記憶體區塊中所偵測到之存取方向(detected access direction)上尋找下兩個快取線,這兩個快取線與先前所偵測的存取方向有關。步驟1306更詳細之執行操作將於後續的第14圖中加以說明。流程進行到步驟1308。
在步驟1308中,預取單元124提供在步驟1306找到之下兩個快取線之實體位址至第一級資料快取記憶體116,作為樣態預測快取線位址194。在其他實施例中,預取單元124所
提供之快取線位址的數量可多於或少於2。流程進行到步驟1312。
在步驟1312中,第一級資料快取記憶體116把在步驟1308中所提供之位址推進至佇列198中。流程進行到步驟1314。
在步驟1314中,無論何時只要佇列198為非空(non-empty),第一級資料快取記憶體116將下一個位址取出佇列198,並發出一快取線配置要求192至第二級快取記憶體118,以便取得在該位址之快取線。然而,若在佇列198之一位址已出現於第一級資料快取記憶體116,第一級資料快取記憶體116將拋棄(dumps)該位址以及放棄自第二級快取記憶體118要求其快取線。第二級快取記憶體118接著提供所要求之快取線資料188至第一級資料快取記憶體116。流程結束於步驟1314。
第14圖所示為第12圖所示之預取單元124根據第13圖之步驟1306的操作流程圖。第14圖所敘述之操作係在第3圖所偵測到樣態方向為向上(upward)的狀況下。然而,若所偵測到之樣態方向為向下,預取單元124亦可用以執行同樣的功能。步驟1402到1408之操作係用以將第3圖中之樣態暫存器344放置在記憶體區塊中適當的位置,使得預取單元124藉由從第一級資料記憶體位址196上開始之樣態搜尋下兩個快取線,並只要有需求時在該記憶體區塊上複製該樣態暫存器344之樣態344即可。流程開始於步驟1402。
在步驟1402中,預取單元124以相似於第6圖在步驟602初始化搜尋指標暫存器352以及樣態區域暫存器348之方
式,用第3圖之樣態週期暫存器346以及中間指標暫存器316的總和,來初始化第12圖之第一級資料搜尋指標器172以及第一級資料樣態位址178。例如,若中間指標暫存器316之值為16以及樣態週期暫存器346為5,並且方向暫存器342之方向為往上,預取單元124初始化第一級資料搜尋指標器172以及第一級資料樣態位址178至21。流程進行到步驟1404。
在步驟1404中,預取單元124決定第一級資料記憶體位址196是否落入在具有目前所指定位置之樣態暫存器344之樣態中,樣態的目前起始位置係根據步驟1402所決定的,並可根據步驟1406進行更新。也就是說,預取單元124決定第一級資料記憶體位址196之適當位元(relevant bits)的值(即除去確認記憶體區塊的位元,以及在快取線中用來指定位元組偏移(byte offset)的位元),是否大於或者等於第一級資料搜尋指標器172之值,以及是否小於或者等於第一級資料搜尋指標器172與樣態週期暫存器346兩者之值所相加之總合。若第一級資料記憶體位址196落入(fall within)樣態暫存器344之樣態中,流程進行到步驟1408;否則流程進行到步驟1406。
在步驟1406中,預取單元124根據樣態週期暫存器346增加第一級資料搜尋指標器172以及第一級資料樣態位址178之值。根據步驟1406(與後續之步驟1418)所述之操作,若第一級資料搜尋指標器172已達到記憶體區塊之終點則結束搜尋。流程回到步驟1404。
在步驟1408中,預取單元124將第一級資料搜尋指標器172之值設置(set)為第一級資料記憶體位址196所相關之
快取線之記憶體頁的偏移量(offset)。流程進行到步驟1412。
在步驟1412中,預取單元124在第一級資料搜尋指標器172中測試樣態暫存器344中之位元。流程進行到步驟1414。
在步驟1414中,預取單元124決定步驟1412所測試之位元是否設置好了。如果在步驟1412所測試之位元設置好了,流程進行到步驟1416;否則流程進行到步驟1418。
在步驟1416中,預取單元124將在步驟1414中被樣態暫存器344所預測之快取線標記為已準備好傳送實體位址至第一級資料快取記憶體116,以作為一樣態預測快取線位址194。流程結束於步驟1416。
在步驟1418中,預取單元124增加第一級資料搜尋指標器172之值。另外,若第一級資料搜尋指標器172已超過上述樣態暫存器344之最後一個位元,預取單元124則用第一級資料搜尋指標器172之新的數值更新第一級資料搜尋指標器172之值,亦即切換(shift)樣態暫存器344至新的第一級資料搜尋指標器172的位置。步驟1412到1418之操作係反覆執行,直到兩快取線(或者快取線之其他既定值)被找到為止。流程結束於步驟1418。
第13圖中以些微繞路的方式來預取快取線至第一級資料快取記憶體116的好處係第一級資料快取記憶體116以及第二級快取記憶體118所需要之改變較小。然而,在其他實施例中,預取單元124亦可不提供樣態預測快取線位址194至第一級資料快取記憶體116。例如,在一實施例中,預取單元124
直接要求匯流排介面單元122自記憶體獲擷取快取線,然後將所接收之寫入快取線寫入至第一級資料快取記憶體116。在另一實施例中,預取單元124自用以提供資料至預取單元124的第二級快取記憶體118要求並取得快取線(如果為命中失敗(missing)則從記憶體取得快取線),並將收到之快取線寫入至第一級資料快取記憶體116。在其他實施例中,預取單元124自第二級快取記憶體118要求快取線(如果為命中失敗(missing)則從記憶體取得快取線),其直接將快取線寫入第一級資料快取記憶體116。
如上所述,本發明之各實施例的好處在於具有單一的預取單元124,作為第二級快取記憶體118以及第一級資料快取記憶體116兩者之預取需要之基礎。雖然在第2、12以及15圖所示(如下討論之內容)為不同之區塊,預取單元124在空間安排上可鄰近於第二級快取記憶體118之標籤(tag)以及資料列(data array)之位置並且概念上包括第二級快取記憶體118,如第21圖所示。各實施例允許預取單元124具較大空間之安排來提升其精確度與其大空間之需求,以應用一單一邏輯來處理第一級資料快取記憶體116以及第二級快取記憶體118之預取操作,以解決習知技術中只能預取資料給容量較小的第一級資料快取記憶體116之問題。
具有減少跨頁上之暖機損失(warm-up penalty)的定界框預取單元
本發明所述之預取單元124在可偵測一記憶體區塊(例如,一實體記憶體頁)上較複雜之存取樣態(例如,一實體
記憶體頁),其一般而言為習知預取單元所無法偵測者。舉例而言,預取單元124可以根據一樣態偵測正在進行存取一記憶體區塊之程式,即使微處理器100之非循序執行(out-of-order execution)管線(pipeline)會不以程式命令的順序而重新排序(re-order)記憶體存取,一般而言,這可能會造成習知預取單元不去偵測記憶體存取樣態而導致沒有預取動作。這是由於預取單元124只考慮對記憶體區塊之進行有效地存取,而時間順序(time order)並非其考量點。
然而,為了滿足辨識更複雜之存取樣態及/或重新排序存取樣態之能力,相較於習知的預取單元,本發明之預取單元124可能需要一較長之時間去偵測存取樣態,如下所述之”暖機時間(warm-up time)”。因此需要一減少預取單元124暖機時間之方法。
預取單元124用以預測一個之前藉由一存取樣態正在存取一記憶體區塊之程式,是否已經跨越(cross over)實際上與舊的記憶體區塊相鄰之一新記憶體區塊,以及預測此程式是否會根據相同之樣態繼續存取這個新的記憶體區塊。因應於此,預取單元124使用來自舊的記憶體區塊之樣態、方向以及其他相關資訊,以加快在新的記憶體區塊偵測存取樣態的速度,即減少暖機時間。
如第15圖所示為具有一預取單元124之微處理器100的方塊圖。第15圖之微處理器100相似於第2以及12圖之微處理器100,並且具有如下所述之其它特性。
如第3圖中之相關敘述,預取單元124包括複數硬
體單元332。每一硬體單元332相較於第3圖所述更包括一記憶體區塊虛擬雜湊虛擬位址欄(hashed virtual address of memory,HVAMB)354以及一狀態欄(status)356。在第4圖所述之步驟406初始化已分派之硬體單元332的過程中,預取單元124取出區塊號碼暫存器303中之實體區塊碼(physical block number),並在將實體區塊碼轉譯成一虛擬位址後,根據後續第17圖所述之步驟1704所執行之相同雜湊演算法(the same hashing algorithm)將實體區塊碼轉譯成一虛擬位址(雜湊(hash)此之虛擬位址),並將其雜湊演算之結果儲存至記憶體區塊虛擬雜湊位址欄354。狀態欄356具有三種可能之數值:閒置(inactive)、主動(active)或者試用(probationary),如下所述。預取單元124亦包括一虛擬雜湊表(virtual hash table,VHT)162,關於虛擬雜湊表162組織架構以及操作之詳細說明請參考後續第16到19圖之敘述。
如第16圖所示為第15圖之虛擬雜湊表162。虛擬雜湊表162包括複數項目,最好組織成一佇列。每一項目包括一有效位元(valid bit)(未圖示)以及三個欄:一負1雜湊虛擬位址1602(HVAM1)、一未修改雜湊虛擬位址1604(HVAUN)以及一正1雜湊虛擬位址1606(HVAP1)。填寫上述欄位以生成這些數值的方式請參考後續第17圖所述。
第17圖所述為第15圖之微處理器100之操作流程圖。流程開始於步驟1702。
在步驟1702中,第一級資料快取記憶體116接收來自載入/儲存單元134之一載入/儲存要求,其載入/儲存要求包
括一虛擬位址。流程進行到步驟1704。
在步驟1704中,第一級資料快取記憶體116對步驟1702中所接收之雜湊位址所選擇之位元執行一雜湊功能(函數),用以產生一未修改雜湊虛擬位址1604(HVAUN)。另外,第一級資料快取記憶體116將一記憶體區塊大小(MBS)與在步驟1702所接收之雜湊位址所選擇的位元相加,用以產生一加總值,並對加總值執行一雜湊功能,以產生一正1雜湊虛擬位址1606(HVAP1)。另外,第一級資料快取記憶體116從在步驟1702所接收之雜湊位址選擇的位元,減去記憶體區塊之大小,用以產生一差值,並對此差值執行一雜湊功能,以產生一負1雜湊虛擬位址1602(HVAM1)。在一實施例中,記憶體區塊大小為4KB。在一實施例中,虛擬位址為40位元,虛擬位址之位元39:30以及11:0被會雜湊功能忽略。剩下之18個虛擬位址位元為”已處理(dealt)”,如已擁有之資訊,係透過雜湊位元位置來處理。其想法為虛擬位址之較低位元具有最高亂度(entropy)以及較高位元具有最低亂度,用此方法處理可保證亂度層級(entropy level)在跨越雜湊之位元時較一致。在一實施例中,剩下之虛擬位址之18位元係根據後續表1之方法雜湊至6位元。然而,在其他實施例中,亦可考慮使用不同雜湊演算法;此外,若有性能支配空間(performance dominates space)以及電力消耗之設計考量,實施例可考慮不使用雜湊演算法。流程進行到步驟1706。
在步驟1706中,第一級資料快取記憶體116提供在步驟1704中所產生之未修改雜湊虛擬位址(HVAUN)1604、正1雜湊虛擬位址(HVAP1)1606以及負1雜湊虛擬位址(HVAM1)1602至預取單元124。流程進行到步驟1708。
在步驟1708中,預取單元124用步驟1706所接收之未修改雜湊虛擬位址(HVAUN)1604、正1雜湊虛擬位址(HVAP1)1606以及負1雜湊虛擬位址(HVAM1)1602以選擇性地更新虛擬雜湊表162。也就是說,如果虛擬雜湊表162已包括一新的未修改雜湊虛擬位址1604(HVAUN)、正1雜湊虛擬位址1606(HVAP1)以及負1雜湊虛擬位址1602(HVAM1)之項目,預取單元124則放棄更新虛擬雜湊表162。相反地,預取單元124則以先進先出(first-in-first-out)的方式將未修改雜湊虛擬位址1604(HVAUN)、正1雜湊虛擬位址1606(HVAP1)以及負1雜湊虛擬位址1602(HVAM1)推進至虛擬雜湊表162最頂端之項目,並將所推進之項目標記為有效(valid)。流程結束於步驟1708。
如第18圖所示為第16圖之虛擬雜湊表162在預取單元124的載入/儲存單元134根據第17圖之敘述操作之後的內容,其中在載入/儲存單元134因應於程式的執行,已經在一向上的方向上前進兩記憶體區塊(標示為A and A+MBS),並進入
一第三記憶體區塊(標示為A+2*MBS),以便回應已填寫虛擬雜湊表162之預取單元124。仔細而言,虛擬雜湊表162距離尾端兩個項目的項目包括在負1雜湊虛擬位址(HVAM1)1602之A-MBS的雜湊、在未修改雜湊虛擬位址(HVAUN)1604之A的雜湊以及在正1雜湊虛擬位址(HVAP1)1606之A+MBS的雜湊;虛擬雜湊表162距離尾端一個項目的項目包括負1雜湊虛擬位址(HVAM1)1602之A的雜湊、在未修改雜湊虛擬位址(HVAUN)1604之A+MBS的雜湊以及在正1雜湊虛擬位址(HVAP1)1606之A+2*MBS的雜湊;虛擬雜湊表162在尾端的項目(即最近時間所推進的項目)包括在負1雜湊虛擬位址(HVAM1)1602之A+MBS的雜湊、在未修改雜湊虛擬位址(HVAUN)1604之A+2*MBS的雜湊以及在正1雜湊虛擬位址(HVAP1)1606之A+3*MBS的雜湊。
第19圖所示(由第19A圖以及第19B圖組成)為第5圖之預取單元124的操作流程圖。流程開始於步驟1902。
在步驟1902中,第一級資料快取記憶體116傳送一新的配置要求(allocation request,AR)至第二級快取記憶體118。新的配置要求係要求一新記憶體區塊。也就是說預取單元124決定與配置要求相關之記憶體區塊係新的,意即尚未配置一硬體單元332給新的配置要求所相關之記憶體區塊。也就是說,預取單元124最近未遇到(encountered)一新記憶體區塊之配置要求。在一實施例中,配置要求係在一載入/儲存第一級資料快取記憶體116結果失敗並隨之由第二級快取記憶體118要求同一快取線所產生的要求。在一實施例中,配置要求用以指定
一實體位址,實體位址所相關之一虛擬位址是由實體位址轉譯而來的。第一級資料快取記憶體116根據一雜湊功能(意即與第17圖之步驟1704相同之雜湊功能),雜湊與配置要求之實體位址有關之虛擬位址,用以產生配置要求之一已雜湊虛擬位址(HVAAR),並且將配置要求之已雜湊虛擬位址提供至預取單元124。流程進行至步驟1903。
在步驟1903中,預取單元124配至一個新的硬體單元332給新的記憶體區塊。如果有閒置的硬體單元332存在,預取單元124配置一閒置的硬體單元332給新的記憶體區塊。否則,在一實施例中,預取單元124則配置一個最近最少使用之硬體單元332給新的記憶體區塊。在一實施例中,一旦預取單元124已經預取樣態所指示之記憶體區塊的所有快取線時,預取單元124則會失效(inactivate)該硬體單元332。在一實施例中,預取單元124具有固定(pin)硬體單元332之能力,使其就算為一個最近最少使用之硬體單元332亦不會被重置。舉例而言,若預取單元124偵測到已經根據樣態對記憶體區塊進行一既定次數之存取,但預取單元124尚未根據樣態對整個記憶體區塊完成所有的預取,預取單元124即可固定與記憶體區塊有關之硬體單元332,使其就算成為一個最近最少使用之硬體單元332仍不適合被重置。在一實施例中,預取單元124維持每一硬體單元332之相對期間(從原始配置),並且當其期間(age)到達一既定期間臨界值時,預取單元124則會失效該硬體單元332。在另一實施例中,若預取單元124(藉由後續的步驟1904到1926)偵測一虛擬相鄰的記憶體區塊,並且已完成自虛擬鄰近的記憶體區塊之預
取,預取單元124則會選擇性地重複使用在虛擬相鄰的記憶體區塊之硬體單元332,而不是配置一新的硬體單元332。在此實施例中,預取單元124選擇性地初始化重複使用之硬體單元332之各種儲存元件(例如方向暫存器342、樣態暫存器344與樣態區域暫存器348),以便維持儲存在其內之可用資訊。流程進行至步驟1904。
在步驟1904中,預取單元124比較在步驟1902所產生之已雜湊虛擬位址(HVAAR)與虛擬雜湊表162之每一項目之負1雜湊虛擬位址1602(HVAM1)和正1雜湊虛擬位址1606(HVAP1)。預取單元124根據步驟1904到1922之操作係為了決定一已主動(active)記憶體區塊是否虛擬相鄰至新記憶體區塊,預取單元124根據步驟1924到1928之操作係為了預測記憶體存取是否將根據事先偵測到之存取樣態與方向,繼續自虛擬相鄰之已主動記憶體區塊進入新的記憶體區塊,用以降低預取單元124之暖機時間,使得預取單元124可較快開始預取新的記憶體區塊。流程進行至步驟1906。
在步驟1906中,預取單元124根據步驟1904執行之比較方式,決定已雜湊虛擬位址(HVAAR)是否與虛擬雜湊表162之任何一項目匹配。若已雜湊虛擬位址(HVAAR)與虛擬雜湊表162之一項目匹配,流程進行至步驟1908;否則,流程進行至步驟1912。
在步驟1908中,預取單元124設定一候補方向旗幟(candidate_direction flag)至一數值,以指示向上之方向。流程進行至步驟1916。
在步驟1912中,預取單元124根據步驟1908所執行之比較方式,決定已雜湊虛擬位址(HVAAR)是否與虛擬雜湊表162之任何一項目匹配。若已雜湊虛擬位址(HVAAR)與虛擬雜湊表162之一項目匹配,流程進行至步驟1914;否則,流程結束。
在步驟1914中,預取單元124設定候補方向旗幟(candidate_direction flag)至一數值,以指示向下之方向。流程進行至步驟1916。
在步驟1916中,預取單元124將候補雜湊暫存器(candidate_hav register)(未圖示)設定為步驟1906或1912所決定之虛擬雜湊表162之未修改雜湊虛擬位址1604(HVAUN)的一數值。流程進行至步驟1918。
在步驟1918中,預取單元124比較候選雜湊(candidate_hva)與預取單元124中每一主動記憶體區塊之記憶體區塊虛擬雜湊位址欄(HVAMB)354。流程進行至步驟1922。
在步驟1922中,預取單元124根據步驟1918所執行之比較方式,決定候選雜湊(candidate_hva)是否與任何一記憶體區塊虛擬雜湊位址欄(HVAMB)354匹配。若候選雜湊(candidate_hva)與一記憶體區塊虛擬雜湊位址欄(HVAMB)354匹配,流程進行至步驟1924;否則,流程結束。
在步驟1924中,預取單元124已確定步驟1922所找到之匹配主動記憶體區塊確實虛擬鄰近於新的記憶體區塊。因此,預取單元124比較(步驟1908或者1914所指定之)候選方向與匹配主動記憶體區塊之方向暫存器342,用以根據先前偵測到
之存取樣態與方向,預測記憶體存取是否將繼續自虛擬相鄰的已主動記憶體區塊進入新的記憶體區塊。仔細而言,若候選方向與虛擬相鄰記憶體區塊之方向暫存器342不同,記憶體存取不太可能會根據先前偵測到之存取樣態與方向,繼續自虛擬相鄰的已主動記憶體區塊進入新的記憶體區塊。流程進行至步驟1926。
在步驟1926中,預取單元124根據步驟1924所執行之比較方法,決定候選方向與匹配主動記憶體區塊之方向暫存器342是否匹配。若候選方向與匹配主動記憶體區塊之方向暫存器342匹配,則流程進行至步驟1928;否則,流程結束。
在步驟1928中,預取單元124決定在步驟1902所接收到之新的重置要求是否被指到步驟1926所偵測到之匹配虛擬相鄰主動記憶體區塊之一已被樣態暫存器344所預測之快取線。在一實施例中,為了執行步驟1928之決定,預取單元124根據其樣態週期暫存器346有效地切換與複製匹配虛擬相鄰主動記憶體區塊之樣態暫存器344,用以在虛擬相鄰記憶體區塊繼續樣態位置樣態區域暫存器348,以便在新的記憶體區塊維持樣態334連貫性。若新的配置要求係要求匹配主動記憶體區塊之樣態暫存器344所相關之一快取記憶體列,流程進行至步驟1934;否則,流程進行至步驟1932。
在步驟1932中,預取單元124根據第4圖之步驟406與408,初始化與填寫(步驟1903所配置之)新的硬體單元332,希望其最後可根據上述與第4到6圖相關之方法,偵測對新的記憶體區塊之存取的新樣態,而這將需要暖機時間。流程結束於
步驟1932。
在步驟1934中,預取單元124預測存取要求將會根據匹配虛擬相鄰主動記憶體區塊之樣態暫存器344與方向暫存器342繼續進入新的記憶體區塊。因此,預取單元124以相似於步驟1932之方式填寫新的硬體單元332,但會有些許不同。仔細而言,預取單元124會用來自虛擬相鄰記憶體區塊之硬體單元332的對應數值來填寫方向暫存器342、樣態暫存器344以及樣態週期暫存器346。另外,樣態區域暫存器348之新的數值係藉由繼續切換於增加之樣態週期暫存器346之值所決定,直到其交叉進入新的記憶體區塊,以提供樣態暫存器344持續地進入新的記憶體區塊,如步驟1928中之相關敘述。再者,新的硬體單元332中之狀態欄356係用以標記新的硬體單元332為試用(probationary)。最後,搜尋指標暫存352被初使化以便由一記憶體區塊之開頭進行搜尋。流程進行至步驟1936。
在步驟1936中,預取單元124繼續監視發生於新記憶體區塊之存取要求。若預取單元124偵測到對記憶體區塊之至少一既定數量的後續存取要求是要求樣態暫存器344所預測之記憶體快取線,接著預取單元124促使硬體單元332之狀態欄356自試用(probationary)轉為主動,並且接著如第6圖所述開始自新的記憶體區塊進行預取。在一實施例中,存取要求之既定數量為2,雖然其他實施例可考慮為其它既定數量。流程結束於步驟1936。
如第20圖所示為第15圖所示之預取單元124所用之一雜湊實體位址至雜湊虛擬位址庫(hashed physical
address-to-hashed virtual address thesaurus)2002。雜湊實體位址至雜湊虛擬位址庫2002包括一項目陣列。每一項目包括一實體位址(PA)2004以及一對應的雜湊虛擬位址(HVA)2006。對應的雜湊虛擬位址2006係由實體位址2004轉譯成之虛擬位址加以雜湊的結果。預取單元124藉由對跨越載入/儲存單元134的管線之最近一對虛擬/實體位址進行竊聽,用以對雜湊實體位址至雜湊虛擬位址庫2002之項目進行填寫。在另一實施例中,於第19圖之步驟1902,第一級資料快取記憶體116並未提供已雜湊虛擬位址(HVAAR)至預取單元124,但只提供配置要求所相關之實體位址。預取單元124在雜湊實體位址至雜湊虛擬位址庫2002中尋找實體位置,以找到一匹配實體位址(PA)2004,並獲得相關之雜湊虛擬位址(HVA)2006,其將在第19圖其他部分成為已雜湊虛擬位址(HVAAR)。將雜湊實體位址至雜湊虛擬位址庫2002包括在預取單元124可緩和第一級資料快取記憶體116提供配置要求所要求之雜湊虛擬位址的需要,因此可簡化第一級資料快取記憶體116與預取單元124之間的介面。
在一實施例中,雜湊實體位址至雜湊虛擬位址庫2002之每一項目包括一雜湊實體位址,而不是實體位址2004,並且預取單元124將自第一級資料快取記憶體116所接收之配置要求實體位址雜湊成一雜湊實體位址,用以搜尋雜湊實體位址至雜湊虛擬位址庫2002,以便獲得適當之對應的雜湊虛擬位址(HVA)2006。本實施例允許較小之雜湊實體位址至雜湊虛擬位址庫2002,但需要另外之時間對實體位址進行雜湊。
如第21圖所示為本發明實施例之多核微處理器
100。多核微處理器100包括兩個核心(表示成核心A2102A以及核心B2102B),可整個視為核心2102(或者單一核心2102)。每一核心具有相似於如第2圖所示之單核微處理器100之元件12或15。另外,每一核心2102具有如前所述之高度反應式的預取單元2104。該兩個核心2102共享第二級快取記憶體118以及預取單元124。特別的是,每一核心2012之第一級資料快取記憶體116、載入/儲存單元134以及高度反應式的預取單元2104係耦接至共享之第二級快取記憶體118以及預取單元124。另外,一共享之高度反應式的預取單元2106係耦接至第二級快取記憶體118以及預取單元124。在一實施例中,高度反應式的預取單元2104/共享之高度反應式的預取單元2106只預取一記憶體存取所相關之快取線後的下一個相鄰之快取線。
預取單元124除了監控載入/儲存單元134以及第一級資料快取記憶體116之記憶體存取之外,亦可監控高度反應式的預取單元2104/共享之高度反應式的預取單元2106所產生之記憶體存取,用以進行預取決定。預取單元124可監控從不同組合之記憶體存取來源的記憶體存取,以執行本發明所述之不同的功能。例如,預取單元124可監控記憶體存取之一第一組合,以執行第2到11圖所述之關相功能,預取單元124可監控記憶體存取之一第二組合,以執行第12到14圖所述之相關功能,並且預取單元124可監控記憶體存取之一第三組合,以執行第15到19圖所述之相關功能。在實施例中,共享之預取單元124由於時間因素難以監控每一核心2102的載入/儲存單元134之行為。因此,共享之預取單元124經由第一級資料快取記憶體
116所產生之傳輸狀況(traffic)間接地監控載入/儲存單元134之行為,作為其載入/儲存未命中(miss)之結果。
本發明的不同實施例已於本文敘述,但本領域具有通常知識者應能瞭解這些實施例僅作為範例,而非限定於此。本領域具有通常知識者可在不脫離本發明之精神的情況下,對形式與細節上做不同的變化。例如,軟體可致能本發明實施例所述的裝置與方法之功能、組建(fabrication)、塑造(modeling)、模擬、描述(description)、以及/或測試,亦可透過一般程式語言(C、C++)、硬體描述語言(Hardware Description Languages,HDL)(包括Verilog HDL、VHDL等等)、或其他可利用的程式語言來完成。此軟體可配置在任何已知的電腦可使用媒介,例如磁帶、半導體、磁碟,或是光碟(例如CD-ROM、DVD-ROM等等)、網際網路、有線、無線、或其他通訊媒介的傳輸方式之中。本發明所述之裝置與方法實施例可被包括於半導體智慧財產核心,例如微處理器核心(以HDL來實現),並轉換成積體電路產品的硬體。此外,本發明所述之裝置與方法透過硬體與軟體的結合來實現。因此,本發明不應侷限於所揭露之實施例,而是依後附之申請專利範圍與等效實施所界定。特別是,本發明可實施在使用於一般用途電腦中的微處理器裝置內。最後,本發明雖以較佳實施例揭露如上,然其並非用以限定本發明的範圍,任何所屬技術領域中具有通常知識者,在不脫離本發明之精神和範圍內,當可做些許的更動與潤飾,因此本發明之保護範圍當視後附之申請專利範圍所界定者為準。
本發明的不同實施例已於本文敘述,但本領域具
有通常知識者應能瞭解這些實施例僅作為範例,而非限定於此。本領域具有通常知識者可在不脫離本發明之精神的情況下,對形式與細節上做不同的變化。例如,軟體可致能本發明實施例所述的裝置與方法之功能、組建(fabrication)、塑造(modeling)、模擬、描述(description)、以及/或測試,亦可透過一般程式語言(C、C++)、硬體描述語言(Hardware Description Languages,HDL)(包括Verilog HDL、VHDL等等)、或其他可利用的程式語言來完成。此軟體可配置在任何已知的電腦可使用媒介,例如磁帶、半導體、磁碟,或是光碟(例如CD-ROM、DVD-ROM等等)、網際網路、有線、無線、或其他通訊媒介的傳輸方式之中。本發明所述之裝置與方法實施例可被包括於半導體智慧財產核心,例如微處理器核心(以HDL來實現),並轉換成積體電路產品的硬體。此外,本發明所述之裝置與方法透過硬體與軟體的結合來實現。因此,本發明不應侷限於所揭露之實施例,而是依後附之申請專利範圍與等效實施所界定。特別是,本發明可實施在使用於一般用途電腦中的微處理器裝置內。最後,本發明雖以較佳實施例揭露如上,然其並非用以限定本發明的範圍,任何所屬技術領域中具有通常知識者,在不脫離本發明之精神和範圍內,當可做些許的更動與潤飾,因此本發明之保護範圍當視後附之申請專利範圍所界定者為準。
100‧‧‧微處理器
102‧‧‧指令快取記憶體
104‧‧‧指令解碼器
106‧‧‧暫存器別名表
108‧‧‧保留站
112‧‧‧執行單元
132‧‧‧其他執行單元
134‧‧‧載入/儲存單元
124‧‧‧預取單元
114‧‧‧引退單元
116‧‧‧第一級資料快取記憶體
118‧‧‧第二級快取記憶體
122‧‧‧匯流排介面單元
Claims (29)
- 一種微處理器,包括:一第一級快取記憶體;一第二級快取記憶體;以及一預取單元,用以:維持一最大位址以及一最小位址,其中上述最大位址指定了具有出現在上述第二快取記憶體中之一存取要求之一記憶體區塊的一最高位址,其中上述最小位址指定了具有上述存取要求之上述記憶體區塊的一最低位址;維持上述最大位址之改變的一計數值以及上述最小位址之改變的一計數值,其中當一控制邏輯改變上述最大位址時,上述控制邏輯更新上述最大位址之改變的上述計數值,其中當上述控制邏輯改變上述最小位址時,上述控制邏輯更新上述最小位址之改變的計數值;偵測出現在上述第二級快取記憶體中之上述存取要求之一方向以及樣態,以及根據上述方向以及樣態,將複數快取線預取至上述第二級快取記憶體中,其中上述方向係基於上述最大位址以及上述最小位址之上述改變計數偵測到的;從上述第一級快取記憶體,接收上述第一級快取記憶體所接收之一存取要求之一位址,其中上述位址與一快取線相關;決定在上述方向中所相關之快取線之後被上述樣態所指出之一個或多個快取線;以及 導致上述一個或多個快取線被預取至上述第一級快取記憶體中。
- 如申請專利範圍第1項所述之微處理器,其中:上述記憶體區塊係可被上述微處理器存取之記憶體範圍之一次集合;為了決定在上述方向中所相關之快取線之後被上述樣態所指出之一個或多個快取線,上述預取單元:放置上述樣態至上述記憶體區塊,使得上述位址位於上述樣態中;以及沿著上述方向,由上述位址開始搜尋,直到遇到上述樣態所指出之一快取線。
- 如申請專利範圍第2項所述之微處理器,其中:上述樣態包括快取線之一順序;其中為了放置上述樣態至上述記憶體區塊,使得上述位址位於上述樣態中,上述預取單元係用以藉由上述順序將上述樣態切換(shift)至上述記憶體區塊。
- 如申請專利範圍第2項所述之微處理器,其中出現在上述第二級快取記憶體中之上述記憶體區塊的上述存取要求之位址係隨著時間函數而非單調性地增加以及減少。
- 如申請專利範圍第4項所述之微處理器,其中出現在上述第二級快取記憶體中之上述記憶體區塊的上述存取要求之上述位址可為非連續的。
- 如申請專利範圍第1項所述之微處理器,更包括:複數核心;其中 上述第二級快取記憶體以及預取單元係由上述核心所共享;以及每一上述核心包括上述第一級快取記憶體之一不同之範例(a distinct instantation)。
- 如申請專利範圍第1項所述之微處理器,其中為了導致上述一個或多個快取線被預取至上述第一級快取記憶體中,上述預取單元提供上述一個或多個快取線之位址至上述第一級快取記憶體,其中上述第一級快取記憶體係用以從上述第二級快取記憶體中要求上述一個或多個快取線。
- 如申請專利範圍第7項所述之微處理器,其中上述第一級快取記憶體包括一佇列,用以儲存從上述預取單元所接收之上述位址。
- 如申請專利範圍第1項所述之微處理器,其中為了導致上述一個或多個快取線被預取至上述第一級快取記憶體中,上述預取單元從上述微處理器之一匯流排介面單元要求一個或多個快取線,並且隨後將提供上述所要求到之快取線提供至上述第一級快取記憶體。
- 如申請專利範圍第1項所述之微處理器,其中為了導致上述一個或多個快取線被預取至上述第一級快取記憶體中,上述預取單元自上述第二級快取記憶體中要求上述一個或多個快取線。
- 如申請專利範圍第10項所述之微處理器,其中上述預取單元將上述被所要求之快取線隨後提供至上述第一級快取記憶體。
- 如申請專利範圍第10項所述之微處理器,其中上述第二級快取記憶體係用以所要求之快取線隨後提供至上述第一級快取記憶體。
- 如申請專利範圍第1項所述之微處理器,其中為了偵測上述方向以及樣態,上述預取單元更用以:當上述存取要求出現時,維持具有上述記憶體區塊之上述存取要求所相關之存取之快取線之一歷史記錄;以及根據上述歷史記錄,決定上述樣態。
- 如申請專利範圍第13項所述之微處理器,為了根據上述最小位址之改變以及上述最大位址之改變的上述計數值偵測上述方向,上述預取單元更用以:當上述最大位址之改變計數值與上述最小位址之改變計數值間之差值係大於一既定值時,偵測上述方向係向上;以及當上述最小位址之改變計數值與上述最大位址之改變計數值間之差值係大於上述既定值時,偵測上述方向係向下。
- 如申請專利範圍第13項所述之微處理器,其中:上述歷史記錄包括一位元遮罩,用以指出上述記憶體區塊之上述存取要求所相關之存取的快取線;上述預取單元更用以:計算上述位元遮罩中之上述存取要求之快取線的一中間指標;以及當上述位元遮罩在上述中間指標之左側之N位元與上述位元遮罩在上述中間指標之右則之N位元匹配時,為複數個不 同的位元週期中之每一者,增加上述位元週期所相關之一匹配計數器的計數值,其中N為上述位元週期中之位元數。
- 如申請專利範圍第15項所述之微處理器,其中為了根據上述位元遮罩偵測上述存取樣態,上述預取單元更用以:偵測上述位元週期之一者所相關的上述匹配計數器與上述位元週期之其他者所相關的上述匹配計數器之間的差值是否大於一既定值;以及偵測上述位元遮罩在上述中間指標之其中一側的N位元所指定的上述存取樣態,其中N為上述位元週期之一者的位元數,上述位元週期之上述一者所具有之相關匹配計數器與上述位元週期之其他者所具有之相關匹配計數器之間的差值大於上述既定值。
- 一種資料預取方法,用以預取資料至具有一第二級快取記憶體之一微處理器之一第一級快取記憶體,上述資料預取方法包括:維持一最大位址以及一最小位址,其中上述最大位址指定了具有出現在上述第二快取記憶體中之一存取要求之一記憶體區塊的一最高位址,其中上述最小位址指定了具有上述存取要求之上述記憶體區塊的一最低位址;維持上述最大位址之改變的一計數值以及上述最小位址之改變的一計數值,其中當一控制邏輯改變上述最大位址時,上述控制邏輯更新上述最大位址之改變的上述計數值,其中當上述控制邏輯改變上述最小位址時,上述控制邏輯更新上述最小位址之改變的計數值; 偵測出現在上述第二級快取記憶體中之上述存取要求之一方向以及樣態,以及根據上述方向以及樣態,將複數快取線預取至上述第二級快取記憶體中,其中上述方向係基於上述最大位址以及上述最小位址之上述改變計數偵測到的;從上述第一級快取記憶體,接收上述第一級快取記憶體所接收之一存取要求之一位址,其中上述位址與一快取線相關;決定在上述方向中所相關之快取線之後被上述樣態所指出之一個或多個快取線;以及導致上述一個或多個快取線被預取至上述第一級快取記憶體中。
- 如申請專利範圍第17項所述之資料預取方法,其中:上述記憶體區塊係可被上述微處理器存取之記憶體範圍之一次集合;決定在上述方向中所相關之快取線之後被上述樣態所指出之一個或多個快取線的步驟,包括:放置上述樣態至上述記憶體區塊,使得上述位址位於上述樣態中;以及沿著在上述方向,由上述位址開始搜尋,直到遇到上述樣態所指出之一快取線。
- 如申請專利範圍第18項所述之資料預取方法,其中上述樣態包括快取線之一順序,並且放置上述樣態至上述記憶體區塊,使得上述位址位於上述樣態中的步驟,包括藉由上 述順序將上述樣態轉移至上述記憶體區塊。
- 如申請專利範圍第18項所述之資料預取方法,其中出現在上述第二級快取記憶體中之上述記憶體區塊的上述存取要求之位址係隨著時間函數而非單調性地增加以及減少。
- 如申請專利範圍第20項所述之資料預取方法,其中出現在上述第二級快取記憶體中之上述記憶體區塊的上述存取要求之上述位址可為非連續的。
- 如申請專利範圍第17項所述之資料預取方法,其中上述微處理器更包括複數核心,並且上述第二級快取記憶體以及預取單元係由上述核心所共享,並且每一上述核心包括上述第一級快取記憶體之一不同之範例。
- 如申請專利範圍第17項所述之資料預取方法,其中導致上述一個或多個快取線被預取至上述第一級快取記憶體的步驟,包括上述微處理器之一預取單元用以提供上述一個或多個快取線之位址至上述第一級快取記憶體,其中上述第一級快取記憶體係用以從上述第二級快取記憶體中要求上述一個或多個快取線。
- 如申請專利範圍第17項所述之資料預取方法,其中導致上述一個或多個快取線被預取至上述第一級快取記憶體的步驟,包括上述微處理器之一預取單元用以提供上述一個或多個快取線之位址至上述第一級快取記憶體中,其中上述第一級快取記憶體自上述微處理器之一匯流排介面單元用以要求上述一個或多個快取線,並且隨後將上述要求之一個或多個快取線提供至上述第一級快取記憶體。
- 如申請專利範圍第17項所述之資料預取方法,其中導致上述一個或多個快取線被預取至上述第一級快取記憶體的步驟,包括上述預取單元係用以自上述第二級快取記憶體中要求上述一個或多個快取線。
- 如申請專利範圍第25項所述之資料預取方法,其中導致上述一個或多個快取線被預取至上述第一級快取記憶體的步驟,包括上述預取單元係用以將所要求之一個或多個快取線隨後提供至上述第一級快取記憶體。
- 如申請專利範圍第25項所述之資料預取方法,更包括上述第二級快取記憶體係用以將所要求之一個或多個快取線隨後提供至上述第一級快取記憶體。
- 一種電腦程式產品,編碼於至少一非易失性電腦可讀取媒體之上,並適用於一計算裝置,上述電腦程式產品包括:一電腦可讀程式編碼,儲存於上述電腦可讀取媒體中,用以定義一微處理器,上述電腦可讀程式包括:一第一程式碼,用以定義一第一級快取記憶體裝置;一第二程式碼,用以定義一第二級快取記憶體裝置;以及一第三程式碼,用以定義一預取單元,使得上述預取單元用以:維持一最大位址以及一最小位址,其中上述最大位址指定了具有出現在上述第二快取記憶體中之一存取要求之一記憶體區塊的一最高位址,其中上述最小位址指定了具有上述存取要求之上述記憶體區塊的一最低位址;維持上述最大位址之改變的一計數值以及上述最小位址之 改變的一計數值,其中當一控制邏輯改變上述最大位址時,上述控制邏輯更新上述最大位址之改變的上述計數值,其中當上述控制邏輯改變上述最小位址時,上述控制邏輯更新上述最小位址之改變的計數值;偵測出現在上述第二級快取記憶體中之上述存取要求之一方向以及樣態,以及根據上述方向以及樣態,將複數快取線預取至上述第二級快取記憶體中,其中上述方向係基於上述最大位址以及上述最小位址之上述改變計數偵測到的;從上述第一級快取記憶體,接收上述第一級快取記憶體所接收之一存取要求之一位址,其中上述位址與一快取線相關;決定在上述方向中所相關之快取線之後被上述樣態所指出之一個或多個快取線;以及導致上述一個或多個快取線被預取至上述第一級快取記憶體中。
- 如申請專利範圍第28項所述之電腦程式產品,其中上述至少一電腦可讀媒體係擇自於一碟片、磁帶或者其他具磁性、光學或者電子儲存媒體以及一線路。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US31859410P | 2010-03-29 | 2010-03-29 | |
US13/033,848 US8719510B2 (en) | 2010-03-29 | 2011-02-24 | Bounding box prefetcher with reduced warm-up penalty on memory block crossings |
US13/033,765 US8762649B2 (en) | 2010-03-29 | 2011-02-24 | Bounding box prefetcher |
US13/033,809 US8645631B2 (en) | 2010-03-29 | 2011-02-24 | Combined L2 cache and L1D cache prefetcher |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201624289A TW201624289A (zh) | 2016-07-01 |
TWI574155B true TWI574155B (zh) | 2017-03-11 |
Family
ID=44490596
Family Applications (5)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW105108032A TWI574155B (zh) | 2010-03-29 | 2011-03-29 | 資料預取方法、電腦程式產品以及微處理器 |
TW104118874A TWI547803B (zh) | 2010-03-29 | 2011-03-29 | 預取單元、資料預取方法、電腦程式產品以及微處理器 |
TW103128257A TWI519955B (zh) | 2010-03-29 | 2011-03-29 | 預取單元、資料預取方法以及電腦程式產品 |
TW104118873A TWI534621B (zh) | 2010-03-29 | 2011-03-29 | 預取單元、資料預取方法、電腦程式產品以及微處理器 |
TW100110731A TWI506434B (zh) | 2010-03-29 | 2011-03-29 | 預取單元、資料預取方法、電腦程式產品以及微處理器 |
Family Applications After (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW104118874A TWI547803B (zh) | 2010-03-29 | 2011-03-29 | 預取單元、資料預取方法、電腦程式產品以及微處理器 |
TW103128257A TWI519955B (zh) | 2010-03-29 | 2011-03-29 | 預取單元、資料預取方法以及電腦程式產品 |
TW104118873A TWI534621B (zh) | 2010-03-29 | 2011-03-29 | 預取單元、資料預取方法、電腦程式產品以及微處理器 |
TW100110731A TWI506434B (zh) | 2010-03-29 | 2011-03-29 | 預取單元、資料預取方法、電腦程式產品以及微處理器 |
Country Status (2)
Country | Link |
---|---|
CN (4) | CN104636274B (zh) |
TW (5) | TWI574155B (zh) |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8959320B2 (en) * | 2011-12-07 | 2015-02-17 | Apple Inc. | Preventing update training of first predictor with mismatching second predictor for branch instructions with alternating pattern hysteresis |
US9442759B2 (en) * | 2011-12-09 | 2016-09-13 | Nvidia Corporation | Concurrent execution of independent streams in multi-channel time slice groups |
US9772845B2 (en) * | 2011-12-13 | 2017-09-26 | Intel Corporation | Method and apparatus to process KECCAK secure hashing algorithm |
US10146545B2 (en) | 2012-03-13 | 2018-12-04 | Nvidia Corporation | Translation address cache for a microprocessor |
US9880846B2 (en) | 2012-04-11 | 2018-01-30 | Nvidia Corporation | Improving hit rate of code translation redirection table with replacement strategy based on usage history table of evicted entries |
US10241810B2 (en) | 2012-05-18 | 2019-03-26 | Nvidia Corporation | Instruction-optimizing processor with branch-count table in hardware |
US20140189310A1 (en) | 2012-12-27 | 2014-07-03 | Nvidia Corporation | Fault detection in instruction translations |
CN104133780B (zh) * | 2013-05-02 | 2017-04-05 | 华为技术有限公司 | 一种跨页预取方法、装置及系统 |
US9891916B2 (en) * | 2014-10-20 | 2018-02-13 | Via Technologies, Inc. | Dynamically updating hardware prefetch trait to exclusive or shared in multi-memory access agent system |
CN105653199B (zh) * | 2014-11-14 | 2018-12-14 | 群联电子股份有限公司 | 数据读取方法、存储器存储装置及存储器控制电路单元 |
US10387318B2 (en) * | 2014-12-14 | 2019-08-20 | Via Alliance Semiconductor Co., Ltd | Prefetching with level of aggressiveness based on effectiveness by memory access type |
US10152421B2 (en) * | 2015-11-23 | 2018-12-11 | Intel Corporation | Instruction and logic for cache control operations |
CN106919367B (zh) * | 2016-04-20 | 2019-05-07 | 上海兆芯集成电路有限公司 | 侦测自修正程序码的处理器与方法 |
US10579522B2 (en) * | 2016-09-13 | 2020-03-03 | Andes Technology Corporation | Method and device for accessing a cache memory |
US10353601B2 (en) * | 2016-11-28 | 2019-07-16 | Arm Limited | Data movement engine |
US10732858B2 (en) | 2017-01-19 | 2020-08-04 | International Business Machines Corporation | Loading and storing controls regulating the operation of a guarded storage facility |
US10725685B2 (en) * | 2017-01-19 | 2020-07-28 | International Business Machines Corporation | Load logical and shift guarded instruction |
US10452288B2 (en) | 2017-01-19 | 2019-10-22 | International Business Machines Corporation | Identifying processor attributes based on detecting a guarded storage event |
US10496311B2 (en) | 2017-01-19 | 2019-12-03 | International Business Machines Corporation | Run-time instrumentation of guarded storage event processing |
US10496292B2 (en) | 2017-01-19 | 2019-12-03 | International Business Machines Corporation | Saving/restoring guarded storage controls in a virtualized environment |
US10579377B2 (en) | 2017-01-19 | 2020-03-03 | International Business Machines Corporation | Guarded storage event handling during transactional execution |
CN109857786B (zh) * | 2018-12-19 | 2020-10-30 | 成都四方伟业软件股份有限公司 | 页面数据填充方法及装置 |
CN111797052B (zh) * | 2020-07-01 | 2023-11-21 | 上海兆芯集成电路股份有限公司 | 系统单芯片以及系统存储器加速存取方法 |
KR102253362B1 (ko) * | 2020-09-22 | 2021-05-20 | 쿠팡 주식회사 | 전자 장치 및 이를 이용한 정보 제공 방법 |
CN112416437B (zh) * | 2020-12-02 | 2023-04-21 | 海光信息技术股份有限公司 | 信息处理方法、信息处理装置和电子设备 |
CN117242439A (zh) * | 2021-05-04 | 2023-12-15 | 华为技术有限公司 | 分层存储上的智能数据放置 |
CN114116529B (zh) * | 2021-12-01 | 2024-08-20 | 上海兆芯集成电路股份有限公司 | 快速加载装置和数据高速缓存方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090138661A1 (en) * | 2007-11-26 | 2009-05-28 | Gary Lauterbach | Prefetch instruction extensions |
US20100030973A1 (en) * | 2008-08-04 | 2010-02-04 | International Business Machines Corporation | Cache directed sequential prefetch |
TW201011538A (en) * | 2008-09-15 | 2010-03-16 | Microsoft Corp | Managing cache data and metadata |
TW201011643A (en) * | 2008-09-09 | 2010-03-16 | Via Tech Inc | Apparatus and method for updating set of limited access model specific registers in a microprocessor |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5003471A (en) * | 1988-09-01 | 1991-03-26 | Gibson Glenn A | Windowed programmable data transferring apparatus which uses a selective number of address offset registers and synchronizes memory access to buffer |
SE515718C2 (sv) * | 1994-10-17 | 2001-10-01 | Ericsson Telefon Ab L M | System och förfarande för behandling av minnesdata samt kommunikationssystem |
US6484239B1 (en) * | 1997-12-29 | 2002-11-19 | Intel Corporation | Prefetch queue |
US6810466B2 (en) * | 2001-10-23 | 2004-10-26 | Ip-First, Llc | Microprocessor and method for performing selective prefetch based on bus activity level |
JP4067887B2 (ja) * | 2002-06-28 | 2008-03-26 | 富士通株式会社 | プリフェッチを行う演算処理装置、情報処理装置及びそれらの制御方法 |
US7310722B2 (en) * | 2003-12-18 | 2007-12-18 | Nvidia Corporation | Across-thread out of order instruction dispatch in a multithreaded graphics processor |
US7237065B2 (en) * | 2005-05-24 | 2007-06-26 | Texas Instruments Incorporated | Configurable cache system depending on instruction type |
US20070186050A1 (en) * | 2006-02-03 | 2007-08-09 | International Business Machines Corporation | Self prefetching L2 cache mechanism for data lines |
WO2008155815A1 (ja) * | 2007-06-19 | 2008-12-24 | Fujitsu Limited | 情報処理装置及びキャッシュ制御方法 |
US8103832B2 (en) * | 2007-06-26 | 2012-01-24 | International Business Machines Corporation | Method and apparatus of prefetching streams of varying prefetch depth |
CN100449481C (zh) * | 2007-06-29 | 2009-01-07 | 东南大学 | 具有多通道指令预取功能的存储控制电路 |
US8161243B1 (en) * | 2007-09-28 | 2012-04-17 | Intel Corporation | Address translation caching and I/O cache performance improvement in virtualized environments |
US8140768B2 (en) * | 2008-02-01 | 2012-03-20 | International Business Machines Corporation | Jump starting prefetch streams across page boundaries |
JP2009230374A (ja) * | 2008-03-21 | 2009-10-08 | Fujitsu Ltd | 情報処理装置,プログラム,及び命令列生成方法 |
CN101887360A (zh) * | 2009-07-10 | 2010-11-17 | 威盛电子股份有限公司 | 微处理器的数据预先撷取器及方法 |
CN101667159B (zh) * | 2009-09-15 | 2012-06-27 | 威盛电子股份有限公司 | 传送请求区块的高速缓存系统及方法 |
-
2011
- 2011-03-29 TW TW105108032A patent/TWI574155B/zh active
- 2011-03-29 CN CN201510101303.7A patent/CN104636274B/zh active Active
- 2011-03-29 CN CN201510101351.6A patent/CN104615548B/zh active Active
- 2011-03-29 TW TW104118874A patent/TWI547803B/zh active
- 2011-03-29 TW TW103128257A patent/TWI519955B/zh active
- 2011-03-29 CN CN201110077108.7A patent/CN102169429B/zh active Active
- 2011-03-29 CN CN201510494634.1A patent/CN105183663B/zh active Active
- 2011-03-29 TW TW104118873A patent/TWI534621B/zh active
- 2011-03-29 TW TW100110731A patent/TWI506434B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090138661A1 (en) * | 2007-11-26 | 2009-05-28 | Gary Lauterbach | Prefetch instruction extensions |
US20100030973A1 (en) * | 2008-08-04 | 2010-02-04 | International Business Machines Corporation | Cache directed sequential prefetch |
TW201011643A (en) * | 2008-09-09 | 2010-03-16 | Via Tech Inc | Apparatus and method for updating set of limited access model specific registers in a microprocessor |
TW201011538A (en) * | 2008-09-15 | 2010-03-16 | Microsoft Corp | Managing cache data and metadata |
Also Published As
Publication number | Publication date |
---|---|
TW201535118A (zh) | 2015-09-16 |
TW201624289A (zh) | 2016-07-01 |
TWI534621B (zh) | 2016-05-21 |
TWI519955B (zh) | 2016-02-01 |
TW201135460A (en) | 2011-10-16 |
CN104615548B (zh) | 2018-08-31 |
TW201535119A (zh) | 2015-09-16 |
TWI547803B (zh) | 2016-09-01 |
TW201447581A (zh) | 2014-12-16 |
CN105183663B (zh) | 2018-11-27 |
CN102169429B (zh) | 2016-06-29 |
CN102169429A (zh) | 2011-08-31 |
CN104636274B (zh) | 2018-01-26 |
CN105183663A (zh) | 2015-12-23 |
CN104636274A (zh) | 2015-05-20 |
CN104615548A (zh) | 2015-05-13 |
TWI506434B (zh) | 2015-11-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI574155B (zh) | 資料預取方法、電腦程式產品以及微處理器 | |
JP4027620B2 (ja) | 分岐予測装置、プロセッサ、及び分岐予測方法 | |
US7958317B2 (en) | Cache directed sequential prefetch | |
US11416253B2 (en) | Multiple-table branch target buffer | |
US8583894B2 (en) | Hybrid prefetch method and apparatus | |
US8677049B2 (en) | Region prefetcher and methods thereof | |
JP2007207240A (ja) | データ・ラインのための自己プリフェッチl2キャッシュ機構 | |
US20070186049A1 (en) | Self prefetching L2 cache mechanism for instruction lines | |
JP4574712B2 (ja) | 演算処理装置、情報処理装置及び制御方法 | |
JP2004038345A (ja) | プリフェッチ制御装置、情報処理装置及びプリフェッチ制御方法 | |
US20110010506A1 (en) | Data prefetcher with multi-level table for predicting stride patterns | |
KR20190038835A (ko) | 데이터 캐시 영역 프리페처 | |
US8195889B2 (en) | Hybrid region CAM for region prefetcher and methods thereof | |
JP6701380B2 (ja) | アップ/ダウンプリフェッチャ | |
CN101681258A (zh) | 使用可变长度指令集处理器中分支目标地址缓存的分支预测 | |
US20080162907A1 (en) | Structure for self prefetching l2 cache mechanism for instruction lines | |
US20080162819A1 (en) | Design structure for self prefetching l2 cache mechanism for data lines | |
CN115964309A (zh) | 预取 | |
US11379372B1 (en) | Managing prefetch lookahead distance based on memory access latency | |
US11907722B2 (en) | Methods and apparatus for storing prefetch metadata | |
US20230205699A1 (en) | Region aware delta prefetcher |