TWI636362B - 高性能快取方法和裝置 - Google Patents

高性能快取方法和裝置 Download PDF

Info

Publication number
TWI636362B
TWI636362B TW100122199A TW100122199A TWI636362B TW I636362 B TWI636362 B TW I636362B TW 100122199 A TW100122199 A TW 100122199A TW 100122199 A TW100122199 A TW 100122199A TW I636362 B TWI636362 B TW I636362B
Authority
TW
Taiwan
Prior art keywords
track
memory
address
instruction
branch
Prior art date
Application number
TW100122199A
Other languages
English (en)
Other versions
TW201301032A (zh
Inventor
林正浩
任浩琪
Original Assignee
林正浩
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 林正浩 filed Critical 林正浩
Priority to TW100122199A priority Critical patent/TWI636362B/zh
Publication of TW201301032A publication Critical patent/TW201301032A/zh
Application granted granted Critical
Publication of TWI636362B publication Critical patent/TWI636362B/zh

Links

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本發明提出一種能提供快取高性能的數位系統。該數位系統包括一個處理器核和一個快取控制單元。處理器核連接包含可執行指令的第一記憶體和第二記憶體器,其中第二記憶體速度高於第一記憶體。此外,處理器核用於執行第二記憶體中可執行指令中的一條或多條。快取控制單元連接第一記憶體、第二記憶體和處理器核,用於在處理器核執行至少一條或多條指令之前將它們從第一記憶體中填充到第二記憶體中。此外,快取控制單元還用於檢測從第一記憶體填充到第二記憶體中的指令,從中提取出至少包括分支資訊的指令資訊,用於根據被提取的指令資訊建立複數條軌道,並基於所述複數條軌道中的一條或多條填充至少一條或多條指令。

Description

高性能快取方法和裝置
本發明涉及積體電路及電腦領域。
通常而言,快取的作用是將記憶體中的一部分內容複製在其中,使這些內容能在短時間內由處理器核快速存取,以保證流水線的持續運行。
現行快取的定址都基於以下方式,首先用位址中的索引段定址讀出標籤記憶體中的標籤。同時用位址中索引段與塊內位移段共同定址讀出快取中的內容。此外,將標籤記憶體中讀出的標籤與位址中的標籤段進行匹配。如果從標籤記憶體中讀出的標籤與地址中的標籤段相同,那麼從快取中讀出的內容有效,稱為快取命中。否則,如果從標籤記憶體中讀出的標籤與地址中的標籤段不相同,成為快取缺失,從快取中讀出的內容無效。對於多路組相聯的快取,同時對各個路組並行進行上述操作,以檢測哪個路組快取命中。命中路組對應的讀出內容為有效內容。若所有路組都為缺失,則所有讀出內容都無效。快取缺失之後,快取控制邏輯將低級存儲媒介中的內容填充到快取中。
快取缺失可分為三類狀況:強制缺失、衝突缺失和容量缺失。在現有快取結構中,除了預取成功 的小部分內容外,強制缺失是不可避免的。但是,現有的預取操作會帶來不小的代價。此外,雖然多路組相聯快取可以降低衝突缺失,但受制於功耗及速度限制(如因為多路組相聯快取結構要求將所有路組由同一索引定址的內容及標籤同時讀出並比較),路組數難以超過一定數目。此外,為了使快取的速度與處理器核的運行速度匹配,很難增加快取的容量。所以有多層次快取的設置,低層次的快取比高層次的快取容量大但速度慢。
因此,現代的快取系統通常由多路組相連的多層次快取構成。新的快取結構,如:犧牲快取、跟蹤快取以及預取(取一個快取塊時把下一個快取塊也取來放在快取緩衝器或使用預取指令)等被用來彌補現有的某些缺陷。然而,隨著日漸擴大的處理器/記憶體速度鴻溝,現行體系結構,特別是多種多樣的快取缺失的可能性,仍是制約現代處理器性能提升的最嚴重瓶頸。
本發明提出的方法與系統裝置能直接解決上述或其他的一個或多個困難。
本發明提出一種數位系統,所述數位系統包括一個處理器核和一個快取控制單元。所述處理器核連接一個包含可執行指令的第一記憶體和一個比第 一記憶體速度更快的第二記憶體,且所述處理器用於執行一條或多條存儲在第二記憶體中的可執行指令。所述快取控制單元連接第一記憶體、第二記憶體和處理器核,用於在處理器核執行第一記憶體中的至少一條或多條指令之前將這一條或多條指令填充到第二記憶體中。此外,所述快取控制單元進一步能用於對正被從第一記憶體填充到第二記憶體的指令進行審查,從而提取出至少包含分支(轉移)資訊的指令資訊,並根據提取出的指令資訊建立複數條軌道,以及根據複數條指令軌道中的一條或多條軌道填充至少一條或多條指令。
本發明還提出一種用於輔助處理器核運行的方法,所述處理器核連接一個包含可執行指令的第一記憶體和一個比第一記憶體速度更快的第二記憶體。所述方法包括對正被從第一記憶體填充到第二記憶體的指令進行審查,從而提取出至少包括分支資訊的指令資訊,根據提取出的指令資訊建立複數條軌道,以及根據複數條指令軌道中的一條或多條軌道將至少一條或多條指令在被處理器核執行前從第一記憶體填充到第二記憶體,使得處理器核能不依賴於第一記憶體獲取所述至少一條或多條指令。
本發明還提出一種用於快取控制設備以控制處理器核快取操作的方法。所述處理器核連接一個包 含可執行指令的第一記憶體和一個比第一記憶體速度更快的第二記憶體;且所述處理器核用於執行一條或多條第二記憶體中可執行指令。所述方法包括對正被從第一記憶體填充到第二記憶體的指令進行審查,從被審查的指令中提取出指令資訊。所述方法還包括在處理器核執行分支點(轉移點)前,根據提取的指令資訊確定所述分支點,以及將對應於分支點的分支目標指令的指令段從第一記憶體填充到第二記憶體,使第二記憶體包含處理器核執行所述分支點導致的任何指令。
本發明還提出一種利用快取控制單元控制包括連接處理器核的第一記憶體和連接所述第一記憶體的第二記憶體在內的複數個快取記憶體的方法。所述方法包括對被填充到複數個記憶體中的指令進行審查,從被審查的指令中提取出指令資訊。所述方法還包括根據提取出的指令資訊在軌道表中創建軌跡點,用低層次快取記憶塊號和高層次快取記憶塊號之一表示分支目標軌跡點的表項。其中,當使用低層次快取記憶塊號表示分支目標軌跡點時,所述分支目標軌跡點對應的一個指令段被填充到第一記憶體中;當使用高層次快取記憶塊號表示分支目標軌跡點時,所述分支目標軌跡對應的指令段被填充到第二記憶體而不是第一記憶體中。
本發明還提出一個用於處理器核控制快取運行快取控制設備。所述處理器核連接一個包含可執行指令的第一記憶體和一個比第一記憶體速度更快的第二記憶體,且所述處理器被配置為執行第二記憶體中可執行指令中的一條或多條。所述設備包括一個第一填充生成單元,一個循跡器和一個分配器。所述第一填充生成單元用於審查從第一記憶體填充到第二記憶體中的指令,並從被審查的指令中提取出指令資訊。所述循跡器用於根據提取的指令資訊控制領先指標,從而在處理器核執行到分支點之前確定所述分支點。此外,所述分配器用於將分支點的目標指令對應的指令段從第一記憶體填充到第二記憶體,使第二記憶體包含處理器核執行所述分支點導致的任何指令。
對於本領域專業人士,還可以在本發明的說明、權利要求和附圖的啟發下,理解、領會本發明所包含其他方面內容。
雖然該發明可以以多種形式的修改和替換來擴展,說明書中也列出了一些具體的實施圖例並進行詳細闡述。應當理解的是,發明者的出發點不是將該發明限於所闡述的特定實施例,正相反,發明者的出發點在於保護所有基於由本權利聲明定義的精 神或範圍內進行的改進、等效轉換和修改。
圖1是本發明所述的計算環境的一個實施例。如圖1所示,計算環境1000包括一個處理器核125、一個高層次記憶體124、一個填充/生成器123、一個低級記憶體122和一個循跡引擎320。應當理解的是,圖中所示的部件或設備僅僅是為了說明而不是限制,可以省略某些部件或設備,也可以增加其他的部件或設備。此外,本實施例僅對用於讀取指令的裝置進行描述,用於讀取資料和存儲資料的裝置與之類似。
高層次記憶體124和低級記憶體122可以由任意合適的存儲設備構成,例如靜態記憶體(SRAM)、動態記憶體(DRAM)和快閃記憶體(flash memory)。在本實施例中,記憶體的層次表示其與處理器核在連接上的接近程度。越靠近處理器核的記憶體層次越高。此外,通常一個較高層次的記憶體在速度上越快,且面積越小。高層次記憶體124可以作為系統的快取或當有其他快取存在時的一級快取,也可以被分割為複數個被稱為塊(如:記憶塊)的存儲片段,用於存儲處理器核125要訪問的資料(即:指令和資料)。
處理器核125可以是能以流水線方式並與快取系統協同工作的任意合適的處理器。處理器核125 可以使用分開的指令快取與資料快取,並可以包含一些用於快取操作的指令。當處理器核125執行一條指令時,處理器核125首先需要從記憶體中讀入指令和/或資料。循跡引擎320和填充/生成器123用於將處理器核125將要執行到的指令填充到高層次記憶體124中,使處理器核125能從高層次記憶體124中以非常低的快取缺失率讀到所需的指令。在本實施例中,術語“填充”表示將資料/指令從較低層次的記憶體移動到較高層次的記憶體中,術語“訪問記憶體”表示處理器核125對最接近的記憶體(即高層次記憶體124或一級快取)進行讀或寫。
循跡引擎320及諸如填充/生成器123其他部件可以作為處理器晶片的一部分實現在同一積體電路中,也可以是獨立的晶片,或作為程式在處理器晶片中運行,或由軟體和硬體組合構成。
在本實施例中,循跡引擎(tracking engine)320根據填充/生成器123和處理器核125發送來的資訊,產生適當的位址用於獲取所需指令或包含所需指令的指令塊。循跡引擎320還可以向填充/生成器123提供適當的位址,使得填充/生成器123能利用該位址從低級記憶體122中獲取對應指令或包含對應指令的指令塊,並將所述指令或指令塊存儲到記憶體124中。此外,循跡引擎320還可以產生對高 層次指令記憶體124的塊號。所述塊號與處理器核125產生的塊內偏移量可以一同構成指令定址位址,在不發生快取缺失的情況下,從高層次指令記憶體124中取得對應的指令送往處理器核125。
具體來說,填充/生成器123包括一個生成器130和一個填充引擎132。填充引擎132可以根據適當的位址獲取指令或指令塊。生成器130可以對從低級記憶體122中獲取來的每一條指令進行審查,並提取出某些資訊,如:指令類型、指令位址、分支指令的分支目標資訊。所述指令以及包含分支目標資訊的提取出的資訊被送到循跡引擎320。在本實施例中一條分支指令或一個分支點指的是任何適當的能導致處理器核125改變執行流(如:非按順序執行一條指令)的指令形式。循跡引擎320可以根據所述指令以及分支目標資訊確定位址資訊,如:指令類型、分支源位址和分支目標位址資訊。舉例而言,指令類型可以包括條件分支指令、無條件分支指令和其他指令等。特別地,可以認為無條件分支指令是條件分支指令的一種特例,即條件總是成立。因此,指令類型可以分為分支指令和其他指令等。分支源位址可以指分支指令本身的位址,分支目標位址可以指當分支成功發生時將被轉移到的位址。此外,還可以包括其他資訊。
此外,循跡引擎320可以根據所確定的資訊提供的用於填充高層次記憶體124的位址資訊建立位址樹或軌道表。圖2A給出了根據本發明所述方法實現位址樹的一個實施例。
如圖2A所示,位址樹300可以包括樹節點310和312,樹幹301、302、304、305和307,以及樹支303和306。一個樹幹對應一段固定或可變長度的指令序列。一個樹節點可以是一條在該指令後可能發生轉移的分支指令。如果分支轉移成功發生,一個連接所述樹節點和分支目標位址的樹支就被建立起來。舉例而言,301、302、304、305和307是對應樹幹的普通指令段;310和312是對應樹節點的分支指令;311和313是分支目標,並能以此建立樹支303和306。此外,其他可能的結構也可以被使用。
在程式執行過程中,位址樹300或位址樹300中的任意部分可以被用做處理器核125執行的一個指令序列的軌跡或軌道。所述指令序列的第一條指令可以被認為是軌跡頭(HOL)或軌道頭,且包括所述第一條指令的指令段被填充到高層次記憶體124中,以被處理器核125使用。在執行過程中,當前指令可以成為正在執行的指令序列中的第一條指令,這樣HOL就沿軌跡移動。此外,還可以產生 一個或多個預測軌跡頭(PHOL),用於指示處理器核125可能使用的指令序列。舉例而言,在一個樹節點(即,一條分支指令),根據分支是否發生,可能存在兩個PHOL。在執行過程中,可以根據軌跡中的分支點移動所述PHOL,且PHOL通常領先於HOL。
根據分支節點的層數,位址樹300可以提供不同深度。舉例而言,一個一層位址樹可以僅支援一層分支(如:下一個分支),一個兩層位址樹可以支援兩層分支(如:當第一層分支沒有發生時的所述第一層分支之後的分支,或當第一層分支發生時的所述第一層分支對應分支目標軌道上的分支);此外,一個多層位址樹可以支援多層分支。
圖2B是基於本發明所述位址樹運行的一個實施例。如圖2B所示,直線表示程式,曲線表示轉移路徑,粗點表示分支指令,虛線表示對應程式按固定長度或近似長度指令段的劃分(如:指令段)。
一開始,處理器核125執行程式段30,直到條件分支指令31。若分支指令31的分支轉移條件不成立,則處理器核125執行程式段33,直到無條件分支指令36,之後沿轉移路徑34途徑無條件分支轉移至程式段37。另一方面,若在執行條件分支指令31時分支轉移條件成立,則處理器核125執行沿 轉移路徑32轉移到的程式段35,之後再繼續執行程式段37。
在執行完程式段37後,處理器核125執行程式段38直到用於迴圈的條件分支指令39。若條件分支指令39的迴圈條件成立,則沿轉移路徑40再次執行程式段38。重複多次執行38段直至迴圈條件不成立,之後處理器核125執行程式段41。
所述多個程式段可以由指令段11、12、13、14、15、16和17表示,且每個指令段可以包含相同數目的指令或在變長指令集時的不同數目的指令。舉例而言,指令段11可以包括程式段30中的全部指令和程式段33中的一部分指令;指令段12可以包括程式段33中的另一部分指令;指令段13可以包括程式段35中的一部分指令;指令段14可以包括程式段35中的另一部分指令和程式段37中的一部分指令;指令段15可以包括對應程式段37中的另一部分指令;指令段16可以包括程式段38中的一部分指令;指令段17可以包括程式段38中的另一部分指令和程式段41中的一部分指令。可以根據應用目標或硬體資源確定每個指令段的大小。
為便於描述,在本實施例中假設對指令段的填充可以不採用交替填充的方法,都是在一個指令段填充完成後再將下一個待填充指令段填充到高層次 指令記憶體124中。此外,假設位址樹300的深度為一層。即只有一層分支被用於將指令段填充到高層次記憶體124中。其他配置方法也可以被類似使用。在處理器核125運行之初,填充/生成器123開始將指令段11填充到高層次記憶體124中,並掃描被填充到高層次記憶體124中的每條指令。在某些情況下,可以一次掃描兩條或更多指令,執行一條指令,掃描到的指令領先於執行到的指令。舉例而言,可以在一個時鐘週期內審查兩條指令,同時處理器核125執行一條指令;或在多發射處理器情況下,在一個時鐘週期內審查八條指令,同時處理器核125執行四條指令。其他配置方法也可以被用於在執行前進行掃描。
此外,填充/生成器123掃描條件分支指令31後,填充/生成器123可以判斷出條件分支指令31是一條分支指令,且能提取出分支指令31的位於程式段35中的目標位址。這樣,循跡引擎320控制填充/生成器123將所述目標位址對應的指令段,即指令段13,填充到高層次記憶體124中。這樣,指令段13在條件分支指令31被執行前就被填充到高層次記憶體124中。此外,分支指令31對應順序執行的下一條指令所位於的指令段11已經被填充到高層次記憶體124中,所以不需要額外填充操作。
此外,當執行到分支指令31時,假設分支轉移條件不成立,則繼續執行指令段11。當指令段11中的最後一條指令被執行時,後一指令段12已經被填充到高層次指令記憶體124中,使得指令段11中最後一條指令執行完畢後能在不發生快取缺失的情況下執行後一條指令。
在填充指令段12時,對正在填充的指令進行掃描。填充/生成器123可以發現指令段12的最後一條指令是分支指令(即無條件分支指令36)。這樣,分支指令36目標位址對應的指令段(即指令段14)被填充到高層次指令記憶體124中。
同樣地,在指令段13中的最後一條指令被執行完之前就已經可以知道最後一條指令對應的下一指令在指令段14中。由於指令段14已被填充,因此不需要額外填充操作。同理,在處理器核125執行指令段15、16和17中的任意指令前,將指令段15、16和17填充到高層次指令記憶體124中。
此外,當掃描到指令段17中用於迴圈的分支指令39時,由於目標指令段(即指令段16)和順序執行下一指令位址對應的指令段都已經被填充到高層次記憶體124中,因此不需要額外填充操作。當指令39的分支轉移條件不再成立時,迴圈結束,繼續執行指令段17中的後續指令。
綜上所述,循跡引擎320和其他部件可以根據地址樹的概念控制上述操作從而充分地降低快取缺失率。循跡引擎320和其他部件(如:填充/生成器123)也可以是指類似快取控制器的面向多種部件的介面,從而充分地降低快取缺失率。圖3A是本發明所述快取系統的一個實施例2000。
如圖3A所示,循跡引擎320包括一個軌道表126和一個循跡器170。軌道表可以包含處理器核125所需執行的指令的軌道,循跡器170可以根據軌道表126提供多個位址。在本實施例中,一條軌道代表一個將被執行的指令序列(如:一個指令段)。這種表示方式也可以包括任意合適的資料類型,如位址、塊號,或其他數位。此外,當一條軌道包含一個具有可能改變程式流或處於另一個不同的指令段中的分支目標的分支點時建立一條新的軌道,所述分支目標的情況例如下一指令段中的一條指令,一個異常處理程式,以及不同的程式線程等。所述指令序列可以包含相同數目的指令,也可以在例如應用於變長指令集時包含不同數目的指令。
軌道表126可以包含複數條軌道,軌道表126中的每條軌道對應軌道表126中的一行,且具有一個對應於記憶塊的行號或塊號。一條軌道可以包括複數個軌跡點,每個軌跡點對應一條單獨的位址。 此外,如同一條軌道對應軌道表126中的一個單獨的行一樣,一個軌跡點對應軌道表126中對應行的一個單獨的表項(如:存儲單元)。這樣,軌道中的軌跡點總數可以等於軌道表126中一行的表項總數。此外,其他配置方法也可以被使用。
一個軌跡點(即表項中的單獨一項)可以包含一條分支指令的資訊,所述分支指令的分支目標可以在另一條軌道中。這樣,軌跡點的內容可以包括軌跡點對應的指令的資訊和分支目標位址的資訊,所述分支目標位址的資訊可以包括所述目標軌道的軌道號,以及用於定位表項在目標軌道中位置的偏移量。通過檢查軌跡點內容,可以根據軌道號確定目標軌道,並根據偏移量確定目標軌道中的一個特定的表項。這樣,軌道表就成為一個分支軌道表項位址對應分支源位址、表項內容對應分支目標位址的表。
例如,在圖3A中,處理器核125使用(M+Z)位元的指令位址讀取指令並運行,其中M和Z都是整數。位址中M位元部分可以被用於指示高位位址,Z位元部分可以被只是偏移量。軌道表126可以包含2M行,即2M條軌道,且M位元高位位址可以被用於對軌道表126中的軌道進行定址。每個行可以包含2Z個軌道表項,即2Z個軌跡點,且偏移量 (Z位)可以被用於在對應行中對一個特定的軌跡點(表項)進行定址。
當新軌道被建立時,可以將新建軌道放置在軌道表中的一個有效行中。如果所述新軌道包含一個分支軌跡點(對應一條分支源指令),那麼在所述行中的一個表項內建立一個分支軌跡點。可以根據分支源位址確定所述分支點在軌道表126中的行及表項的位置。舉例而言,可以根據分支源位址的高位位址確定行,並根據分支源位址的偏移量確定表項。
此外,行中的每個表項或軌跡點可以包含一種內容格式,所述格式包括類型區域57、XADDR區域58和YADDR區域59。此外還可以包含其他區域。類型區域57可以表示軌跡點對應的指令的類型。如之前所述,指令類型可以包括條件分支指令、無條件分支指令和其他指令。XADDR區域58可以包含M位元位址,也被稱為第一維位址或簡稱為第一位址。YADDR區域59可以包含Z位元位址,也被稱為第二維位址或簡稱為第二位址。
此外,新軌跡點的內容可以對應分支目標指令。換句話說,分支軌跡點的內容存儲了分支目標位址資訊。舉例而言,軌道表126中的對應與一條分支目標指令的特定的行的行號或塊號被作為第一位址58存儲到所述分支軌跡點的內容中。此外,所 述分支目標的偏移量被作為第二位址59存儲到所述分支軌跡點的內容中。所述偏移量可以根據分支源指令位址和分支轉移位移(距離)計算得到。這樣,在對分支目標進行定址時,存儲在分支軌跡點(即所述分支源指令)中的第一位址XADDR 58被用做行位址,存儲在分支軌跡點中的第二位址YADDR 59被用做列地址。
指令記憶體46可以是高層次記憶體124的一部分,用於指令訪問,並可以由任意合適的高性能記憶體構成。指令記憶體46可以包含2M個記憶塊,每個記憶塊包含2Z個位元組或字。
循跡器170可以由多種部件或設備構成,如:寄存器、選擇器、堆疊和/或其他存儲模組,用於確定處理器核125執行的下一軌道。循跡器170可以根據軌道表126中的當前軌道、軌跡點資訊和是否因處理器核125的執行發生分支轉移等資訊確定下一軌道。
舉例而言,在運行過程中,匯流排55上傳遞了(M+Z)位元的指令位址。M位元位址通過匯流排56被作為第一位址或XADDR(或X位址)送到軌道表126,Z為位址通過匯流排53被作為第二位址或YADDR(或Y地址)送到軌道表126。根據所述第一位址和第二位址,可以找到軌道表中的一個表 項,並將它的內容輸出到匯流排51上。若所述表項對應一條分支指令(一個分支軌跡點或分支源指令),則表項內容通過匯流排51被用做分支的目標位址。
如果所述分支指令的分支轉移條件不成立,那麼分支轉移不發生,且處理器核125發出的所述分支轉移不發生信號控制選擇器49選擇匯流排53上的YADDR經增一邏輯48增加一(1)個位元組或字後得到匯流排54上的值作為新的第二位址,並在匯流排52上輸出所述新位址。寄存器50保持第一位址不變,由增一邏輯48不斷增一(1)直至指向當前軌道上的下一個分支指令。此後,所述第一位址和第二位址被保持在寄存器50中並被提供到匯流排55上。
另一方面,如果所述分支指令的分支轉移條件成立,那麼分支轉移發生,且處理器核125發出的所述分支轉移發生信號控制選擇器49選擇匯流排51上的所述分支點對應的軌道表項的內容中存儲的新目標位址作為輸出送到匯流排52上。寄存器50保持所述改變後的第一位址,並將(M+Z)位的新位址提供到匯流排55上。處理器核125發出的用於控制選擇器49的信號也被成為“發生(taken)”信號,用於表示分支是否發生。
這樣,當處理器核125僅提供偏移量的同時,循跡引擎320提供了一個匯流排56上的塊位址,從而實現了對指令記憶體46進行定址的目的。處理器核125向循跡器170回饋分支指令執行情況(即“發生”信號),使得循跡器170能確定如何運行。
在新軌道被執行前,所述軌道對應的指令段已經被填充到指令記憶體46中。這樣的過程被反復執行,使得所有指令都能在不發生快取缺失的情況下被處理器核125執行。此外,還可以使用兩層的指標(PHOL),從而對第一個分支點之後的兩個後續分支點進行審查,且循跡器170和/或填充/生成器123可以將所述兩個分支點的兩條軌道對應的指令段填充到指令記憶體46中,從而更進一步隱藏填充快取的時延。
圖3B是本發明所述快取系統的另一個實施例3000。本實施例省略了與圖3A實施例相似的部件。如圖3B所示,匯流排56上的用於對軌道表126和指令記憶體46進行定址的XADDR位址或塊位址可以有多個不同的來源。這就是說,循跡器170可以從複數個位址源中選擇軌道。舉例而言,用多路選擇器65代替了圖3A中的選擇器49,使得能從四個不同的來源中進行選擇:匯流排51上的當前分支指令的目標位址(軌道表內容)、匯流排54上的第一 位址不變且第二位址增一(1)產生的一個正常位址、在匯流排64上的來源於堆疊61的一個位址,以及在匯流排62上的對應於異常處理程式入口的軌道位置。
多路選擇器65根據當前指令及運行狀態選擇一條軌道(當前軌道或新軌道)。舉例而言,如果第二位址對應的軌跡點不是分支指令,那麼第一位址保持不變,且增一邏輯48保持對第二位址的增一(1)直到下一分支指令。如果第二位址對應的軌跡點是分支指令或到達了一個分支指令,且分支條件不滿足,那麼第一位址仍然保持不變且第二位址增加直到下一個分支指令。另一方面,如果分支條件滿足,或所述分支是無條件的,那麼目標位址被用做新的第一位址從而到達一條新的軌道。最後,如果到達最後一條指令,之後也將進入下一指令段對應的一條新軌道。
一些特殊的程式,如異常處理程式,也可以被填充到高層次記憶體124中並建立對應軌道。這些特殊程式入口對應的軌跡點位址可以被存儲到一些特殊的寄存器(如:EXCP)中。當一個時間發生時(如:有一個異常發生),對應於一個特殊程式(如:一個異常處理程式)的軌跡點位址經匯流排62被選擇器65選中,以進入所述特殊程式。
此外,堆疊61可以包含複數個單獨的堆疊。每個單獨的堆疊都可以提供堆疊操作,如將指令入堆疊,以及將指令出堆疊,從而保存線程內容或保存“調用(CALL)”的路徑(routine)狀態。當一個程式調用一個路徑時,對應返回位址的軌跡點的位址和/或其他資訊可以入堆疊,並且當從一個調用路徑返回時,所述被保存的軌跡點位址和/或其他資訊可以出堆疊並根據所述軌跡點強制改變軌道(由選擇器65選擇64)。在某些情況中,處理器核125可以執行一種“跳轉並鏈結”類型的指令(即當路徑執行完畢後分支轉移或調用到返回位址)。同樣地,一個堆疊可以用來保存這種類型指令的返回位址。此外,處理器核125可以執行複數層嵌套的“調用”或“跳轉並鏈結”類型的指令。所述單獨堆疊可以包含複數層從而在不同的堆疊層次保存多個返回位址。此外,所述複數個堆疊可以支援多線程程式。軌道表126可以包含對應于不同線程的複數個堆疊,且線程標識器63可以被用來標識當前程式線程。此外,線程標識器63指向支援當前線程的當前堆疊。其他的來源或排列也可以被用在本實施例中。
這樣,通過使用複數個堆疊可以支援多線程程式,根據線程標識器63的標識,每個堆疊都可以被一個線程或程式單獨使用。
圖4是本發明所述快取系統的另一個實施例4000。實施例4000與圖3A中的實施例2000相似。然而,在本實施例中使用了指令記憶體78代替指令記憶體46。如圖4所示,指令記憶體78可以包含2N個記憶塊,其中N是整數且N≧M。這就是說,指令記憶體78可以比指令記憶體46包含更少的記憶塊。匯流排56上的第一位址也因此僅被用於對軌道表126定址。
此外,一個映射單元79可以將第一位址映射到N位長的塊號或塊位址80。這樣,送往高層次記憶體的位址可以通過映射從而減小高層次記憶體的大小。由於處理器核125幾乎不可能用到整個位址空間中的全部指令位址,因此採用這種基於映射的方法可以不提供對應於全部位址空間的記憶塊,從而減小指令記憶體78的大小。
圖5是本發明所述快取系統的另一個實施例5000。實施例5000與圖4中的實施例4000相似。然而,軌道表126可以只包含2N個行。這就是說,匯流排56上的第一位址經映射單元82映射後同時對軌道表126和指令記憶體78進行定址,以減少對容量大小的要求。
此外,在軌道表126和指令記憶體78中的總行數小於處理器核125全部可定址空間的情況下,軌 道表126中的行可以仍然使用M位作為第一位址並使用Z位作為第二位址,從而同時減少軌道表126和指令記憶體78的記憶體容量。
圖6是本發明所述快取系統的另一個實施例6000。實施例6000與圖5中的實施例5000相似。然而,如圖6所示,一個映射單元83被放置於軌道表126及指令記憶體78的外部,使得M位的第一位址84被軌道表126及指令記憶體78使用前被映射為N位的第一位址85。這樣,送到軌道表126、指令記憶體78和循跡器170的位址都經過了映射以減小容量。
這樣,軌道表126中的行可以使用N位的第一位址和Z位的第二位址,軌道表126和指令記憶體78中的總行數可以小於處理器核125可定址的全部位址空間,從而同時減少軌道表126和指令記憶體78的記憶體容量。此外,較短的第一位址可以提高整個系統的性能。
雖然上述的映射方法可以減少快取和軌道表的容量,每一個指令段仍然可以對應到一條軌道。額外的結構也可以被用於在不丟棄已建軌道資訊的情況下防止重複建立已建軌道。圖7A就是採用了上述一個或多個映射方法實現的本發明所述快取系統的另一個實施例8000。
如圖7A所示,快取系統8000包含低級記憶體122、高層次指令記憶體124和處理器核125。此外,快取系統8000還包含填充/生成器123、分配器1200、軌道表126和循跡器170。分配器1200、軌道表126和循跡器170構成了循跡引擎320(圖中未顯示)的主體部分。而且如之前所述,循跡引擎320、填充/生成器123和其他相關邏輯可以被用做一個快取控制單元。應當理解的是,這裏列出的多個部件只是為了便於描述,還可以包含其他部件,或某些部件可以被組合或省去。所述多個部件可以分佈在多個系統中,可以是物理存在的或虛擬的,也可以用硬體實現(如積體電路)、用軟體實現或由軟硬體組合實現。
此外,填充/生成器123可以包含一個填充引擎132、一個生成器130和位址翻譯單元131,且循跡器170可以包含一個多路選擇器137、寄存器138、增一邏輯136和堆疊135。還可以包含其他部件,或某些部件可以被組合或省去。為便於描述,根據特定的應用和配置,高層次記憶體124可以被視為一個一級(L1)快取,且低級記憶體122可以被視為一個二級(L2)快取或主記憶體。如之前所述,生成器130提取分支指令(源)位址(分支指令對應的軌道表位址)、分支類型,和分支目標位址(分支軌跡點對應的軌道表內容),用以建立軌道表126。
分配器1200可以被用於將存儲軌道資訊或分配後存儲軌道資訊以減少軌道表126和高層次記憶體124的容量大小要求。舉例而言,分配器1200可以包含一個主動表121。一個主動表可以存儲一條已建立的軌道的資訊,並建立一個位址(或位址的一部分)與一個諸如軌道在軌道表126中佔據的有效行所表示的塊號之間的映射。舉例而言,當建立一條軌道時,所述軌道的位址資訊被存儲到主動表中。也可以採用其他的安置形式。
如圖7A所示,主動表121可以被用於存儲指令段在高層次記憶體124中的塊位址,且每個塊位址對應一個塊號(BNX)。對應一個特定位址的塊號可以通過對位址和主動表121中的表項進行內容匹配得到。所述匹配成功內容所在位置可以被編碼得到一個塊號,所述塊號可以被用於索引軌道表中的一個行以及高層次記憶體124中的一個塊。如果匹配不成功,則意味著所述位址對應的軌道還沒有建立起來。對應所述位址的指令段被填充到高層次記憶體124中,一個新的軌道被建立在軌道表126裏由位址指標129通過匯流排153索引的行中,且主動表121裏由位址指標129通過匯流排153索引的項被更新(寫入)為對應的塊位址。圖8是本發明所述主動表的一個實施例。
如圖8所示,主動表121可以包括一個位址/資料雙向定址單元100。在一個方向上,資料/位址雙向定址單元100可以根據一個輸入的塊位址輸出一個BNX號。資料/位址雙向定址單元100通過匹配輸入的塊(高位)位址和資料/位址雙向定址單元100中的內容產生一個對應的BNX。在另一個方向上,資料/位址雙向定址單元100可以根據一個輸入的BNX號輸出一個對應的塊位址。所述輸入的BNX號可以索引到存儲所述塊位址的表項。此外,資料/位址雙向定址單元100可以包括複數個表項101,每個表項101包含一個寄存器、一個比較器、一個標誌位元111(即V位元)、一個標誌位元112(即A位元)和一個標誌位元113(即U位)。比較器的結果可以被送到編碼器102用於產生一個匹配的表項號。
控制邏輯107可以被用於控制讀/寫狀態。每一個表項101的V(有效)位可以被初始化為“0”,且每一個表項101的A(主動)位元可以被寫入信號線119上的一個主動信號。一個寫指標105可以指向資料/位址雙向定址單元100中的一個表項,且所述指標由一個迴圈自增單元110(圖7A中的129)產生。迴圈自增單元110能產生的最大值等於表項101的總數。當達到最大值後,迴圈自增單元110增一產生的下一個值從“0”重新開始,且不斷自增 直到再次達到最大值。
在運行過程中,當寫指標105指向一個當前表項101時,檢查當前表項101的V位和A位。如果V位和A位都是“0”,那麼當前表項是空閒、可以被寫入的。當寫操作完成後,迴圈自增單元110可以將指標增加一(1)從而指向下一個表項。然而,如果V位和A位中有一個不為“0”,那麼當前表項並不能被用於新的寫入,迴圈自增單元110可以將指標增加一(1)從而指向下一個表項,並檢查所述下一個表項的是否可以用於新的寫入。
在匹配過程中,輸入的塊位址資料104和每個表項101的寄存器中的內容進行比較。所述寄存器中的內容僅包含(對應高層次記憶體124中記憶塊的)位址的高位。如果匹配成功,那麼編碼器102將匹配結果編為一個表項號碼並將所述表項號碼送到匹配位址輸出109。如果匹配不成功,那麼所述輸入的塊位址被寫入由指標105指向的表項裏的寄存器101中,同時該表項裏的V位被設為“1”,且所述表項號碼被從到匹配位址輸出109。所述輸出的表項號碼之後會被用於表示BNX(因為它索引了一個記憶塊,因此也就是塊號)。所述輸入位址的低位元(即一個記憶塊中的偏移量)之後會被用於表示BNY。所述BNX和BNY一起用於表示BN,所 述BN之後會被存儲到一個軌道表項中,並被用於索引軌道表126、高層次記憶體124,和主動表121。雖然這裏使用的“BN”通常指包含BNX和BNY的“塊號”,但在本領域技術人員能夠理解的前提下,在某些特殊的情況裏,它也可以僅指位址的高位部分,即相當於BNX。此外,迴圈自增單元110可以將指標BNY增加一(1)從而指向下一個表項。
對於讀操作,讀位址106被用於在多個表項101中選擇一個表項,並將選中的表項裏的寄存器的內容讀出並送到資料輸出108,以及將所述選中的表項101的V位設置為“1”。
一個表項101裏的U位元可以被用於表示存儲狀態。當寫指標105指向一個表項101時,所述被指向的表項裏的U位被設置為“0”。當讀取一個表項101時,所述被讀出的表項裏的U位被設置為“1”。此外,當迴圈自增單元110產生一個寫指標105指向一個新的表項時,檢查所述新表項裏的U位。如果所述U位是“0”,那麼所述新表項是可以被用於替換的,且為了完成可能的資料寫入操作,寫指標105停留在所述新表項。然而,如果所述U位是“1”,那麼指標105進一步指向下一個表項。
可選地,一個視窗指標116可以被用來將其指向的表項裏的U位設置為“0”,且視窗(清除)指 標116位於寫指標105之前的N個表項的位置(N為一個整數)。可以通過使用加法器115將寫指標105的值增加N得到視窗指標116的值。寫指標105和視窗指標116之間的N個表項可以被認為是一個視窗。這樣,清除指標可以將一個表項裏的U位設置為“0”。之後,對該表項的任意一次讀操作都會導致所述U位元被設置為“1”。當寫指標105指向所述表項時,檢查所述U位。如果所述U位是“0”,即表示自從該表項被清除指標116清除後,該表項沒有被使用過,因此寫指標105停留在該表項並用於下一次的寫入。在另一方面,如果所述U位是“1”,即表示該表項最近被使用過,那麼寫指標移動到下一個表項。可以通過改變視窗的大小(即改變N的值)改變表項101中的表項被替換的頻率。這種方法可以被用做一種基於使用率的替換策略以替換主動表121中的表項。
可選地,所述U位可以超過一位,這樣就有多位U位。所述多位U位可以被寫指標105或視窗(清除)指標116清除,且每次讀操作可以將對應的多位U位的值增加“1”。在寫操作過程中,將當前表項裏的U位與一個預先設定的數值。如果U位的值小於所述預先設定的數值,那麼當前表項是可以被替換的。如果U位的值大於所述預先設定的數值,那麼指標105移動到下一個表項。
回到圖7A,當處理器核125開啟時,一個重置信號(圖中未顯示)把主動表121中所有表項的有效位置為“0”。當重置信號釋放時,一個重置向量(重置起點的指令位址)被放上匯流排141以送到主動表121進行匹配。因為在主動表121裏表項的內容中未尋到匹配,主動表121就把所述位址的高位部分(即重置向量)寫入指標129產生的WXADDR 153指向的主動表121中的表項,將所述表項的有效位設置為“1”,並通過匯流排144將所述重置向量送到填充引擎132。
填充引擎132根據重置向量對應的指令位址通過匯流排154從低級記憶體122獲取所述指令。所述獲取到的指令被填充到高層次記憶體124中由指標129產生的WXADDR 153索引的記憶塊中。同時,通過匯流排140從低級記憶體122獲取所述指令時,生成器130可以掃描並審查所述指令。此外,所述指令對應的軌跡資訊被寫入對應的表項或軌道表126中由WXADDR 153指向的行裏的軌跡點中。
當填充操作完成後,指標129移動到主動表121中的下一個可用表項。可選地,位址翻譯單元131可以對虛位址和實位址進行翻譯轉換。位址翻譯單元131也可以被放置在低級記憶體122之外,從而減少從低級記憶體122獲取到高層次記憶體124的 時延。
生成器130掃描填充到高層次記憶體124的指令塊中每一條指令。當生成器130找到一條分支指令時,計算出分支指令的目標位址。所述目標位址可以由包含所述分支指令的指令段起始位址加上所述分支指令的偏移量,並再加上分支轉移到目標指令的距離。所述目標位址的低位元部分就是所述分支目標指令在其行中的偏移量(之後將用BNY表示)。所述計算得到的目標位址的高位部分被用於與主動表121中的內容匹配。如果匹配不成功,那麼主動表121就把這個值通過匯流排144送到填充引擎132以實現填充操作。
在另一方面,如果匹配成功,那麼表示包含所述分支目標的指令段已經存儲在高層次記憶體124中,且匹配成功的行號碼(BNX)及分支目標指令在行(BNX)中的偏移量(BNY)(即合併稱為BN)被送到匯流排149用於寫入一個軌道表項。所述表項由WXADDR 153(行位址)以及在匯流排143上的從生成器130(列位址)來的表示分支指令在其所在指令段中偏移量的值共同索引。這樣,當指令段中所有指令都被掃描、處理後,在主動表121、軌道表126和高層次記憶體124中對應同一指令段的表項被同一個WXADDR索引。
更特殊地,高層次記憶體124包含了將被處理器核125使用的整個指令段,主動表121包含了將與後續指令段進行匹配的塊(高位)位址,且軌道表126包含了所述指令段中的全部分支軌跡點,包括:它們在指令段中的位置和它們的目標位址的BN值。一個BN值包括一個行位址BNX和一個列位址BNY。
圖9顯示了根據本發明技術方案使用軌道表126建立新軌道的方法的一個實施例。如圖9所示,一個已建立的軌道66(用BNX0表示)可以包含三條分支指令或分支點67、68和69。當審查分支點67時,一條新軌道70(用BNX1表示的下一個可用行)被建立起來用於存儲分支點67的目標指令,且軌道表126中的所述軌道的號碼或所述行號(即BNX1)被記錄在分支點67中作為第一位址。類似地,當審查分支點68時,在軌道表126中另一條新軌道71(用BNX2)表示被建立起來,且軌道號碼被記錄在分支點68中;當審查分支點69時,在軌道表126中另一條新軌道72(用BNX3)表示被建立起來,且軌道號碼被記錄在分支點69中。
這樣,單條軌道中對應全部分支點的新軌道可以被建立起來。此外,軌道表126可以足夠大從而容納全部塊號,且新軌道的號碼可以通過對已使用 的軌道中最大的軌道號碼加一(1)的方法得到。可選地,根據特定的軌道粒度,一條軌道對應的指令數目可以是多種的(較高粒度可以允許一個單獨的軌道或行用較小的表項數目代表包含較大個數的指令的指令段)。
回到圖7A,繼續之前的操作,循跡器170可以輸出一個BN 151用於對軌道表126和高層次記憶體124定址。這就是說,循跡器170可以對軌道表126、高層次記憶體124和處理器核125提供座標操作。圖7B顯示了快取系統8000中實現所述操作的一個組成部分的實施例。
如圖7B所示,循跡器170包括一個堆疊135、一個自增器136、一個多路選擇器137、一個寄存器138和一個異常處理程式位址寄存器139。在操作過程中,循跡器170控制軌道表126的一個讀指標。也就是說,循跡器170輸出一個位址(即BN 151)用於對軌道表126和高層次記憶體124進行定址。BN 151包含BNX 152和BNY 156。BNX 152可以被用於對軌道表126中的一個行或一條軌道進行定址,並對高層次記憶體124中的一個記憶塊進行定址,此時BNY 156可以被用於對軌道表126中由BNX 152指向的軌道或行中的一個表項進行定址。
循跡器170可以通過多路選擇器137選擇從不 同來源來的輸出BN 151。舉例而言,多路選擇器137可以有四個BN輸入來源:通過匯流排164送來的存儲在堆疊135中的一個BN、通過匯流排165送來的由當前BNX 151和經自增器136對當前BNY 156自增後的得到的BNY構成的一個新BN、通過匯流排150送來的來源於軌道表126的一個BN、以及來源於異常處理程式位址寄存器139的一個BN。還可以有其他的來源。如之前所述,存儲在堆疊135中的BN可以是函數調用或返回時的程式位址對應的BN值,存儲在異常處理程式位址寄存器139中的BN可以是異常處理程式的位址對應的BN值。多路選擇器137輸出的所有BN值均包含BNX和BNY。
此外,多路選擇器137受來自處理器核125的信號381控制以選擇一個特定的BN送到輸出418。舉例而言,當處理器核125發生異常時,多路選擇器137受信號381控制,選擇異常處理程式位址寄存器139送來的BN作為輸出418;當處理器核125進行函數調用返回時,多路選擇器137信號381控制,選擇堆疊135送來的BN作為輸出418;當處理器核125進行分支轉移時(信號381成為一個分支轉移信號),多路選擇器137信號381控制,選擇軌道表126送來的BN作為輸出418;以及當處理器核125不進行分支轉移或執行其他普通操作時,多路選擇器137受信號381控制選擇BN 165,即BNX 152 保持不變、BNY經自增器136增一後的BN作為輸出418。
從多路選擇器137來的匯流排或輸出418(即下一個BN)可以在處理器核125來的信號417的控制下被存儲到寄存器138中並被用於更新循跡器輸出的BN 151。當寄存器138受信號417控制保持當前BN 151不變時,寄存器138不會輸出所述輸出418。另一方面,當寄存器138受信號417控制更新當前BN 151時,所述輸出418被送到匯流排151上成為當前BN 151,從而更新BNX 152和BNY 156。
循跡器170提供的BN151包含BNX 152和BNY 156。BNX 152被用於對指令段定址,處理器核125則使用PC的偏移量獲取需要執行的指令。而且,BNX 152和BNY 156被送到軌道表126使得軌道表126能將下一個BN送到匯流排150上。
如圖7B所示,為了描述軌道表126和循跡器170之間的相互關係,假設軌道表126包含了軌道(即:行)410、411和412。每條軌道可以包含從0號到15號的16個表項或軌跡點。此外,軌跡點413(軌道410中的第8項)可以是一個分支目標為軌跡點414(軌道411中的第2項)的分支點,以及軌跡點415(軌道411中的第14項)可以是另一個分支點,其分支目標是軌跡點416(軌道412中 的第5項)。
假設軌道410對應的指令段已經被填充在高層次記憶體124中,且處理器核125從軌道410的起始位置開始執行指令。這就是說,處理器核125的程式計數器(PC)從軌道410中的第0項對應的指令位址開始運行。
同時,假設循跡器170也送出一個包含BNX和BNY的指向軌道表126中軌道410的第0項的讀指標151。軌道410中的其他表項也可以被用到。可以通過檢查所述表項中的內容確定指令的類型資訊和位址資訊等。
正如之前所述,當從軌道410的第0項開始運行時,由於軌道410的第0項不是一個分支點,循跡器170保持BNX 152不變並通過自增器136將BNY增加一,從而得到對應軌道表126中軌道410中的下一個表項的下一個BN。循跡器170不斷增加BNY從而向軌道410中的下一表項移動,直到到達一個分支點,如:軌跡點413(軌道410中的第8項)。在這個過程中,由於BNX沒有變化,因此指令段位址沒有變化,處理器核125可以利用PC的偏移量從高層次記憶體124中不斷獲取指令。
當循跡器170到達軌跡點413(軌道410中的第8項)後,由於軌跡點413是一個分支點,因此對 源位址和目標位址都進行分析。如果包含所述分支點源位址的後一條指令的指令段和/或包含所述目標位址的指令段還沒有被填充到高層次記憶體124中,那麼將所述可能被處理器核125執行的指令段填充到高層次記憶體124中。
在某些情況下,由於是在建立軌道表行時才建立主動表121中的表項,因此在循跡器170到達軌跡點413時,包含所述源位址下一條指令的指令段和包含目標位址的指令段可能已經被填充到高層次記憶體124中。這樣,由於下一指令是軌道410中第9項,且軌道410對應的指令段已經被填充到高層次記憶體124中,因此不需要對軌跡點413的下一條指令進行填充。此外,由於軌跡點414已經在軌道表126和主動表121中被建立起來,軌道411對應的包含分支目標(軌道411的第2項)的指令段已經被填充到高層次記憶體124中。
由於處理器核125執行指令的速度比循跡器170沿對應所述指令在內的軌跡點移動的速度慢,循跡器170可以在分支點等待處理器核125或與處理器核125同步。此外,軌道表126可以將分支目標作為匯流排150上的下一個BN(軌道411的第2項),即BNX為411及BNY為2,信號381可以在處理器核125執行軌跡點413的分支指令時提供一 個分支是否發生的標識。
如本實施例所示,當分支發生時,循跡器170將軌道表通過匯流排150送來得到下一個BN作為BN 151,即BNX指向軌道411及BNY指向軌道411的第2項。BNX也被用於在高層次記憶體124中對相應指令段進行定址,這樣處理器核125可以從軌道411的第2項對應的指令開始執行。然而,如果分支沒有發生,將所述分支點簡單視為非分支點,循跡器170向前移動。
類似地,從軌道411的第2項開始,循跡器170找到下一個分支目標為軌跡點416(軌道412的第5項)的分支軌跡點415(軌道411的第14項)。如之前所述,用類似的方法對軌跡點413進行操作。如果針對分支軌跡點415(軌道411的第14項)的分支發生,處理器核125從軌跡點416開始執行。另一方面,如果針對分支軌跡點415的分支不發生,循跡器170移動到軌道411的第15項,即軌道411的最後一項。
當所述表項不是一個分支點,但是所在軌道的最後一條指令時,從位於下一軌道中的下一指令對應的軌跡點開始運行,循跡器170保持BNX 152不變並不斷對BNY 156增一(1),從而產生新的BNY直到一個新的BNY指向所述新軌道中的第一個分 支點。
這樣,可以在處理器核125實際執行指令前建立軌道表126,使得指令可以被填充到高層次記憶體124中,從而避免或減少因快取缺失造成的時延。其他的機制,如增加軌道表運行速度、增大BNY的粒度、通過用軌道表中一個表項代表多條指令等方式減少軌道表中表項的數目等方法,可以單獨或組合應用在上述實施例中。
還可以在軌道表126中採用多層分支的方法進一步改善快取缺失率。舉例而言,當從軌道表126中的一個表行讀取表項時,發現一個分支軌跡點並將包含所述分支軌跡點對應的分支目標指令的指令段填充到高層次記憶體124中。同時在軌道表126中建立一條新軌道(一級)。此外,所述新軌道也被檢測,找到新軌道中的第一個分支軌跡點並將包含新軌道中所述分支軌跡點對應的分支目標指令的指令段填充到高層次記憶體124中。由此,在軌跡表126中建立另一條新軌道(二級)。這樣,兩級分支點被用於填充高層次記憶體124,且對於處理器核125而言,所述填充操作被更進一步地隱藏了。也可以對一級軌道的所有可能的執行結果建立二級軌道。這樣,所述兩級軌道不單根據當前分支點對應的分支目標指令新軌道中的第一個分支點建立,也 根據當前分支點之後的下一條指令對應的新軌道的第一個分支點建立。
此外,可以根據與當前程式計數器(PC)之間的距離,建立一層或多層的可變層數的軌道。所述距離可以用領先與當前處理器核125執行的指令的指令數目表示。也就是說,無論為了保證已填充的指令按一個預先設定的值領先於正在執行的指令而建立了多少層軌道,所述軌道都可以被建立起來以填充至少包含由所述距離決定的數目對應的全部指令的指令段。所述距離也可以用從當前分支點起的一個距離表示。也就是說,無論為了保證已填充的指令按一個預先設定的值領先於正在執行的指令並掩蓋填充延遲而建立了多少層軌道,所述軌道都可以被建立起來以填充至少包含從分支點起對應所述距離的指令的指令段。另外也可以使用其他參數。
此外,在某些例子中,複數個記憶塊(如:指令段和資料段)可以同時被填充到高層次記憶體124中。當填充所述複數個指令段或資料段時,每個段可以被分割為多個小片段,且可以對每個小片段設定一個優先順序。這樣,不需要一次性地填充整個單獨的段。可以基於處理器核125對每個小片段的需求設置優先順序,並根據每一個小片段的優先順序採用交替機制對不同段的小片段進行填充。
舉例而言,如果一個指令段為256個字(1024個位元組)長,該指令段可以被分割為四個小片段,每個小片段包含64個字(256個位元組)。這樣,對於一個從位址0x1FC00000開始的指令段,四個小片段分別從0x1FC00000、0x1FC00100、0x1FC00200和0x1FC00300開始。如果處理器核125需要的指令位於第二個小片段0x1FC00100,那麼這個小片段0x1FC00100的優先順序就可以被設置為高。這樣,填充所述指令段時的填充順序就可以是0x1FC00100、0x1FC00200、0x1FC00300和0x1FC00000。此外,如果在填充所述從0x1FC00000開始的指令段時,還需要填充另一個或第二個從0x90000000開始的指令段,那麼所述第二個指令段也可以被分割為四個小片段,分別從0x90000000、0x90000100、0x90000200和0x90000300開始。如果處理器核125需要的指令在第四個小片段(0x90000300)中,那麼所述第四個小片段可以被設置一個高的優先順序,且整個填充順序可以以一種交替的方式依次為0x1FC00100、0x90000300、0x1FC00200、0x90000000、0x1FC00300、0x90000100、0x1FC00000和0x90000200。此外,可以採用更多的段和小片段對高層次記憶體124進行填充,而且還可以使用其他配置方式。雖然上述實施例描述的是指令段填充,但資料段填充也可以使 用類似的方法。此外,指令段和資料段也可以一起被分段交替填充。
圖10A是本發明所述快取系統的另一個實施例9000。快取系統9000與圖7A中的快取系統8000類似。然而,如圖10A所示,快取系統9000包含一個交換器133,且快取系統9000中的分配器1200除包含一個主動表121外,還包含一個保留表120。
保留表與主動表類似,並與主動表一同存儲程式中所有分支指令的軌道資訊,從而降低主動表121和一級快取的容量大小。更特殊地,當一條對應一個分支點的軌道已經被建立時,所述分支點的分支目標可以被存儲到保留表中。可以在執行流接近於所述分支點時,才根據存儲在保留表中的資訊建立所述分支目標軌道。
在某些例子中,主動表存儲已建立的軌道(如:對應已經被填充到高層次記憶體124中的指令段),而保留表存儲將建立的軌道(如:對應尚未被填充到高層次記憶體124中的指令段)。這樣,當建立一條軌道時,一個軌跡點可以對應到主動表中的一個表項(如:一個BN)或保留表中的一個表項(一個TBN)。這裏使用的“TBN”,指的是“臨時塊號”或“臨時BN”,並代表了位於與BN所處的號碼空間不同的號碼空間中的一個號碼,因此保留表 使用的號碼空間與主動表使用的號碼空間是相對的。這樣,就可以區分一個TBN和一個BN。舉例而言,可以用號碼的最高位區分一個TBN和一個BN。當軌跡點(如一個分支點)包含的內容是BN時,包含所述分支目標指令的指令段已經被填充到高層次記憶體124中。另一方面,當軌跡點包含的內容是TBN時,包含所述分支目標指令的指令段尚未被填充到高層次記憶體124中。這樣,當一條軌道包含多個分支點時,由於一些分支點可能永遠不會被訪問到,因此使用TBN代替BN可以減少記憶體的填充量並節省一級快取空間。
這樣,一個保留表可以被用於提高系統性能並降低存儲容量要求。圖12是使用軌道表126、保留表120和主動表121建立新軌道的實施例。
如圖12所示,已建立的軌道66(BNX0)可以包含三個分支點67、68和69。為了便於描述,BNX號碼被用於標記軌道表126中的軌道或行。當審查分支點67時,分支點67的目標指令的位址被存儲到保留表120的表項73(標記為TBNX0)中,且表項73的號碼(即TBNX0)被作為第一位址存儲在分支點67中。當審查到分支點68和分支點69時,分支點68和分支點69的目標指令的位址也被存儲到保留表120中(被標記為TBNX1和TBNX2)。類 似地,這兩個表項的號碼作為第一位址被分別存儲到分支點68和69中。
此外,當處理器核125即將執行分支指令67時,保留表120的表項73中的目標位址被轉移到主動表121的表項74中。在某些實施例中,主動表121的表項總數等於軌道表126的總行數,使得主動表121的表項與軌道表126的行能有建立一個一一對應的關係。這樣,基於對應關係75,可以根據主動表121中的對應表項(BNX1)在軌道表126中建立一條包含分支點67的分支目標新軌道70。分支點67中的TBNX0號碼也被替換為BNX1,使得下次這條指令將被執行時,所述BNX1可以在不用到保留表的情況下直接索引到目標軌道以及相應的記憶塊。
因此,只有當分支指令即將被執行時才建立對應的新軌道。這樣,在分支點67被執行前,分支點68和69的目標位址被存儲到保留表120中,並不建立分支點68和69對應的新軌道。
回到圖10A,當處理器核(125)開啟時,重置信號(圖中未顯示)把主動表121中各表項的有效位置‘0’。當處理器核重置信號釋放時,重置向量(重置起點的指令位址值)被放上匯流排141。因為在保留表120與主動表121中都未尋到匹配,保 留表120就把所述位址值放到匯流排144上送到填充引擎132用於從低級記憶體122經匯流排154獲取指令段(如:重置向量)。
指標129通過匯流排153指向主動表121中當前表項,且指標129同時指向高層次記憶體124中的一條指令或存儲獲取來的指令段的記憶塊。
生成器130提取出所述指令段中指令相關的軌道資訊,並寫入軌道表126中由指標129通過位址匯流排153指向的對應表項。當填充操作完成時,主動表121當前表項的有效位被置為‘1’。之後,指標129移向主動表121的下一個有效表項。
生成器130掃描被填充到高層次記憶體124的指令塊中每一條指令。當生成器130發現分支指令,則計算出所述分支指令的目標位址。所述目標位址可以表示為包含所述分支指令的指令段的起點位址(源指令段位址)加上所述轉移相距所述起點的位移,再加上從源指令到目標指令的分支距離(通常就是分支偏移量)。計算得到的目標位址的高位被用於與保留表120和主動表121中的內容匹配。
若在保留表120和主動表121均匹配不成功,則將所述高位位址寫入保留表120中由指標127所指示的表項,同時把指標127的值和目標位址的低位元(目標偏移位址)(兩者一同組成TBN)放入軌 道表126中由匯流排153(分支源行位址)及由匯流排143(分支源偏移位址)指示的一個表項中。匯流排143可以提供一個對應所述分支指令在其所屬指令段中偏移量的列位址。
若在保留表120中有匹配,則指向匹配項的指標127的值放和目標偏移量一同作為TBN被寫入軌道表126中由匯流排153(行位址)及匯流排143(偏移量)確定的表項。若在主動表121中有匹配,則匹配的主動表項和偏移量一同作為BN被寫入軌道表126中由匯流排153(行位址)及匯流排143(偏移量)指示的表項。以TBN形式出現的目標位址對應的指令尚未被填充到高層次記憶體124中,而以BN形式出現的目標位址對應的指令已經被填充到高層次記憶體中。
重複上述過程,直到整個指令段都被獲取並填充到高層次記憶體124中。這樣,被動表120、主動表121和軌道表126包含了指令段有關資訊,且高層次記憶體124包含了整個指令段供處理器核125執行。主動表121包含了指令段的起始(段)位址值以供之後的指令段匹配,而軌道表126包含了該指令段中所有的分支點及對應的目標TBN或BN值。
當循跡器170輸出一個BN 151用於指示軌道表 126中一個表項時,所述表項的內容經讀口161被讀出。如果所述內容顯示不是一個分支點時,那麼後續操作與圖7A實施例中相應操作相同。然而,如果所述內容顯示為一個分支點時,那麼將分支目標位址(BN或TBN)讀出送往交換器133。
因為分支目標位址可以對應保留表120中的一個表項(即一個TBN)或對應主動表121中的一個表項(即一個BN),因此可以用交換器133對保留表120和主動表121中的表項進行交換。交換器133將TBN通過匯流排180發送到保留表120以啟動從低級記憶體向高層次記憶體124填充記憶塊的操作,並在交換完成後輸出一個BN。這種預填充保證了當處理器需要執行指令時能在高層次記憶體124中找到它們。
如圖13所示,交換器133包含一個TBNX表190和一個BNX表191。TBNX表190中的表項對應主動表121中的表項,可以被用於映射從主動表121轉移到保留表120中的表項。TBNX表190中每個表項的內容可以包括對應的表項在保留表120中的表項號和一個標誌位元G位元。
BNX表191中的表項對應保留表120中的表項,可以被用於映射從保留表120中轉移到主動表中121中的表項。BNX表191中每個表項的內容可 以包括對應的表項在主動表121中的表項號(即BN)和一個有效位。
此外,從軌道表126輸出到匯流排150上的軌道資訊可以也包含一個與TBNX表190中的G位對應的G位192,用於表示BNX值在當前是真實存在於主動表中的,此時可以直接將所述BNX值輸出;否則需要進行映射。
當主動表121中的一個表項被轉移到保留表120中時,TBNX表190中對應表項被用於記錄表項號(BN)172。類似地,當保留表120中的一個表項被轉移到主動表121中時,BNX表191中對應表項被用於記錄所述表項的表項號並將有效位置為有效。
當匯流排150上的軌跡點資訊中包含的是保留表120的表項號時,所述表項號TBNX被用作索引從BNX表191中讀出BNX值和有效位。若所述BNX值是有效的(即有效位被設為有效),則將所述BNX值輸出作為下一BN 166中的BNX,並送到循跡器。另一方面,若該BNX值是無效的,則所述TBNX被用作索引通過匯流排180從保留表120中讀出內容,並啟動從低級記憶體122向高層次記憶體124填充所述TBNX對應的記憶塊的操作。
當匯流排150上的軌跡點資訊中包含的是主動 表121的表項號(即BN)時,若匯流排150上的軌跡點資訊中的G位元與TBNX表190中對應表項的G位相等時,則將所述BNX值輸出作為下一BN 166中的BNX。另一方面,若匯流排150上的軌跡點資訊中的G位元與TBNX表190中對應表項的G位不等,則保留表120中的表項號從TBNX表190中讀出並被用作索引從BNX表191中對應行讀出BNX值和有效位。若該BNX值是有效的,則將所述BNX值輸出作為下一BN 166中的BNX。另一方面,若該BNX值是無效的,則將保留表120中的所述表項號作為索引通過匯流排180從保留表120中讀出內容。
這樣,只要TBNX表190和BNX表191中有有效的表項,一個替換模組193就保持對軌道表126的掃描,並從匯流排159上讀入軌跡點資訊。若一個軌跡點的軌跡點資訊包含主動表121的一個表項號,且該表項號對應TBNX表190中的一個有效表項,則通過匯流排158輸出保留表120的表項號,並將該軌跡點資訊改為保留表120中的所述表項號。類似地,若一個軌跡點的軌跡點資訊包含保留表120的一個表項號,且該表項號對應BNX表191中的一個有效表項,則通過匯流排158輸出主動表121的表項號,並將該軌跡點資訊改為主動表121中的所述表項號。
通過掃描整個軌道表,可以實現TBNX表190中表項與BNX表191中表項之間的交換。這樣的交換可以在各種時刻進行。例如,如果主動表容量已滿,即表示高層次記憶體124容量已滿。高層次記憶體124中的某些記憶塊可以被替換,主動表中也是如此。主動表中被替換的表項可以被移動到保留表中,而軌道表中的BNX指引就需要被交換成新的TBNX指引。在交換過程完成後,TBNX表190和BNX表191中之前的表項可以被設為無效。
回到圖10A,當分支點內容被送到交換器133,且交換器133完成對軌道表讀口161的相應操作時,即意味著高層次記憶體124中已有包含分支目標指令的指令段,那麼結果BN就被直接輸出到循跡器170。後續操作與圖7A中的類似。圖10B給出了快取系統9000的一部分,顯示了使用被動表120和主動表121操作軌道表126、高層次記憶體124和處理器核125的實施例。
如圖10B所示,與圖7B類似,循跡器170包括自增器136、多路選擇器137、和寄存器138。為便於描述省略了其他部件。在操作過程中,循跡器170輸出一個位址(即BN 151)用於對軌道表126和高層次記憶體124進行定址。BN 151包含BNX 152和BNY 156。BNX 152可以被用於對軌道表126中 的一個行或一條軌道進行定址,並對高層次記憶體124中的一個記憶塊進行定址,此時BNY 156可以被用於對軌道表126中由BNX 152指向的軌道或行中的一個表項進行定址。
此外,多路選擇器137受來自處理器核125的信號381控制以選擇來源於交換器133的下一BN 166或來源於自增器136的BN作為輸出418。從多路選擇器137來的輸出418(即下一BN)可以在處理器核125來的信號417的控制下被存儲到寄存器138中。當寄存器138受信號417控制保持當前BN 151不變時,寄存器138不會更新輸出418。另一方面,當寄存器138受信號417控制更新當前BN 151時,所述輸出418被送到匯流排151上成為當前BN 151,從而更新BNX 152和BNY 156。
為了描述軌道表126與循跡器170間的相互關係,與圖7B類似,假設軌道表126包含了軌道(即:行)410、411和412。每條軌道可以包含從0號到15號的16個表項或軌跡點。此外,軌跡點413(軌道410中的第8項)可以是一個分支目標為軌跡點414(軌道411中的第2項)的分支點,以及軌跡點415(軌道411中的第14項)可以是另一個分支點,其分支目標是軌跡點416(軌道412中的第5項)。
假設軌道410對應的指令段已經被填充在高層 次記憶體124中,且處理器核125從軌道410的起始位置開始執行指令。這就是說,處理器核125的程式計數器(PC)從軌道410中的第0項對應的指令位址開始運行。
同時,假設循跡器170也送出一個包含BNX和BNY的指向軌道表126中軌道410的第0項的讀指標151。軌道410中的其他表項也可以被用到。可以通過檢查所述表項中的內容確定指令的類型資訊和位址資訊等。
正如之前所述,當從軌道410的第0項開始運行時,由於軌道410的第0項不是一個分支點,循跡器170保持BNX 152不變並通過自增器136將BNY增加一,從而得到對應軌道表126中軌道410中的下一個表項的下一個BN。循跡器170不斷增加BNY從而向軌道410中的下一表項移動,直到到達一個分支點,如:軌跡點413(軌道410中的第8項)。在這個過程中,由於BNX沒有變化,因此指令段位址沒有變化。處理器核125可以利用PC的偏移量從高層次記憶體124中不斷獲取指令。
當循跡器170到達軌跡點413(軌道410中的第8項)後,由於軌跡點413是一個分支點,因此對源位址和表項內容即目標位址都進行分析。交換器133可以按BN形式或TBN形式對目標位址進行檢 查。如果目標位址是一個BN,那麼所述目標位址對應的指令段已經被填充到高層次記憶體124中並準備被處理器核125讀取。另一方面,如果目標位址是一個TBN,那麼所述目標位址對應的指令段尚未被填充到高層次記憶體124中。這樣,如果TBN對應的指令段不在高層次記憶體124中,那麼所述指令段被填充到高層次記憶體124中。而且如之前所述,交換器133將TBNX轉換為BNX並將BNY的值設為TBNY的值。這樣,交換器133就能提供一個BN,所述BN被送出作為下一BN 166。無論表項內容是BN還是TBN,交換器133都能提供一個BN作為下一BN 166。
此外,如果包含源位址下一指令的指令段尚未被填充到高層次記憶體124中,那麼該指令段也被填充到高層次記憶體124中以供處理器核125可能的執行。然而,對於軌跡點413,由於下一指令是軌道410的第9表項且對應軌道410的指令段已經被填充到高層次記憶體124中,因此軌跡點413的下一指令不需要填充。這樣,只有當包含分支目標(軌道411的第2表項)的軌道411對應的指令段尚未填充時,才被填充到高層次記憶體124中。
由於循跡器170沿所述指令軌跡點移動的速度比處理器核125執行指令的速度,處理器核125可 能執行的兩個指令段都能在處理器核125執行這兩個指令段中任何指令之前被填充到高層次記憶體124中。這樣就不會發生快取缺失。BNY 156可以被視為領先指標的一部分(BNX在同一軌道中不變)以在處理器核125執行指令之前將處理器核125可能執行的指令填充到高層次記憶體124中。
這樣,由於保留表120中的TBNX不會自動填充高層次記憶體124,因此可以在短時間內生成大量軌道或軌道表126中的表項。可以在執行流接近所述指令(如:分支目標指令)時才將所述指令填充到高層次記憶體124中。
此外,當到達軌跡點413且相關指令段已經被填充到高層次記憶體124中時,軌道表126或交換器133可以提供分支目標BNX為411及BNY為2作為下一BN 166(軌道411的第2表項),且循跡器170可以等待軌跡點413的分支指令被處理器核125執行時送來的表示分支轉移是否發生的信號381。
若如本實施例中發生分支轉移,則軌道表126或交換器133將下一BN 166作為BN 151供循跡器170使用,其中BNX指向軌道411且BNY指向軌道411的第2個表項。同時BNX也被用做一個對應高層次記憶體124中指令段的位址,這樣處理器核 125可以從軌道411的第2個表項開始執行指令。然而,如果分支轉移沒有發生,循跡器170或領先指標如同將分支點簡單視為一個非分支點向前移動。
類似地,從軌道411的第2個表項開始,循跡器170找到下一個分支目標為軌跡點416(軌道412的第5個表項)的分支軌跡點415(軌道411的第14個表項)。接著,如果對應軌道412的指令段尚未被填充到高層次記憶體124,則將該指令段填充到高層次記憶體124中,且如上所述,領先指標等待軌跡點415分支指令執行。
此外,上述討論基於的是一層的軌道操作。也就是說,領先指標聽在第一個分支點,即對應第一個分支點的兩個可能分支結果進行相應的填充操作。軌道表126也可以支援兩層的軌道操作或多層的軌道操作。例如,在一個兩層的軌道操作中,領先指標可以停在所述第一個分支點之後的第一個分支點。這樣,所述兩個分支點的四個可能結果對應的指令都被填充到高層次記憶體124中。類似地,可以用多層的軌道操作填充更多的指令。
可以理解的是,雖然保留表120、主動表121和交換器133被用來實現更為靈活和高效的填充高層次記憶體124的操作,但是正如之前所述,也可 以用一個表或其他結構實現。
此外,回到圖10A,在操作中,更多的軌道可以被添加到軌道表126中,且對應的指令被填充到高層次記憶體124中。然而,軌道表126和/或高層次記憶體124的容量是有限的。需要一個替換機制對軌道表126中的軌道和/或高層次記憶體124中的指令段進行替換。例如,可以使用一個基於主動表121、保留表120和軌道表126的替換機制。特別地,可以確定主動表121中可被替換的表項。
假設軌道表126通過匯流排180送來的內容TBNX值‘118’被用於填充一個指令段到高層次記憶體124中,所述TBNX值‘118’對應的指令段位址0x1FC0存儲在保留表120中,且主動表121中匯流排153指向的表項存有一個BNX值‘006’,其對應的指令段位址為0x4000。這樣,讀出保留表120中的位址0x1FC0送到匯流排144用於替換主動表121中的位址0x4000,且地址0x1FC0被送到填充引擎132用於將從位址0x1FC0開始指令段填充到高層次記憶體124中以替換從位址0x4000開始的指令段。此外,對應位址0x4000的含有BNX值‘006’的表項被移動到保留表120中由指標127指向的表項中。
也可以使用一種替換策略確定應該替換軌道表 126中哪個表項或存儲單元。例如可以採用最近最少使用策略或最少頻繁使用策略。當採用最近最少使用策略時,每個軌道或軌跡點包含一個使用位(U位);當採用最少頻繁使用策略時,每個軌道或軌跡點包含一個記錄使用次數的計數器。
在某些情況下,可以使用超過一層的快取結構。分配器1200或主動表121可以被用於支援超過一層的快取結構。圖11顯示了用於多層快取結構的分配器或保留表的一個實施例。
本實施例以三層存儲層次為例,分別為三級,二級與一級。為了便於說明,假設這三層記憶體都被用做指令記憶體(資料記憶體也類似)。二級記憶體的容量是一級記憶體容量的兩倍(即,一個二級記憶體塊可以包含兩個一級記憶體塊),三級記憶體容量是二級記憶體容量的兩倍(即,一個三級記憶體塊可以包含兩個二級記憶體塊或四個一級記憶體塊)。一級記憶體作為高層次記憶體直接連接至處理器核125。對於更多存儲層次的情況,也可用應用本發明所述方法。
此外,為便於描述,三級記憶體包含了二級記憶體和一級記憶體中的所有內容,但二級記憶體不一定包含一級記憶體中的內容。雖然沒有在圖中顯示,可以使用一個軌道表建立在這三層記憶體中的 指令的軌道,且每個軌跡點(如分支點)可以用圖11中所示的兩種格式之一表示。一種格式包括兩個部分,從高位到低位元分別是一級記憶體索引位址的塊位址部分,和軌道內或記憶塊內的偏移量部分。另一種格式包括三個部分,分別是三級記憶體索引位址的塊位址部分、索引和偏移量部分。
如圖11所示,分配器1200或保留表120可以包含一個內容定址記憶體(CAM)87和一個隨機訪問記憶體(RAM)98。CAM 87包含一列表項,CAM中的每一個表項對應一個三級記憶塊號碼BNX3。這樣,每個表項可以包含一個對應特定的BNX3的三級記憶體記憶塊的位址。
此外,RAM 98可以包含6列,其中兩列88用於存儲對應特定三級記憶塊的兩個二級記憶塊號BNX2及有效位,其他四列89用於對應所述三級記憶塊的四個一級軌道號BNX1及有效位。多路選擇器93可以根據索引位元97選擇一個對應所述三級記憶塊的特定的一級記憶塊號碼或軌道號。類似地,多路選擇器92可以根據索引位元97,更準確地說是索引位元97中的高位LSB1 90選擇一個對應所述三級記憶塊的特定的二級記憶塊號碼或軌道號。
此表可以由兩種方式訪問。一種是利用存儲位 址(如:三級記憶塊位址)搜索CAM 87。如果有位址匹配,那麼選擇CAM中的匹配表項,並將對應的RAM 98中的內容讀出。另一種是用三級記憶塊號TBN的第一位址BNX3 94在CAM 87和RAM 98中直接定址,讀出CAM 87和/或RAM 98中被選中的行的內容。
如之前例子所述,在將指令段從主記憶體或任何外部記憶體填充到這所有三級的記憶體中時,掃描、檢測所述被填充的指令。當檢測到分支指令時,所述分支指令的分支目標位址被用來與CAM 87中存的三級記憶體塊位址作比較。
如果沒有找到匹配,這意味著在三級記憶體中還未包含所述分支目標位址對應的指令段。這時根據某種準則,如替換策略,選定三級記憶體中一個三級記憶塊,把分支目標所在的指令段填充到該記憶塊。同時,將所述選定的三級記憶體中記憶塊位址資訊作為軌跡點內容填入在一級軌道表中所述分支點的對應表項。所述選定的三級記憶塊的塊號被用做第一位址BNX3 94,存儲位址中的索引部分被用做索引號97,且存儲位址中的偏移量部分被用做偏移量(BNY)96。此外,索引號97可以包含2位元,其中的高位LSB1 90被用於區分二級記憶體中的兩個記憶塊,高位LSB1和低位元LSB0 97一起 被用於區分一級記憶體中的四個記憶塊。
另一方面,如果找到匹配,則表明至少在三級記憶體中存儲有所需的指令塊。這時將匹配到的BNX3和索引號、偏移量一同作為軌跡點內容填入軌道表項。
在運行過程中,當領先指標到達上述軌道表項時,所述軌道表項或軌跡點顯示的分支目標位址是三級記憶體的TBN。可以使用該TBN中的第一位址(94)到CAM 87和/或RAM 98定址。
特別地,可以使用一級軌道的第一位址94(BNX3)對RAM 98定址並讀出對應的兩個二級軌道號和有效位以及四個一級軌道號和有效位。多路選擇器93根據索引位元97(即:LSB1、LSB0)和有效位V從四個一級塊號中選出一個有效的一級軌道號。此外,多路選擇器92根據索引高位90(即:LSB1)和有效位V從兩個二級塊號中選出一個有效的二級軌道號。
如果選出了一個有效的一級軌道號,說明所述目標位址對應的指令段已經被填充到一級記憶體中,直接將所述有效的一級軌道號送到匯流排99以替換所述分支指令的第一位址。同時,拋棄相應的索引,塊內偏移(BNY)不變。這樣TBN就成為了BN。此外,由於一個三級記憶塊含有四個一級記憶 塊,僅憑BNX3 94並不能確定一個一級記憶塊號。BNX3與索引97一起確定特定的一級記憶塊號。在四個一級記憶塊中,可以包含對應三級記憶塊的零個、一個、兩個、三個或四個一級記憶塊。類似地,在兩個二級記憶塊中,可以包含對應三級記憶塊中的零個、一個、或兩個一級記憶塊。
另一方面,如果沒有有效的一級軌道號被選出,說明所述目標位址對應的指令段尚未被填充到一級記憶體中。如果一個有效的二級塊號被選出,那麼意味著目標位址對應的指令段已經被填充到二級記憶體中,則可以將有效的二級塊號送到匯流排91。這時可以從二級記憶體中將與這個二級記憶塊號對應的指令段填充到一級記憶體中,同時更新RAM 98中相應的一級記憶塊的塊號和有效位以對應所述填入的指令段。例如,可以更新RAM 98中由BNX3和所述索引指向的表項中的一級塊號(BNX1)及其有效位,並將所述軌道表項內容格式更新為使用一級軌道的BN號碼。所述BN號碼包含一個第一位址(即:BNX1)和一個第二位址(即:偏移量或BNY)。
如果沒有有效的二級軌道號被選出,意味著目標位址對應的指令段尚未被填充到二級記憶體中,那麼從三級記憶體中將所述三級軌道號對應的指令 段填充到二級記憶體與一級記憶體中。RAM 98中的相應部分也要被更新以對應一級記憶體和二級記憶體中的所述被填入的指令段。例如,可以更新RAM 98中由BNX3和所述索引指向的表項中的一級塊號(BNX1)及其有效位,並將所述軌道表項內容格式更新為使用一級軌道的BN號碼。如果也填充了二級記憶塊,那麼還可以更新RAM 98中由BNX3和所述索引指向的表項中的二級塊號(BNX2)及其有效位。
當指令段被填充時,所述指令段可以先從三級記憶體填充到二級記憶體,再從二級記憶體填充到一級記憶體。或者,在三級記憶體與一級記憶體之間有獨立通路的情況下,可以在將所述指令段從三級記憶體填充到二級記憶體的同時,將所述指令段從三級記憶體填充到一級記憶體。此外,如果一級記憶體中的軌跡點隻包含一級軌道資訊,也可以用與之前類似的方法進行操作。
圖14A是本發明所述快取系統的另一個實施例10000。快取系統10000與圖10A中的快取系統9000類似。然而,快取系統10000包含了用於支援多線程程式的某些特徵。
軌道表126中不同的軌道可以對應一個線程或多個線程。由於線上程內容切換時需要保存和恢復 線程狀態,因此使用了複數個堆疊135,用於分別保存線程壓堆疊的資訊。一個線程標識(PID)188存儲了當前線程標識或線程號。當循跡器170使用堆疊135時,PID 188提供一個指向所述堆疊的指標,從而進行正確的堆疊操作。
此外,可以在低級記憶體122外提供一個第二填充/生成器187。填充/生成器187中的生成器186與填充生成器123中的生成器130類似,但比生成器130有更高的帶寬。也就是說,生成器186可以一次對更多的指令進行掃描和審查。此外,填充/生成器187對保留表120的操作也與填充生成器123對主動表121的操作類似。這樣,填充引擎185將對應於保留表120中位址的指令段從更低層次記憶體(圖中未顯示)填充到低級記憶體122中。這樣,對應於保留表120中位址的指令段就存儲在低級記憶體122中,從而減少或消除了等待處理器核125取指的時間。
此外,不同的軌道可以對應同一個指令段(同一個指令段可以因具有不同的虛擬位址而被存儲在不同的一級快取記憶塊中)。填充/生成器187也可以包含一個位於填充引擎185之外的翻譯轉換緩衝(TLB)131,使得低級記憶體122和高層次記憶體124中的指令都處於物理位址模式,而處理器核125 可以在不進行虛擬到物理位址轉換的情況下直接從高層次記憶體124獲取指令。
圖14B顯示了快取系統10000中一個組成部分。如圖14B所示,主動表121中的每一個表項可以對應高層次記憶體124中的一個記憶塊或指令段,並對應軌道表126中的一條軌道。這樣,可以通過主動表121管理高層次記憶體124。另一方面,低級記憶體122也可以作為快取使用,並可以通過保留表120管理低級記憶體122。這樣,保留表120中的每一個表項可以對應低級記憶體122中的一個記憶塊或指令段。此外,為便於描述,假設高層次記憶體124和低級記憶體122是互不包含的。換句話說,任何一個存儲位址對應的內容或記憶塊不會同時存在於高層次記憶體124和低級記憶體122中。
當指令被填充到高層次記憶體124中時,生成器掃描並審查所述指令,並可能在軌道表126中建立一條包含分支點的軌道。將所述分支目標位址與主動表121中的表項進行匹配。如果匹配成功,表示已經有一個相應的記憶塊被填充到高層次記憶體124中,那麼在軌道表126中以BN格式將高層次記憶體124中匹配成功的塊號記錄為分支目標位址。然而,如果匹配不成功,表示相應的記憶塊還沒有被填充到高層次記憶體124中,那麼在保留表120 中對分支目標位址進行匹配以開始填充過程。可選地,分支目標位址可能同時在保留表120和主動表121的表項中同時匹配成功。
如果在保留表120中匹配成功,表示相應的指令段已經被填充到低級記憶體122中,那麼在軌道表126中以TBN格式將低級記憶體122中匹配成功的塊號記錄為分支目標位址。如果在保留表120和主動表121中都沒有匹配成功,填充引擎185將相應指令段從外部記憶體(圖中未顯示)通過匯流排423填充到低級記憶體122中。虛擬到物理位址轉換器131可以對虛擬位址和物理位址進行轉換和翻譯。這樣,被填入低級記憶體122中的記憶塊包含了相應的指令段,並在軌道表126中以TBN格式將低級記憶體122中的被填充的記憶塊號記錄為分支目標位址。
在運行過程中,當領先指標156到達軌道表126中的一個包含TBN格式的分支目標位址的分支軌跡點時,如之前所述,在主動表121中產生一個BN,並將相應指令段從低級記憶體122填充到高層次記憶體124中。此外,軌道表126中的TBN被替換為所述BN,並清除存儲在保留表120中的對應所述TBN的TBNX。
這樣,當對應保留表120中表項的一個指令段 被填充到高層次記憶體124中時,相關的TBN被替換成BN。類似地,當對應主動表121中表項的一個指令段被替換或回填到低級記憶體122時,相關的BN就被替換成TBN。通過對保留表120和主動表121中表項的交換,可以實現高效率的多層次快取運作。
雖然在不同的附圖中分別給出了不同的實施例,這些實施例可以被獨立地實現,也可以在某種組合的情況下被實現。這樣,在不背離本發明原則的前提下,這些實施例中的不同部件可以被單獨使用,也可以被組合使用。為便於描述,下面給出了一些具體的例子。
例如,生成器130可以被用於提取分支源位址,從而對軌道表126的寫入做位址索引。一個源位址(如一個指令的位址)可以被分析得到兩種格式。在一種格式中,用一個高位位址部分、一個索引部分和一個偏移量部分在具有多層快取層次或存儲層次的情況下代表所述位址,在另一種格式中,用一個高位或塊位址部分和一個偏移量部分代表所述位址。在某些情況中,可以用一個高位位址部分、一個索引部分和一個偏移量部分代表所述分支源位址。此外,可以直接用BNY作為所述偏移量部分,而所述高位位址和索引被送到分配器1200轉換為 一個塊號。生成器130也可以被用於提取指令類型(如:無條件分支、條件分支、非分支(包括裝載、存儲指令等))。
此外,生成器130可以被用來通過將分支源位址加上分支偏移的方法計算分支目標位址,其中所述分支源位址可以是包含所述分支源指令的指令段的塊位址加上所述分支源指令在指令段中的偏移量,而所述分支偏移可以是一個跳轉的量。所述分支目標位址的高位位址和索引被送到匯流排141與分配器1200(如:主動表121、保留表120)中CAM的內容進行匹配。所述偏移位址被送到匯流排143 WYADDR作為軌道表126的Y寫位址。一個針對軌道表126的寫位址可以是一個用於在軌道表126中建立軌跡點表項的位址,包含一個對應於XADDR的行位址(X位址)和一個對應於YADDR的列位址(Y位址)。
這樣,生成器130提供了所述分支源位址作為軌道表126的寫位址,並提供了指令類型和分支目標位址作為軌道表126的寫入內容。生成器130生成除寫位址中X位址之外全部位址,而X位址由分配器1200修改或分配。所述X位址可以是一個對應特定高位位址的塊號碼(BN),該高位位址本身可能太長且不連續。例如,一個18位元的高位位址對 應了256K個不同的記憶塊,但用BNX號碼將該高位位址分配到256個塊則只需要8位即可。
軌道表126可以被配置成一種二維表結構,其中,由X位址或第一位址BNX對每一行索引,對應一個記憶塊或一個存儲行,由Y位址或第二位址BNY對每一列索引,對應相應指令(資料)在記憶塊中的偏移量。簡單來說,軌道表的寫位址對應分支源指令位址。此外,對於一個特定的分支源位址(如:高位位址、索引、偏移量),分配器1200(即主動表121)根據所述高位位址和索引分配一個BNX到匯流排153,而BNY就等於所述偏移量。然後,所述BNX和BNY就可以組成一個指向被寫表項的寫位址。
此外,對於分支點,其分支目標位址(高位位址、偏移量)被送到主動表121對高位位址進行匹配,且主動表121可能分配一個BNX。所述分配的BNX與從生成器130來的指令類型和偏移量(BNY)一起,組成軌道表中所述分支源指令對應表項的內容。
軌道表126也可以被用來實現其他目的。例如,在一個系統中,軌道表126可以被用來實現對處理器核125的自動功耗管理。例如,可以指定軌道表126中的一條軌道用於存儲一個當處理器核125處 於空轉狀態時執行的空轉任務(即一條空轉軌道)。這樣,所述系統可以記錄空轉軌道被使用或訪問到的百分比。系統可以通過將該百分比與一個預先設置的值或一組預先設置的值比較,調整處理器核125和所述系統的功耗。調整方法可以包括改變時鐘頻率或調整對處理器核125及所述系統的供電電壓。
循跡器170可以被用於向軌道表126提供一個讀指標151。讀指標151也可以是BNX和BNY的形式。由讀指標指向的軌道表項的內容與所述表項的BNX和BNY(源BNX和源BNY)一起被讀出並被交換器133檢查。如果所述表項內容包含的是一個TBN,那麼其中TBNX被送到分配器1200處理或轉換為一個BNX並填充一級快取,之後所述BN(BNY等於所述TBNY的值)被交換器133送到循跡器170。循跡器170可以根據所述內容進行多種不同步驟。例如,如果所述表項不是一個分支點,循跡器170可以用新BNX等於源BNX、新BNY等於源BNY加一的方法更新讀指標。
如果所述表項是一個條件分支,循跡器170獲取到目標BNX和BNY(即第一位址和第二位址),並將目標BNX和BNY送到分配器1200(即主動表121)以填充高層次記憶體124或一級快取。此外,循跡器170可以等待處理器核125送來的對應所述 分支點的控制信號。如果所述控制信號表明該分支沒有發生,循跡器170可以用新BNX等於源BNX、新BNY等於源BNY加一的方法更新讀指標。然而,如果所述分支成功發生,循跡器170可以用新BNX等於目標BNX、新BNY等於目標BNY的方法更新讀指標。
如果所述表項是一個無條件分支(或跳轉),循跡器170可以將其視為一個條件成立的條件分支,也就是用新BNX等於目標BNX、新BNY等於目標BNY的方法更新讀指標。
此外,如果所述表項是一條“調用”指令,循跡器170可以將當前指標的BNX和BNY對壓入一個堆疊,讀出表項內容或表示對應指令段已經存儲在一級快取中的目標BNX。此外,如果所述表項是一個“返回”指令(如:副程式的末尾),循跡器170可以從所述堆疊中彈出所述BNX和BNY對,並用新BNX等於出堆疊BNX、新BNY等於出堆疊BNY的方法更新讀指標。在某些情況下,如果子程式要求返回到“調用”指令的後一條指令,則此時新BNY等於出堆疊BNY加一。
此外,如果所述表項是一個異常處理指令,循跡器170可以讀出保存在異常BN寄存器(EXCP)中的塊號BNX和偏移量BNY,並用新BNX等於異 常BNX、新BNY等於異常BNY的方法更新讀指標。特定處理器的異常處理程式的起始位址通常是固定的,可以將異常處理程式的起始段填充到一級快取中並在軌道表中建立相應的軌道(兩者都可以設置為不被替換)。
分配器1200可以由一個一維的多表項列表構成。每個表項包括一個含高位位址的CAM和一個含BN、有效位、U位元及其他標誌位元的RAM。分配器1200包含一個自增器(APT)129和一個加法器以指向一個表項,所述列表可以被一個TBNX(如圖10A)索引(定址)。當需要進行快取填充時,填充APT 129指向的表項、其對應的記憶塊以及軌道表項。
在某些情況下,分配器1200(如:保留表120、主動表121等)可以被用於提供一個位址-BNX-TBNX的號碼映射關係。例如,TBNX可以被用於索引高位位址或BNX,高位位址可以被用於通過高位位址匹配找到BNX或TBNX。當填充一級快取時,生成器130計算出分支目標位址並將高位位址經匯流排141送到保留表120的CAM部分以進行高位位址匹配。如果匹配不成功,分配器1200可以將指標127指向的表項號碼作為TBNX,並使用該TBNX作為軌道表內容。同時,分配器1200可以填 充所述TBNX對應的二級快取塊。另一方面,如果匹配成功,分配器1200可以找到對應的TBNX,並將所述TBNX作為軌道表內容。
此外,在循跡器170的運行過程中,當軌道表讀指標151指向一個含有TBN的軌道表項時,所述TBN被通過讀口161讀出並被送到匯流排180以索引保留表120(即,檢查二級快取中是否有相應的指令段)。如果不存在有效BN,將APT129指向的BNX存儲到該TBN的RAM部分的表項中,且用所述BN替換軌道表126中的所述TBN。此外,二級快取中相應的指令段被填充到一級快取由BN索引的快取塊中。然而,如果存在有效BN,意味著在一級快取中已經存在該表項對應的指令段,那麼用所述有效的BN替換所述TBN。當然,當軌道表讀指標151指向一個內容包含BN的表項時,因為所述相應的指令段已經存儲在一級快取中,因此分配器1200不需要進行檢查。
此外,分配器1200也可以針對主動表121和保留表120支援不同的結構。例如,對於主動表121和保留表120中表項的包含關係,分配器1200可以有兩種配置方式。
在一種配置方式中,如圖13中描述的那樣,主動表121和保留表120之間產生一種不包含的關 係。為產生這種不包含關係,保留表120和主動表121各自擁有用於存儲高位位址的CAM。從生成器130來的位址被同時送到主動表121和保留表120以匹配從而得到TBNX或BNX。然而,只可能在主動表121和保留表120中的一個匹配成功,而不可能在主動表121和保留表120中同時匹配成功,也就是說一條特定的指令只可能存在於一級快取和二級快取之一之中,而不可能同時存在於兩者之中。如圖11所示,保留表120由TBNX索引,其CAM存儲了高位位址,其RAM存儲了對應的B NX號碼。可以用一個索引對同一行或表項中的多個BNX進行選擇。此外,主動表121由BNX索引,其CAM存儲了高位位址,其RAM存儲了TBNX號碼。
在一種配置方式中,主動表121和保留表120之間產生一種包含的關係。在這種關係下,只有保留表120的CAM中存儲了高位位址,保留表120可以由圖11中類似結構組成。然而,主動表121並不具有CAM部分,因此生成器送來的一個位址只在保留表120中進行匹配,這意味著如果一條特定的指令如果存在於一級快取中,那麼必然存在於二級快取中。此外,主動表121由BNX索引,其內容僅僅是TBNX。當一個一級快取塊被清除(或被替換)時,所述舊的BNX被送到主動表121尋找一個TBNX以便存儲到軌道表126中。對於資料記憶體 而言,一級快取塊必須被存儲回保留表120對應的快取記憶體中。
在某些情況下,可以使用一個一層快取系統。這樣,保留表表項可以由對應主記憶體而非快取記憶體中一個記憶塊的TBNX索引,所述主記憶體位址的高位位址被存儲到對應的CAM項中。與通常一樣,RAM部分包含BNX。這樣,TBNX被臨時保存在軌道表項中直到軌道表126的讀指標接近所述表項,使得所述高位位址對應的記憶塊可以被填充到快取(一級快取)中。之後,也可以指定一個BNX替換軌道表126中的所述TBNX。這個BNX也可以被保存在保留表項中由所述TBNX索引的RAM部分中。
此外,分配器1200可以被用於輔助一級快取替換策略的實現。例如,分配器1200可以支援最近最少使用策略和最少頻繁使用策略。
在最近最少使用策略情況下,分配器1200可以使用一個由主指標129(APT)和清除指標構成的最近最少使用視窗,以找到下一個可被替換的記憶塊。清除指標在主指標129(APT)之前N個表項的位置移動,其中N是可變數,清除指標用於清除指向的表項中的U位(設為‘0’)。另一方面,被訪問到的表項對應的U位被重新設為‘1’。檢查主 指標129(APT)指向的表項的U位以決定是否替換該表項。如果U位為‘1’,表示該表項最近被訪問過,並不是最近最少使用的,那麼主指標129增加並檢查下一個表項。如果U位為‘0’,主指標129可以停留在該表項進行替換。
在最少頻繁使用策略情況下,分配器1200可以使用如上述一樣的視窗,但使用一個記錄存儲訪問次數(表示訪問頻率)的計數器代替U位。將主指標129指向的表項中的計數器的值與處理器核125或其他設備設定的一個調整值進行比較。如果計數結果小於調整值,主指標129可以停留在該表項進行替換。
交換器133可以被用於輔助軌道表126與分配器1200之間的交互。例如,在軌道表126中,當分配一個BN以替換TBN時(例如,當一個二級快取塊被填充到一個一級快取塊中時),或分配一個TBN以替換BN時(例如,當由於一級快取空間不足,一個一級快取塊因並不存在與二級快取中而被替換回二級快取時),交換器133在舊的TBNX(BNX)被重新使用前,將軌道表126中所有舊的TBNX(BNX)替換為新的BNX(TBNX)。這樣,同一個BNX就不會對應到兩個不同的PC位址。
特別地,交換器133可以在分配操作開始的使 用就存儲一組舊TBNX和新BNX對,交換器133沿軌道表移動到底,再從軌道表126的頂部開始直至到達出發點,利用額外的讀埠匯流排159和額外的寫埠匯流排158,將所有舊的TBNX替換為新的BNX。同時,交換器133在將BN送到循跡器170之前,將每一個讀出內容中舊的TBNX替換為新的BNX。
此外,也可以使用其他部件提供上述操作所需的功能。例如,處理器核125可以提供一個控制信號“TAKEN”以控制循跡器170中的多路選擇器137。
處理器核125還可以提供一個控制信號“BRANCH/JUMP”以控制循跡器170中的寄存器138。讀指標151向前移動(如:增加BNY)直到讀出的軌跡表內容為一個分支/跳轉類型,讀指標151停止並等待處理器核125趕上。同時,根據所述內容中的分支目標位址檢查一級快取填充的必要性。所述BRANCH/JUMP信號向循跡器170表示處理器核125已經到達所述分支指令,此時TAKEN信號是程式執行的真實結果,則正確的下一位址可以被選出。這樣,當檢測到BRANCH/JUMP信號時,循跡器170控制寄存器138存入新位址並作為BN 151輸出。此外,處理器核125也可以向一級快取 124提供一個部分位址“OFFSET”,從而在由BN 151的BNX決定的快取塊中索引指令。
一級記憶體124或高層次記憶體124可以被用做由BNX索引的快取塊或記憶塊。一級記憶體124可以有一個接收從匯流排140來的資料的寫埠。對於寫位址,X位址(WXADDR)由分配器1200提供,從APT 129產生經匯流排153而來,Y位址(WYADDR,偏移位址)由獲取引擎(與被填充的資料同步)提供。一級記憶體124可以包含一個讀埠用於向處理器核125輸出資料。對於讀地址,X地址(BNX)來源於循跡器170提供的BN 151,Y地址來源於處理器核125提供的OFFSET。
圖15顯示了本發明所述快取系統的另一個實施例11000。與圖10A中的快取系統9000類似,快取系統11000可以被用於獲取資料而非指令。這樣,可以不需要保留表120和交換器133。
用於資料存儲的主動表195具有與主動表121相同的結構。主動表195中的每一個表項對應高層次記憶體196中的一個資料段。此外,一個基底位址指標記憶體197被用於存儲對應基底位址的資料段號。基底位址指標記憶體197中的基底位址指標數目與處理器核125用到的基底位址數目相同,例如:8。也可以使用其他數目。此外,處理器核125 可以用基底位址加偏移量的方式對高層次記憶體196定址。所述偏移量可以保證位址資料不會超出基底位址對應的資料段的範圍。
也可以支援多線程程式。例如,如前所述,複數個堆疊135可以被用於在多線程程式情況下填充指令,且複數個基底位址指標記憶體197可以被用於在多線程程式情況下填充指令。這樣,PID 188可以指向一個當前堆疊135及一個當前基底位址指標記憶體197。然而,如果只支持一個線程,可以只使用一個堆疊135和一個基底位址指標記憶體197,可以不需要PID 188。
當生成器130掃描、分析獲取到的指令時,如果一條指令會改變資料的基底位址,那麼就要將對應的基底位址、立即數和寄存器號等資訊存儲到軌跡表126的相應軌跡點中。此外,當處理器核125執行到所述指令時,所述基底位址或修改後的基底位址可以被送到主動表195與其中的內容進行匹配。
如果匹配成功,匹配成功項的表項號被作為基底位址指標的內容送到基底位址記憶體197。由於主動表195中的表項對應於高層次記憶體196中的資料段,因此當前基底位址指標存儲了對應資料段在高層次記憶體196中的基底位址。
另一方面,如果匹配不成功,所述基底位址被送到填充引擎132用於填充相應資料段。當所述基底位址對應的資料段被獲取時,所述基底位址被存儲到主動表195內由指標198指向的一個表項中。主動表195中所述表項的表項號被存儲到基底位址指標記憶體197內一個對應的基底位址指標中。與填充指令類似,指標198移動到主動表195中的下一個有效表項。
當處理器核125執行一條訪問高層次記憶體196中某個資料的指令時,所述指令的基底位址189被當作索引從基底位址指標記憶體197中讀出資料段號。此外,資料讀寫位址偏移量194被當作索引從所述資料段號指向的資料段中找到一個資料項目。處理器核125就可以對所述資料項目進行讀、寫操作了。
圖16是使用本發明所述高性能快取結構實現存儲結構的一個實施例。快取結構可以與之前所述的快取控制單元類似。如圖16所示,處理器核201使用的存儲設備依次包括(從高速到低速):第一層次記憶體202、第二層次記憶體203、主記憶體204和硬碟記憶體205。通常地,第一層次記憶體202的容量比第二層次記憶體203的容量小;第二層次記憶體203的容量比主記憶體204的容量小;主記憶 體204的容量比硬碟205的容量小。任何一個層次的存儲設備都可以有任意大小。
此外,一個快取結構206被放置在處理器核201和第一層次記憶體202之間;一個快取結構207被放置在第一層次記憶體202和第二層次記憶體203之間;一個快取結構208被放置在第二層次記憶體203和主記憶體204之間;一個快取結構209被放置在主記憶體204和硬碟205之間。也可以使用其他的放置方法。這種多層的快取結構可以提高處理器核201的性能。
例如,對於第一層次記憶體202和第二層次記憶體203之間的快取結構207,由於處理器核201需要從第一層次記憶體202中獲取指令,而第一層次記憶體202中的指令來源於第二層次記憶體203。這樣,當指令通過快取結構207傳遞時,所述指令可以被掃描並分析,並在相關指令被執行前將它們也獲取到第一層次記憶體202中,從而同時提高指令和資料的快取命中率。
快取結構207可以與快取結構206類似,快取結構207與第一層次記憶體的介面包括位址匯流排210、讀資料匯流排212和寫資料匯流排211,與第二層次記憶體203的介面包括位址匯流排213、讀資料匯流排214和寫資料匯流排215。這樣,快取 結構207可以提高第一層次記憶體202的命中率。
類似地,位於第二層次記憶體203和主記憶體204之間的快取結構208可以提高第二層次記憶體203的命中率,而位於主記憶體204和硬碟205之間的快取結構209可以提高主記憶體204的命中率。如果硬碟205包含了處理器核201所需的全部指令,那麼通過這種多層次的快取結構,處理器核201可以獲得高的命中率或性能。
此外,較慢速度的記憶體之間的快取結構可以具有較寬的帶寬,即能一次獲取較多的指令或資料。例如,快取結構209的帶寬比快取結構208的帶寬更寬;快取結構208的帶寬比快取結構207的帶寬更寬;快取結構207的帶寬比快取結構206的帶寬更寬。也可以配置成其他形式。
此外,可以在快取結構208和第一層次記憶體202之間提供一條獨立的旁路路徑216。可以將主記憶體204中的指令或資料同時填充到第二層次記憶體203和第一層次記憶體202,從而進一步提高整個系統的性能。
本發明所述系統和方法可以為數位系統使用的快取結構提供基本的解決方案。與傳統快取系統僅在快取缺失後才填充的機制不同,本發明所述的系統和方法在處理器執行一條指令或訪問一個資料之 前就對指令快取和資料快取進行填充,可以避免或充分地隱藏強制缺失。也就是說,本發明所述快取系統集成了預取過程,並消除了傳統快取必須的標籤比較過程。此外,本發明所述系統和方法在本質上提供了一個全相聯的快取結構,避免或充分隱藏了衝突缺失和容量缺失。此外,本發明所述的系統和方法支援同時搜索多層快取結構,因此降低了多層快取的缺失懲罰。本發明所述的系統和方法還因為避免了在訪問快取的時延關鍵路徑上的標籤匹配,所以能運行在較高的時鐘頻率。由於本發明所述的系統和方法需要的匹配操作較少,並有較低的缺失率,因此同等功耗下的效率也比傳統快取系統有顯著提高。對於本領域專業人士而言,本發明的其他優點和應用是顯見的。
11、12、13、14、15、16、17‧‧‧指令段
30、33、35、37、38、41‧‧‧程式段
31、39‧‧‧條件分支指令
32、34、40‧‧‧轉移路徑
36‧‧‧無條件分支指令
46、78‧‧‧指令記憶體
48、136‧‧‧增一邏輯
49‧‧‧選擇器
50、138‧‧‧寄存器
51、52、53、54、55、56、62、64、91、99、140、141、143、144、149、150、153、154、158、159、164、165、180、423‧‧‧匯流排
57‧‧‧類型區域
58‧‧‧第一位址XADDR
59‧‧‧第二位址YADDR
61、135‧‧‧堆疊
63‧‧‧線程標識器
65、92、93、137‧‧‧多路選擇器
66、70、71、72、410、411、412‧‧‧軌道
67、68、69‧‧‧分支點
75‧‧‧對應關係
79、83‧‧‧映射單元
80‧‧‧塊號或塊位址
84‧‧‧M位的第一位址
85‧‧‧N位的第一位址
87‧‧‧內容定址記憶體(CAM)
88、89‧‧‧RAM列
90‧‧‧索引位元高位LSB1
94‧‧‧第一位址BNX3
96‧‧‧偏移量(BNY)
97‧‧‧索引位元
98‧‧‧隨機訪問記憶體(RAM)
100‧‧‧雙向定址單元
101‧‧‧表項
102‧‧‧編碼器
104‧‧‧塊位址資料
105‧‧‧寫指標
106‧‧‧讀位址
107‧‧‧控制邏輯
108‧‧‧資料輸出
109‧‧‧匹配位址輸出
110‧‧‧迴圈自增單元
111‧‧‧V標誌位元
112‧‧‧A標誌位元
113‧‧‧U標誌位元
115‧‧‧加法器
116‧‧‧視窗(清除)指標
119‧‧‧信號線
120‧‧‧保留表
121、195‧‧‧主動表
126‧‧‧軌道表
127、198‧‧‧指標
129‧‧‧位址指標
130、186‧‧‧生成器
131‧‧‧位址翻譯單元(TLB)
132、185‧‧‧填充引擎
133‧‧‧交換器
139‧‧‧異常處理程式位址寄存器
151‧‧‧BN
152‧‧‧BNX
156‧‧‧BNY(領先指標)
161‧‧‧讀口
166‧‧‧下一BN
170‧‧‧循跡器
172‧‧‧表項號(BN)
187‧‧‧第二填充/生成器
188‧‧‧線程標識(PID)
189‧‧‧基底位址
190‧‧‧TBNX表
191‧‧‧BNX表
192‧‧‧G位
193‧‧‧替換模組
194‧‧‧資料讀寫位址偏移量
196‧‧‧高層次記憶體
197‧‧‧基底位址指標記憶體
201‧‧‧處理器核
202‧‧‧第一層次記憶體
203‧‧‧第二層次記憶體
204‧‧‧主記憶體
205‧‧‧硬碟記憶體
206、207、208、209‧‧‧快取結構
213‧‧‧位址匯流排
214‧‧‧讀資料匯流排
215‧‧‧寫資料匯流排
216‧‧‧旁路路徑
300‧‧‧位址樹
301、302、304、305、307‧‧‧樹幹
303、306‧‧‧樹支
310、312‧‧‧樹節點
311、313‧‧‧分支目標
381、417‧‧‧信號
413、414、415、416‧‧‧軌跡點
418‧‧‧輸出
1200‧‧‧分配器
2000、3000、4000、5000、6000、8000、9000、10000、11000‧‧‧快取系統
圖1是本發明所述的計算環境的一個實施例。
圖2A是根據本發明所述方法實現位址樹的一個實施例。
圖2B是基於本發明所述位址樹運行的一個實施例。
圖3A是本發明所述快取系統的一個實施例。
圖3B是本發明所述快取系統的另一個實施例。
圖4是本發明所述快取系統的另一個實施例。
圖5是本發明所述快取系統的另一個實施例。
圖6是本發明所述快取系統的另一個實施例。
圖7A是本發明所述快取系統的另一個實施例。
圖7B是本發明所述快取系統中一個組成部分的實施例。
圖8是本發明所述主動表的一個實施例。圖9是本發明所述建立新軌道的一個實施例。
圖10A是本發明所述快取系統的另一個實施例。
圖10B是本發明所述快取系統中一個組成部分的實施例。
圖11是本發明所述用於多層快取結構的分配器或保留表的一個實施例。
圖12是本發明所述建立新軌道的實施例。
圖13是本發明所述交換器的一個實施例。
圖14A是本發明所述快取系統的另一個實施例。
圖14B是本發明所述快取系統中一個組成部分 的實施例。
圖15是本發明所述快取系統的另一個實施例。
圖16是使用本發明所述高性能快取實現存儲結構的一個實施例。

Claims (78)

  1. 一數位系統,包括:一處理器核,所述處理器核連接一個包含可執行指令的第一記憶體和一個比第一記憶體速度更快的第二記憶體,且所述處理器用於執行一條或多條存儲在第二記憶體中的可執行指令,和一個快取控制單元,所述快取控制單元連接第一記憶體、第二記憶體和處理器核,用於在處理器核執行第一記憶體中的至少一條或多條指令之前將這一條或多條指令填充到第二記憶體中,其中快取控制單元可進一步用於:對正被從第一記憶體填充到第二記憶體的指令進行審查,從而提取出至少包含分支資訊的指令資訊,根據提取出的指令資訊建立複數條軌道,其中每條軌道代表第二記憶體中一個記憶塊中複數條指令,根據複數條指令軌道中的一條或多條軌道填充至少一條或多條指令。
  2. 如申請專利範圍第1項所述之數位系統,其中指令資訊進一步包括的指令類型可以是分支指令和非分支指令之一。
  3. 如申請專利範圍第1項所述之數位系統,其中分支資訊進一步包括分支的源位址和分支的目標位址。
  4. 如申請專利範圍第1項所述之數位系統,其中複數條軌道按一種位址樹配置方式安置,每一條樹幹對 應一條軌道,以及每一個樹的分支點對應一個分支指令。
  5. 如申請專利範圍第4項所述之數位系統,其中:第一記憶體中的可執行指令被劃分成複數個指令段,和第二記憶體包含與所述複數個軌道對應的複數個記憶塊,每個記憶塊用於存儲一個指令段,若第二記憶體中尚未包含分支指令對應的新軌道的第一指令段或分支指令的下一順序執行指令對應的第二指令段,則在處理器核執行分支指令前將所述第一指令段和第二指令段從第一記憶體填充到第二記憶體中對應記憶塊中,並為所述記憶塊建立對應軌道。
  6. 如申請專利範圍第5項所述之數位系統,其中從第一記憶體將所述新軌道中第一個分支軌跡點的分支目標指令對應的一個第三指令段填充到第二記憶體相應記憶塊中。
  7. 如申請專利範圍第5項所述之數位系統,其中在處理器核執行所述分支指令前,將根據所述新軌道上分支軌跡點得到的第二新軌道對應的第三指令段也從第一記憶體填充到第二記憶體中對應記憶塊中。
  8. 如申請專利範圍第2項所述之數位系統,其中快取控制單元包含一個軌道表,所述軌道表包含複數個軌道表行,每個表行對應一個軌道。
  9. 如申請專利範圍第8項所述之數位系統,其中每一個軌道表行包含複數個表項,每個表項對應一個軌跡點;所述軌跡點對應至少一條指令。
  10. 如申請專利範圍第9項所述之數位系統,其中可以通過由軌道號決定的第一位址和由軌道內偏移量決定的第二地址定址找到軌跡點。
  11. 如申請專利範圍第10項所述之數位系統,其中:當處理器核執行軌跡點對應的指令時,所述快取控制單元提供第一位址,用於確定包含所述指令的記憶塊,和處理器核提供所述指令在記憶塊中的偏移量,用於從第二記憶體取得所述指令。
  12. 如申請專利範圍第10項所述之數位系統,其中分支軌跡點對應的表項存儲的第一位址和第二位址指向新的軌跡點;所述新的軌跡點即所述分支軌跡點對應的分支指令的分支目標位址對應的軌跡點;當所述軌道的最後一個軌跡點不是分支點時,從程式順序位於下一軌道中的下一指令對應的軌跡點開始運行。
  13. 如申請專利範圍第12項所述之數位系統,其中分支目標位址可以通過對所述分支軌跡點對應指令段的塊位址、所述軌跡點在所述軌道中的偏移量和所述分支指令的轉移偏移量三者求和得到。
  14. 如申請專利範圍第10項所述之數位系統,其中快取控制單元進一步包含一個循跡器,用於提供第一位址和第二地址;所述位址的來源包括軌道表、和一個位址自增器。
  15. 如申請專利範圍第14項所述之數位系統,其中位址的來源還可以包括至少一個堆疊和一個異常處理程式寄存器。
  16. 如申請專利範圍第14項所述之數位系統,其中為提供所述第一地址和第二地址,循跡器可進一步用於:判斷當前軌跡點是否對應分支指令;若當前跡點不對應分支指令,保持第一位址不變作為下一第一位址,和使用位址自增器對當前第二位址增一作為下一第二地址,以到達下一軌跡點。
  17. 如申請專利範圍第16項所述之數位系統,其中循跡器可進一步用於:若當前跡點對應分支指令,等待處理器核給出的表示分支轉移是否成功的控制信號,和當分支轉移成功時,提供所述分支軌跡點表項中的第一位址和第二位址相應地作為下一第一位址和下一第二位址。
  18. 如申請專利範圍第17項所述之數位系統,其中循跡器可進一步用於: 當分支轉移不成功時,保持當前第一位址不變作為下一第一位址,使用位址自增器對當前第二位址增一作為下一第二地址以到達下一軌跡點。
  19. 一種用於輔助處理器核運行的方法,所述處理器核連接一個包含可執行指令的第一記憶體和一個比第一記憶體速度更快的第二記憶體;所述方法包括:對正被從第一記憶體填充到第二記憶體的指令進行審查,從而提取出至少包括分支資訊的指令資訊;根據提取出的指令資訊建立複數條軌道;根據複數條指令軌道中的一條或多條軌道將至少一條或多條指令在被處理器核執行前從第一記憶體填充到第二記憶體,使得處理器核能從第二記憶體獲取所述至少一條或多條指令。
  20. 如申請專利範圍第19項所述之方法,其中指令資訊進一步包含的指令類型可以是分支指令和非分支指令之一。
  21. 如申請專利範圍第19項所述之方法,其中分支資訊進一步包括分支的源位址和分支的目標位址。
  22. 如申請專利範圍第19項所述之方法,其中進一步包括:按一種位址樹配置方式安置所述複數條軌道,其中一條樹幹對應一條軌道,以及一個樹的分支點對應一個分支指令,且每條軌道代表第二記憶體中一個記憶塊中複數條指令。
  23. 如申請專利範圍第22項所述之方法,其中第一記憶體中的可執行指令被劃分成複數個指令段,第二記憶體包含與所述複數個軌道對應的複數個記憶塊,每個記憶塊用於存儲一個指令段,若第二記憶體中尚未包含分支指令對應的新軌道的指令段或分支指令的下一順序執行指令對應的指令段,則在處理器核執行分支指令前將所述指令段從第一記憶體填充到第二記憶體中對應記憶塊中,並為所述記憶塊建立對應軌道。
  24. 如申請專利範圍第23項所述之方法,其中從第一記憶體將所述新軌道中第一個分支軌跡點的分支目標指令對應的一個第三指令段填充到第二記憶體相應記憶塊中。
  25. 如申請專利範圍第23項所述之方法,其中在處理器核執行所述分支指令前,將根據所述新軌道上分支軌跡點得到的第二新軌道對應的另一個指令段也從第一記憶體填充到第二記憶體中對應記憶塊中。
  26. 如申請專利範圍第21項所述之方法,其中進一步包括:創建一個軌道表,所述軌道表包含對應複數個軌道的複數個軌道表行,每個表行對應一個軌道。
  27. 如申請專利範圍第26項所述之方法,其中每一個軌道表行包含複數個表項,每個表項對應一個軌跡點;所述軌跡點對應至少一條指令。
  28. 如申請專利範圍第27項所述之方法,其中進一步包括:可以通過由軌道號決定的第一位址和由軌道內偏移量決定的第二地址定址找到軌跡點。
  29. 如申請專利範圍第28項所述之方法,其中進一步包括:當處理器核執行軌跡點對應的指令時,提供用於確定包含所述指令的記憶塊的第一位址,在所述記憶塊中可以根據處理器核提供的偏移量取得所需指令。
  30. 如申請專利範圍第29項所述之方法,其中進一步包括:存儲指向由分支軌跡點對應表項中的一個分支目標位址決定的新的軌道的第一位址,當所述軌道的最後一個軌跡點不是分支點時,指向按程式順序的下一軌道。
  31. 如申請專利範圍第30項所述之方法,其中通過對所述分支軌跡點對應指令段的塊位址、所述軌跡點在所述軌道中的偏移量和所述分支指令的轉移偏移量三者求和得到所述分支目標位址。
  32. 如申請專利範圍第28項所述之方法,其中進一步包括:提供第一地址和第二地址;所述位址的來源包括軌道表和一個位址自增器。
  33. 如申請專利範圍第32項所述之方法,其中進一步包括:所述位址的來源還可以進一步包括至少一個堆疊和一個異常處理程式寄存器。
  34. 如申請專利範圍第32項所述之方法,其中提供第一位址和第二地址的方法進一步包括:判斷當前軌跡點是否對應分支指令;若當前跡點不對應分支指令,保持第一位址不變作為下一第一位址,和使用位址自增器對當前第二位址增一作為下一第二地址,以到達下一軌跡點。
  35. 如申請專利範圍第34項所述之方法,其中進一步包括:若當前跡點對應分支指令,等待處理器核給出的表示分支轉移是否成功的控制信號;當分支轉移成功時,提供所述分支軌跡點表項中的第一位址和第二位址相應地作為下一第一位址和下一第二位址。
  36. 如申請專利範圍第35項所述之方法,其中循跡器可進一步用於:當分支轉移不成功時,保持當前第一位址不變作為下一第一位址,使用位址自增器對當前第二位址增一作為下一第二地址,以到達下一軌跡點。
  37. 一種用於快取控制設備以控制處理器核快取操作的方法;所述處理器核連接一個包含可執行指令的第 一記憶體和一個比第一記憶體速度更快的第二記憶體;且所述處理器核用於執行一條或多條第二記憶體中可執行指令;所述方法包括:對正被從第一記憶體填充到第二記憶體的指令進行審查;從被審查的指令中提取出指令資訊;根據提取的指令資訊,在處理器核執行分支點前,確定所述分支點;和將對應於分支點的分支目標指令的指令段從第一記憶體填充到第二記憶體,使第二記憶體包含處理器核執行所述分支點導致的任何指令。
  38. 如申請專利範圍第37項所述之方法,其中填充指令段進一步包括:確定第二記憶體中是否已經包含所述指令段;和當第二記憶體中尚未包含所述指令段時,將分支點的分支指令的目標指令對應的指令段從第一記憶體填充到第二記憶體,使第二記憶體包含處理器核執行所述分支點導致的任何指令。
  39. 如申請專利範圍第37項所述之方法,其中進一步包括:根據來源於處理器核的在分支點是否發生分支轉移的資訊決定處理器核執行的分支點之後的下一分支點。
  40. 如申請專利範圍第37項所述之方法,其中使用領先(look-ahead)指標確定分支點的方法進一步包括:創建一個軌道表,所述軌道表包含對應複數個軌道的複數個軌道表行,每個表行對應一個軌道並包含複數個表項,每個表項對應一個軌跡點,所述軌跡點對應至少一條指令;和領先指標沿分支點對應的軌道移動直到到達所述分支點表項。
  41. 如申請專利範圍第40項所述之方法,其中進一步包括:確定與軌道表中一個或多個軌跡點相關聯的一個資料塊基底位址指標;和在處理器核執行所述一個或多個軌跡點之前,根據所述基底位址指標填充所述一個或多個軌跡點對應的資料塊。
  42. 如申請專利範圍第41項所述之方法,其中進一步包括:將所述基底位址指標存儲到軌道表對應的一個基底位址指標存儲單元中,所述基底位址指標中的基底位址和處理器核提供的一個偏移量一同對記憶塊中的資料定址。
  43. 如申請專利範圍第40項所述之方法,其中進一步包括: 使用一個循跡器沿軌道提供下一軌跡點位址,所述位址包括一個對應於軌道表行號的第一位址和一個對應於軌道表列號的第二位址,其中領先指標對應第二位址。
  44. 如申請專利範圍第43項所述之方法,其中進一步包括:保持當前第一地址不變;對當前第二地址增一使之到達下一軌跡點;判斷下一軌跡點是否是分支軌跡點;和當下一軌跡點是分支軌跡點時,提供所述分支軌跡點的分支目標位址的第一位址和第二位址。
  45. 如申請專利範圍第44項所述之方法,其中循跡器包括至少一個支援電腦程式中一系列副程式的多層堆疊操作功能的堆疊。
  46. 如申請專利範圍第45項所述之方法,其中至少一個的堆疊可以被替換為複數個堆疊,所述複數個堆疊支援多線程程式運行,其中每個線程對應所述複數個堆疊中的一個單獨的堆疊。
  47. 如申請專利範圍第45項所述之方法,其中進一步包括:在軌道表中用第一格式表示第一軌跡點的第一位址;和使用一個主動表建立所述第一軌跡點的目標軌道和第一記憶塊位址間的映射關係,其中,在軌道表中按 第一格式建立第一軌跡點時,對應於第一記憶塊位址的一個指令段被填充到第二記憶體中。
  48. 如申請專利範圍第47項所述之方法,其中進一步包括:在軌道表中用第二格式表示第二軌跡點的第一位址;和使用一個保留表建立所述第二軌軌跡點的目標軌道和第二記憶塊位址間的映射關係,其中,在軌道表中按第二格式建立第二軌跡點時,對應於第二記憶塊位址的指令段不被填充到第二記憶體中。
  49. 如申請專利範圍第48項所述之方法,其中進一步包括:使用一個交換器對第一格式和第二格式進行交換。
  50. 如申請專利範圍第40項所述之方法,其中進一步包括:根據訪問存儲在軌道表中的空轉(idle)軌道的頻率實現對處理器核的功耗調整。
  51. 如申請專利範圍第37項所述之方法,其中進一步包括:從第一記憶體中將與分支軌跡點有關的複數個指令段填充到第二記憶體中,其中:每個指令段被分割為多個指令片段;每個指令片段被分配一個優先順序;和 根據每個指令片段的優先順序交替填充所述複數個指令段的多個指令片段。
  52. 如申請專利範圍第40項所述之方法,其中進一步包括:從第一記憶體中將與一個或多個軌跡點有關的複數個資料段填充到第二記憶體中,其中:每個資料段被分割為多個資料片段;每個資料片段被分配一個優先順序;和根據每個資料片段的優先順序交替填充所述複數個資料段的多個資料片段。
  53. 一種利用快取控制單元控制包括第一記憶體和連接處理器核及第一記憶體的第二記憶體在內的複數個快取記憶體的方法;所述方法包括:對被填充到複數個記憶體中的指令進行審查;從被審查的指令中提取出指令資訊;根據提取出的指令資訊在軌道表中創建軌跡點,用低層次快取記憶塊號和高層次快取記憶塊號之一表示分支目標軌跡點的表項;其中,當使用低層次快取記憶塊號表示分支目標軌跡點時,所述分支目標軌跡點對應的一個指令段被填充到第一記憶體中;和當使用高層次快取記憶塊號表示分支目標軌跡點時,所述分支目標軌跡對應的指令段被填充到第二記憶體而不是第一記憶體中。
  54. 如申請專利範圍第53項所述之方法,其中進一步包括:使用一個表建立低層次快取記憶塊號與指令段存儲位址的映射關係,以及低層次快取記憶塊號與複數個高層次快取記憶塊號的映射關係。
  55. 如申請專利範圍第54項所述之方法,其中進一步包括:判斷被分析的軌跡點表項是否包括一個預設的低層次快取記憶塊號;和當所述軌跡點表項包括所述預設的低層次快取記憶塊號時,判斷是否能根據所述低層次快取記憶塊號定址從所述表中選擇出一個有效的高層次快取記憶塊號。
  56. 如申請專利範圍第55項所述之方法,其中進一步包括:若無法選擇出有效的高層次快取記憶塊號,則將所述指令段從第一記憶體填充到第二記憶體;生成有效的高層次快取記憶體號;和將軌跡點中的所述低層次快取記憶體塊號替換為所述高層次快取記憶塊號。
  57. 如申請專利範圍第56項所述之方法,其中有一個位於第一記憶體和第二記憶體之間連接兩者的第三記憶體;所述方法進一步包括:當軌跡點表項包括所述預設的低層次快取記憶體號時,判斷是否能根據所述低層次記憶塊號定址從所述 表中選擇出有效的高層次快取記憶塊號和有效的第三記憶體記憶塊號。
  58. 如申請專利範圍第57項所述之方法,其中進一步包括:若無法選擇出有效的高層次快取記憶塊號,但能選擇出有效的第三記憶體記憶塊號,則將所述指令段從第三記憶體填充到第二記憶體;和生成有效的高層次快取記憶體號;和將軌跡點中的所述低層次快取記憶體塊號替換為所述高層次快取記憶塊號。
  59. 如申請專利範圍第53項所述之方法,其中低層次快取記憶塊號關聯於第一個表,高層次快取記憶塊號關聯於第二個表,所述方法進一步包括:通過配置所述第一個表和第二個表以保證所述指令段被填充到第一記憶體或第二記憶體中。
  60. 如申請專利範圍第53項所述之方法,其中低層次快取記憶塊號關聯於第一個表,高層次快取記憶塊號關聯於第二個表,所述方法進一步包括:通過配置所述第一個表和第二個表以保證所述指令段被填充到第一記憶體和第二記憶體中。
  61. 一個用於為處理器核控制快取運行快取控制設備;所述處理器核連接一個包含可執行指令的第一記憶體和一個比第一記憶體速度更快的第二記憶體,且所述 處理器用於執行第二記憶體中可執行指令中的一條或多條;所述設備包括:一個第一填充生成單元,用於審查從第一記憶體填充到第二記憶體中的指令,並從被審查的指令中提取出指令資訊;一個循跡器,用於根據提取的指令資訊控制領先指標,從而在處理器核執行到分支點之前確定所述分支點;和一個分配器,用於將分支點的目標指令對應的指令段從第一記憶體填充到第二記憶體,使第二記憶體包含處理器核執行所述分支點導致的任何指令。
  62. 如申請專利範圍第61項所述之設備,其中分配器可以進一步用於:判斷第二記憶體中是否已經包含了所述指令段;和若第二記憶體中尚未包含所述指令段,則控制第一填充生成單元將所述分支點的目標指令對應的指令段從第一記憶體填充到第二記憶體,使第二記憶體包含處理器核執行所述分支點導致的任何指令。
  63. 如申請專利範圍第62項所述之設備,其中第一填充生成單元包含了一個虛實位址轉換單元。
  64. 如申請專利範圍第61項所述之設備,其中循跡器可以進一步用於: 根據提供給領先指標的來源於處理器核的在分支點是否發生分支轉移的資訊,確定所述處理器核執行的分支點的下一分支點。
  65. 如申請專利範圍第62項所述之設備,其中設備進一步包括:一個軌道表,所述軌道表包含了對應於複數條軌道的複數個軌道表項,每個表行對應一個軌道且包含複數個表項,每個表項對應一個軌跡點,所述軌跡點對應至少一條指令;在所述軌道表中,循跡器控制領先指標沿分支點對應的軌道移動直到到達所述分支點表項。
  66. 如申請專利範圍第65項所述之設備,其中填充生成單元可以進一步用於:確定與軌道表中一個或多個軌跡點相關聯的一個資料塊基底位址指標;和在處理器核執行所述一個或多個軌跡點之前,根據所述基底位址指標填充所述一個或多個軌跡點對應的資料塊。
  67. 如申請專利範圍第66項所述之設備,其中設備進一步包括:一個基底位址指標存儲單元,用於對應軌道表存儲所述基底位址指標,所述基底位址指標中的基底位址和處理器核提供的一個偏移量一同對記憶塊中的資料定址。
  68. 如申請專利範圍第63項所述之設備,其中循跡器可以進一步用於:提供沿軌道的下一軌跡點的位址,所述位址包含一個對應軌道表行號的第一位址和一個對應軌道表列號的第二位址,其中領先指標對應第二位址。
  69. 如申請專利範圍第68項所述之設備,其中循跡器可以進一步用於:保持當前第一地址不變;當前第二地址增一使之到達下一軌跡點;判斷下一軌跡點是否是分支軌跡點;和當下一軌跡點是分支軌跡點時,提供所述分支軌跡點的分支目標位址的第一位址和第二位址。
  70. 如申請專利範圍第69項所述之設備,其中循跡器進一步包括用於支援多線程程式運行的複數個堆疊,其中每個線程對應所述複數個堆疊中的一個單獨的堆疊。
  71. 如申請專利範圍第68項所述之設備,其中:在軌道表中用第一格式表示第一軌道的軌跡點的第一位址;和所述分配器包括一個主動表,用於建立所述第一軌道和第一記憶塊位址間的映射關係,其中,在軌道表中按第一格式建立第一軌道的軌跡點時,對應於第一記憶塊位址的一個指令段被填充到第二記憶體中。
  72. 如申請專利範圍第71項所述之設備,其中:在軌道表中用第二格式表示第二軌跡點的第一位址;和所述分配器包括一個保留表,用於建立所述第二軌跡點和第二記憶塊位址間的映射關係,其中,在軌道表中按第二格式建立第二軌跡點時,對應於第二記憶塊位址的指令段不被填充到第二記憶體中。
  73. 如申請專利範圍第72項所述之設備,其中:所述分配器根據主動表和一個由指向主動表項的主指標和指向主動表項的清掃指標定義的清除視窗對第二記憶體實現最近最少使用(LRU)替換策略和最少頻繁使用(LFU)替換策略中的至少一種替換策略。
  74. 如申請專利範圍第72項所述之設備,其中設備進一步包括:一個交換器對軌道表中的第一格式和第二格式進行轉換。
  75. 如申請專利範圍第72項所述之設備,其中:當第一記憶體記憶塊號位址對應的指令段被第二記憶體中的一個新的指令段替換時,在保留表中建立對應的表項;和交換器將軌道表中含有所述被替換指令段的目標位址從第一格式改為第二格式。
  76. 如申請專利範圍第72項所述之設備,其中設備進一步包括: 一個連接第一記憶體和第三記憶體的第二填充生成單元;所述第二填充生成單元包括一個虛實位址轉換單元。
  77. 如申請專利範圍第72項所述之設備,其中:由主動表管理第二記憶體;和由保留表管理第一記憶體。
  78. 如申請專利範圍第65項所述之設備,其中:所述軌道表可以被用於存儲空轉軌道,根據訪問所述空轉軌道的頻率實現對處理器核的功耗調整。
TW100122199A 2011-06-24 2011-06-24 高性能快取方法和裝置 TWI636362B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
TW100122199A TWI636362B (zh) 2011-06-24 2011-06-24 高性能快取方法和裝置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
TW100122199A TWI636362B (zh) 2011-06-24 2011-06-24 高性能快取方法和裝置

Publications (2)

Publication Number Publication Date
TW201301032A TW201301032A (zh) 2013-01-01
TWI636362B true TWI636362B (zh) 2018-09-21

Family

ID=48137492

Family Applications (1)

Application Number Title Priority Date Filing Date
TW100122199A TWI636362B (zh) 2011-06-24 2011-06-24 高性能快取方法和裝置

Country Status (1)

Country Link
TW (1) TWI636362B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2519108A (en) 2013-10-09 2015-04-15 Advanced Risc Mach Ltd A data processing apparatus and method for controlling performance of speculative vector operations
CN105893319A (zh) * 2014-12-12 2016-08-24 上海芯豪微电子有限公司 一种多车道/多核系统和方法
GB2540939B (en) * 2015-07-31 2019-01-23 Advanced Risc Mach Ltd An apparatus and method for performing a splice operation
CN113360423A (zh) * 2020-03-03 2021-09-07 瑞昱半导体股份有限公司 数据储存系统及操作数据储存系统的方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1300006A (zh) * 1999-12-10 2001-06-20 国际商业机器公司 利用从分支预测得出的未来分支路径信息进行预取
CN1497436A (zh) * 2002-10-22 2004-05-19 富士通株式会社 信息处理单元和信息处理方法
US20040098540A1 (en) * 2002-11-19 2004-05-20 Renesas Technology Corp. Cache system and cache memory control device controlling cache memory having two access modes
US7346737B2 (en) * 2004-05-29 2008-03-18 Samsung Electronics Co., Ltd. Cache system having branch target address cache
US20110072215A1 (en) * 2009-09-18 2011-03-24 Renesas Electronics Corporation Cache system and control method of way prediction for cache memory

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1300006A (zh) * 1999-12-10 2001-06-20 国际商业机器公司 利用从分支预测得出的未来分支路径信息进行预取
CN1497436A (zh) * 2002-10-22 2004-05-19 富士通株式会社 信息处理单元和信息处理方法
US20040098540A1 (en) * 2002-11-19 2004-05-20 Renesas Technology Corp. Cache system and cache memory control device controlling cache memory having two access modes
US7346737B2 (en) * 2004-05-29 2008-03-18 Samsung Electronics Co., Ltd. Cache system having branch target address cache
US20110072215A1 (en) * 2009-09-18 2011-03-24 Renesas Electronics Corporation Cache system and control method of way prediction for cache memory

Also Published As

Publication number Publication date
TW201301032A (zh) 2013-01-01

Similar Documents

Publication Publication Date Title
US8527707B2 (en) High-performance cache system and method
US6161166A (en) Instruction cache for multithreaded processor
US5694568A (en) Prefetch system applicable to complex memory access schemes
KR100397683B1 (ko) 로드버퍼를 가진 로드/저장유닛에서 개별적인 태그 및 데이터 배열 액세스를 위한 방법 및 장치
US5091851A (en) Fast multiple-word accesses from a multi-way set-associative cache memory
US8832415B2 (en) Mapping virtual addresses to different physical addresses for value disambiguation for thread memory access requests
US8806177B2 (en) Prefetch engine based translation prefetching
CN102841865B (zh) 高性能缓存系统和方法
US9141388B2 (en) High-performance cache system and method
US5717895A (en) Associative scalar data cache with write-through capabilities for a vector processor
US6012134A (en) High-performance processor with streaming buffer that facilitates prefetching of instructions
TWI451330B (zh) 快取記憶體系統以及快取資料取代之方法
EP0734553A1 (en) Split level cache
US9753855B2 (en) High-performance instruction cache system and method
US10275358B2 (en) High-performance instruction cache system and method
US9569219B2 (en) Low-miss-rate and low-miss-penalty cache system and method
CN104424128B (zh) 变长指令字处理器系统和方法
KR20150119004A (ko) 명령 처리 시스템 및 방법
CN106066787A (zh) 一种基于指令和数据推送的处理器系统和方法
US11301250B2 (en) Data prefetching auxiliary circuit, data prefetching method, and microprocessor
TWI636362B (zh) 高性能快取方法和裝置
US6012135A (en) Computer having multiple address ports, each having logical address translation with base and limit memory management
US8019968B2 (en) 3-dimensional L2/L3 cache array to hide translation (TLB) delays
KR20240112295A (ko) 메모리 유닛에 데이터 피연산자를 저장 및 액세스하는 방법
Gong et al. A novel configuration context cache structure of reconfigurable systems