預取單元和數(shù)據(jù)預取方法
【專利說明】預取單元和數(shù)據(jù)預取方法
[0001]本申請為申請日為2011年3月29日、申請?zhí)枮?01110077108.7的發(fā)明名稱為“預取單元、數(shù)據(jù)預取方法以及微處理器”的申請案的分案申請。
技術(shù)領(lǐng)域
[0002]本發(fā)明涉及一般微處理器的快取存儲器,特別是涉及將數(shù)據(jù)預取至微處理器的快取存儲器。
【背景技術(shù)】
[0003]以最近的計算機系統(tǒng)而言,在快取失敗(cache miss)時,微處理器存取系統(tǒng)存儲器所需的時間,會比微處理器存取快取存儲器(cache)多上一或兩個數(shù)量級。因此,為了提高快取命中率(cache hit rate),微處理器整合了預取技術(shù),用來測試最近數(shù)據(jù)存取樣態(tài)(examine recent data access patterns),并且企圖預測哪一個數(shù)據(jù)為程序下一個存取的對象,而預取的好處已是眾所皆知的范疇。
[0004]然而,申請人注意到某些程序的存取樣態(tài)并不為現(xiàn)有微處理器的預取單元所能檢測的。例如,圖1所示為當執(zhí)行的程序包括經(jīng)由存儲器進行一序列的儲存操作時,第二級快取存儲器(L2Cache)的存取樣態(tài),而圖中所描繪的為各時間的存儲器地址。由圖1可知,雖然總趨勢為隨著時間而增加存儲器地址,即由往上的方向,然而在許多狀況下,所指定的存取存儲器地址亦可較前一個時間往下,而非總趨勢的往上,使其不同于現(xiàn)有預取單元實際所預測的結(jié)果。
[0005]雖然就數(shù)量相對大的樣本而言,總趨勢是朝一個方向前進,但現(xiàn)有預取單元在面臨小樣本時卻可能出現(xiàn)混亂狀況的原因有兩個。第一個原因為程序是依循其架構(gòu)對存取存儲器,不論是由演算法特性或是不佳的編程(poor programming)所造成。第二個原因為非循序(out-of-order execut1n)微處理器核心的管線與隊列在正常功能下執(zhí)行時,常常會用不同于其所產(chǎn)生的程序順序來進行存儲器存取。
[0006]因此,需要一個數(shù)據(jù)預取單元(器)能夠有效地為程序進行數(shù)據(jù)預取,其必須考慮到在較小時窗(time windows)進行存儲器存取指令(操作)時并不會呈現(xiàn)明顯的趨勢(noclear trend),但當以較大樣本數(shù)進行審查時則會出現(xiàn)明顯的趨勢。
【發(fā)明內(nèi)容】
[0007]本發(fā)明揭示一種預取單元,設(shè)置于一微處理器中,包括:多個周期匹配計數(shù)器,分別相應于不同的多個樣態(tài)周期;以及一控制邏輯,用以響應于該微處理器存取一存儲器區(qū)塊的動作,更新該多個周期匹配計數(shù)器;根據(jù)該多個周期匹配計數(shù)器的計數(shù)值,決定一明顯的樣態(tài)周期;以及根據(jù)由該多個周期匹配計數(shù)器所決定的具有該明顯的樣態(tài)周期的一樣態(tài),對該存儲器區(qū)塊中的多個快取線中尚未被預取的快取線進行預取。
[0008]本發(fā)明揭示一種數(shù)據(jù)預取方法,包括:藉由一微處理器,響應于對存取一存儲器區(qū)塊的動作,對多個周期匹配計數(shù)器進行更新,其中該多個周期匹配計數(shù)器分別相應于不同的多個樣態(tài)周期;根據(jù)該多個周期匹配計數(shù)器的計數(shù)值,決定一明顯的樣態(tài)周期;以及根據(jù)由該多個周期匹配計數(shù)器所決定的具有該明顯的樣態(tài)周期的一樣態(tài),對該存儲器區(qū)塊中的多個快取線中尚未被預取的快取線進行預取。
[0009]本發(fā)明揭示一種預取單元,設(shè)置于具有一快取存儲器的一微處理器中,其中預取單元用以接收對一存儲器區(qū)塊的多個地址的多個存取要求,每一存取要求對應存儲器區(qū)塊的地址中的一個,并且存取要求的地址隨著時間函數(shù)非單調(diào)性地(non-monotonically)增加或減少。預取單元包括一儲存裝置以及一控制邏輯??刂七壿嫞罱又羶Υ嫜b置,其中當接收到存取要求時,控制邏輯則用以維持儲存裝置中的存取要求的一最大地址以及一最小地址,以及最大地址以及最小地址的變化的計數(shù)值、維持存儲器區(qū)塊中最近被存取的快取線的一歷史記錄,最近被存取的快取線是與存取要求的地址相關(guān)、根據(jù)計數(shù)值,決定一存取方向、根據(jù)歷史記錄,決定一存取樣態(tài),并且根據(jù)存取樣態(tài)并沿著存取方向,將快取存儲器內(nèi)尚未被歷史記錄指示為已存取的快取線預取至存儲器區(qū)塊中。
[0010]本發(fā)明揭示一種數(shù)據(jù)預取方法,用以預取數(shù)據(jù)至一微處理器的一快取存儲器,數(shù)據(jù)預取方法,包括接收對一存儲器區(qū)塊的多個地址的多個存取要求,每一存取要求對應存儲器區(qū)塊的地址中的一個,并且存取要求的地址隨著時間函數(shù)非單調(diào)性地(non-monotonically)增加或減少;當接收到存取要求時,維持存儲器區(qū)塊中的一最大以及一最小地址,并且計算最大以及最小地址的變化的計數(shù)值;當接收到存取要求時,維持存儲器區(qū)塊中最近被存取的快取線的一歷史記錄,最近被存取的快取線是與存取要求的地址相關(guān);根據(jù)計數(shù)值決定一存取方向;根據(jù)歷史紀錄決定一存取樣態(tài);以及根據(jù)存取樣態(tài)并沿著存取方向,將快取存儲器內(nèi)尚未被歷史記錄指示為已存取的快取線預取至存儲器區(qū)塊中。
[0011]本發(fā)明揭示一種微處理器,包括多個核心、一快取存儲器以及一預取單元??烊〈鎯ζ鳎珊诵乃蚕?,用以接收對一存儲器區(qū)塊的多個地址的多個存取要求,每一存取要求對應存儲器區(qū)塊的地址中的一個,存取要求的地址隨著時間函數(shù)非單調(diào)性地(non-monotonically)增加或減少。預取單元,用以監(jiān)視存取要求,并維持存儲器區(qū)塊中的一最大地址以及一最小地址,以及最大地址以及最小地址的變化的計數(shù)值、根據(jù)計數(shù)值,決定一存取方向并且沿著存取方向,將存儲器區(qū)塊中未命中的快取線預取至快取存儲器中。
[0012]本發(fā)明揭示一種微處理器,包括一第一級快取存儲器、一第二級快取存儲器以及一預取單元。預取單元用以檢測出現(xiàn)在第二級快取存儲器中的最近存取要求的一方向以及樣態(tài),以及根據(jù)方向以及樣態(tài),將多個快取線預取至第二級快取存儲器中、從第一級快取存儲器,接收第一級快取存儲器所接收的一存取要求的一地址,其中地址與一快取線相關(guān)、決定在方向中所相關(guān)的快取線的后被樣態(tài)所指出的一個或多個快取線并且導致一個或多個快取線被預取至第一級快取存儲器中。
[0013]本發(fā)明揭示一種數(shù)據(jù)預取方法,用以預取數(shù)據(jù)至具有一第二級快取存儲器的一微處理器的一第一級快取存儲器,數(shù)據(jù)預取方法包括檢測出現(xiàn)在第二級快取存儲器中的最近存取要求的一方向以及樣態(tài),以及根據(jù)方向以及樣態(tài),將多個快取線預取至第二級快取存儲器中;從第一級快取存儲器,接收第一級快取存儲器所接收的一存取要求的一地址,其中地址與一快取線相關(guān);決定在方向中所相關(guān)的快取線的后被樣態(tài)所指出的一個或多個快取線;以及導致一個或多個快取線被預取至第一級快取存儲器中。
[0014]本發(fā)明揭示一種微處理器,包括一快取存儲器以及一預取單元。預取單元用以檢測具有一第一存儲器區(qū)塊的多個存儲器存取要求的一樣態(tài),并且根據(jù)樣態(tài)從第一存儲器區(qū)塊預取多個快取線至快取存儲器中、監(jiān)視一第二存儲器區(qū)塊的一新的存儲器存取要求、決定第一存儲器區(qū)塊是否虛擬鄰近于第二存儲器區(qū)塊,并且當自第一存儲器區(qū)塊延續(xù)至第二存儲器區(qū)塊時,則決定樣態(tài)是否預測到第二存儲器區(qū)塊的新的存儲器存取要求所相關(guān)的一快取線在第二存儲器區(qū)塊中、并且根據(jù)樣態(tài),從第二存儲器區(qū)塊將相映的快取線預取至快取存儲器中。
[0015]本發(fā)明揭示一種數(shù)據(jù)預取方法,用以預取數(shù)據(jù)至一微處理器的一快取存儲器,數(shù)據(jù)預取方法包括檢測具有一第一存儲器區(qū)塊的多個存儲器存取要求的一樣態(tài),并且根據(jù)樣態(tài)從第一存儲器區(qū)塊預取快取線至上至快取存儲器中;監(jiān)視一第二存儲器區(qū)塊的一新的存儲器存取要求;決定第一存儲器區(qū)塊是否虛擬鄰近于第二存儲器區(qū)塊,并且當自第一存儲器區(qū)塊延續(xù)至第二存儲器區(qū)塊時,決定樣態(tài)是否預測到第二存儲器區(qū)塊的新的存儲器存取要求所相關(guān)的一快取線在第二存儲器區(qū)塊中;以及根據(jù)樣態(tài),從第二存儲器區(qū)塊將多個快取線預取至快取存儲器中,以回應決定步驟。
【附圖說明】
[0016]圖1所示為當執(zhí)行經(jīng)由存儲器包括一序列儲存操作的的程序時,一種第二級快取存儲器的樣態(tài)存取表現(xiàn)。
[0017]圖2為本發(fā)明的一種微處理器的方塊圖。
[0018]圖3為本發(fā)明圖2的預取單元更詳細的方塊圖。
[0019]圖4為本發(fā)明圖2的微處理器以及特別是圖3的預取單元的操作流程圖。
[0020]圖5為本發(fā)明圖3的預取單元對圖4的步驟的操作流程圖。
[0021]圖6為本發(fā)明圖3的預取單元對圖4的步驟的操作流程圖。
[0022]圖7為本發(fā)明圖3的預取要求隊列的操作流程圖。
[0023]圖8A和圖8B為本發(fā)明一存儲器區(qū)塊的兩個圖型存取點,用以表示本發(fā)明的定界框預取單元。
[0024]圖9為本發(fā)明圖2所示的微處理器的操作范例的方塊圖。
[0025]圖10為本發(fā)明延續(xù)圖9的范例的圖2所示的微處理器的操作范例的方塊圖。
[0026]圖1IA和圖1lB為本發(fā)明延續(xù)圖9以及10圖的范例的圖2所示的微處理器的操作范例的方塊圖。
[0027]圖12為本發(fā)明另一實施例的一種微處理器的方塊圖。
[0028]圖13為本發(fā)明圖12所示的預取單元的操作流程圖。
[0029]圖14為本發(fā)明根據(jù)圖13步驟的圖12所示的預取單元的操作流程圖。
[0030]圖15為本發(fā)明另一實施例具有一定界框預取單元的一種微處理器的方塊圖。
[0031]圖16為本發(fā)明圖15的虛擬雜湊表的方塊圖。
[0032]圖17為本發(fā)明圖15的微處理器的操作流程圖。
[0033]圖18為本發(fā)明根據(jù)經(jīng)由圖17范例敘述的在預取單元的操作后的圖16的虛擬雜湊表的內(nèi)容。
[0034]圖19A和圖19B為本發(fā)明圖15的預取單元的操作流程圖。
[0035]圖20為本發(fā)明另一實施例的用在圖15的預取單元的一雜湊物理地址至雜湊虛擬地址庫的方塊圖。
[0036]圖21本發(fā)明的一多核微處理器的方塊圖。
[0037]附圖符號說明
[0038]100?微處理器
[0039]102?指令快取存儲器
[0040]104?指令解碼器
[0041]106?暫存器別名表
[0042]108?保留站
[0043]112?執(zhí)行單元
[0044]132?其他執(zhí)行單元
[0045]134?載入/儲存單元
[0046]124?預取單元
[0047]114?引退單元
[0048]116?第一級數(shù)據(jù)快取存儲器
[0049]118?第二級快取存儲器
[0050]122?總線接口單元
[0051]162?虛擬雜湊表
[0052]198?隊列
[0053]172?第一級數(shù)據(jù)搜尋指標器
[0054]178?第一級數(shù)據(jù)樣態(tài)地址
[0055]196?第一級數(shù)據(jù)存儲器地址
[0056]194?樣態(tài)預測快取線地址
[0057]192?快取線配置要求
[0058]188?快取線數(shù)據(jù)
[0059]354?存儲器區(qū)塊虛擬雜湊地址欄
[0060]356?狀態(tài)欄
[0061]302?區(qū)塊位遮罩暫存器
[0062]303?區(qū)塊號碼暫存器
[0063]304?最小指標暫存器
[0064]306?最大指標暫存器
[0065]308?最小改變計數(shù)器
[0066]312?最大改變計數(shù)器
[0067]314?總計數(shù)器
[0068]316?中間指標暫存器
[0069]318?周期匹配計數(shù)器
[0070]342?方向暫存器
[0071]344?樣態(tài)暫存器
[0072]346?樣態(tài)順序暫存器
[0073]348?樣態(tài)區(qū)域暫存器
[0074]352?搜尋指標暫存器
[0075]332?硬件單元
[0076]322?控制邏輯
[0077]328?預取要求隊列
[0078]324?提取指標器
[0079]326?推進指標器
[0080]2002?雜湊虛擬地址庫
[0081]2102A ?核心 A
[0082]2102B ?核心 B
[0083]2104?高度反應式的預取單元
[0084]2106?共享的高度反應式的預取單元
【具體實施方式】
[0085]以下將詳細討論本發(fā)明各種實施例的制造及使用方法。然而值得注意的是,本發(fā)明所提供的許多可行的發(fā)明概念可實施在各種特定范圍中。這些特定實施例僅用于舉例說明本發(fā)明的制造及使用方法,但非用于限定本發(fā)明的范圍。
[0086]廣泛而言,關(guān)于上述問題的解決方法可以后續(xù)敘述加以解釋。當一存儲器的所有存取(指令、操作或要求)皆表示在一張圖上時,所有存取(指令、操作或要求)的一集合可被一定界框圈起來。當外加的存取要求亦表示于同一圖上時,這些存取要求亦可被調(diào)整大小后的定界框圈起來。上述首張圖如圖8所示為一存儲器區(qū)塊的兩次存取(指令或操作)中。圖8的X軸表示指令的存取的時間,Y軸表示具有4KB區(qū)塊的存取的64字節(jié)快取線的索引。首先,描繪第一次的兩個存取:第一個存取是對快取線5進行存取,第二個存取要求是對快取線6進行存取。如圖所示的一定界框?qū)⒋泶嫒∫蟮膬牲c圈起來。
[0087]再者,第三個存取要求發(fā)生于快取線7,定界框變大使得代表第三個存取要求的新點可被定界框圈起在內(nèi)。隨著新的存取不斷發(fā)生,定界框必隨著X軸擴大,并且定界框的上緣亦隨著Y軸擴大(此為向上的例子)。上述定界框上緣以及下緣的移動的歷史紀錄將用以決定存取樣態(tài)的趨勢為向上、向下或者都不是。
[0088]除了追蹤定界框的上緣以及下緣的趨勢以決定一趨勢方向外,追蹤個別的存取要求也是必要的,因為存取要求跳過一或兩個快取線的事件時常發(fā)生。因此,為了避免跳過所預取快取線的事件發(fā)生,一旦檢測到一向上或向下的趨勢,預取單