算法預(yù)取數(shù)據(jù)。例如,第一預(yù)取器142檢查加載/存儲單元134、LI數(shù)據(jù)高速緩存116和/或L2高速緩存118產(chǎn)生的存儲器的存取流,并根據(jù)第一算法將數(shù)據(jù)從系統(tǒng)存儲器預(yù)取到微處理器100。較佳的是,第一存取器142產(chǎn)生到總線接口單元122的請求,以將數(shù)據(jù)從系統(tǒng)存儲器讀取到LI數(shù)據(jù)高速緩存116、L2高速緩存118或預(yù)取緩沖器(未示出)。流程進(jìn)入方框204。
[0018]在方框204,第二預(yù)取器144預(yù)取數(shù)據(jù),與在方框202的第一預(yù)取器142類似;然而,第二預(yù)取器144根據(jù)與第一預(yù)取器142使用的第一算法不同的第二算法進(jìn)行預(yù)取。較佳的是,第二預(yù)取器144使用的第二算法比第一預(yù)取器142使用的第一算法更復(fù)雜且因此能夠預(yù)測更復(fù)雜的存儲器存取模式。例如,第二預(yù)取器144可以使用與在上述美國專利申請第13/033,765號中描述的算法類似的預(yù)取算法。第二預(yù)取器144檢測在存儲區(qū)域內(nèi)的存儲器存取模式,并且第二預(yù)取器144根據(jù)第二算法從存儲區(qū)域預(yù)取數(shù)據(jù)。在一個實(shí)施例中,存儲區(qū)域是如微處理器的虛擬存儲能力(virtual memory capability)定義的存儲頁面(memory page)。通過存儲頁面的尺寸以及存儲頁面與其尺寸對齊的事實(shí)來描述存儲頁面。例如,一實(shí)施例為考慮存儲頁面的尺寸是4KB且對齊4KB地址邊界上,然而,亦可以使用其它頁面尺寸于其他實(shí)施例中。此外,第二算法除了存儲頁面之外還可以使用存儲區(qū)域(memory reg1n)。應(yīng)該理解雖然方框202和204在圖2中以相繼次序出現(xiàn),但第一預(yù)取器142和第二預(yù)取器144較佳的是分別根據(jù)它們的第一算法和第二算法同時地操作以從系統(tǒng)存儲器預(yù)取數(shù)據(jù)。也應(yīng)該理解第二預(yù)取器144檢查的存儲器的存取流可以與第一預(yù)取器142檢查的存取流不同。此外,第一預(yù)取器對應(yīng)的第一存取流和第二預(yù)取器對應(yīng)的第二存取流可以是相同。另外,第一存取流和第二存取流中的每個存儲器存取指定虛擬存儲地址。流程進(jìn)入方框206。
[0019]在206,第二預(yù)取器144將方框204的存儲區(qū)域的描述符(descriptor)提供給第一預(yù)取器142。發(fā)送存儲區(qū)域描述符作為給第一預(yù)取器142的通知以停止從存儲區(qū)域預(yù)取。較佳的是,存儲器描述符包括存儲地址。在一個實(shí)施例中,存儲區(qū)域描述符還可以包括存儲區(qū)域的尺寸,而在其它實(shí)施例中,尺寸是預(yù)定的,如,預(yù)定的尺寸是虛擬存儲系統(tǒng)支持的最小存儲頁面的尺寸。預(yù)定的尺寸可以是可編程的,如,通過B1S、操作系統(tǒng)或其它軟件,如,經(jīng)由微處理器100的可編程寄存器(如,模型特定的寄存器),或者通過專注于這樣的目的的微處理器100的熔化的熔絲。流程進(jìn)入方框208。
[0020]在方框208,第一預(yù)取器142接收在方框206第二預(yù)取器144提供的存儲區(qū)域描述符并停止從存儲區(qū)域預(yù)取。第一預(yù)取器142包括存儲元件以及邏輯,所述存儲元件用于對存儲區(qū)域描述符進(jìn)行存儲,所述的邏輯確定第一算法所預(yù)測的數(shù)據(jù)其應(yīng)該從其中被預(yù)取的存儲位置是否在存儲區(qū)域內(nèi)。在一個實(shí)施例中,第二預(yù)取器144能夠使用同時用于多個存儲區(qū)域的第二預(yù)取算法并且能夠?qū)⒍鄠€存儲區(qū)域描述符發(fā)送給第一預(yù)取器142,所述第一預(yù)取器142包括存儲多個存儲區(qū)域描述符的多個存儲元件和關(guān)聯(lián)的邏輯。較佳的是,即使當(dāng)?shù)谝活A(yù)取器142被阻止在存儲區(qū)域中預(yù)取時,第一預(yù)取器142仍繼續(xù)監(jiān)控存儲器存取,使得如果第二預(yù)取器144告訴它再次開始從存儲區(qū)域預(yù)取(如下面參照方框214所述的)時,它可以基于最新的存儲器存取歷史記錄這樣做。流程進(jìn)入方框212。
[0021]在方框212,第二預(yù)取器144在預(yù)測程序在存儲區(qū)域中所形成的存儲器存取模式的結(jié)果上失去可信度,而告訴第一預(yù)取器142重新開始從存儲區(qū)域預(yù)取。在一個實(shí)施例中,如果第二預(yù)取器144已經(jīng)在方框204檢測到在存儲區(qū)域中的存儲器存取模式,但第二預(yù)取器144檢測到接下來在存儲區(qū)域中的存取流的存儲器存取模式不是預(yù)料的模式,則第二預(yù)取器144失去預(yù)測可信度。在一個實(shí)施例中,在第二預(yù)取器144失去預(yù)測可信度之前,第二預(yù)取器后來檢測到,到存儲區(qū)域的存儲器存取其預(yù)定數(shù)量不處于所述的存儲器存取模式。與關(guān)于方框206的上述方式類似,所述預(yù)定數(shù)量可以是可編程的。較佳的是,當(dāng)存取流已經(jīng)離開原本預(yù)測的存儲區(qū)域時,(例如,存取流已經(jīng)成為了預(yù)定的、優(yōu)選地可編程的多個不在存儲區(qū)域內(nèi)的存取時),第二預(yù)取器就告訴第一預(yù)取器142重新開始從存儲區(qū)域預(yù)取。流程進(jìn)入方框214。
[0022]在方框214,第一預(yù)取器142響應(yīng)于在方框212從第二預(yù)取器144接收通信,根據(jù)第一算法重新開始從存儲區(qū)域預(yù)取。流程在方框214結(jié)束。
[0023]通信的預(yù)取器節(jié)流
[0024]已經(jīng)描述了第二預(yù)取器144告訴第一預(yù)取器142停止從存儲區(qū)域預(yù)取并恢復(fù)從存儲區(qū)域預(yù)取的實(shí)施例。現(xiàn)在將描述第二預(yù)取器144告訴第一預(yù)取器142對其預(yù)取請求產(chǎn)生速率進(jìn)行節(jié)流而不是告訴第一預(yù)取器142完全停止預(yù)取的實(shí)施例。第二預(yù)取器144可以在其檢測到其正在以高速產(chǎn)生預(yù)取請求并且因此例如消費(fèi)相對較大量的存儲器帶寬,并且不想預(yù)取器142/144組合起來壓垮存儲器子系統(tǒng)時這樣做。
[0025]現(xiàn)在參考圖3,示出了圖示出圖1的微處理器100中的操作的流程圖,更具體地,圖示第一預(yù)取器142和第二預(yù)取器144的通信操作的流程圖。流程以方框302和304開始。
[0026]在方框302,第一預(yù)取器142根據(jù)第一算法預(yù)取數(shù)據(jù),例如,如上面關(guān)于圖2所述的。流程進(jìn)入框304。
[0027]在方框304,第二預(yù)取器144預(yù)取數(shù)據(jù),與在方框302的第一預(yù)取器142類似;然而,第二預(yù)取器144根據(jù)與第一預(yù)取器142使用的第一算法不同的第二算法進(jìn)行預(yù)取,例如,如上面關(guān)于圖2所述的。應(yīng)該理解雖然方框302和304在圖3中以相繼次序出現(xiàn),但第一預(yù)取器142和第二預(yù)取器144較佳的是分別根據(jù)它們各自的第一算法和第二算法同時地操作以從系統(tǒng)存儲器預(yù)取數(shù)據(jù)。也應(yīng)該理解第二預(yù)取器144檢查的存儲器的存取流可以與第一預(yù)取器142檢查的存取流不同。流程進(jìn)入方框306。
[0028]在方框306,第二預(yù)取器144檢測到其正在以超過閾值速率X的速率進(jìn)行預(yù)取。在一個實(shí)施例中,閾值速率X (以及閾值速率Z,其用途在下面論述)是第二預(yù)取器144在第二預(yù)取器144的時鐘信號的每M個周期進(jìn)行的預(yù)取請求的數(shù)量,并且其中M是預(yù)定值(如,64)。一般而言,通過第二預(yù)取器144的超過速率X的預(yù)取速率指示第二預(yù)取器144可能正在消耗總線148的相對較大量的帶寬并且因此可以是這樣的指示:第二預(yù)取器144應(yīng)該告訴第一預(yù)取器142對自己進(jìn)行節(jié)流以避免消耗過量的總線148的帶寬。流程進(jìn)入方框308。
[0029]在方框308,響應(yīng)于在方框306的檢測,第二預(yù)取器144向第一預(yù)取器142提供指示以告訴第一預(yù)取器142對自己進(jìn)行節(jié)流。流程進(jìn)入方框312。
[0030]在方框312,第一預(yù)取器142接收第二預(yù)取器144在方框308提供的節(jié)流指示,并且將其預(yù)取節(jié)流回到低于閾值速率Y。在一個實(shí)施例中,閾值速率Y是第一預(yù)取器142在第二預(yù)取器144的時鐘信號的每P個周期進(jìn)行的預(yù)取請求的數(shù)量,并且其中P是預(yù)定值(如,64)。流程進(jìn)入方框314。
[0031]在方框314,第二預(yù)取器144最終檢測到其正在以低于閾值速率Z的速率進(jìn)行預(yù)取。在一個實(shí)施例中,閾值速率Z等于閾值速率X。然而,在其它實(shí)施例中,閾值速率Z小于閾值速率X,閾值速率Z用于在節(jié)流機(jī)制中提供一些滯后。流程進(jìn)入方框316。
[0032]在方框316,第二預(yù)取器144響應(yīng)于在方框314的檢測,告訴第一預(yù)取器142不再對自己進(jìn)行節(jié)流。流程進(jìn)入方框318。
[0033]在方框318中,第一預(yù)取器142響應(yīng)于在方框316從第二預(yù)取器144接收到通信,停止在預(yù)取上對自己節(jié)流。流程在方框318結(jié)束。
[0034]在一個實(shí)施例中,閾值速率X、Y和/或Z可以是可編程的,如,通過B1S、操作系統(tǒng)或其它軟件,如,經(jīng)由微處理器100的可編程寄存器(如,模型特定的寄存器),或者通過專注于這樣的目的的微處理器100的熔化的熔絲。在一個實(shí)施例中,閾值速率X、Y和/或Z可以基于各種因素來確定的。
[0035]在一個實(shí)施例中,微處理器100的制造商和/或用戶在特定程序的執(zhí)行實(shí)例之前進(jìn)行分析,所述特定程序的性能是特別期望被優(yōu)化的,并且從分析中確定提供較好性能的閾值速率。在一個實(shí)施例中,較好的執(zhí)行閾值速率響應(yīng)于系統(tǒng)檢測到當(dāng)前運(yùn)行的程序是被分析的程序之一而被編程到微處理器100中,閾值速率已經(jīng)針對該被分析的程序之一通過之前的分析確定。在另一個實(shí)施例中,通過分析確定的閾值速率與識別被分析的程序的信息一起在初始化時間(如,通過B1S或者操作系統(tǒng))被編程