專利名稱:用于提高緩存命中率的裝置及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及CPU的取指技術(shù),特別涉及一種用于提高緩存命中率的裝置、以及一 種用于提高緩存命中率的方法,本文所述的緩存主要是指CPU內(nèi)部的指令緩存(Icache)。
背景技術(shù):
如圖1所示,在CPU中,當取指單元需要讀取一條指令數(shù)據(jù)時,首先將該指令數(shù)據(jù) 的PC地址發(fā)送給Icache單元;Icache單元具有其對應(yīng)的Icache控制邏輯和Icache緩存, 當Icache單元接收到來自取指單元的PC地址后,Icache控制邏輯從Icache緩存中查找 是否存在具有該PC地址的指令數(shù)據(jù)。如果Icache控制邏輯從Icache緩存中找到具有該PC地址的指令數(shù)據(jù),則Icache 控制邏輯就用相對快的速度立即從Icache緩存中讀取具有該PC地址的指令數(shù)據(jù)、并返回 給取指單元。但如果Icache控制邏輯從Icache緩存中沒有找到具有該PC地址的指令數(shù)據(jù), 則Icache控制邏輯就用相對慢的速度從CPU外部的內(nèi)存中讀取具有該PC地址的指令數(shù) 據(jù)、并返回給取指單元,同時,Icache控制邏輯還將具有該PC地址的指令數(shù)據(jù)所在的一線 (Icache line)指令數(shù)據(jù)塊調(diào)入至Icache緩存中,以使得后續(xù)可以直接從Icache緩存中 讀取該指令數(shù)據(jù)塊中的其他指令數(shù)據(jù)、而不必再調(diào)用CPU外部的內(nèi)存。其中,一個Icache line的指令數(shù)據(jù)塊通常為4 32個字節(jié)、包含4_8條指令數(shù)據(jù)??偟膩碚f,讀取指令的優(yōu)先順序是先Icache緩存、后內(nèi)存。由于程序執(zhí)行的局域性行為,當前正在執(zhí)行的指令數(shù)據(jù)所在的指令數(shù)據(jù)塊中,通 常會包含有后續(xù)可能需要的若干條其他指令數(shù)據(jù),因此,基于上述指令數(shù)據(jù)讀取機制,能夠 使CPU內(nèi)部利用Icache單元讀取指令數(shù)據(jù)的命中率非常高、通??蛇_90%左右,也就是說, CPU內(nèi)部的取指單元下一次所要讀取的指令數(shù)據(jù)90%都在Icache緩存中,而只有大約10% 的指令數(shù)據(jù)需要從CPU外部的內(nèi)存讀取。從而,上述指令數(shù)據(jù)讀取機制能夠在很大程度上免去CPU直接讀取內(nèi)存的時間, 也使指令數(shù)據(jù)的讀取基本無需等待。然而,對于跳轉(zhuǎn)指令來說,上述指令數(shù)據(jù)讀取機制就無法保證對Icache緩存的高 命中率。具體說,跳轉(zhuǎn)指令可能發(fā)生跳轉(zhuǎn)的目標地址并不一定屬于當前指令所在的指令數(shù) 據(jù)塊,因此,即便能夠?qū)⒁?Icache line的指令數(shù)據(jù)塊調(diào)入至Icache緩存中,也很難保證目 標地址處的指令數(shù)據(jù)能夠位于Icache緩存中,從而,當執(zhí)行跳轉(zhuǎn)指令后,取指單元需要讀 取目標地址處的指令數(shù)據(jù)時,就會出現(xiàn)在Icache緩存中無法命中的情況。而一旦出現(xiàn)無法 命中的情況,就需要花費多個指令周期從CPU外部的內(nèi)存中讀取目標地址處的指令數(shù)據(jù), 勢必會增加CPU的等待時間。而且,跳轉(zhuǎn)指令一般會占到所有的指令數(shù)據(jù)的20%左右,因此,由跳轉(zhuǎn)指令所引起 的Icache緩存命中率低的問題,對CPU的運行效率也是有較大影響的。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種用于提高緩存命中率的裝置、以及一種用于提高緩 存命中率的方法。本發(fā)明提供的一種用于提高緩存命中率的裝置,包括取指單元,將當前需要讀取的第一指令數(shù)據(jù)的第一地址提供給BTB單元;BTB單元,根據(jù)所述第一地址在其內(nèi)部緩存中查找將在所述第一指令數(shù)據(jù)之后執(zhí) 行的跳轉(zhuǎn)指令,若未找到則不動作,若找到則將作為所述跳轉(zhuǎn)指令的跳轉(zhuǎn)目標的第二地址 提供給Icache單元;Icache單元,查找其內(nèi)部緩存中是否存在具有所述第二地址的第二指令數(shù)據(jù),若 存在則不動作,若不存在則從內(nèi)存中讀取所述第二地址處的所述第二指令數(shù)據(jù)至其內(nèi)部緩 存中保存。優(yōu)選地,BTB單元以所述第一地址為起始地址查找所述跳轉(zhuǎn)指令。或者,BTB單元 進一步計算所述第一地址按照一線大小的下對齊地址,并以所述下對齊地址為起始地址、 在一線的范圍內(nèi)查找所述跳轉(zhuǎn)指令。優(yōu)選地,Icache單元進一步從內(nèi)存中讀取所述第二指令數(shù)據(jù)所屬的指令數(shù)據(jù)塊至 其內(nèi)部緩存中保存。優(yōu)選地,取指單元進一步將所述第一地址提供給Icache單元;相應(yīng)地,Icache單 元進一步在其內(nèi)部緩存中查找是否存在具有所述第一地址的所述第一指令數(shù)據(jù),當存在時 從其內(nèi)部緩存中讀取具有所述第一地址的所述第一指令數(shù)據(jù)返回給取指單元,否則從內(nèi)存 中讀取所述第一地址處的所述第一指令數(shù)據(jù)至其內(nèi)部緩存中、并返回給取指單元。本發(fā)明提供的一種用于提高緩存命中率的方法,包括a、將取指單元當前需要讀取的第一指令數(shù)據(jù)的第一地址提供給BTB單元;b、根據(jù)所述第一地址在BTB單元中查找將于所述第一指令數(shù)據(jù)之后被執(zhí)行的跳 轉(zhuǎn)指令,若未找到則不動作,若找到則將作為所述跳轉(zhuǎn)指令的跳轉(zhuǎn)目標的第二地址提供給 Icache 單兀;c、在Icache單元中查找是否存在具有所述第二地址的第二指令數(shù)據(jù),若存在則 不動作,若不存在則從內(nèi)存中讀取所述第二地址處的所述第二指令數(shù)據(jù)至Icache單元中 保存。優(yōu)選地,在步驟b中,以所述第一地址為起始地址在BTB單元查找所述跳轉(zhuǎn)指令。優(yōu)選地,在步驟b中,進一步計算所述第一地址按照一線大小的下對齊地址,并以 所述下對齊地址為起始地址、在一線的范圍內(nèi)查找BTB單元中的所述跳轉(zhuǎn)指令。優(yōu)選地,在步驟c中進一步從內(nèi)存中讀取所述第二指令數(shù)據(jù)所屬的指令數(shù)據(jù)塊 至Icache單元中保存。優(yōu)選地,在步驟a中進一步包括將所述第一地址提供給Icache單元;相應(yīng)地,在 步驟b中進一步包括在Icache單元中查找是否存在具有所述第一地址的所述第一指令數(shù) 據(jù),當存在時從其內(nèi)部緩存中讀取并返回具有所述第一地址的所述第一指令數(shù)據(jù),否則從 內(nèi)存中讀取所述第一地址處的所述第一指令數(shù)據(jù)至Icache單元中保存、并返回所述第一 指令數(shù)據(jù)。由上述技術(shù)方案可見,本發(fā)明能夠利用BTB單元提前推測出跳轉(zhuǎn)指令的目標地址
5(即第二地址)、并提供給Icache單元,因此,在取指單元需要讀取目標地址處的指令數(shù)據(jù) 之前,就可以由Icache單元提前從內(nèi)存中預(yù)取目標地址處的指令數(shù)據(jù)。從而,等到取指單 元需要讀取目標地址處的指令數(shù)據(jù)時,無需再從內(nèi)存讀取、而是可以直接從Icache緩存中 讀取,進而能夠針對跳轉(zhuǎn)指令的目標地址處的指令數(shù)據(jù)提高對Icache緩存取指的命中率、 減少CPU等待取指的時間、提高CPU的運行效率。更優(yōu)地,本發(fā)明可以在取指單元向Icache單元發(fā)起取操作的過程中,以取指單元 當前需要的指令數(shù)據(jù)的地址為參照來推測后續(xù)跳轉(zhuǎn)指令的目標地址,從而能夠更好地將推 測跳轉(zhuǎn)指令的目標地址的過程與正常的取指過程相結(jié)合,使正常的取指過程能夠進一步附 帶有推測跳轉(zhuǎn)指令的目標地址的效果。
圖1為現(xiàn)有技術(shù)中CPU取指階段的原理示意圖;圖2為本發(fā)明實施例中用于提高緩存命中率的裝置的邏輯結(jié)構(gòu)示意圖;圖3a至圖3d為如圖2所示裝置實現(xiàn)取指過程的一實例示意圖;圖4為本發(fā)明實施例中用于提高緩存命中率的方法的示例性流程圖。
具體實施例方式為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對 本發(fā)明進一步詳細說明。在現(xiàn)代體系結(jié)構(gòu)的CPU(x86、arm)內(nèi)部,通常會包含一種分支目標緩存(BTB)單 元,BTB單元能夠預(yù)測跳轉(zhuǎn)指令的目標地址,且預(yù)測的準確率一般高達95%以上。因此,本 實施例將BTB單元的預(yù)測功能與Icache單元相結(jié)合,用以提高Icache單元針對目標地址 的指令數(shù)據(jù)的命中率。下面,結(jié)合如圖2中所示出的邏輯結(jié)構(gòu),詳細介紹本實施例中如何將BTB單元的預(yù) 測功能與Icache單元相結(jié)合。首先,取指單元在需要讀取一條指令數(shù)據(jù)時,會將該指令數(shù)據(jù)的PC地址發(fā)送給 Icache單元的Icache控制邏輯;與此同時,取指單元還將該PC地址發(fā)送至BTB單元的BTB 控制邏輯。在接收到取指單元提供的PC地址之后,Icache單元的Icache控制邏輯從Icache 緩存中查找是否存在具有該PC地址的指令數(shù)據(jù)。如找到具有該PC地址的指令數(shù)據(jù),則用相對快的速度立即從Icache緩存中讀取 具有該PC地址的指令數(shù)據(jù)、并返回給取指單元;如沒有找到具有該PC地址的指令數(shù)據(jù),則利用相對慢的速度從CPU外部的內(nèi)存中 讀取該PC地址處的指令數(shù)據(jù)、并返回給取指單元,還將讀取的該PC地址處的指令數(shù)據(jù)所在 的一個Icache line指令數(shù)據(jù)塊調(diào)入至Icache緩存中,以使得后續(xù)可以直接從Icache緩 存中讀取該指令數(shù)據(jù)塊中的其他指令數(shù)據(jù)、而不必再調(diào)用CPU外部的內(nèi)存。而且,在Icache單元的Icache控制邏輯執(zhí)行查找操作的同時,BTB單元的BTB控 制邏輯會在BTB緩存中查找將于取指單元需要讀取的指令數(shù)據(jù)之后執(zhí)行的跳轉(zhuǎn)指令(如何 預(yù)測出跳轉(zhuǎn)指令可以按照現(xiàn)有方式來實現(xiàn)),該跳轉(zhuǎn)指令的地址大于該PC地址、且相比于其他跳轉(zhuǎn)指令距離該PC地址最近;然后,將預(yù)測出的作為跳轉(zhuǎn)目標的另一 PC地址提供給 Icache單元的Icache控制邏輯,該另一 PC地址可稱之為目標地址。更具體地,BTB控制邏輯可以采用如下的查找方式方式1,BTB控制邏輯以取指單元所提供的PC地址為查找的起始地址,并按照地址 遞增的方式在PC PC+L的范圍內(nèi)進行順序查找,L為預(yù)先設(shè)定的任意值;方式2,BTB控制邏輯以[PC]為查找的起始地址,其中,[PC]為取指單元所提 供的PC地址按照一 Icache line的大小(Icache_line_size)的下對齊地址、[PC]= PC&(Icache_line_size-l),然后,按照地址遞增的方式在[PC] [PC]+Icache_line_ size-1的范圍內(nèi)進行順序查找,這樣,就相當于先確定取指單元所提供的PC地址所屬 Icache_line的頭地址,然后從頭地址開始在該PC地址所屬Icachejine內(nèi)查找。實際應(yīng)用中,對于所有指令數(shù)據(jù)中的跳轉(zhuǎn)指令比例較高、或較為集中的情況,采用 方式1可以在取指單元每次取指時均由BTB單元進行查找,這樣能夠較好地避免有跳轉(zhuǎn)指 令被遺漏;而對于跳轉(zhuǎn)指令較少、且較為分散的情況(例如每一 Icache line最多只有一條 跳轉(zhuǎn)指令),則可以選擇方式2,并只有在PC地址等于[PC]時、即PC = PC&(Icache_line_ size-1)時再由BTB單元進行查找,這就相當于,只有當前要讀取的指令數(shù)據(jù)的PC地址是一 個Icache line的頭地址時才進行查找,從而就使得針對每一 Icache line只進行一次查 找,進而也就能夠盡可能地減少CPU的負擔。當然,BTB控制邏輯也可以采用其他本領(lǐng)域技 術(shù)人員能夠想到的方式進行查找,本文不再一一列舉。但無論按照何種方式進行查找,只要存在將于取指單元所要讀取的指令數(shù)據(jù)之后 執(zhí)行的跳轉(zhuǎn)指令,BTB單元均會將該跳轉(zhuǎn)指令的目標地址提供給Icache單元。但如果BTB 單元在一定范圍內(nèi)未能查找到跳轉(zhuǎn)指令,則無需動作。也就是說,Icache單元的Icache控制邏輯不僅要響應(yīng)取指單元的取指要求,還要 對BTB控制單元傳過來可能跳轉(zhuǎn)的跳轉(zhuǎn)指令的目標地址進行相應(yīng)的操作,具體來說Icache單元的Icache控制邏輯在將指令數(shù)據(jù)返回給取指單元之后,還需要從 Icache緩存中查找是否存在具有BTB單元所提供的目標地址的指令數(shù)據(jù);如找到具有該目標地址的指令數(shù)據(jù),則表示該目標地址處的指令數(shù)據(jù)已經(jīng)在 Icache緩存中,取指單元在執(zhí)行跳轉(zhuǎn)指令后又需要目標地址處的指令數(shù)據(jù)時,可直接從 Icache緩存中讀取,因而Icache控制邏輯不需要作任何操作、只需等待取指單元針對該目 標地址的取指要求即可;否則,表示該目標地址處的指令數(shù)據(jù)未在Icache緩存中,因此,為了避免取指單 元下次需要該目標地址處的指令數(shù)據(jù)時不得不從CPU外部的內(nèi)存讀取,Icache控制邏輯先 從CPU外部的內(nèi)存中將該目標地址處的指令數(shù)據(jù)預(yù)取到Icache緩存中,然后即可等待取指 單元針對該目標地址的取指要求。當然,Icache單元中的Icache控制邏輯也可以從內(nèi)存 中將該目標地址處的指令數(shù)據(jù)所屬的指令數(shù)據(jù)塊都讀取至其Icache緩存中保存,而不是 僅僅讀取該目標地址處的一條指令數(shù)據(jù)。如上可見,本實施例利用BTB單元提前推測出跳轉(zhuǎn)指令的目標地址、并提供給 Icache單元,因此,在取指單元需要讀取目標地址處的指令數(shù)據(jù)之前,就可以由Icache單 元提前從內(nèi)存中預(yù)取目標地址處的指令數(shù)據(jù)。從而,等到取指單元需要讀取目標地址處的 指令數(shù)據(jù)時,無需再從內(nèi)存讀取、而是可以直接從Icache緩存中讀取,進而能夠針對跳轉(zhuǎn)指令的目標地址處的指令數(shù)據(jù)提高對Icache緩存取指的命中率、減少CPU等待取指的時 間、提高CPU的運行效率。以下再結(jié)合具體實例,對本實施例中的方案進行更進一步的說明。參見圖3a,取指單元在取指階段希望讀取PC地址=0x10000000處的指令數(shù)據(jù)1, 并將該PC地址發(fā)送給Icache單元和BTB單元。參見圖3b,Icache單元在其緩存中查找到其Icache緩存有PC地址= 0x10000000的指令數(shù)據(jù)1 ;且在此過程中,BTB單元在其內(nèi)部對照表中表示跳轉(zhuǎn)指令地址 的 branch_addr 列中,查找到取值大于 0x10000000、離 0x10000000 最近的 branch_addr =0x10000010,即0x10000010處的指令數(shù)據(jù)為跳轉(zhuǎn)指令,并在對照表中表示目標地址 白勺 target_addr ^lJ Φ, SiJcIlJ branch_addr = 0x10000010 ffiX^iSW target_addr = 0x20000000 ;雖然Icache緩存中存在PC地址=0x10000000的指令數(shù)據(jù)1,但并不一定存 在0x20000000處的指令數(shù)據(jù)2,因此,BTB單元需要將target_addr = 0x20000000提供給 Icache 單兀。參見圖3c,Icache單元首先要完成對取指單元的響應(yīng),將Icache緩存中的該指令 數(shù)據(jù)1返回給取指單元,然后才開始處理BTB單元提供的target_addr = 0x20000000。參見圖3d,Icache單元在Icache緩存查找是否存在PC地址與target_addr = 0x20000000相同的指令數(shù)據(jù)2,但沒有查找到,因此,Icache單元向CPU外部的內(nèi)存發(fā)出對 0x20000000地址處的指令數(shù)據(jù)2的讀取請求,并預(yù)先提取0x20000000地址處的指令數(shù)據(jù)2 所屬的一個Icache line的指令數(shù)據(jù)塊到Icache緩存中。如上可見,在本實例中,當CPU執(zhí)行到0x10000000的指令數(shù)據(jù)時,能夠預(yù)測出該指 令數(shù)據(jù)之后還將有0x10000010處的跳轉(zhuǎn)指令需要執(zhí)行、且跳轉(zhuǎn)目標為0x20000000,并且還 能夠?qū)?x20000000處的指令數(shù)據(jù)預(yù)取至Icache單元中,從而,CPU通過執(zhí)行0x10000010處 的跳轉(zhuǎn)指令而跳轉(zhuǎn)至0x20000000之后,可直接從Icache單元中讀取0x20000000處的指令 數(shù)據(jù),顯然,也就提高CPU在取指階段的命中率,加速程序的運行效率。除了如上所述的包括取指單元、BTB單元、以及Icache單元的裝置之外,本實施例 還提供了一種對應(yīng)的方法。如圖4所示,該方法主要包括S401,在取指單元需要讀取一條指令數(shù)據(jù)時,將該指令數(shù)據(jù)的PC地址發(fā)送給 Icache單元和BTB單元,然后同時開始執(zhí)行S402和S405。S402,從Icache單元內(nèi)部的Icache緩存中查找是否存在具有該PC地址的指令 數(shù)據(jù),如找到具有該PC地址的指令數(shù)據(jù),則執(zhí)行S403 ;如沒有找到具有該PC地址的指令數(shù) 據(jù)。則執(zhí)行S404。S403,用相對快的速度立即從Icache單元內(nèi)部的Icache緩存中讀取具有該PC地 址的指令數(shù)據(jù)、并返回給取指單元,然后等待執(zhí)行S407。S404,用相對慢的速度從CPU外部的內(nèi)存中讀取該PC地址處的指令數(shù)據(jù)、并返回 給取指單元,還將讀取的該PC地址處的指令數(shù)據(jù)所在的一個Icache line指令數(shù)據(jù)塊調(diào)入 至Icache單元內(nèi)部的Icache緩存中,以使得后續(xù)可以直接從Icache緩存中讀取該指令數(shù) 據(jù)塊中的其他指令數(shù)據(jù)、而不必再調(diào)用CPU外部的內(nèi)存,然后等待執(zhí)行S408。S405,在BTB單元的BTB緩存中查找將于取指單元需要讀取的指令數(shù)據(jù)之后執(zhí)行的跳轉(zhuǎn)指令,該跳轉(zhuǎn)指令的地址大于該PC地址、且相比于其他跳轉(zhuǎn)指令距離該PC地址最 近,然后執(zhí)行S406。如果本步驟中的查找僅限于一定的范圍,則有可能在一定范圍內(nèi)未能查找到跳轉(zhuǎn) 指令,如果沒有查找到則無需動作、并可以直接在S403或S404執(zhí)行完畢后即結(jié)束本流程。而且,本步驟中可以采用如前文所述的方式1、或方式2、或其他由本領(lǐng)域技術(shù)人 員能夠想到的方式進行查找。S406, BTB單元將跳轉(zhuǎn)指令的目標地址提供給Icache單元,然后等待執(zhí)行S407。S407,已向取指單元返回需要讀取的指令數(shù)據(jù)、且Icache單元已接收到BTB單元 提供的目標地址后,在Icache單元內(nèi)部的Icache緩存中查找是否存在具有BTB單元所提 供的目標地址的指令數(shù)據(jù),如果查找到具有該目標地址的指令數(shù)據(jù),則表示該目標地址處 的指令數(shù)據(jù)已經(jīng)在Icache緩存中,取指單元在執(zhí)行跳轉(zhuǎn)指令后又需要目標地址處的指令 數(shù)據(jù)時,可直接從Icache緩存中讀取,因而Icache單元不需要作任何操作,只需結(jié)束本流 程、并等待取指單元針對該目標地址的指令數(shù)據(jù)開始新的流程即可;但如果沒有查找到具 有該目標地址的指令數(shù)據(jù),則表示該目標地址處的指令數(shù)據(jù)未在Icache緩存中,因此,為 了避免取指單元下次需要該目標地址處的指令數(shù)據(jù)時不得不從CPU外部的內(nèi)存讀取,執(zhí)行 S408。S408,先從CPU外部的內(nèi)存中將該目標地址處的指令數(shù)據(jù)預(yù)取到Icache單元內(nèi)部 的Icache緩存中、或者將該目標地址處的指令數(shù)據(jù)所在的一 cacheline的指令數(shù)據(jù)塊預(yù)取 到Icache單元內(nèi)部的Icache緩存中,然后即可結(jié)束本流程,并等待取指單元針對該目標地 址的指令數(shù)據(jù)開始新的流程。至此,針對一條指令數(shù)據(jù)的取指過程、以及在該過程中預(yù)取后續(xù)跳轉(zhuǎn)目標處的指 令數(shù)據(jù)的流程結(jié)束。本實施例的上述裝置和方法,都是在取指單元向Icache單元發(fā)起取操作的過程 中,以取指單元當前需要的指令數(shù)據(jù)的地址為參照來推測后續(xù)跳轉(zhuǎn)指令的目標地址,這樣, 主要是為了能夠更好地將推測跳轉(zhuǎn)指令的目標地址的過程與正常的取指過程相結(jié)合,從而 使正常的取指過程能夠進一步附帶有推測跳轉(zhuǎn)指令的目標地址的效果。當然,在實際應(yīng)用中,取指單元也可以單獨發(fā)起推測跳轉(zhuǎn)指令的目標地址的過程。 具體來說,在任意時刻,取指單元均可將一 PC地址(該PC地址并不一定就是取指單元當前 需要讀取的指令數(shù)據(jù)的PC地址)僅發(fā)送給BTB單元,令BTB單元預(yù)測符合條件的跳轉(zhuǎn)指令 的目標地址,如果預(yù)測出符合條件的跳轉(zhuǎn)指令的目標地址再提供給Icache單元進行后續(xù) 處理。也就是說,推測跳轉(zhuǎn)指令的目標地址的過程與正常的取指過程也可以是相互獨立 的,此時,由于Icache單元仍能夠依據(jù)推測出的跳轉(zhuǎn)指令的目標地址從內(nèi)存預(yù)取目標地址 處的指令數(shù)據(jù),因而仍能夠在一定程度上避免由跳轉(zhuǎn)指令所引起的Icache緩存命中率低 的問題、并提高CPU的運行效率。以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在 本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進等,均應(yīng)包含在本發(fā)明的保 護范圍之內(nèi)。
權(quán)利要求
1.一種用于提高緩存命中率的裝置,其特征在于,包括取指單元,將當前需要讀取的第一指令數(shù)據(jù)的第一地址提供給BTB單元;BTB單元,根據(jù)所述第一地址在其內(nèi)部緩存中查找將在所述第一指令數(shù)據(jù)之后執(zhí)行的 跳轉(zhuǎn)指令,若未找到則不動作,若找到則將作為所述跳轉(zhuǎn)指令的跳轉(zhuǎn)目標的第二地址提供 給Icache單元;Icache單元,查找其內(nèi)部緩存中是否存在具有所述第二地址的第二指令數(shù)據(jù),若存在 則不動作,若不存在則從內(nèi)存中讀取所述第二地址處的所述第二指令數(shù)據(jù)至其內(nèi)部緩存中 保存。
2.如權(quán)利要求1所述的裝置,其特征在于,BTB單元以所述第一地址為起始地址查找所 述跳轉(zhuǎn)指令。
3.如權(quán)利要求1所述的裝置,其特征在于,BTB單元進一步計算所述第一地址按照一線 大小的下對齊地址,并以所述下對齊地址為起始地址、在一線的范圍內(nèi)查找所述跳轉(zhuǎn)指令。
4.如權(quán)利要求1至3中任一項所述的裝置,其特征在于,Icache單元進一步從內(nèi)存中 讀取所述第二指令數(shù)據(jù)所屬的指令數(shù)據(jù)塊至其內(nèi)部緩存中保存。
5.如權(quán)利要求1至3中任一項所述的裝置,其特征在于,取指單元進一步將所述第一地址提供給Icache單元;Icache單元進一步在其內(nèi)部緩存中查找是否存在具有所述第一地址的所述第一指令 數(shù)據(jù),當存在時從其內(nèi)部緩存中讀取具有所述第一地址的所述第一指令數(shù)據(jù)返回給取指單 元,否則從內(nèi)存中讀取所述第一地址處的所述第一指令數(shù)據(jù)至其內(nèi)部緩存中、并返回給取 指單元。
6.一種用于提高緩存命中率的方法,其特征在于,包括a、將取指單元當前需要讀取的第一指令數(shù)據(jù)的第一地址提供給BTB單元;b、根據(jù)所述第一地址在BTB單元中查找將于所述第一指令數(shù)據(jù)之后被執(zhí)行的跳轉(zhuǎn) 指令,若未找到則不動作,若找到則將作為所述跳轉(zhuǎn)指令的跳轉(zhuǎn)目標的第二地址提供給 Icache 單兀;C、在Icache單元中查找是否存在具有所述第二地址的第二指令數(shù)據(jù),若存在則不動 作,若不存在則從內(nèi)存中讀取所述第二地址處的所述第二指令數(shù)據(jù)至Icache單元中保存。
7.如權(quán)利要求6所述的方法,其特征在于,在步驟b中,以所述第一地址為起始地址在 BTB單元查找所述跳轉(zhuǎn)指令。
8.如權(quán)利要求6所述的方法,其特征在于,在步驟b中,進一步計算所述第一地址按照 一線大小的下對齊地址,并以所述下對齊地址為起始地址、在一線的范圍內(nèi)查找BTB單元 中的所述跳轉(zhuǎn)指令。
9.如權(quán)利要求6至8中任一項所述的方法,其特征在于,在步驟c中進一步從內(nèi)存中 讀取所述第二指令數(shù)據(jù)所屬的指令數(shù)據(jù)塊至Icache單元中保存。
10.如權(quán)利要求6至8中任一項所述的方法,其特征在于,在步驟a中進一步包括將所述第一地址提供給Icache單元;在步驟b中進一步包括在Icache單元中查找是否存在具有所述第一地址的所述第一 指令數(shù)據(jù),當存在時從其內(nèi)部緩存中讀取并返回具有所述第一地址的所述第一指令數(shù)據(jù), 否則從內(nèi)存中讀取所述第一地址處的所述第一指令數(shù)據(jù)至Icache單元中保存、并返回所述第一指令數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種用于提高緩存命中率的裝置及方法。本發(fā)明能夠利用BTB單元提前推測出跳轉(zhuǎn)指令的目標地址、并提供給Icache單元,因此,在取指單元需要讀取目標地址處的指令數(shù)據(jù)之前,就可以由Icache單元提前從內(nèi)存中預(yù)取目標地址處的指令數(shù)據(jù)。從而,等到取指單元需要讀取目標地址處的指令數(shù)據(jù)時,無需再從內(nèi)存讀取、而是可以直接從Icache緩存中讀取,進而能夠針對跳轉(zhuǎn)指令的目標地址處的指令數(shù)據(jù)提高對Icache緩存取指的命中率、減少CPU等待取指的時間、提高CPU的運行效率。
文檔編號G06F12/02GK102087634SQ20111003257
公開日2011年6月8日 申請日期2011年1月27日 優(yōu)先權(quán)日2011年1月27日
發(fā)明者陳立勤 申請人:凌陽科技股份有限公司, 北京北陽電子技術(shù)有限公司