專(zhuān)利名稱:一種低缺失率、低缺失懲罰的緩存方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及集成電路及計(jì)算機(jī)領(lǐng)域。
背景技術(shù):
緩存(cache)的作用是將內(nèi)存(main memory)中的一部分內(nèi)容復(fù)制在緩存中,使 這些內(nèi)容能在短時(shí)間內(nèi)由處理器核(CPU core)快速存取,以保證流水線的持續(xù)運(yùn)行?,F(xiàn)行緩存的尋址都基于以下方式,首先用地址中的索引(Index)段尋址讀出標(biāo)記 存儲(chǔ)器(tag memory)中的標(biāo)記(tag)同時(shí)用地址中索引段與塊內(nèi)位移段(offset)共同尋 址讀出內(nèi)容存儲(chǔ)器(instruction or data memory)中的內(nèi)容,若讀出的標(biāo)記與地址中的標(biāo) 記段匹配則認(rèn)為緩存命中(hit),讀出內(nèi)容有效。反之則認(rèn)為緩存缺失(miss),讀出內(nèi)容無(wú) 效。對(duì)多路組相聯(lián),上述操作對(duì)各個(gè)路組并行同時(shí)進(jìn)行,檢測(cè)哪個(gè)路組命中,命中路組讀出 的內(nèi)容為有效內(nèi)容。若都缺失(miss),讀出內(nèi)容無(wú)效。緩存缺失之后緩存控制邏輯開(kāi)始從 下級(jí)存儲(chǔ)器取內(nèi)容(fill after miss)。緩存缺失可分為三類(lèi)狀況。一為啟動(dòng)缺失(compulsory miss),二為組沖突缺失 (conflict miss),三為容量限制缺失(capacity miss)?,F(xiàn)行緩存結(jié)構(gòu)運(yùn)行中除預(yù)取成功 的小部分外,啟動(dòng)缺失不可避免,況且預(yù)取也有不小的代價(jià);多路組相聯(lián)受制于功耗及速度 限制難以超過(guò)一定數(shù)目(因?yàn)榻M相聯(lián)緩存結(jié)構(gòu)要求將所有組由同一索引尋址的復(fù)數(shù)個(gè)內(nèi) 容及標(biāo)識(shí)同時(shí)讀出并比較),容積因要配合CPU核運(yùn)行速度也難以擴(kuò)大。所以有多層次緩存 的設(shè)置,低層的緩存較高層的緩存容量大速度慢。現(xiàn)代的緩存通常由復(fù)數(shù)路組相連的復(fù)數(shù)層次緩存構(gòu)成。雖然有犧牲緩存(Victim Cache),跟蹤緩存(Trace cache),以及預(yù)取 (Prefectch)(取一個(gè)緩存塊時(shí)把下一個(gè)緩存塊也取來(lái)放在緩存緩沖器(cache buffer)或 使用預(yù)取指令)等發(fā)明,因?yàn)槿諠u擴(kuò)大的處理器/存儲(chǔ)器速度鴻溝,現(xiàn)行體系結(jié)構(gòu)中緩存缺 失仍是制約現(xiàn)代處理器性能提升的最嚴(yán)重瓶頸。本發(fā)明公開(kāi)了全新的方法與裝置從根本上解決上述困難。
發(fā)明內(nèi)容
本發(fā)明提出一種數(shù)字系統(tǒng),所述數(shù)字系統(tǒng)包括一個(gè)處理器核和一個(gè)緩存控制單 元。所述處理器核連接一個(gè)包含可執(zhí)行指令的第一存儲(chǔ)器和一個(gè)比第一存儲(chǔ)器速度更快的 第二存儲(chǔ)器,且所述處理器用于執(zhí)行一條或多條存儲(chǔ)在第二存儲(chǔ)器中的可執(zhí)行指令。所述 緩存控制單元連接第一存儲(chǔ)器、第二存儲(chǔ)器和處理器核,用于在處理器核執(zhí)行第一存儲(chǔ)器 中的至少一條或多條指令之前將這一條或多條指令填充到第二存儲(chǔ)器中。此外,所述緩存 控制單元進(jìn)一步能用于對(duì)正被從第一存儲(chǔ)器填充到第二存儲(chǔ)器的指令進(jìn)行審查,從而提取 出至少包含分支(轉(zhuǎn)移)信息的指令信息,并根據(jù)提取出的指令信息建立復(fù)數(shù)條軌道,以及 根據(jù)復(fù)數(shù)條指令軌道中的一條或多條軌道填充至少一條或多條指令。本發(fā)明還提出一種用于輔助處理器核運(yùn)行的方法,所述處理器核連接一個(gè)包含可執(zhí)行指令的第一存儲(chǔ)器和一個(gè)比第一存儲(chǔ)器速度更快的第二存儲(chǔ)器。所述方法包括對(duì)正被 從第一存儲(chǔ)器填充到第二存儲(chǔ)器的指令進(jìn)行審查,從而提取出至少包括分支信息的指令信 息,根據(jù)提取出的指令信息建立復(fù)數(shù)條軌道,以及根據(jù)復(fù)數(shù)條指令軌道中的一條或多條軌 道將至少一條或多條指令在被處理器核執(zhí)行前從第一存儲(chǔ)器填充到第二存儲(chǔ)器,使得處理 器核能不依賴于第一存儲(chǔ)器獲取所述至少一條或多條指令。本發(fā)明還提出一種用于緩存控制設(shè)備以控制處理器核緩存操作的方法。所述處理 器核連接一個(gè)包含可執(zhí)行指令的第一存儲(chǔ)器和一個(gè)比第一存儲(chǔ)器速度更快的第二存儲(chǔ)器; 且所述處理器核用于執(zhí)行一條或多條第二存儲(chǔ)器中可執(zhí)行指令。所述方法包括對(duì)正被從第 一存儲(chǔ)器填充到第二存儲(chǔ)器的指令進(jìn)行審查,從被審查的指令中提取出指令信息。所述方 法還包括在處理器核執(zhí)行分支點(diǎn)(轉(zhuǎn)移點(diǎn))前,根據(jù)提取的指令信息確定所述分支點(diǎn),以及 將對(duì)應(yīng)于分支點(diǎn)的分支目標(biāo)指令的指令段從第一存儲(chǔ)器填充到第二存儲(chǔ)器,使第二存儲(chǔ)器 包含處理器核執(zhí)行所述分支點(diǎn)導(dǎo)致的任何指令。本發(fā)明還提出一種利用緩存控制單元控制包括連接處理器核的第一存儲(chǔ)器和連 接所述第一存儲(chǔ)器的第二存儲(chǔ)器在內(nèi)的復(fù)數(shù)個(gè)緩存存儲(chǔ)器的方法。所述方法包括對(duì)被填充 到復(fù)數(shù)個(gè)存儲(chǔ)器中的指令進(jìn)行審查,從被審查的指令中提取出指令信息。所述方法還包括 根據(jù)提取出的指令信息在軌道表中創(chuàng)建軌跡點(diǎn),用低層次緩存存儲(chǔ)塊號(hào)和高層次緩存存儲(chǔ) 塊號(hào)之一表示分支目標(biāo)軌跡點(diǎn)的表項(xiàng)。其中,當(dāng)使用低層次緩存存儲(chǔ)塊號(hào)表示分支目標(biāo)軌 跡點(diǎn)時(shí),所述分支目標(biāo)軌跡點(diǎn)對(duì)應(yīng)的一個(gè)指令段被填充到第一存儲(chǔ)器中;當(dāng)使用高層次緩 存存儲(chǔ)塊號(hào)表示分支目標(biāo)軌跡點(diǎn)時(shí),所述分支目標(biāo)軌跡對(duì)應(yīng)的指令段被填充到第二存儲(chǔ)器 而不是第一存儲(chǔ)器中。本發(fā)明還提出一個(gè)用于處理器核控制緩存運(yùn)行緩存控制設(shè)備。所述處理器核連接 一個(gè)包含可執(zhí)行指令的第一存儲(chǔ)器和一個(gè)比第一存儲(chǔ)器速度更快的第二存儲(chǔ)器,且所述處 理器被配置為執(zhí)行第二存儲(chǔ)器中可執(zhí)行指令中的一條或多條。所述設(shè)備包括一個(gè)第一填充 生成單元,一個(gè)循跡器和一個(gè)分配器。所述第一填充生成單元用于審查從第一存儲(chǔ)器填充 到第二存儲(chǔ)器中的指令,并從被審查的指令中提取出指令信息。所述循跡器用于根據(jù)提取 的指令信息控制領(lǐng)先指針,從而在處理器核執(zhí)行到分支點(diǎn)之前確定所述分支點(diǎn)。此外,所述 分配器用于將分支點(diǎn)的目標(biāo)指令對(duì)應(yīng)的指令段從第一存儲(chǔ)器填充到第二存儲(chǔ)器,使第二存 儲(chǔ)器包含處理器核執(zhí)行所述分支點(diǎn)導(dǎo)致的任何指令。本發(fā)明提出了一種低缺失率、低缺失懲罰的緩存方法和裝置。本發(fā)明提出一種低 缺失率(miss rate)、低缺失懲罰(miss penalty)的緩存方法,其特征在于(1)在處理器核開(kāi)始執(zhí)行指令前,將確定要執(zhí)行的單數(shù)條或復(fù)數(shù)條指令填充 (fill)到單數(shù)個(gè)或復(fù)數(shù)個(gè)高層次存儲(chǔ)器中;(2)在處理器核執(zhí)行(execute)某單數(shù)條或復(fù)數(shù)條指令之前,先對(duì)所述指令進(jìn)行 審查(examine),并提取(extract)出所述指令中關(guān)于分支目標(biāo)(branch target)的信息;(3)再根據(jù)所述提取的信息,生成(generate)尋址(addressing)信息,包括指令 類(lèi)型和分支源地址信息,并計(jì)算得到分支目標(biāo)地址信息;所述指令類(lèi)型包括條件分支指令 (條件轉(zhuǎn)移指令)、無(wú)條件分支指令(無(wú)條件轉(zhuǎn)移指令)和其他指令;所述分支源地址就是 分支指令(轉(zhuǎn)移指令)本身的地址;所述分支目標(biāo)地址是分支指令成功轉(zhuǎn)移時(shí)下一條指令 的地址;
(4)將所述分支目標(biāo)對(duì)應(yīng)的指令段從單數(shù)個(gè)或復(fù)數(shù)個(gè)低層次存儲(chǔ)器中填充到單數(shù) 個(gè)或復(fù)數(shù)個(gè)高層次存儲(chǔ)器中,或直接送給處理器核;所述指令段包括所述分支目標(biāo)對(duì)應(yīng)的 指令及其鄰近的單數(shù)條或復(fù)數(shù)條指令。根據(jù)本發(fā)明所述方法,當(dāng)處理器核需要訪問(wèn)所述指令時(shí),根據(jù)所述尋址信息以及 分支指令是否成功轉(zhuǎn)移的信息,即可在高層次存儲(chǔ)器中取得所述指令。在一個(gè)例子中,分支目標(biāo)地址可以由當(dāng)前指令地址加上指令中包含的轉(zhuǎn)移偏移量 得到。在本發(fā)明中,當(dāng)前指令地址相當(dāng)于當(dāng)前指令的塊地址加上當(dāng)前指令對(duì)應(yīng)的塊內(nèi)偏移 量地址,因此分支目標(biāo)地址等于當(dāng)前指令的塊地址加上塊內(nèi)偏移量地址在加上轉(zhuǎn)移偏移 量。根據(jù)本發(fā)明所述方法,根據(jù)所述提取到的信息和計(jì)算得到的信息,以當(dāng)前指令 段(segment)為樹(shù)干(trunk),分支指令源地址為節(jié)點(diǎn)(node),分支指令目標(biāo)地址為樹(shù) 枝(branch),建立指令地址樹(shù);以計(jì)算機(jī)程序執(zhí)行的指令地址序列(sequence)作為軌跡 (locus),在軌跡上確定要執(zhí)行的指令中最前的指令地址為軌跡頭(HOL,head of locus); 所述軌跡頭指向(index)相應(yīng)存儲(chǔ)器塊供處理器核取指;預(yù)測(cè)軌跡頭(PH0L,predict HOL) 為軌跡頭對(duì)應(yīng)的可能要執(zhí)行的指令的地址;根據(jù)預(yù)測(cè)軌跡頭建立地址樹(shù)并據(jù)以填充高層次 存儲(chǔ)器;其中一級(jí)預(yù)測(cè)軌跡頭是軌跡頭對(duì)應(yīng)的分支指令中的目標(biāo)地址(軌跡頭對(duì)應(yīng)順序的 后一個(gè)地址按定義也應(yīng)是一級(jí)預(yù)測(cè)軌跡頭,但由于所述地址對(duì)應(yīng)的指令已經(jīng)被填充到存儲(chǔ) 單元塊中,因此在本發(fā)明中并不需要將所述地址作為一級(jí)預(yù)測(cè)軌跡頭,在之后的說(shuō)明中只 將軌跡頭對(duì)應(yīng)的分支指令中的目標(biāo)地址作為一級(jí)預(yù)測(cè)軌跡頭);軌跡頭領(lǐng)先處理器核的指 令執(zhí)行到達(dá)一個(gè)節(jié)點(diǎn);根據(jù)所述地址樹(shù)中軌跡頭提供的指令類(lèi)型和處理器核執(zhí)行所述分支 指令得到的分支轉(zhuǎn)移判斷結(jié)果決定之后的軌跡是沿樹(shù)干還是沿樹(shù)枝繼續(xù)。舉例而言,根據(jù)本發(fā)明所述技術(shù)方案建立軌道并填充指令的一種具體實(shí)現(xiàn)步驟可 以是(1)初始化,以處理器核執(zhí)行的第一條指令的地址為起點(diǎn)建立軌道,同時(shí)將所述軌 道對(duì)應(yīng)的指令段填充到高層次指令存儲(chǔ)器中;(2)在填充指令的同時(shí)掃描所述指令,若被掃描到的指令是分支指令,則提取分支 點(diǎn),得到指令類(lèi)型及目標(biāo)地址,并以指令源地址為索引存儲(chǔ)到所述指令在軌道上的軌跡點(diǎn) 中;(3)根據(jù)程序運(yùn)行情況,得到新的當(dāng)前執(zhí)行指令和確定要執(zhí)行的指令;以所述新 的當(dāng)前執(zhí)行的分支指令或已知確定要執(zhí)行的分支指令對(duì)應(yīng)軌跡點(diǎn)中的目標(biāo)地址為起點(diǎn)建 立軌道,同時(shí)將所述軌道對(duì)應(yīng)的指令段填充到高層次指令存儲(chǔ)器中;(4)轉(zhuǎn)到(2)重復(fù)所述步驟,即可不斷建立軌道并將指令填充到高層次指令存儲(chǔ) 器中。根據(jù)本發(fā)明所述方法,由軌跡頭選擇高層次存儲(chǔ)器中的存儲(chǔ)單元塊,并由處理器 核中的指令地址模塊提供的偏移量在所述存儲(chǔ)單元塊中獲取處理器核需要的指令。根據(jù)本發(fā)明所述方法,可以將完整的分支目標(biāo)地址都保存在樹(shù)上,也可以在樹(shù)上 只保存塊地址,由處理器核提供偏移量。根據(jù)本發(fā)明所述方法,可以將地址樹(shù)組織(organize)成二維軌道表的形式,其中 第一維(X)即第一地址,由指令地址中的塊地址部分尋址,對(duì)應(yīng)高層次指令存儲(chǔ)器中的存儲(chǔ)單元塊,第二維(Y)即第二地址,由指令地址中的塊內(nèi)偏移量部分尋址,對(duì)應(yīng)所述存儲(chǔ)單 元塊中的指令;所述軌道表項(xiàng)中的內(nèi)容包括所述提取的指令類(lèi)型和所述計(jì)算得到的分支目 標(biāo)地址;軌道表的寫(xiě)地址是所述提取到的分支源地址(包括第一地址和第二地址);所述寫(xiě) 地址(第一地址)也用于在填充時(shí)對(duì)高層次指令存儲(chǔ)器的寫(xiě)端口尋址;軌道表的讀地址是 前一個(gè)讀地址增量后得到的地址,或前一個(gè)表項(xiàng)中包含的分支目標(biāo)地址;所述讀地址等于 軌跡頭位置,也用于處理器核取指時(shí)對(duì)高層次指令存儲(chǔ)器的讀端口尋址;高層次指令存儲(chǔ) 器的存儲(chǔ)單元塊與軌道表中的軌道一一對(duì)應(yīng),讀地址中的第一維的值對(duì)應(yīng)存儲(chǔ)單元塊號(hào)。在一個(gè)例子中,軌道表中所有軌道最后一個(gè)軌跡點(diǎn)被標(biāo)記為特殊的分支點(diǎn)。無(wú)論 所述最后一個(gè)軌跡點(diǎn)對(duì)應(yīng)的指令是否為分支指令,所述軌跡點(diǎn)都包含當(dāng)按順序執(zhí)行下一條 指令時(shí)所述下一條指令對(duì)應(yīng)的在另一條軌道上的軌跡點(diǎn)坐標(biāo)或地址信息。如果所述最后 一 個(gè)軌跡點(diǎn)包含的是按順序執(zhí)行下一條指令的地址信息,那么隨著當(dāng)前軌跡點(diǎn)的更新,一旦 所述最后一個(gè)軌跡點(diǎn)成為確定會(huì)執(zhí)行到的軌跡點(diǎn),就要對(duì)所述按順序執(zhí)行的下一條指令建 立軌道、填充高層次指令存儲(chǔ)器,并將所述最后一個(gè)軌跡點(diǎn)中的所述地址信息替換為按順 序執(zhí)行下一條指令的軌跡點(diǎn)位置。填充新的指令段時(shí),軌道表中的軌道及高層次存儲(chǔ)器中的存儲(chǔ)單元塊按一定規(guī)律 放置。所述規(guī)律可以是按約定順序或者是按一個(gè)鏈表(link-list)中預(yù)定的順序放置。所 述約定順序可以是寫(xiě)完成后寫(xiě)指針加一。因此填充時(shí)刻不同,即便同一指令段對(duì)應(yīng)的軌道 在軌道表中的位置也可以不同,根據(jù)所述軌道生成時(shí)間的不同及替換策略的不同,可以存 放在不同位置。根據(jù)本發(fā)明所述方法,只要粒度足夠區(qū)分不同的分支指令,軌道表中單數(shù)個(gè)表項(xiàng) 可以對(duì)應(yīng)復(fù)數(shù)條指令。根據(jù)本發(fā)明所述方法,若軌道表中軌道的最后一個(gè)表項(xiàng)對(duì)應(yīng)的指令不是分支指 令,則執(zhí)行完所述指令后,無(wú)條件跳轉(zhuǎn)到以所述指令的下一指令為起點(diǎn)的指令段;若軌道表 中軌道的最后一個(gè)表項(xiàng)對(duì)應(yīng)的指令是分支指令,所述表項(xiàng)能夠表示一個(gè)分支轉(zhuǎn)移和上述無(wú) 條件跳轉(zhuǎn)。根據(jù)本發(fā)明所述方法,根據(jù)前一軌跡頭位置確定當(dāng)前軌跡頭位置的方法包括(1)如果軌跡頭對(duì)應(yīng)的指令是轉(zhuǎn)移條件不成立的條件分支指令,或不是分支指令, 那么保持軌跡頭位置的第一維不變,增加軌跡頭位置的第二維的值以移動(dòng)軌跡頭,直到軌 跡頭達(dá)到軌跡頭所在軌道上當(dāng)前指令之后的第一個(gè)分支指令的位置,相應(yīng)更新預(yù)測(cè)軌跡 頭,建立新的軌道并填充存儲(chǔ)單元塊;(2)如果軌跡頭對(duì)應(yīng)的指令是無(wú)條件分支指令,或是轉(zhuǎn)移條件成立的分支指令,那 么將預(yù)測(cè)軌跡頭位置作為當(dāng)前軌跡頭位置,相應(yīng)更新預(yù)測(cè)軌跡頭,建立新的軌道并填充存 儲(chǔ)單元塊。由于在不同地址的分支指令的目標(biāo)地址可以是相同的,因此完成目標(biāo)指令段填充 并建立軌道后,還必須記錄所述指令段或軌道對(duì)應(yīng)的地址信息,以便與之后分支目標(biāo)地址 進(jìn)行匹配,避免重復(fù)填充。本發(fā)明提出的方法能使用映射的方法對(duì)軌道表和高層次指令存儲(chǔ)器進(jìn)行壓縮;所 述壓縮的方法包括對(duì)高層次指令存儲(chǔ)器的尋址地址進(jìn)行映射、對(duì)高層次指令存儲(chǔ)器和軌 道表的尋址地址都進(jìn)行映射、在建立軌道時(shí)對(duì)分支源地址和分支目標(biāo)地址進(jìn)行壓縮。在對(duì)應(yīng)目標(biāo)地址建立軌道、填充高層次存儲(chǔ)器之前,先將所述目標(biāo)地址與所述映射表中存儲(chǔ)的 目標(biāo)地址做匹配,只對(duì)所述映射表中沒(méi)有的目標(biāo)地址建立映射關(guān)系,從而建立相應(yīng)軌道并 填充高層次存儲(chǔ)器,避免對(duì)同一目標(biāo)地址的重復(fù)映射、重復(fù)建軌和重復(fù)填充。通常處理器核能訪問(wèn)的地址空間非常大,為每個(gè)塊地址都準(zhǔn)備一個(gè)存儲(chǔ)單元塊代 價(jià)太高。因此可以采用映射的方法減少存儲(chǔ)單元塊的數(shù)目。根據(jù)本發(fā)明所述方法,任意塊 地址都可以對(duì)應(yīng)一個(gè)軌道,但存儲(chǔ)單元塊的最大數(shù)目少于軌道的最大數(shù)目,通過(guò)映射模塊 建立軌道號(hào)和存儲(chǔ)單元塊號(hào)間的映射關(guān)系。上述方法雖然減少了存儲(chǔ)單元塊的數(shù)目,但是依然需要為每個(gè)塊地址都準(zhǔn)備一個(gè) 軌道,太大的軌道表也會(huì)導(dǎo)致不可接受的設(shè)計(jì)成本。因此可以在采用映射的方法減少軌道 的數(shù)目。根據(jù)本發(fā)明所述方法,軌道的最大數(shù)目可以等于存儲(chǔ)單元塊的最大數(shù)目,但少于處 理器核能訪問(wèn)到的塊地址總數(shù),通過(guò)映射模塊建立塊地址與軌道號(hào)以及存儲(chǔ)單元塊號(hào)間的 映射關(guān)系。根據(jù)本發(fā)明數(shù)據(jù)方案還可以進(jìn)一步在建立軌道時(shí)就采用映射的方法,縮小計(jì)算當(dāng) 前軌跡頭時(shí)用到的坐標(biāo)值的范圍,以利于快速計(jì)算。根據(jù)本發(fā)明所述方法,在建立軌道就進(jìn) 行映射,使軌道的最大數(shù)目等于存儲(chǔ)單元塊的最大數(shù)目,且等于計(jì)算當(dāng)前軌跡頭時(shí)能表示 的塊地址最大數(shù)目,通過(guò)映射模塊建立塊地址與軌道號(hào)的映射關(guān)系。在本發(fā)明中,所述映射表可以是保存已建軌道地址信息的主動(dòng)表(active list), 在建立軌道的時(shí)候?qū)⑺龅刂沸畔⒍即鎯?chǔ)在主動(dòng)表中,并對(duì)軌道上所有分支目標(biāo)都建立相 應(yīng)的軌道存在軌道表上并填充對(duì)應(yīng)的存儲(chǔ)單元塊。所述主動(dòng)表中除存儲(chǔ)了地址外,對(duì)于每 個(gè)地址還有相應(yīng)的有效位。通常在一個(gè)較短小的程序中,使用一個(gè)較大的主動(dòng)表就足夠記 錄所有用到的指令段的地址信息,因此在主動(dòng)表中就可以對(duì)所有分支目標(biāo)都建立軌道。然而,對(duì)于較大的程序,如果要將所有指令段對(duì)應(yīng)地址信息都記錄下來(lái),可能需要 一個(gè)極大的主動(dòng)表,不利于物理實(shí)現(xiàn)。在這種情況下也可以在主動(dòng)表外增添一個(gè)保留表 (reserve list),由所述主動(dòng)表和保留表共同構(gòu)成所述映射表,分支源地址對(duì)應(yīng)的軌道已 經(jīng)存在,將軌道上的分支目標(biāo)先保存在保留表中,直到軌跡頭靠近某一分支源地址時(shí),才更 新預(yù)測(cè)軌跡頭,對(duì)所述分支源地址對(duì)應(yīng)的分支指令的分支目標(biāo)建立相應(yīng)的軌道。所述主動(dòng) 表和保留表也可以在形式上被組合成同一張映射表。根據(jù)本發(fā)明技術(shù)方案,主動(dòng)表中記錄的地址對(duì)應(yīng)已建的軌道,保留表中記錄的地 址對(duì)應(yīng)待建的軌道。根據(jù)本發(fā)明所述方法,主動(dòng)表和保留表中還可以包含一個(gè)標(biāo)志位,在待建軌道的 分支目標(biāo)地址對(duì)應(yīng)的軌道建立時(shí)表示是否需要用已建軌道上軌跡點(diǎn)位置(BN)代替待建軌 道上軌跡點(diǎn)號(hào)(TBN),或在已建軌道的分支目標(biāo)地址對(duì)應(yīng)的軌道被替換時(shí)表示是否需要用 待建軌道上軌跡點(diǎn)號(hào)代替已建軌道上軌跡點(diǎn)位置。在本發(fā)明中,TBN代表臨時(shí)BNUentative BN)的意思,正如保留表中的地址空間 (number space)與主動(dòng)表中的地址空間不同,TBN與BN對(duì)應(yīng)的地址空間也不同,進(jìn)而能夠 區(qū)分TBN和BN。例如,可以根據(jù)最高位來(lái)區(qū)分TBN和BN。此外,在本發(fā)明中雖然通常采用 BN或TBN表示塊號(hào)碼(block number)或臨時(shí)塊號(hào)碼(tentative block number),但在該 領(lǐng)域普通技術(shù)人員的理解范圍內(nèi),在特定的上下文中,BN(或TBN)有時(shí)可以被用于代表包 含BNX(或TBNX)和BNY(或TBNY)的完整地址,有時(shí)可以僅僅代表地址的高位,即僅相當(dāng)于BNX (或 TBNX)。根據(jù)本發(fā)明所述方法,可以根據(jù)分支指令的層次深度(cbpth)建立軌道。將所述 預(yù)測(cè)軌跡頭作為一級(jí)預(yù)測(cè)軌跡頭,增加兩個(gè)二級(jí)預(yù)測(cè)軌跡頭。將所述軌跡頭后的第一個(gè)分 支指令對(duì)應(yīng)的目標(biāo)地址和所述一級(jí)預(yù)測(cè)軌跡頭后的第一個(gè)分支指令對(duì)應(yīng)的目標(biāo)地址分別 作為二級(jí)預(yù)測(cè)軌跡頭,相應(yīng)建立地址樹(shù)并據(jù)以填充高層次存儲(chǔ)器。以此類(lèi)推,還可以建立更 深層次的預(yù)測(cè)軌跡頭。預(yù)測(cè)軌跡頭層次越深,可以填充更多的指令段,從而更好地掩蓋從低 層次存儲(chǔ)器取指的時(shí)延。根據(jù)本發(fā)明所述方法,也可以根據(jù)距離分支源地址的距離(distance)建立軌道, 使已填充指令的數(shù)目滿足執(zhí)行所述指令的時(shí)間大于完成一次新填充所需的時(shí)間。只要已取 到的指令執(zhí)行的時(shí)間能夠掩蓋新的取指的時(shí)延(latency),即可完全掩蓋緩存缺失。根據(jù)本發(fā)明所述方法,可以根據(jù)軌道表的空余程度和線程數(shù)目來(lái)決定填充策略; 若軌道表空余位置較多且線程數(shù)目較少,則可以對(duì)盡量多的分支目標(biāo)建立軌道并填充高層 次存儲(chǔ)器;若軌道表空余位置較少或線程數(shù)目較多,則可以對(duì)較少層次的分支指令或按較 短距離建立軌道并填充高層次存儲(chǔ)器,將其余分支指令對(duì)應(yīng)的地址信息存儲(chǔ)到保留表中。根據(jù)本發(fā)明所述方法,還可以將異常處理等特殊程序填充到高速存儲(chǔ)器中并建立 對(duì)應(yīng)軌道,并由專(zhuān)用的寄存器存儲(chǔ)所述程序入口對(duì)應(yīng)的軌跡點(diǎn)位置;一旦發(fā)生異常,用所述 寄存器存儲(chǔ)的軌跡點(diǎn)位置強(qiáng)制改變軌跡頭,再按所述確定軌跡頭的方法得到當(dāng)前軌跡頭。根據(jù)本發(fā)明所述方法,還可以在調(diào)用(call)時(shí)將返回地址對(duì)應(yīng)的軌跡點(diǎn)位置壓 入棧中,待返回(return)時(shí),用從所述棧中出棧的軌跡點(diǎn)位置強(qiáng)制改變軌跡頭,再按所述 確定軌跡頭的方法得到當(dāng)前軌跡頭。根據(jù)本發(fā)明所述方法,還可以支持多線程;軌道表中存在復(fù)數(shù)組互不相干的軌道, 每組軌道對(duì)應(yīng)一個(gè)線程號(hào)碼(PID);根據(jù)當(dāng)前線程號(hào)可以確定哪一組軌道為當(dāng)前處于運(yùn)行 狀態(tài)的線程;當(dāng)支持多線程時(shí),還可以存在復(fù)數(shù)個(gè)棧,根據(jù)當(dāng)前線程號(hào)可以確定哪一個(gè)棧屬 于當(dāng)前線程。根據(jù)本發(fā)明所述方法,較高層次存儲(chǔ)器的保留表中的地址對(duì)應(yīng)的指令或數(shù)據(jù)可以 不存在于較低層次存儲(chǔ)器中,當(dāng)前存儲(chǔ)層次中的保留表可以被當(dāng)作更低層次中的主動(dòng)表使用。根據(jù)本發(fā)明所述方法,較高層次存儲(chǔ)器的保留表中的地址對(duì)應(yīng)的指令或數(shù)據(jù)可以 都存在于較低層次存儲(chǔ)器中,復(fù)數(shù)個(gè)存儲(chǔ)層次可以使用同一個(gè)用于記錄地址信息的映射 表。所述映射表可以由匹配表和內(nèi)容表組成;匹配表中的行與所述內(nèi)容表中的行一一對(duì) 應(yīng)。匹配表中存儲(chǔ)的是最低存儲(chǔ)層次中所有軌道對(duì)應(yīng)的目標(biāo)地址,每一表行存儲(chǔ)一個(gè)目標(biāo) 地址。內(nèi)容表中每一表行存儲(chǔ)匹配表中對(duì)應(yīng)目標(biāo)地址在各個(gè)較高存儲(chǔ)層次中對(duì)應(yīng)的復(fù)數(shù)個(gè) 軌道的狀態(tài)。軌道表表項(xiàng)中包含的分支目標(biāo)地址可以由所述最低存儲(chǔ)層次中的軌道號(hào)、索 引號(hào)和對(duì)應(yīng)軌道上的偏移量組成,也可以由最高存儲(chǔ)層次中的軌道號(hào)和對(duì)應(yīng)軌道上的偏移 量組成。所述索引號(hào)用于在最低存儲(chǔ)層次中軌道號(hào)對(duì)應(yīng)的較大容量的存儲(chǔ)單元塊中尋找對(duì) 應(yīng)于最高存儲(chǔ)層次中所述軌道號(hào)的相應(yīng)存儲(chǔ)單元塊的內(nèi)容。根據(jù)目標(biāo)地址在匹配表中的匹配,若匹配不成功,則表示在最低存儲(chǔ)層次中尚未 建立所述目標(biāo)地址對(duì)應(yīng)的軌道,需要從外部存儲(chǔ)器將目標(biāo)地址對(duì)應(yīng)的指令段填充到所述最 低存儲(chǔ)層次、建立軌道并更新所述匹配表中的對(duì)應(yīng)行;若匹配成功,則表示在最低存儲(chǔ)層次中已經(jīng)建立所述目標(biāo)地址對(duì)應(yīng)的軌道;所述軌道的軌道號(hào)對(duì)應(yīng)最低存儲(chǔ)層次中的存儲(chǔ)單元 塊號(hào)。根據(jù)所述軌道號(hào)可從內(nèi)容表中讀出除最低存儲(chǔ)層次外的所有其他存儲(chǔ)層次中對(duì)應(yīng)最 低存儲(chǔ)層次中所述軌道的所有軌道狀態(tài)。再根據(jù)所述索引號(hào)在所述其他存儲(chǔ)層次中找到 所述目標(biāo)地址的對(duì)應(yīng)軌道的狀態(tài)。若某一存儲(chǔ)層次的對(duì)應(yīng)軌道處于有效狀態(tài),則在所述存 儲(chǔ)層次中已經(jīng)建立所述目標(biāo)地址對(duì)應(yīng)的軌道,輸出軌道號(hào)以供對(duì)存儲(chǔ)單元塊尋址;若某一 存儲(chǔ)層次的對(duì)應(yīng)軌道處于無(wú)效狀態(tài),則在所述存儲(chǔ)層次中尚未建立所述目標(biāo)地址對(duì)應(yīng)的軌 道,需要從更低存儲(chǔ)層次將目標(biāo)地址對(duì)應(yīng)的指令段填充到所述存儲(chǔ)層次、建立軌道并更新 所述內(nèi)容表中的對(duì)應(yīng)行,再輸出軌道號(hào)以供對(duì)存儲(chǔ)單元塊尋址。依此方法可以在處理器執(zhí) 行指令前將包含所述指令的指令段填充到最高層次存儲(chǔ)器中并建立軌道。在具體設(shè)計(jì)的例子中,所述匹配表可以用內(nèi)容尋址存儲(chǔ)器(CAM)實(shí)現(xiàn),所述內(nèi)容 表可以用隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)實(shí)現(xiàn)。根據(jù)本發(fā)明所述方法,在審查時(shí)也提取改變數(shù)據(jù)基地址的指令的指令類(lèi)型、基地 址號(hào)(base point)及數(shù)據(jù)基地址(base address)。在有的處理器指令集中,改變數(shù)據(jù)基地址的指令可以是將立即數(shù)直接裝載到基地 址中,也可以是將基地址的值加立即數(shù)后再裝載到基地址中,還可以是將基地址的值加寄 存器的值后再裝載到基地址中。應(yīng)用于所述處理器指令集時(shí),所述軌跡點(diǎn)還包括基地址號(hào) 和立即數(shù)或寄存器號(hào)。根據(jù)本發(fā)明所述方法,當(dāng)執(zhí)行到所述指令時(shí),若所述數(shù)據(jù)基地址對(duì)應(yīng)的數(shù)據(jù)段尚 未填充,則將所述數(shù)據(jù)段填充到高層次數(shù)據(jù)存儲(chǔ)器中,并建立所述基地址號(hào)與所述已填充 數(shù)據(jù)段的對(duì)應(yīng)關(guān)系;若所述數(shù)據(jù)已完成填充,則直接建立所述基地址號(hào)與所述已填充數(shù)據(jù) 段的對(duì)應(yīng)關(guān)系。根據(jù)本發(fā)明所述方法,在填充新的數(shù)據(jù)段時(shí),高層次存儲(chǔ)器中的存儲(chǔ)單元塊按一 定規(guī)律放置;所述規(guī)律可以是按約定順序或者是按一個(gè)鏈表中預(yù)定的順序放置;所述約定 順序可以是寫(xiě)完成后寫(xiě)指針加一。根據(jù)本發(fā)明所述方法,在于當(dāng)處理器核執(zhí)行到需要根據(jù)處理器核產(chǎn)生的基地址訪 問(wèn)數(shù)據(jù)的指令時(shí),根據(jù)所述處理器核產(chǎn)生的基地址號(hào)與已建立的所述基地址號(hào)與已填充數(shù) 據(jù)段的對(duì)應(yīng)關(guān)系可指出包含所述數(shù)據(jù)的存儲(chǔ)單元塊號(hào),再用處理器核產(chǎn)生的偏移量直接到 所述存儲(chǔ)單元塊中尋址即可找到所述數(shù)據(jù)。具體來(lái)說(shuō),當(dāng)掃描到改變數(shù)據(jù)基地址的指令時(shí),可能出現(xiàn)三種情況(1)所述指令中的數(shù)據(jù)基地址對(duì)應(yīng)的數(shù)據(jù)段尚未填充;(2)所述指令中的數(shù)據(jù)基地址對(duì)應(yīng)的數(shù)據(jù)段已經(jīng)完成填充,且當(dāng)前所述基地址號(hào) 對(duì)應(yīng)的數(shù)據(jù)基地址與所述指令中的數(shù)據(jù)基地址不一致;(3)所述指令中的數(shù)據(jù)基地址對(duì)應(yīng)的數(shù)據(jù)段已經(jīng)完成填充,且當(dāng)前所述基地址號(hào) 對(duì)應(yīng)的數(shù)據(jù)基地址與所述指令中的數(shù)據(jù)基地址一致。當(dāng)所述指令中的數(shù)據(jù)基地址對(duì)應(yīng)的數(shù)據(jù)段尚未填充時(shí),將所述數(shù)據(jù)段填充到高層 次數(shù)據(jù)存儲(chǔ)器中、標(biāo)記所述數(shù)據(jù)基地址為已填充數(shù)據(jù)基地址,再建立所述數(shù)據(jù)基地址與所 述已填充數(shù)據(jù)段的對(duì)應(yīng)關(guān)系,再通過(guò)所述對(duì)應(yīng)關(guān)系的映射建立當(dāng)前指令中基地址號(hào)與所述 已填充數(shù)據(jù)段間的對(duì)應(yīng)關(guān)系。當(dāng)所述指令中的數(shù)據(jù)基地址對(duì)應(yīng)的數(shù)據(jù)段已經(jīng)完成填充,且當(dāng)前所述基地址號(hào)對(duì)
16應(yīng)的數(shù)據(jù)基地址與所述指令中的數(shù)據(jù)基地址不一致時(shí),建立當(dāng)前指令中基地址號(hào)與所述數(shù) 據(jù)基地址間的對(duì)應(yīng)關(guān)系,再通過(guò)所述對(duì)應(yīng)關(guān)系的映射建立當(dāng)前指令中基地址號(hào)與所述已填 充數(shù)據(jù)段間的對(duì)應(yīng)關(guān)系。當(dāng)所述指令中的數(shù)據(jù)基地址對(duì)應(yīng)的數(shù)據(jù)段已經(jīng)完成填充,且當(dāng)前所述基地址號(hào)對(duì) 應(yīng)的數(shù)據(jù)基地址與所述指令中的數(shù)據(jù)基地址一致時(shí),保持基地址號(hào)與已填充數(shù)據(jù)段間原有 的映射關(guān)系即可。由于本發(fā)明中在同一時(shí)刻每個(gè)基地址號(hào)都對(duì)應(yīng)唯一一組查找內(nèi)容,因此在執(zhí)行裝 載指令或存儲(chǔ)指令時(shí),能根據(jù)所述指令中的基地址號(hào)和偏移量,快速地從所述基地址號(hào)對(duì) 應(yīng)的一組查找內(nèi)容中找到已經(jīng)填充的數(shù)據(jù)。本發(fā)明所述方法還可以支持多線程;存在復(fù)數(shù)組互不相干的基地址,每組基地址 對(duì)應(yīng)一個(gè)線程號(hào)碼(PID);根據(jù)當(dāng)前線程號(hào)可以確定哪一組基地址為當(dāng)前處于運(yùn)行狀態(tài)的 線程的基地址以供尋址。根據(jù)本發(fā)明所述方法,可以對(duì)指令填充和數(shù)據(jù)填充共用一個(gè)軌道表;也可以對(duì)指 令填充或數(shù)據(jù)填充有各自的軌道表,對(duì)指令專(zhuān)用軌道表的尋址同樣也作用于數(shù)據(jù)專(zhuān)用軌道表。本發(fā)明所述主動(dòng)表或保留表中包含的地址可以都是實(shí)地址,也可以都是虛地址; 當(dāng)所述地址是虛地址,且支持多線程時(shí),每個(gè)虛地址還要對(duì)應(yīng)地有一個(gè)線程號(hào);所述實(shí)地址 或虛地址可以是完整的地址,也可以是用于代表整個(gè)存儲(chǔ)單元塊中指令或數(shù)據(jù)的塊地址, 還可以是經(jīng)過(guò)變換后產(chǎn)生的長(zhǎng)度更小的壓縮代碼。舉例而言,由于處理器分支指令目標(biāo)地址通常由當(dāng)前指令地址加轉(zhuǎn)移偏移量形 成,而本發(fā)明中當(dāng)前指令地址等于當(dāng)前指令所在軌道(或存儲(chǔ)單元塊)對(duì)應(yīng)的主動(dòng)表表項(xiàng) 中的地址加上當(dāng)前指令在所述存儲(chǔ)單元塊中的塊內(nèi)位移,因此可以不必保存完整的虛地址 或?qū)嵉刂?,只保存轉(zhuǎn)移偏移量。若主動(dòng)表和保留表存儲(chǔ)的是虛地址,則在產(chǎn)生目標(biāo)地址時(shí), 直接將當(dāng)前指令所在軌道對(duì)應(yīng)的虛地址加上當(dāng)前指令的塊內(nèi)位移再加上保存的轉(zhuǎn)移偏移 量即可得到目標(biāo)地址對(duì)應(yīng)的虛地址;若主動(dòng)表和保留表中存儲(chǔ)的實(shí)地址,則在產(chǎn)生目標(biāo)地 址時(shí),必須使用處理器核提供的當(dāng)前指令地址加上保存的轉(zhuǎn)移偏移量才能得到目標(biāo)地址對(duì) 應(yīng)的虛地址。根據(jù)本發(fā)明所述方法,軌道表中軌跡點(diǎn)的格式可以包括指令類(lèi)型、已建軌道上軌 跡點(diǎn)位置、待建軌道上軌跡點(diǎn)位置、基地址號(hào)、數(shù)據(jù)基地址,以及立即數(shù)值或寄存器號(hào)。所述 指令類(lèi)型包括條件分支指令、無(wú)條件分支指令、將立即數(shù)直接裝載到基地址中的指令、將基 地址的值加立即數(shù)后再裝載到基地址中的指令、將基地址的值加寄存器的值后再裝載到基 地址中的指令和其他指令。根據(jù)本發(fā)明技術(shù)方案,保存所述目標(biāo)地址對(duì)應(yīng)指令段的地址和所述數(shù)據(jù)基地址, 但可以只將部分所述地址對(duì)應(yīng)的指令段或數(shù)據(jù)段填充到高層次指令存儲(chǔ)器或高層次數(shù)據(jù) 存儲(chǔ)器中。根據(jù)本發(fā)明所述方法,當(dāng)有復(fù)數(shù)個(gè)不同的指令段或數(shù)據(jù)段需要填充到高層次指令 存儲(chǔ)器或高層次數(shù)據(jù)存儲(chǔ)器中時(shí),可以將所述指令段或數(shù)據(jù)段分為更小的小段,以優(yōu)先填 充包含處理器核最迫切需要的指令或數(shù)據(jù)的小段的方式交替填充所述復(fù)數(shù)個(gè)指令段或數(shù) 據(jù)段。
以指令段填充為例,每次填充的指令段長(zhǎng)度為256個(gè)字(1024個(gè)字節(jié)),可以將 所述指令段分為4個(gè)小段,每個(gè)小段包含64個(gè)字(256個(gè)字節(jié))。假設(shè)只有一個(gè)需要填 充的指令段,其目標(biāo)地址為 OxlFCOOlOO,那么按 0xlFC00100、0xlFC00200、0xlFC00300、 OxlFCOOOOO的順序填充4個(gè)小段。假設(shè)當(dāng)前有兩個(gè)需要填充的指令段,目標(biāo)地址分別為 OxlFCOOlOO 和 0x90000300,那么按 OxlFCOOlOO,0x90000300,0xlFC00200,0x90000000, 0xlFC00300,0x90000100,OxlFCOOOOO,0x90000200的順序依次交替填充。對(duì)于更多指令段 的情況可以用同樣的方法處理。對(duì)于復(fù)數(shù)個(gè)數(shù)據(jù)段需要填充,以及有單數(shù)個(gè)或復(fù)數(shù)個(gè)指令 段和數(shù)據(jù)段都需要填充的情況,也可以用同樣的方法處理。本發(fā)明所述的軌道表中軌道的建立早于軌跡頭到達(dá)所述軌道,軌跡頭始終領(lǐng)先當(dāng) 前指令,即由軌道表更新引起的新指令填充請(qǐng)求早于處理器核對(duì)所述新指令的實(shí)際訪問(wèn)請(qǐng) 求。可以采用軌跡頭移動(dòng)速度高于處理器核執(zhí)行速度的方法,或用一個(gè)軌跡點(diǎn)對(duì)應(yīng)復(fù)數(shù)條 指令的方法,或采用對(duì)軌道表一次掃描多個(gè)軌跡點(diǎn)的方法,實(shí)現(xiàn)上述目的。根據(jù)本發(fā)明所述的方法,當(dāng)軌道表及相應(yīng)存儲(chǔ)器已滿或到達(dá)一個(gè)預(yù)定的限定時(shí), 新放置的軌道及存儲(chǔ)單元塊要替換舊的軌道及存儲(chǔ)單元塊,被替換的軌道及存儲(chǔ)單元塊可 以由替換策略確定;所述替換策略包括最近最少使用(LRU)或最少頻繁使用(LFU)策略。當(dāng)使用最近最少使用策略,且放置軌道及存儲(chǔ)單元塊采用的是所述約定順序時(shí), 每個(gè)軌道及存儲(chǔ)單元塊還對(duì)應(yīng)一個(gè)使用位(U bit)。在領(lǐng)先寫(xiě)指針若干軌道的位置上,設(shè)一 清掃指針將指針?biāo)甘镜能壍兰按鎯?chǔ)單元塊中的使用位清零,此后任何對(duì)所述軌道及存儲(chǔ) 單元塊的訪問(wèn)把所述使用位置一。寫(xiě)指針指向一個(gè)軌道及存儲(chǔ)單元塊時(shí),若使用位為‘0’, 寫(xiě)指針停留在所述軌道及存儲(chǔ)單元塊,否則寫(xiě)指針加一至下一個(gè)軌道及存儲(chǔ)單元塊。若清 掃指針與寫(xiě)指針之間距離是可調(diào)整的,則為可調(diào)整范圍的最近最少使用策略。當(dāng)使用最近最少使用策略,且放置軌道及存儲(chǔ)單元塊采用的是所述鏈表順序時(shí), 把被訪問(wèn)到的軌道移到所述鏈表隊(duì)列的尾部,當(dāng)生成新的軌道并需要占用已有軌道的位置 時(shí),用所述新的軌道替換排在所述鏈表隊(duì)列頭部的軌道,再將所述新的軌道置于所述鏈表 隊(duì)列的尾部。當(dāng)使用最少頻繁使用策略時(shí),每個(gè)軌道及存儲(chǔ)單元塊還對(duì)應(yīng)一個(gè)計(jì)數(shù)(count)。在 領(lǐng)先寫(xiě)指針若干軌道的位置上,設(shè)一清掃指針將指針?biāo)甘镜能壍兰按鎯?chǔ)單元塊中的計(jì)數(shù) 清零,此后任何對(duì)所述軌道及存儲(chǔ)單元塊的訪問(wèn)把所述計(jì)數(shù)增一。寫(xiě)指針指向一個(gè)軌道及 存儲(chǔ)單元塊時(shí),若計(jì)數(shù)值小于一個(gè)預(yù)設(shè)值,寫(xiě)指針停留在所述軌道及存儲(chǔ)單元塊,否則寫(xiě)指 針加一至下一個(gè)軌道及存儲(chǔ)單元塊。若所述預(yù)設(shè)值是可變的及清掃指針與寫(xiě)指針之間距離 是可調(diào)整的,則為可調(diào)整范圍的最少頻繁使用策略。本發(fā)明所述的可調(diào)范圍內(nèi)的最近最少使用策略或可調(diào)節(jié)范圍的最少頻繁使用策 略中,所述范圍的最小范圍為一條軌道及存儲(chǔ)單元塊,最大范圍為所有軌道及存儲(chǔ)單元塊。 所述范圍中軌道及存儲(chǔ)單元塊的數(shù)目可以是預(yù)先設(shè)置的值,也可以在程序運(yùn)行中實(shí)時(shí)調(diào)整。由于本發(fā)明中軌道與主動(dòng)表項(xiàng)是一一對(duì)應(yīng)的,因此針對(duì)軌道表設(shè)置清掃指針和寫(xiě) 指針,與針對(duì)主動(dòng)表設(shè)置清掃指針和寫(xiě)指針,兩者效果是相同的。若針對(duì)主動(dòng)表設(shè)置清掃指 針和寫(xiě)指針,則清掃指針領(lǐng)先寫(xiě)指針若干表項(xiàng)。根據(jù)本發(fā)明所述方法,可以將所述方法應(yīng)用于存儲(chǔ)層次中的任意層次,用于將存儲(chǔ)層次中速度較慢的存儲(chǔ)器中的指令、數(shù)據(jù)填充到存儲(chǔ)層次中速度較快的存儲(chǔ)器中。根據(jù)本發(fā)明所述方法,填充的指令段或數(shù)據(jù)段在較低層存儲(chǔ)器時(shí),可以在將所述 指令段或數(shù)據(jù)段填充到較高層處理器的同時(shí),將所述指令段或數(shù)據(jù)段旁路(bypass)到所 有更高層次存儲(chǔ)器中填充;若處理器核已經(jīng)需要用到正在填充的指令段中的指令或數(shù)據(jù)段 中的數(shù)據(jù),則同時(shí)將所述指令或數(shù)據(jù)旁路到處理器核。本發(fā)明所述方法還可以包括自動(dòng)功耗管理功能,用于自動(dòng)實(shí)時(shí)地調(diào)整處理器核運(yùn) 行功耗;當(dāng)軌道表中有軌道存放空轉(zhuǎn)(idle)任務(wù)時(shí),記錄所述軌道的被訪問(wèn)率,計(jì)算得到 處理器核的使用率,再根據(jù)當(dāng)前處理器核使用率和基準(zhǔn)使用率調(diào)整系統(tǒng)功耗;具體調(diào)整方 法包括改變時(shí)鐘頻率和調(diào)整處理器電壓。本發(fā)明還提出一種低缺失率、低缺失懲罰的緩存裝置,其特征在于可以通過(guò)塊地 址(block address)和偏移量(offset)對(duì)高層次指令存儲(chǔ)器進(jìn)行尋址,找到所需指令。本 發(fā)明所述的低缺失率、低缺失懲罰的緩存裝置可以由處理器核實(shí)現(xiàn),也可以由專(zhuān)用集成電 路模塊實(shí)現(xiàn)。當(dāng)本發(fā)明所述的低缺失率、低缺失懲罰的緩存裝置由處理器核構(gòu)成時(shí),所述處理 器核能通過(guò)在其上運(yùn)行的程序,實(shí)現(xiàn)本發(fā)明所述的低缺失率、低缺失懲罰的緩存功能。當(dāng)本發(fā)明所述的低缺失率、低缺失懲罰的緩存裝置由專(zhuān)用集成電路模塊實(shí)現(xiàn)時(shí), 所述裝置包括(1)生成器(generator),用于掃描正在填充的指令,并提取出分支點(diǎn)的指令類(lèi) 型、指令本身地址,并計(jì)算出分支目標(biāo)地址;(2)分配器(allocator),用于存放主動(dòng)表(active list);所述主動(dòng)表存儲(chǔ)高層 次指令存儲(chǔ)器中存儲(chǔ)單元塊的對(duì)應(yīng)指令的塊地址,每個(gè)地址對(duì)應(yīng)一個(gè)塊號(hào)碼(BNX);并將 目標(biāo)塊地址與所述地址進(jìn)行內(nèi)容匹配,得到目標(biāo)塊地址對(duì)應(yīng)的塊號(hào)碼;任意指令對(duì)應(yīng)軌道 的塊號(hào)碼與所述指令在軌道中的偏移量(BNY)連接即可構(gòu)成所述指令對(duì)應(yīng)的軌跡點(diǎn)位置 (BN);(3)高層次指令存儲(chǔ)器,在邏輯上被分為復(fù)數(shù)個(gè)存儲(chǔ)單元塊,每個(gè)存儲(chǔ)單元塊包含 單數(shù)個(gè)或復(fù)數(shù)個(gè)項(xiàng)(entry),每個(gè)項(xiàng)用于存儲(chǔ)一條指令;每個(gè)塊號(hào)碼對(duì)應(yīng)唯一一個(gè)所述存 儲(chǔ)單元塊;用處理器核產(chǎn)生的偏移量索引由塊號(hào)碼指定的存儲(chǔ)單元塊,即找到所需的項(xiàng);(4)軌道存儲(chǔ)器(track memory),用于存放軌道表;所述軌道表中的每個(gè)軌道對(duì) 應(yīng)一個(gè)塊號(hào)碼;所述軌道中的軌跡點(diǎn)包含指令類(lèi)型和目標(biāo)軌跡點(diǎn)位置(target BN);通過(guò) 所述目標(biāo)軌跡點(diǎn)位置中包含的塊號(hào)碼(BNX)即可找到目標(biāo)軌跡點(diǎn)所在的軌道和偏移量,根 據(jù)所述目標(biāo)軌跡點(diǎn)位置中包含的偏移量(BNY)即可找到目標(biāo)軌跡點(diǎn)在所述軌道中的具體 位置;每條軌道中軌跡點(diǎn)的數(shù)目不超過(guò)對(duì)應(yīng)存儲(chǔ)單元塊中項(xiàng)的數(shù)目;(5)循跡器(tracker),根據(jù)前一軌跡頭、軌道存儲(chǔ)器輸出的目標(biāo)軌跡點(diǎn)位置、指 令類(lèi)型和處理器核輸出的轉(zhuǎn)移條件是否成立的信息更新當(dāng)前軌跡頭;若指令類(lèi)型為無(wú)條 件分支指令或條件分支指令且分支轉(zhuǎn)移條件成立,則當(dāng)前軌跡頭從目標(biāo)軌跡點(diǎn)位置開(kāi)始, 保持軌跡頭位置的第一維(即第一地址)不變,增加軌跡頭位置的第二維(即第二地 址)的值以移動(dòng)軌跡頭,直到軌跡頭達(dá)到所述軌道上所述程序入口指令及之后指令中的第 一個(gè)分支指令的位置;若指令類(lèi)型為條件分支指令且分支轉(zhuǎn)移條件不成立,且軌跡頭不位 于軌道中的最后一個(gè)軌跡點(diǎn),則保持軌跡頭位置的第一維不變,增加軌跡頭位置的第二維的值以移動(dòng)軌跡頭,直到軌跡頭達(dá)到軌跡頭所在軌道上當(dāng)前指令之后的第一個(gè)分支指令的 位置;若指令類(lèi)型為條件分支指令且分支轉(zhuǎn)移條件不成立,且軌跡頭位于軌道中的最后一 個(gè)軌跡點(diǎn),則根據(jù)所述軌跡點(diǎn)中包含的順序執(zhí)行下一指令對(duì)應(yīng)的軌道塊號(hào)碼作為新的塊號(hào) 碼、偏移量清零,形成新軌跡點(diǎn)位置,軌跡頭從所述新軌跡點(diǎn)位置開(kāi)始,保持軌跡頭位置的 第一維不變,增加軌跡頭位置的第二維的值以移動(dòng)軌跡頭,直到軌跡頭達(dá)到所述新軌跡點(diǎn) 指令及之后指令中的第一個(gè)分支指令的位置;若指令類(lèi)型為其他指令,則保持軌跡頭位置 不變,即當(dāng)前軌跡頭位置等于前一軌跡頭位置;(6)填充引擎(fill engine),用于取得指令段,并將所述指令段填充到高層次指 令存儲(chǔ)器中;所述分配器、高層次指令存儲(chǔ)器、軌道存儲(chǔ)器和循跡器之間通過(guò)總線連接傳遞軌 跡頭位置,根據(jù)當(dāng)前軌跡頭位置對(duì)應(yīng)的塊號(hào)碼和處理器核提供的偏移量可以在分配器中找 到對(duì)應(yīng)的存儲(chǔ)地址的項(xiàng)、在軌道表中找到當(dāng)前軌跡頭及所在軌道、在高層次指令存儲(chǔ)器中 找到對(duì)應(yīng)的存儲(chǔ)單元塊及所述存儲(chǔ)單元塊中由所述偏移量索引的存儲(chǔ)指令的項(xiàng);本發(fā)明所述裝置還可以包括(1)高層次數(shù)據(jù)存儲(chǔ)器,用于存放數(shù)據(jù),在結(jié)構(gòu)上類(lèi)似所述高層次指令存儲(chǔ)器;(2)基址指針(base pointer)存儲(chǔ)器,用于存儲(chǔ)指向各個(gè)基地址號(hào)對(duì)應(yīng)的高層次 數(shù)據(jù)存儲(chǔ)器中存儲(chǔ)單元塊的指針(pointer);當(dāng)所述裝置具有基址指針存儲(chǔ)器時(shí),所述主動(dòng)表中還可以存儲(chǔ)當(dāng)前存儲(chǔ)在高層次 數(shù)據(jù)存儲(chǔ)器中的已填充數(shù)據(jù)對(duì)應(yīng)的起始地址及相應(yīng)標(biāo)志位,且填充引擎能將數(shù)據(jù)段填充到 高層次數(shù)據(jù)存儲(chǔ)器中。本發(fā)明所述的生成器掃描指令時(shí),可以只對(duì)特定的指令生成對(duì)應(yīng)的指令類(lèi)型、指 令本身地址、目標(biāo)地址或基址指針。所述特定的指令包括會(huì)引起轉(zhuǎn)移的指令和改變數(shù)據(jù)基 地址的指令,通常為條件分支指令、無(wú)條件分支指令和改變數(shù)據(jù)基地址的指令。在一個(gè)例子中,處理器核支持的指令還可以有條件分支轉(zhuǎn)移且壓棧指令和出棧且 分支轉(zhuǎn)移指令,在這種情況下,所述生成器也對(duì)所述條件分支轉(zhuǎn)移且壓棧指令和出棧且分 支轉(zhuǎn)移指令生成對(duì)應(yīng)的指令類(lèi)型、指令本身地址、目標(biāo)地址。本發(fā)明所述生成器可以根據(jù)軌跡頭提供的完整虛地址產(chǎn)生虛地址形式的目標(biāo)地 址,也可以根據(jù)軌跡頭提供的完整實(shí)地址產(chǎn)生實(shí)地址形式的目標(biāo)地址,還可以使用處理器 核提供的當(dāng)前指令地址加上保存的轉(zhuǎn)移偏移量得到虛地址形式的目標(biāo)地址。本發(fā)明所述的分配器中的主動(dòng)表可以包含標(biāo)志位。所述標(biāo)志位可以包括替換計(jì) 數(shù)位,用于產(chǎn)生供最近最少使用策略或最少頻繁使用策略使用。所述標(biāo)志位還可以包括有 效位,用來(lái)表示對(duì)應(yīng)表項(xiàng)是否有效。所述主動(dòng)表中的標(biāo)志位還可以包括存儲(chǔ)模式位和鎖定 (lock)位。所述存儲(chǔ)模式位用來(lái)表示對(duì)應(yīng)高層次指令存儲(chǔ)器中的已填充指令是按順序存儲(chǔ) 的,還是以類(lèi)似循環(huán)緩沖形式存儲(chǔ)的。所述鎖定位用于表示對(duì)應(yīng)高層次指令存儲(chǔ)器中的已 填充指令當(dāng)前狀態(tài)是否鎖定,即是否不可被替換。本發(fā)明所述裝置做匹配時(shí),分配器表項(xiàng)中的有效位可以控制所述項(xiàng)是否參與匹 配;若表項(xiàng)有效則參與匹配,否則不參與匹配。由于程序中并不全是分支指令,因此本發(fā)明所述的軌道存儲(chǔ)器中的軌道表可以是 粗粒度的,即在所述軌道表中可以由單數(shù)個(gè)軌跡點(diǎn)對(duì)應(yīng)復(fù)數(shù)條指令。例如,可以由只包含一條分支指令或一條改變數(shù)據(jù)基地址的指令的連續(xù)復(fù)數(shù)條指令共用所述行中的一個(gè)單元;還 可以在所述單元中增加一個(gè)表示條件分支指令或改變數(shù)據(jù)基地址的指令數(shù)量的標(biāo)志位,并 增加相應(yīng)目標(biāo)軌跡點(diǎn)位置或基址指針的數(shù)量,即可以用所述的一個(gè)單元代表包含復(fù)數(shù)條分 支指令或改變數(shù)據(jù)基地址的指令的連續(xù)復(fù)數(shù)條指令。所述軌道表中可以有復(fù)數(shù)個(gè)軌跡頭和復(fù)數(shù)個(gè)預(yù)測(cè)軌跡頭,每個(gè)軌跡頭及相應(yīng)預(yù)測(cè) 軌跡頭對(duì)應(yīng)一個(gè)線程;同一個(gè)線程可以對(duì)應(yīng)復(fù)數(shù)個(gè)軌道,同一個(gè)軌道只對(duì)應(yīng)唯一一個(gè)線程。 在同一軌道表中的軌道都是正交、不相關(guān)的。當(dāng)本發(fā)明所述軌道表是粗粒度時(shí),一次可以掃描多個(gè)軌跡點(diǎn),能更早地發(fā)現(xiàn)分支 指令,從而使軌道表中軌道的建立早于軌跡頭到達(dá)所述軌道,且保證軌跡頭始終領(lǐng)先當(dāng)前 指令。通常在軌道表具體實(shí)現(xiàn)中,一個(gè)所述單元代表兩條指令或四條指令。根據(jù)本發(fā)明技術(shù)方案,能夠保證在處理器核執(zhí)行到某條指令前,所述指令已經(jīng)完 成填充,并對(duì)應(yīng)所述軌道表中唯一一個(gè)已有的軌跡點(diǎn)。本發(fā)明所述的軌道表中,每一個(gè)軌道都對(duì)應(yīng)高層次指令存儲(chǔ)器中唯一一個(gè)存儲(chǔ)單 元塊。由于在執(zhí)行軌道表中任意軌跡點(diǎn)對(duì)應(yīng)的指令之前,所述軌道上的軌跡點(diǎn)就已經(jīng)生成 完畢,因此在處理器核實(shí)際執(zhí)行所述軌跡點(diǎn)對(duì)應(yīng)的指令時(shí),只需要根據(jù)對(duì)條件分支轉(zhuǎn)移的 實(shí)際判斷結(jié)果更新軌跡頭即可快速地找到下一條指令所在的存儲(chǔ)單元塊,再根據(jù)處理器核 計(jì)算得到的地址偏移量即可在所述存儲(chǔ)單元塊中找到所述軌跡點(diǎn)對(duì)應(yīng)的指令。由于本發(fā)明所述主動(dòng)表中的表項(xiàng)與軌道表中的軌道都對(duì)應(yīng)唯一一個(gè)存儲(chǔ)單元塊, 因此所述主動(dòng)表的表項(xiàng)與軌道表的軌道也存在一一對(duì)應(yīng)的關(guān)系,即所述主動(dòng)表中的鎖定位 對(duì)軌道表也有同樣的鎖定作用。本發(fā)明所述的軌道存儲(chǔ)器中的軌道表可以以一種二維表格的形式存儲(chǔ)在軌道存 儲(chǔ)器中。軌跡點(diǎn)中的下一軌跡點(diǎn)位置信息能夠用一組二維坐標(biāo)表示,其中第一坐標(biāo)(BNX) 值對(duì)應(yīng)所述軌跡點(diǎn)在二維表格中的行號(hào)和所述軌跡點(diǎn)對(duì)應(yīng)的存儲(chǔ)單元塊號(hào)碼,即第一地 址;第二坐標(biāo)(BNY)值對(duì)應(yīng)所述軌跡點(diǎn)在二維表格中的列號(hào),即第二地址。軌跡點(diǎn)中包含的 目標(biāo)軌跡點(diǎn)位置也可以由所述第一坐標(biāo)、第二坐標(biāo)用同樣的方法表示。當(dāng)本發(fā)明所述軌道表中每個(gè)軌跡點(diǎn)對(duì)應(yīng)固定數(shù)量指令時(shí),指令地址除以塊地址得 到的余數(shù),再除以每個(gè)軌跡點(diǎn)對(duì)應(yīng)指令數(shù)目得到的商,即為所述軌跡點(diǎn)的第二坐標(biāo)值。任何一條軌道的最后一個(gè)軌跡點(diǎn)還應(yīng)包括當(dāng)順序執(zhí)行時(shí)下一指令對(duì)應(yīng)軌跡點(diǎn)的 位置信息。特別地,當(dāng)所述軌道上最后一個(gè)軌跡點(diǎn)是條件分支指令時(shí),不但要將目標(biāo)地址對(duì) 應(yīng)的復(fù)數(shù)條指令填充到高層次指令存儲(chǔ)器中并生成軌道,還要將順序執(zhí)行時(shí)之后的復(fù)數(shù)條 指令填充到高層次指令存儲(chǔ)器中并生成軌道。本發(fā)明所述的高層次指令存儲(chǔ)器或高層次數(shù)據(jù)存儲(chǔ)器在邏輯上被分為復(fù)數(shù)個(gè)存 儲(chǔ)單元塊,處理器核對(duì)所述高層次存儲(chǔ)器尋址時(shí),通過(guò)軌跡點(diǎn)或基址指針存儲(chǔ)器輸出的塊 地址為索引找到包含所需指令或數(shù)據(jù)的存儲(chǔ)單元塊,在通過(guò)處理器核輸出的偏移量為索引 在所述存儲(chǔ)單元塊中找到所需的指令或數(shù)據(jù)。本發(fā)明所述的循跡器可以由加法器、多路選擇器和寄存器實(shí)現(xiàn)。所述加法器用于根據(jù)當(dāng)前軌跡點(diǎn)位置中的偏移量產(chǎn)生順序執(zhí)行的下一軌跡點(diǎn)位 置中的偏移量,用于移動(dòng)軌跡頭直到分支指令對(duì)應(yīng)的軌跡點(diǎn)。
所述多路選擇器用于根據(jù)處理器核送來(lái)的判斷信息選擇多個(gè)來(lái)源的新軌跡點(diǎn)位 置中的一個(gè)作為輸出軌跡點(diǎn)位置。所述多個(gè)來(lái)源的新軌跡點(diǎn)位置信息包括由當(dāng)前軌跡點(diǎn)對(duì) 應(yīng)塊號(hào)碼和所述加法器產(chǎn)生的偏移量合成的軌跡點(diǎn)位置、由循跡器從當(dāng)前軌跡點(diǎn)掃描得到 的分支目標(biāo)軌跡點(diǎn)位置信息或順序執(zhí)行新軌跡點(diǎn)位置,以及各種異常處理等特殊程序入口 地址對(duì)應(yīng)的軌跡點(diǎn)位置。所述寄存器用于對(duì)所述多路選擇器的輸出鎖存,從而保證當(dāng)分支指令尚未執(zhí)行 時(shí),軌跡頭停留在對(duì)應(yīng)的軌跡點(diǎn)上。所述循跡器還可以具有棧寄存器堆,在執(zhí)行分支轉(zhuǎn)移的同時(shí)將返回地址對(duì)應(yīng)的軌 跡點(diǎn)位置壓棧到棧寄存器堆中,在執(zhí)行返回指令時(shí)直接由所述棧寄存器堆中出棧得到所述 軌跡點(diǎn)位置。當(dāng)所述循跡器具有棧寄存器堆時(shí),所述多路選擇器的選擇來(lái)源還包括來(lái)源于 棧寄存器堆輸出的新軌跡點(diǎn)位置。本發(fā)明所述的填充引擎具有每周期獲取并填充復(fù)數(shù)個(gè)指令或數(shù)據(jù)的帶寬。所述填 充引擎每周期獲取并填充的指令或數(shù)據(jù)的個(gè)數(shù)大于所述處理器核每周期需要的指令或數(shù) 據(jù)的個(gè)數(shù),從而實(shí)現(xiàn)在處理器核實(shí)際執(zhí)行到某條指令或訪問(wèn)到某個(gè)數(shù)據(jù)前就將所述指令或 數(shù)據(jù)填充到高層次指令存儲(chǔ)器或高層次數(shù)據(jù)存儲(chǔ)器中。本發(fā)明所述的生成器每周期能解析的指令的數(shù)目與填充引擎每周期獲取并填充 的指令的數(shù)目相等,從而實(shí)現(xiàn)與所述填充引擎的同步。本發(fā)明所述填充引擎可以具有分段交替填充功能,當(dāng)有復(fù)數(shù)個(gè)不同起始地址的指 令段或數(shù)據(jù)段需要填充時(shí),填充引擎會(huì)將所述指令段或數(shù)據(jù)段分為更小的小段,以優(yōu)先填 充包含處理器核最迫切需要的指令或數(shù)據(jù)的小段的方式交替填充所述復(fù)數(shù)個(gè)指令段或數(shù) 據(jù)段。本發(fā)明所述的分配器具有的存儲(chǔ)功能還可以用于存放保留表。若要將所有已完成 填充或等待填充的指令全部存儲(chǔ)在高層次指令存儲(chǔ)器中,則需要容量非常龐大的高速存儲(chǔ) 器才能實(shí)現(xiàn),技術(shù)難度和成本也會(huì)隨之相應(yīng)提高。為了減小高速存儲(chǔ)器的容量,可以采用較 小的主動(dòng)表和較大的保留表結(jié)合的方法實(shí)現(xiàn)所述分配器。此時(shí),生成器產(chǎn)生的地址信息與 分配器中主動(dòng)表中存儲(chǔ)的所有地址信息及保留表中存儲(chǔ)的所有地址信息都進(jìn)行匹配。本發(fā)明所述的保留表中存儲(chǔ)等待填充的指令的地址及相應(yīng)標(biāo)志位,或曾完成填 充、但已被替換出高層次指令存儲(chǔ)器的指令的地址及相應(yīng)標(biāo)志位。所述標(biāo)志位可以包括使 用位或計(jì)數(shù)位,用于產(chǎn)生供最近最少使用策略或最少頻繁使用策略使用。所述標(biāo)志位還可 以包括有效位,用來(lái)表示對(duì)應(yīng)表項(xiàng)是否有效。當(dāng)存在保留表時(shí),所述裝置還相應(yīng)地包括交換器(exchanger)。所述交換器包括存 儲(chǔ)器和控制邏輯,用于在軌道表更新后,對(duì)軌跡點(diǎn)中原目標(biāo)地址對(duì)應(yīng)的目標(biāo)軌跡點(diǎn)位置進(jìn) 行映射及替換。本發(fā)明所述的交換器包括存儲(chǔ)器和控制邏輯,用于在軌道表更新后,對(duì)軌跡點(diǎn)中 原目標(biāo)地址對(duì)應(yīng)的軌跡點(diǎn)進(jìn)行映射及替換。當(dāng)存在保留表和交換器時(shí),若正在填充的分支指令的目標(biāo)地址對(duì)應(yīng)的指令尚未被 填充時(shí),將所述目標(biāo)地址按塊地址和塊內(nèi)偏移量的形式存儲(chǔ)到所述分支指令對(duì)應(yīng)軌跡點(diǎn) 中,并將所述目標(biāo)地址存儲(chǔ)到保留表中;所述塊內(nèi)偏移量對(duì)應(yīng)目標(biāo)軌跡點(diǎn)在軌道中的偏移 量,即目標(biāo)軌跡點(diǎn)的第二坐標(biāo);當(dāng)所述目標(biāo)地址對(duì)應(yīng)的指令被填充時(shí),將所述指令所在軌道對(duì)應(yīng)的第一坐標(biāo)值替換所述軌跡點(diǎn)包含的塊地址值,之后從所述軌跡點(diǎn)轉(zhuǎn)移到目標(biāo)軌跡 點(diǎn),只以第一坐標(biāo)、第二坐標(biāo)為索引即可在軌道表中找到所述目標(biāo)軌跡點(diǎn)。根據(jù)本發(fā)明技術(shù)方案,需要更新軌道表的情況有(1)由建立新的軌道表引起的軌跡點(diǎn)中用第一坐標(biāo)代替目標(biāo)塊地址的替換;(2)由指令段被替換出高層次指令存儲(chǔ)器、軌道被替換出軌道表引起的軌跡點(diǎn)中 用目標(biāo)塊地址代替第一坐標(biāo)的替換。由于軌道表中可能有復(fù)數(shù)個(gè)軌跡點(diǎn)擁有相同的下一軌跡點(diǎn),但在軌道表更新時(shí), 只有當(dāng)前軌跡點(diǎn)中對(duì)應(yīng)于所述下一軌跡點(diǎn)的信息被更新,因此需要記錄所述軌跡點(diǎn)在更新 前后包含的下一軌跡點(diǎn)位置信息或地址信息的對(duì)應(yīng)關(guān)系,在實(shí)際訪問(wèn)到所述軌跡點(diǎn)時(shí)能映 射、提供正確的下一軌跡點(diǎn)位置信息,并能主動(dòng)地替換所述軌道表中其他需要更新的軌跡 點(diǎn)中的下一軌跡點(diǎn)位置信息或地址信息。本發(fā)明所述交換器中的存儲(chǔ)器用于存儲(chǔ)軌道表更新是發(fā)生變化的軌跡點(diǎn)中的新 舊軌道位置信息或地址信息,并依次掃描軌道表中每一個(gè)軌跡點(diǎn),通過(guò)所述控制邏輯實(shí)現(xiàn) 對(duì)需要更新的軌跡點(diǎn)中下一軌跡點(diǎn)位置信息或地址信息的替換,或在循跡器掃描軌道表 時(shí),將所述軌跡點(diǎn)中舊的下一軌跡點(diǎn)位置信息映射成新的下一軌跡點(diǎn)位置信息。當(dāng)本發(fā)明所述裝置具有交換器時(shí),每個(gè)軌跡點(diǎn)位置或目標(biāo)地址都對(duì)應(yīng)地有一個(gè)標(biāo) 志位。所述標(biāo)志位用于表示所述軌跡點(diǎn)位置或目標(biāo)地址是舊的需要被替換的信息,還是新 的不需要被替換的信息。當(dāng)存在保留表時(shí),還可以具備一種存儲(chǔ)規(guī)則,使保留表中所有地址對(duì)應(yīng)的指令或 數(shù)據(jù)都存在于與所述裝置連接的較低層次、較慢速存儲(chǔ)器中。在本發(fā)明所述裝置構(gòu)成的系統(tǒng)中,不同層次的存儲(chǔ)器中存儲(chǔ)單元塊的大小可以不 同。通常而言,最高層次的高速存儲(chǔ)器存儲(chǔ)單元塊容量最小,層次越低、速度越慢的存儲(chǔ)器 的存儲(chǔ)單元塊容量越大。由于按連續(xù)地址訪問(wèn)存儲(chǔ)器的效率高于按隨機(jī)地址訪問(wèn)存儲(chǔ)器的 效率,因此對(duì)于較慢速度的存儲(chǔ)而言,能夠訪問(wèn)越長(zhǎng)的連續(xù)地址,就越能夠減少訪問(wèn)時(shí)延在 填充指令或數(shù)據(jù)的總時(shí)間中的比重,從而提高整體性能。在本發(fā)明所述裝置構(gòu)成的系統(tǒng)中,不同層次的所述裝置對(duì)應(yīng)提取分支點(diǎn)的深度可 以不同。通常而言,直接連接到處理器核的所述裝置對(duì)應(yīng)提取分支點(diǎn)的深度最小,連接速度 越慢的存儲(chǔ)器的所述裝置對(duì)應(yīng)提取分支點(diǎn)的深度越大。由于在處理器存儲(chǔ)層次中速度越 慢的存儲(chǔ)器對(duì)應(yīng)的容量也越大,可以容納相對(duì)于較高速度的存儲(chǔ)器更多的填充的指令或數(shù) 據(jù),因此可以提取深度更深的分支點(diǎn),即一次填充更多的指令或數(shù)據(jù)。本發(fā)明所述的低缺失率、低缺失懲罰的緩存裝置還可以具有復(fù)數(shù)個(gè)棧寄存器堆和 復(fù)數(shù)個(gè)基址指針存儲(chǔ)器,且所述軌道存儲(chǔ)器中可以有復(fù)數(shù)個(gè)軌道表,用于多線程切換時(shí)保 存現(xiàn)場(chǎng)或恢復(fù)現(xiàn)場(chǎng)使用。在具體實(shí)現(xiàn)時(shí),以一個(gè)軌道表、一個(gè)棧寄存器堆和一個(gè)基址指針存 儲(chǔ)器為一組線程狀態(tài)組對(duì)應(yīng)一個(gè)線程,當(dāng)前線程對(duì)應(yīng)的線程狀態(tài)組為有效的線程狀態(tài)組, 當(dāng)切換到別的線程時(shí),對(duì)應(yīng)的線程狀態(tài)組為有效的線程狀態(tài)組。這樣可以實(shí)現(xiàn)快速地在一 個(gè)周期內(nèi)快速切換線程。當(dāng)本發(fā)明所述裝置支持多線程時(shí),軌道表中的不同軌道可以對(duì)應(yīng)不同線程,但不 會(huì)出現(xiàn)同一個(gè)軌道對(duì)應(yīng)不同線程的情況。根據(jù)本發(fā)明所述技術(shù)方案,單數(shù)個(gè)或復(fù)數(shù)個(gè)本發(fā)明所述低缺失率、低缺失懲罰的緩存裝置可以和處理器核及所述處理器存儲(chǔ)層次組成具有低缺失率、低缺失懲罰的緩存系 統(tǒng)。所述裝置可以位于所述處理器核及所述處理器存儲(chǔ)層次間的各個(gè)位置,用于將存儲(chǔ)層 次中速度較慢的存儲(chǔ)器中的指令、數(shù)據(jù)填充到存儲(chǔ)層次中速度較快的存儲(chǔ)器中。所述系統(tǒng)中部分或全部所述裝置的保留表中的地址對(duì)應(yīng)的指令或數(shù)據(jù)可以存在 于與所述裝置連接的較慢速存儲(chǔ)器中。在所述系統(tǒng)中,單數(shù)個(gè)或復(fù)數(shù)個(gè)所述裝置可以共用同一個(gè)分配器,也可以共用同 一個(gè)軌道存儲(chǔ)器。若需要在所述系統(tǒng)中進(jìn)行虛實(shí)地址旁路緩沖翻譯轉(zhuǎn)換(TLB),可以將所述 旁路緩沖翻譯轉(zhuǎn)換模塊放置在所述系統(tǒng)中連接存儲(chǔ)層次中速度最慢的存儲(chǔ)器的所述裝置 的與所述存儲(chǔ)層次中速度最慢的存儲(chǔ)器之間,使所述系統(tǒng)中所有所述裝置的地址模式保持一致。基于本發(fā)明所述裝置進(jìn)行指令填充的過(guò)程包括(1)將被填充指令段的地址與主動(dòng)表中的地址進(jìn)行匹配,若匹配成功,則將所述指 令段存儲(chǔ)到以匹配成功項(xiàng)對(duì)應(yīng)的塊號(hào)碼為索引的存儲(chǔ)單元塊中;所匹配不成功,則將所述 指令段存儲(chǔ)到以主動(dòng)表中下一個(gè)可用項(xiàng)對(duì)應(yīng)的塊號(hào)碼為索引的存儲(chǔ)單元塊中,并將所述指 令段對(duì)應(yīng)的地址存儲(chǔ)到所述可用項(xiàng)中;(2)在所述被填充指令段中提取出所有分支指令對(duì)應(yīng)的指令類(lèi)型、所述指令對(duì)應(yīng) 軌跡點(diǎn)位置,并計(jì)算出目標(biāo)地址;(3)將目標(biāo)地址與主動(dòng)表中的地址進(jìn)行匹配,若匹配成功,則得到目標(biāo)軌跡點(diǎn)的塊 號(hào)碼,所述塊號(hào)碼與目標(biāo)地址中的偏移量連接即可得到目標(biāo)軌跡點(diǎn)位置;若匹配不成功,可 以遞歸地將所述目標(biāo)地址對(duì)應(yīng)指令段填充到高層次指令存儲(chǔ)器中,使目標(biāo)地址與主動(dòng)表中 地址能成功匹配,從而得到目標(biāo)軌跡點(diǎn)位置,也可以不立即填充,暫時(shí)使用目標(biāo)地址表示目 標(biāo)軌跡點(diǎn)的位置,等到所述目標(biāo)地址對(duì)應(yīng)的指令段被填充后,在根據(jù)主動(dòng)表中所述目標(biāo)地 址對(duì)應(yīng)的塊號(hào)碼和所述目標(biāo)地址中的偏移量形成目標(biāo)軌跡點(diǎn)位置,再用所述目標(biāo)軌跡點(diǎn)位 置替換軌道表中所有所述目標(biāo)地址;(4)以所述指令對(duì)應(yīng)軌跡點(diǎn)位置為索引,將指令類(lèi)型、目標(biāo)軌跡點(diǎn)位置存儲(chǔ)到軌跡 存儲(chǔ)器中;重復(fù)上述過(guò)程即可實(shí)現(xiàn)指令填充。在本發(fā)明所述裝置中,處理器核取得指令的過(guò)程包括(1)循跡器根據(jù)軌道存儲(chǔ)器輸出的目標(biāo)軌跡點(diǎn)位置、指令類(lèi)型和處理器核輸出的 分支轉(zhuǎn)移條件是否成立的信息更新軌跡頭位置;(2)以所述軌跡頭位置對(duì)應(yīng)的塊號(hào)碼為索引可以找到包含所需指令的存儲(chǔ)單元 塊,再以處理器核產(chǎn)生的偏移量為索引可以在所述存儲(chǔ)單元塊中找到所述指令;將所述指 令送給處理器核;(3)重復(fù)上述過(guò)程,隨軌跡頭及處理器核產(chǎn)生的偏移量的變化,即可使處理器核不 斷取得新的指令。在本發(fā)明所述裝置中,當(dāng)處理器核執(zhí)行改變數(shù)據(jù)基地址的指令時(shí),將指令中數(shù)據(jù) 基地址與主動(dòng)表中的地址進(jìn)行匹配,若匹配成功,則將匹配成功項(xiàng)對(duì)應(yīng)的塊號(hào)碼存儲(chǔ)到所 述指令中基地址對(duì)應(yīng)的基址指針存儲(chǔ)器項(xiàng)中;所匹配不成功,則將所述數(shù)據(jù)段填充到以主 動(dòng)表中下一個(gè)可用項(xiàng)對(duì)應(yīng)的塊號(hào)碼為索引的存儲(chǔ)單元塊中,并將所述數(shù)據(jù)基地址存儲(chǔ)到所述可用項(xiàng)中。在本發(fā)明所述裝置中,當(dāng)處理器核執(zhí)行訪問(wèn)數(shù)據(jù)的指令時(shí),可以從所述指令中得 到基地址號(hào),再以所述基地址號(hào)為索引從基址指針存儲(chǔ)器得到基址指針,從而根據(jù)所述基 址指針找到對(duì)應(yīng)的存儲(chǔ)單元塊,根據(jù)處理器核計(jì)算得到的地址偏移量即可在所述存儲(chǔ)單元 塊中找到所述數(shù)據(jù)。本發(fā)明所述的低缺失率、低缺失懲罰的緩存裝置還可以包括調(diào)度單元,用于調(diào)度、 控制對(duì)高層次指令存儲(chǔ)器或高層次數(shù)據(jù)存儲(chǔ)器的讀寫(xiě),保證處理器核對(duì)所述高層次存儲(chǔ)器 訪問(wèn)的最高優(yōu)先權(quán),使因填充導(dǎo)致的寫(xiě)操作或因?qū)懟氐图?jí)存儲(chǔ)器而導(dǎo)致的讀操作僅在處理 器核不訪問(wèn)所述高層次存儲(chǔ)器時(shí)才進(jìn)行。本發(fā)明所述的低缺失率、低缺失懲罰的緩存裝置還可以包括具有相同地址數(shù)據(jù)合 并功能的寫(xiě)緩沖(Write Buffer),用于緩沖從高層次數(shù)據(jù)存儲(chǔ)器寫(xiě)回低級(jí)存儲(chǔ)器的數(shù)據(jù), 并對(duì)相同地址的數(shù)據(jù)進(jìn)行合并。將所述高層次數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)寫(xiě)回到低級(jí)存儲(chǔ)器時(shí)可以有寫(xiě)回(WriteBack) 和寫(xiě)通過(guò)(Write Through)兩種方法。有益效果本發(fā)明公開(kāi)了全新的方法與裝置從根本上解決背景技術(shù)中提出的困難。與現(xiàn)行緩存結(jié)構(gòu)缺失后開(kāi)始從低速存儲(chǔ)取內(nèi)容(fill after miss)的原則全然不 同的是本發(fā)明在處理器核執(zhí)行到某段指令前或使用某段數(shù)據(jù)前已從下級(jí)的低速存儲(chǔ)器中 取得或已開(kāi)始將該指令或數(shù)據(jù)填充到高層次指令存儲(chǔ)器或高層次數(shù)據(jù)存儲(chǔ)器。在典型程序 執(zhí)行情況下,啟動(dòng)缺失延遲可被完全隱藏(hide)。個(gè)別不能完全隱藏的情形(如使用保留 表時(shí),程序中出現(xiàn)兩個(gè)背靠背的條件分支轉(zhuǎn)移),其啟動(dòng)缺失延遲也較現(xiàn)行結(jié)構(gòu)緩存要小。 本發(fā)明所述緩存系統(tǒng)集成了預(yù)取機(jī)制,避免了傳統(tǒng)緩存匹配標(biāo)簽的過(guò)程。在組沖突導(dǎo)致的 缺失上,因本發(fā)明是全相聯(lián)(fully associative)基本不會(huì)有這方面的缺失。在容量限制 引致的缺失方面因本發(fā)明的替換算法更細(xì)致主動(dòng),也因?yàn)槿嗦?lián)結(jié)構(gòu)使得存儲(chǔ)器分配更靈 活合理,使得同樣容量的存儲(chǔ)器較現(xiàn)行結(jié)構(gòu)緩存的缺失率要低。另外,采用本發(fā)明所述緩存 系統(tǒng)可以同時(shí)對(duì)多個(gè)層次的緩存結(jié)構(gòu)進(jìn)行所需指令/數(shù)據(jù)查找,與傳統(tǒng)緩存相比,減少了 多層次緩存缺失導(dǎo)致的累積延遲。由于避免了位于緩存訪問(wèn)關(guān)鍵路徑上的標(biāo)簽比較操作, 本發(fā)明所述緩存系統(tǒng)還可以在高時(shí)鐘頻率下工作。綜上所述,基于本發(fā)明所述方法和裝置 的緩存在單線程或多線程應(yīng)用中都具有逼近100%的命中率。功耗方面本緩存任何時(shí)候只 讀寫(xiě)一個(gè)存儲(chǔ)塊(memory block),且因?yàn)椴贿M(jìn)行標(biāo)簽匹配操作,并具有很低的緩存缺失率, 較現(xiàn)行結(jié)構(gòu)功耗有顯著節(jié)省。
雖然該發(fā)明可以以多種形式的修改和替換來(lái)擴(kuò)展,說(shuō)明書(shū)中也列出了一些具體的 實(shí)施圖例并進(jìn)行詳細(xì)闡述。應(yīng)當(dāng)理解的是,發(fā)明者的出發(fā)點(diǎn)不是將該發(fā)明限于所闡述的特 定實(shí)施例,正相反,發(fā)明者的出發(fā)點(diǎn)在于保護(hù)所有基于由本權(quán)利聲明定義的精神或范圍內(nèi) 進(jìn)行的改進(jìn)、等效轉(zhuǎn)換和修改。圖1是本發(fā)明所述的低缺失率、低缺失懲罰的緩存裝置基本結(jié)構(gòu)的實(shí)施例。圖2 (a)是根據(jù)本發(fā)明所述方法實(shí)現(xiàn)樹(shù)狀結(jié)構(gòu)的實(shí)施例。
圖2(b)是本發(fā)明所述低缺失率、低缺失懲罰的緩存方法的實(shí)施例。圖3(a)是根據(jù)本發(fā)明所述方法的一種最基本的實(shí)施例。圖3(b)是根據(jù)本發(fā)明所述方法的更新軌跡頭的實(shí)施例。圖4(a)是根據(jù)本發(fā)明所述方法建立新軌道的一個(gè)實(shí)施例。圖4(b)是根據(jù)本發(fā)明所述方法建立新軌道的另一個(gè)實(shí)施例。圖5是根據(jù)本發(fā)明所述方法的一種改進(jìn)的實(shí)施例。圖6是根據(jù)本發(fā)明所述方法的另一種改進(jìn)的實(shí)施例。圖7是根據(jù)本發(fā)明所述方法的一種優(yōu)選實(shí)施例。圖8是根據(jù)本發(fā)明所述方法在分配器中用同一個(gè)表記錄多個(gè)存儲(chǔ)層次中地址信 息的實(shí)施例。圖9是本發(fā)明所述分配器中主動(dòng)表的實(shí)施例。圖10是本發(fā)明所述的不含保留表和交換器的低缺失率、低缺失懲罰的緩存裝置 填充指令的實(shí)施例。圖11是本發(fā)明所述交換器的實(shí)施例。圖12是本發(fā)明所述的含有保留表和交換器的低缺失率、低缺失懲罰的緩存裝置 填充指令的實(shí)施例。圖13是本發(fā)明所述的支持多線程的低缺失率、低缺失懲罰的緩存裝置填充指令 的實(shí)施例。圖14是本發(fā)明所述的低缺失率、低缺失懲罰的緩存裝置填充數(shù)據(jù)的實(shí)施例。圖15是基于低缺失率、低缺失懲罰的緩存的存儲(chǔ)層次結(jié)構(gòu)實(shí)施例。
具體實(shí)施例方式圖1是本發(fā)明所述的低缺失率、低缺失懲罰的緩存裝置基本結(jié)構(gòu)的實(shí)施例。為便 于說(shuō)明,本實(shí)施例僅對(duì)用于讀取指令的裝置進(jìn)行描述,用于讀取數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)的裝置與 之類(lèi)似。在本實(shí)施例中,低級(jí)存儲(chǔ)器(122)、高層次指令存儲(chǔ)器(124)和處理器核(125)為 普通體系結(jié)構(gòu)處理器中都有的模塊。循跡引擎(tracking engine) (320)根據(jù)填充/生成 器(123)和處理器核(125)發(fā)送來(lái)的信息,產(chǎn)生需要填充的指令的地址并發(fā)送到填充/生 成器(123),填充/生成器(123)根據(jù)該地址,從低級(jí)存儲(chǔ)器(122)中取得對(duì)應(yīng)的指令塊填 充到高層次指令存儲(chǔ)器(124)中。循跡引擎(320)還產(chǎn)生對(duì)高層次指令存儲(chǔ)器(124)的塊 號(hào)(152)。塊號(hào)(152)與處理器核(125)產(chǎn)生的塊內(nèi)偏移量(155) —同構(gòu)成指令尋址地址, 從高層次指令存儲(chǔ)器(124)中取得對(duì)應(yīng)的指令送往處理器核(125)。根據(jù)本發(fā)明所述技術(shù)方案,任何指令在被處理器核(125)執(zhí)行前,已經(jīng)通過(guò)總線 (140)從低級(jí)存儲(chǔ)器(122)中被讀取到高層次指令存儲(chǔ)器(124)中。生成器(130)對(duì)從總 線(140)讀取來(lái)的指令進(jìn)行分析,并提取、生成相關(guān)信息通過(guò)總線(141)發(fā)送到循跡引擎 (320)。所述相關(guān)信息包括該指令是否在分支指令、分支指令的目標(biāo)地址等。循跡引擎(320) 根據(jù)所述信息決定是否需要對(duì)高層次指令存儲(chǔ)器(124)中填充指令塊。若需要填充,則將 填充地址通過(guò)總線(144)發(fā)送到填充引擎(132),填充引擎(132)根據(jù)該填充地址通過(guò)總 線(154)向低級(jí)存儲(chǔ)器(122)取指令塊。當(dāng)生成器(130)從總線(140)取得所需指令塊 時(shí),重復(fù)上述分析、判斷和取指過(guò)程,同時(shí)將取來(lái)的指令塊寫(xiě)入高層次指令存儲(chǔ)器(124)被高層次指令存儲(chǔ)器寫(xiě)地址所指示的位置。所述高層次指令存儲(chǔ)器寫(xiě)地址由循跡引擎(320) 產(chǎn)生的寫(xiě)地址高位和填充引擎(132)產(chǎn)生的寫(xiě)地址低位組成,其中寫(xiě)地址高位和低位分別 通過(guò)總線(153)和總線(321)送到高層次指令存儲(chǔ)器(124)。根據(jù)本發(fā)明所述技術(shù)方案,并不使用處理器核(125)中的程序計(jì)數(shù)器(PC)在高 層次指令存儲(chǔ)器(124)取指令,而是用從總線(152)來(lái)的由循跡引擎(320)產(chǎn)生的地址 高位和從總線(155)來(lái)的程序計(jì)數(shù)器的低位組成的地址在高層次指令存儲(chǔ)器(124)中取 指。循跡引擎(320)中保存了即將執(zhí)行或可能執(zhí)行的指令,根據(jù)處理器核(125)通過(guò)總線 (322)送來(lái)的執(zhí)行情況,即可知道接下來(lái)執(zhí)行哪條指令(比如分支目標(biāo)指令或順序執(zhí)行的 指令)。由于高層次指令存儲(chǔ)器(124)中的指令是按塊放置的,因此循跡引擎(320)產(chǎn)生的 地址高位即為包含所需指令的指令塊的塊地址,程序計(jì)數(shù)器的低位即是所需指令在所述指 令塊中的塊內(nèi)偏移量。在本發(fā)明中,向高層次指令存儲(chǔ)器(124)中填充指令塊的過(guò)程和處 理器核取指的過(guò)程是相對(duì)獨(dú)立的,可以在處理器核(125)取指時(shí),預(yù)先將后續(xù)可能執(zhí)行的 指令塊填充到高層次指令存儲(chǔ)器(124)中,從而保證處理器核(125)后續(xù)要取的指令都事 先存在于高層次指令存儲(chǔ)器(124)中,達(dá)到始終命中的目的。根據(jù)本發(fā)明所述設(shè)計(jì)方案,可以將同一程序中的分支指令及由分支指令分割出的 不同程序段用節(jié)點(diǎn)、樹(shù)干、樹(shù)支表示,從而形成樹(shù)狀結(jié)構(gòu),如圖2(a)所示。在本實(shí)施例中,分 支指令(310、312、314、316)即為樹(shù)狀結(jié)構(gòu)的節(jié)點(diǎn)。分支指令(310)目標(biāo)地址對(duì)應(yīng)的指令為 指令(311)、分支指令(312)目標(biāo)地址對(duì)應(yīng)的指令為指令(313)、分支指令(314)目標(biāo)地址 對(duì)應(yīng)的指令為指令(315)、分支指令(316)目標(biāo)地址對(duì)應(yīng)的指令為指令(317)。在程序執(zhí)行過(guò)程中,根據(jù)是否發(fā)生分支轉(zhuǎn)移,可以形成新的樹(shù)干和樹(shù)支。對(duì)于分支 指令(310)表示的節(jié)點(diǎn),程序段(301)和程序段(302)是樹(shù)干,程序段(304)是樹(shù)支。若 分支轉(zhuǎn)移未發(fā)生,程序繼續(xù)運(yùn)行,則對(duì)于分支指令(314)表示的節(jié)點(diǎn),程序段(302)和程序 段(303)是樹(shù)干,程序段(307)是樹(shù)支。若分支轉(zhuǎn)移發(fā)生,則對(duì)于分支指令(312)表示的節(jié) 點(diǎn),程序段(304)和程序段(305)是樹(shù)干,程序段(306)是樹(shù)支。依次類(lèi)推,對(duì)于分支指令 (316)表示的節(jié)點(diǎn),程序段(307)和程序段(308)是樹(shù)干,程序段(309)是樹(shù)支。圖2(b)是本發(fā)明所述低缺失率、低缺失懲罰的緩存方法的實(shí)施例。圖中直線表 示程序,曲線表示轉(zhuǎn)移路徑,粗點(diǎn)表示分支指令,虛線表示對(duì)應(yīng)程序按定長(zhǎng)指令段劃分的情 況。程序從程序段(30)開(kāi)始執(zhí)行,直到條件分支指令(31),若分支轉(zhuǎn)移條件不成立,則執(zhí) 行程序段(33),直到無(wú)條件分支指令(36),沿轉(zhuǎn)移路徑(34)途徑無(wú)條件分支轉(zhuǎn)移至程序 段(37);若在執(zhí)行條件分支指令(31)時(shí)分支轉(zhuǎn)移條件成立,則沿轉(zhuǎn)移路徑(32)到程序段 (35),之后再到程序段(37)。在執(zhí)行完程序段(37)及程序段(38)后,執(zhí)行用于循環(huán)的條件 分支指令(39),若循環(huán)條件成立,則沿轉(zhuǎn)移路徑(40)再次執(zhí)行程序段(38),重復(fù)多次執(zhí)行 38段直至循環(huán)條件不成立,再執(zhí)行程序段(41)。指令段(11)對(duì)應(yīng)程序段(30)的全部和程 序段(33)的一部分;指令段(12)對(duì)應(yīng)程序段(33)的另一部分;指令段(13)對(duì)應(yīng)程序段 (35)的一部分;指令段(14)對(duì)應(yīng)程序段(35)的另一部分和程序段(37)的一部分;指令段 (15)對(duì)應(yīng)程序段(37)的另一部分;指令段(16)對(duì)應(yīng)程序段(38)的一部分;指令段(17) 對(duì)應(yīng)程序段(38)的另一部分和程序段(41)的一部分。為便于描述,在本實(shí)施例中假設(shè)任意分支指令間的其他指令很多,對(duì)指令段的填 充可以不采用交替填充的方法,都是在一個(gè)指令段填充完成后再將下一個(gè)待填充指令段填
27充到高層次指令存儲(chǔ)器中。在本實(shí)施例中,地址樹(shù)的深度為1,即對(duì)一層分支指令進(jìn)行填充。根據(jù)本發(fā)明技術(shù) 方案,首先從程序初始點(diǎn)開(kāi)始將指令段(11)填充到高層次指令存儲(chǔ)器中,并掃描正在填充 的指令。在本實(shí)施例中,一次掃描兩條指令,執(zhí)行一條指令,掃描到的指令領(lǐng)先于執(zhí)行到的 指令。當(dāng)掃描到分支指令(31)時(shí),由于所述指令是第一個(gè)分支指令,因此需要將所述指令 目標(biāo)地址對(duì)應(yīng)的指令段(13)填充到高層次指令存儲(chǔ)器中。又因分支指令(31)對(duì)應(yīng)順序執(zhí) 行的下一條指令已經(jīng)包含在指令段(11)中,所以不需要額外填充操作。在本實(shí)施例中,執(zhí)行到分支指令(31)時(shí),分支轉(zhuǎn)移條件不成立,繼續(xù)執(zhí)行指令段 (11)。根據(jù)本發(fā)明技術(shù)方案,在指令段(11)中的指令被執(zhí)行完之前就已經(jīng)可以知道最后一 條指令的下一指令地址,并將指令段(12)填充到高層次指令存儲(chǔ)器中。在對(duì)指令段(12) 中正在填充的指令掃描時(shí),可以發(fā)現(xiàn)指令段(12)最后一個(gè)指令是同時(shí)也是第一個(gè)分支指 令(36),因此不但要將分支指令(36)目標(biāo)地址對(duì)應(yīng)的指令段(14)填充到高層次指令存儲(chǔ) 器中,還要將分支指令(36)的下一指令所在的指令段(13)填充到高層次指令存儲(chǔ)器中。在本實(shí)施例中,執(zhí)行到分支指令(36)時(shí),分支轉(zhuǎn)移條件不成立,執(zhí)行指令段(13)。 在指令段(13)中的指令被執(zhí)行完之前就已經(jīng)可以知道最后一條指令對(duì)應(yīng)的下一指令在指 令段(14)中。由于指令段(14)已被填充,因此不需要額外填充操作。同理,再將指令段 (15、16、17)填充到高層次指令存儲(chǔ)器中并執(zhí)行。當(dāng)掃描到指令段(17)中第一個(gè)分支指令(39)時(shí),目標(biāo)地址和順序執(zhí)行下一指令 地址對(duì)應(yīng)的指令段都已經(jīng)被填充了,因此只要分支轉(zhuǎn)移條件成立,就可以不再填充,反復(fù)執(zhí) 行循環(huán)程序(38),直到分支轉(zhuǎn)移條件不成立,掃描到指令段(17)的最后一條指令,再將之 后的指令填充到高層次指令存儲(chǔ)器中,繼續(xù)類(lèi)似的操作。圖3(a)是根據(jù)本發(fā)明所述方法的一種最基本的實(shí)施例。圖中處理器核(47)指令 地址字長(zhǎng)(M+Z)位。軌道表(45)有2"行,即能夠建立2"個(gè)軌道。高層次指令存儲(chǔ)器(46) 中有2M個(gè)存儲(chǔ)單元塊,每個(gè)存儲(chǔ)單元塊能存儲(chǔ)22個(gè)字節(jié),即高層次指令存儲(chǔ)器(46)可以存 放所有的指令。軌道表(45)中任意軌道的每個(gè)表項(xiàng),即軌跡點(diǎn)的內(nèi)容在格式上由三部分組成指 令類(lèi)型(57)、第一維地址(58)、第二維地址(59)。其中第一維地址(58)有M位長(zhǎng),第二維 地址(59)有Z位長(zhǎng)。當(dāng)根據(jù)現(xiàn)有軌道上的分支點(diǎn)建立新軌道時(shí),可以將新建軌道按順序放置在軌道表 中下一個(gè)空閑位置上,并將所述新建軌道的行號(hào)保存在所述分支點(diǎn)對(duì)應(yīng)軌跡點(diǎn)的第一維地 址中,在將所述分支點(diǎn)對(duì)應(yīng)目標(biāo)指令在所述新建軌道上的相對(duì)位置保存在所述分支點(diǎn)對(duì)應(yīng) 軌跡點(diǎn)的第二維地址中。當(dāng)處理器核(47)執(zhí)行到所述分支點(diǎn)對(duì)應(yīng)的分支指令時(shí),總線(55)上的(M+Z)位 地址指向所述分支點(diǎn)對(duì)應(yīng)軌跡點(diǎn)的位置,其中第一維地址(56)長(zhǎng)M位,對(duì)應(yīng)軌道表(45)的 第一維;第二維地址(53)長(zhǎng)Z位,對(duì)應(yīng)軌道表(45)的第二維。根據(jù)第一維地址(56)和第 二維地址(53)可以訪問(wèn)到所述分支點(diǎn)對(duì)應(yīng)軌跡點(diǎn),并通過(guò)總線(51)讀出所述軌跡點(diǎn)中包 含的(M+Z)位的目標(biāo)軌跡點(diǎn)位置信息。此時(shí),如果所述分支指令的分支轉(zhuǎn)移條件不成立,那么選擇器(49)選擇原第二維地址(53)經(jīng)增一邏輯(48)后得到的新第二維地址(54)。并根據(jù)處理器核(47)給出的分 支轉(zhuǎn)移不成功信號(hào)(60),寄存器(50)保持原第一維地址不變,由增一邏輯(48)不斷增一直 至第二維地址指向當(dāng)前軌道上原軌跡點(diǎn)位置后的第一個(gè)分支指令對(duì)應(yīng)的軌跡點(diǎn)位置,從而 得到新的軌跡頭地址并保存在寄存器(50)中后由總線(55)輸出。如果所述分支指令的分 支轉(zhuǎn)移條件成立,那么選擇器(49)總線(51)輸出的軌跡點(diǎn)位置信息,若所述第二維地址指 向的當(dāng)前軌道上的軌跡點(diǎn)不是分支點(diǎn),則增一邏輯(48)不斷增一直至第二維地址指向總 線(51)輸出的軌跡點(diǎn)位置及其后軌跡點(diǎn)中的第一個(gè)分支指令對(duì)應(yīng)的軌跡點(diǎn)位置,從而得 到新的軌跡頭地址并保存在寄存器(50)中后由總線(55)輸出。在本實(shí)施例中,還可以額外增加一個(gè)第二軌跡頭和兩個(gè)第二預(yù)測(cè)軌跡頭,根據(jù)本 發(fā)明技術(shù)方案,建立更深層次的軌道并填充指令段,從而更好地掩蓋從低層次存儲(chǔ)器取指 的時(shí)延。圖3(b)是根據(jù)本發(fā)明所述方法的更新軌跡頭的實(shí)施例。本實(shí)施例說(shuō)明了送往軌 道表(45)和高層次指令存儲(chǔ)器(46)用于尋址的軌跡頭中的塊地址(56)的多個(gè)來(lái)源。在 本實(shí)施例中,寄存器(50)和增一邏輯(48)的功能與圖2中寄存器和增一邏輯的功能相同。 多路選擇器(65)的輸入來(lái)源有四個(gè)軌道表根據(jù)對(duì)當(dāng)前軌跡點(diǎn)的訪問(wèn)輸出的當(dāng)前軌跡點(diǎn) 中包含的目標(biāo)軌跡點(diǎn)位置(51),前一軌跡頭位置中第一維地址不變且第二維地址增一產(chǎn)生 的軌跡點(diǎn)位置(54),從棧(61)中出棧的軌跡點(diǎn)位置(64),以及由異常處理程序地址寄存器 (62)給出的異常處理程序入口對(duì)應(yīng)的位置。根據(jù)本發(fā)明所述技術(shù)方案,存儲(chǔ)在異常處理程 序地址寄存器(62)中的是異常處理程序(exception handler)的入口地址對(duì)應(yīng)的軌跡點(diǎn) 位置,存儲(chǔ)在棧(61)中的是函數(shù)調(diào)用(call)或返回(return)時(shí)的程序地址對(duì)應(yīng)的軌跡點(diǎn) 位置。多路選擇器(65)根據(jù)當(dāng)前指令及運(yùn)行狀態(tài),選擇相應(yīng)來(lái)源的位置信息得到新軌跡點(diǎn) 位置。當(dāng)處理器核發(fā)生異常(exception)時(shí),多路選擇器(65)受處理器核送來(lái)的信號(hào)控 制,選擇異常處理程序地址寄存器(62)送來(lái)的軌跡點(diǎn)位置作為輸出;當(dāng)處理器核進(jìn)行函數(shù) 調(diào)用或返回時(shí),多路選擇器(65)受處理器核送來(lái)的信號(hào)控制,選擇棧(61)送來(lái)的軌跡點(diǎn)位 置作為輸出;當(dāng)多路選擇器(65)受處理器核送來(lái)的信號(hào)控制,選擇軌道表(126)送來(lái)的軌 跡點(diǎn)位置時(shí),多路選擇器(65)的輸出即為從循跡器(170)外部輸入的新的軌跡點(diǎn)位置;當(dāng) 多路選擇器(65)受信號(hào)控制選擇增一邏輯(48)的輸出時(shí),則對(duì)應(yīng)前一軌跡頭位置中第一 維地址不變,第二維地址加一得到新軌跡點(diǎn)位置。若所述新軌跡點(diǎn)位置中第二維地址指向 的所在軌道上的軌跡點(diǎn)不是分支點(diǎn),則增一邏輯(48)不斷增一直至第二維地址指向所述 新軌跡點(diǎn)位置及其后軌跡點(diǎn)中的第一個(gè)分支指令對(duì)應(yīng)的軌跡點(diǎn)位置,從而更新軌跡頭。在本實(shí)施例中,棧(61)由復(fù)數(shù)個(gè)較小的棧組成,以支持多線程。此時(shí),需要線程標(biāo) 志(63)用來(lái)表示當(dāng)前運(yùn)行的線程,即線程標(biāo)志(63)指向的較小的棧為當(dāng)前線程使用的棧。圖4(a)是根據(jù)本發(fā)明所述方法建立新軌道的一個(gè)實(shí)施例。在本實(shí)施例中,對(duì)現(xiàn)有 軌道上的所有分支點(diǎn)都建立新的軌道。圖中最初已建立軌道(66)。軌道(66)上共有3個(gè) 分支點(diǎn)。當(dāng)審查到第一個(gè)分支點(diǎn)(67)時(shí),在當(dāng)前軌道(66)的下一可用位置建立新的軌道 (70),并將軌道(70)的軌道號(hào)存儲(chǔ)到第一個(gè)分支點(diǎn)(67)對(duì)應(yīng)軌跡點(diǎn)包含的第一維地址中。 在審查到第二個(gè)分支點(diǎn)(68)時(shí),在當(dāng)前軌道(66)的下一可用位置建立新的軌道(71),并將 軌道(71)的軌道號(hào)存儲(chǔ)到第二個(gè)分支點(diǎn)(68)對(duì)應(yīng)軌跡點(diǎn)包含的第一維地址中。用同樣的 方法可以建立軌道(72),并更新第三個(gè)分支點(diǎn)(69)對(duì)應(yīng)軌跡點(diǎn)包含的第一維地址值。
在本實(shí)施例中,軌道表的容量非常大,足夠容納每個(gè)塊地址對(duì)應(yīng)的軌道,因此可以 采用在最大已建軌道號(hào)上增一的方法得到新建軌道的位置。圖4(b)是根據(jù)本發(fā)明所述方法建立新軌道的另一個(gè)實(shí)施例。在本實(shí)施例中,并不 對(duì)現(xiàn)有軌道上的所有分支點(diǎn)都建立新的軌道,而是只對(duì)已經(jīng)確定要執(zhí)行的指令段中的分支 點(diǎn)建立對(duì)應(yīng)軌道,且只對(duì)深度為1層的分支點(diǎn)建立軌道。在本實(shí)施例中,軌道(66)上共有3個(gè)分支點(diǎn)。當(dāng)審查到第一個(gè)分支點(diǎn)(67)時(shí),將 分支點(diǎn)(67)的目標(biāo)地址存儲(chǔ)到保留表(76)的表項(xiàng)(73)中,并將表項(xiàng)(73)的表項(xiàng)號(hào)存儲(chǔ) 到第一個(gè)分支點(diǎn)(67)對(duì)應(yīng)軌跡點(diǎn)的內(nèi)容中。用同樣的方法也將第二、三個(gè)分支點(diǎn)(68、69) 的目標(biāo)地址存儲(chǔ)到保留表(76)中。當(dāng)包含第一個(gè)分支點(diǎn)(67)的指令段確定要執(zhí)行時(shí),將保留表(76)表項(xiàng)(73)中的 分支點(diǎn)(67)的目標(biāo)地址轉(zhuǎn)移到主動(dòng)表(77)的可用表項(xiàng)(74)中。由于主動(dòng)表(77)的表項(xiàng) 數(shù)目等于軌道表中軌道的數(shù)目,且每個(gè)表項(xiàng)與軌道表中的軌道一一對(duì)應(yīng),因此根據(jù)此對(duì)應(yīng) 關(guān)系(75),分支點(diǎn)(67)目標(biāo)地址對(duì)應(yīng)的軌道(70)建立在表項(xiàng)(74)對(duì)應(yīng)的軌道表中的位置。由于本實(shí)施例只對(duì)1層分支點(diǎn)建立軌道,因此當(dāng)分支點(diǎn)(67)還沒(méi)有被執(zhí)行時(shí),分 支點(diǎn)(68、69)依然在保留表中,并未建立對(duì)應(yīng)目標(biāo)地址的軌道。圖5是根據(jù)本發(fā)明所述方法的一種改進(jìn)的實(shí)施例。本實(shí)施例是對(duì)圖2實(shí)施例的一 種改進(jìn),能夠用較小的高層次指令存儲(chǔ)器(78)實(shí)現(xiàn)本發(fā)明所述方法。圖5與圖2的區(qū)別在于,第一維地址(56)只直接用于軌道表(45)的行尋址,對(duì)高 層次指令存儲(chǔ)器(78)中存儲(chǔ)單元塊的尋址的地址(80)是由第一維地址(56)經(jīng)映射模塊 (79)映射后得到的。由于處理器核(47)不可能用到整個(gè)能訪問(wèn)到的地址空間對(duì)應(yīng)的指令, 采用映射的方法就可以不需要對(duì)每個(gè)塊地址都準(zhǔn)備一個(gè)存儲(chǔ)空間,從而利用較少的存儲(chǔ)單 元塊組成的較小的高層次指令存儲(chǔ)器,實(shí)現(xiàn)對(duì)指令段的填充。圖6是根據(jù)本發(fā)明所述方法的另一種改進(jìn)的實(shí)施例。本實(shí)施例是對(duì)圖5實(shí)施例的 一種再改進(jìn),能夠用較小的軌道表(81)實(shí)現(xiàn)本發(fā)明所述方法。圖6與圖5的區(qū)別在于,軌道表(81)中的行和高層次指令存儲(chǔ)器(78)中存儲(chǔ)單 元塊的都根據(jù)第一維地址(56)經(jīng)映射模塊(82)映射后得到的地址(80)尋址。在本實(shí)施 例中,軌道表中每個(gè)軌跡點(diǎn)內(nèi)部存儲(chǔ)的依然是M位的第一維地址和Z位第二維地址,軌道表 的行數(shù)和存儲(chǔ)單元塊的數(shù)目都少于處理器核(47)能訪問(wèn)的塊地址的數(shù)目。由于處理器核 (47)不可能用到整個(gè)能訪問(wèn)到的地址空間對(duì)應(yīng)的指令,采用本實(shí)施例中的映射方法,在不 影響功能的情況下,不但能減少存儲(chǔ)單元塊的數(shù)目,還能減少軌道的數(shù)目,同時(shí)減小了高層 次指令存儲(chǔ)器和軌道表的容量。圖7是根據(jù)本發(fā)明所述方法的一種優(yōu)選實(shí)施例。本實(shí)施例是對(duì)圖6實(shí)施例的進(jìn)一 步改進(jìn),不但減小了軌道表(81)和高層次指令存儲(chǔ)器(78)的容量,還縮短了第一維地址的 長(zhǎng)度,便于硬件實(shí)現(xiàn)。圖7與圖6的區(qū)別在于,映射模塊(83)位于最外部,在建立軌道時(shí)就將M位長(zhǎng)的 地址映射為較短的N位長(zhǎng)的第一維地址,之后存儲(chǔ)到軌跡點(diǎn)中的地址信息、以及用于尋址 的第一維地址都是N位長(zhǎng)。較短的第一維地址有利于快速地根據(jù)前一軌跡頭位置計(jì)算出當(dāng) 前軌跡頭位置,從而提高緩存的整體性能。
圖8是根據(jù)本發(fā)明所述方法在分配器中用同一個(gè)表記錄多個(gè)存儲(chǔ)層次中地址信 息的實(shí)施例。本實(shí)施例以三層存儲(chǔ)層次為例,分別為三級(jí),二級(jí)與一級(jí)。為了便于說(shuō)明,本 實(shí)施例就指令的填充加以說(shuō)明,數(shù)據(jù)的填充在原理上類(lèi)似。此外假設(shè)在三級(jí)存儲(chǔ)器中能找 到所有需要的指令或數(shù)據(jù)。對(duì)于尚不在三級(jí)存儲(chǔ)器中的指令或數(shù)據(jù),可以利用本發(fā)明所述 的方法提前從更低的存儲(chǔ)層次填充到三級(jí)存儲(chǔ)器中。此外,在本實(shí)施例中,二級(jí)存儲(chǔ)器的容 量是一級(jí)存儲(chǔ)器容量的兩倍,三級(jí)存儲(chǔ)器容量是二級(jí)存儲(chǔ)器容量的兩倍。一級(jí)存儲(chǔ)器作為 高層次存儲(chǔ)器直接連接至CPU核。對(duì)于更多存儲(chǔ)層次的情況,也可用應(yīng)用本發(fā)明所述方法。此外,三級(jí)存儲(chǔ)器包含了二級(jí)存儲(chǔ)器和一級(jí)存儲(chǔ)器中的所有內(nèi)容,但二級(jí)存儲(chǔ)器 不一定包含一級(jí)存儲(chǔ)器中的內(nèi)容。軌道表中的每個(gè)軌跡點(diǎn)可以用圖8中所示的兩種格式之 一表示。其中,一種格式包括兩個(gè)部分,從高位到低位分別是一級(jí)存儲(chǔ)器存儲(chǔ)塊地址和塊內(nèi) 偏移量;另一種格式包括三個(gè)部分,分別是三級(jí)存儲(chǔ)器存儲(chǔ)塊號(hào)、索引和塊內(nèi)偏移量。在本 實(shí)施例中,二級(jí)存儲(chǔ)器存儲(chǔ)單元塊(block or line)的大小是一級(jí)存儲(chǔ)器存儲(chǔ)單元塊的2 倍(含有兩個(gè)一級(jí)存儲(chǔ)塊),三級(jí)存儲(chǔ)器存儲(chǔ)單元塊的大小也是二級(jí)存儲(chǔ)器存儲(chǔ)單元塊的2 倍(含有四個(gè)一級(jí)存儲(chǔ)單元塊)。在本實(shí)施例中,分配器在物理上可以由一個(gè)內(nèi)容尋址存儲(chǔ)器CAM(87)和一個(gè)隨機(jī) 訪問(wèn)存儲(chǔ)器RAM(98)構(gòu)成。所述內(nèi)容尋址存儲(chǔ)器CAM (87)有一列(column)表項(xiàng)(entry), 每一個(gè)表項(xiàng)與一個(gè)三級(jí)存儲(chǔ)塊號(hào)碼BNX3對(duì)應(yīng)也與一個(gè)三級(jí)存儲(chǔ)器存儲(chǔ)塊相對(duì)應(yīng),表項(xiàng)中 存有該存儲(chǔ)塊所含內(nèi)容的地址(三級(jí)塊地址)。隨機(jī)訪問(wèn)存儲(chǔ)器(98)在邏輯上分為6列,其中兩列(88)存儲(chǔ)與該行所存三級(jí)存 儲(chǔ)塊對(duì)應(yīng)的兩個(gè)二級(jí)存儲(chǔ)塊號(hào)及對(duì)應(yīng)有效位,另外四列(89)存儲(chǔ)該行所存三級(jí)存儲(chǔ)塊對(duì) 應(yīng)的四個(gè)一級(jí)軌道號(hào)BNXl及對(duì)應(yīng)有效位。通過(guò)多路選擇器(93)可以根據(jù)索引位(97)將 所述三級(jí)軌跡對(duì)應(yīng)的四個(gè)一級(jí)軌跡的軌道號(hào)及有效位讀出。通過(guò)多路選擇器(92)可以根 據(jù)索引位(97)中的高位LSBl (90)將所述三級(jí)軌跡對(duì)應(yīng)的兩個(gè)二級(jí)軌跡的軌道號(hào)及有效位 讀出。此表可以由兩種方式訪問(wèn),一種是利用存儲(chǔ)地址(如三級(jí)存儲(chǔ)塊號(hào))與存儲(chǔ)在 內(nèi)容尋址存儲(chǔ)器(87)中的地址做比較,地址匹配的行被選中,該行中隨機(jī)訪問(wèn)存儲(chǔ)器(98) 的內(nèi)容被讀出;另一種是用三級(jí)存儲(chǔ)塊號(hào)TBN的第一地址BNX3(94)直接到內(nèi)容尋址存儲(chǔ)器 (87)和/或隨機(jī)訪問(wèn)存儲(chǔ)器(98)中直接尋址,內(nèi)容尋址存儲(chǔ)器(87)和/或隨機(jī)訪問(wèn)存儲(chǔ) 器(98)中選中的行的內(nèi)容被讀出。如之前例子所述,在將指令段從主存儲(chǔ)器或任何外部存儲(chǔ)器填充到這所有三級(jí)的 存儲(chǔ)器中時(shí),掃描、檢測(cè)所述被填充的指令。當(dāng)檢測(cè)到分支指令時(shí),所述分支指令的分支目 標(biāo)地址被用來(lái)與內(nèi)容尋址存儲(chǔ)器(87)中存的三級(jí)存儲(chǔ)器塊地址作比較。如果沒(méi)有找到匹配,這意味著在三級(jí)存儲(chǔ)器中還未包含所述指令段。這時(shí)根據(jù)替 換策略指定三級(jí)存儲(chǔ)器中一個(gè)三級(jí)存儲(chǔ)塊,把分支目標(biāo)所在的指令段填充到該存儲(chǔ)塊。同 時(shí),將所述三級(jí)存儲(chǔ)器中存儲(chǔ)塊號(hào)信息作為軌跡點(diǎn)內(nèi)容填入在一級(jí)軌道表中相應(yīng)軌跡的相 應(yīng)表項(xiàng),即把該存儲(chǔ)塊號(hào)作為軌跡點(diǎn)內(nèi)容中的第一地址BNX3 (94)、把地址中的索引位作為 軌跡點(diǎn)內(nèi)容中的索引號(hào)(97),把地址中的偏移量作為軌跡點(diǎn)內(nèi)容中的偏移量(BNY) (96)。 此外,所述索引號(hào)(97)包括2位,其中的高位LSBl (90)用于區(qū)分所述三級(jí)存儲(chǔ)塊對(duì)應(yīng)的兩 個(gè)二級(jí)存儲(chǔ)塊,高位和低位LSBO (97) —起用于區(qū)分所述三級(jí)存儲(chǔ)塊對(duì)應(yīng)的四個(gè)一級(jí)存儲(chǔ)塊。另一方面,如果找到匹配,則表明至少在三級(jí)存儲(chǔ)器中存儲(chǔ)有所需的指令塊,這時(shí) 將匹配行的三級(jí)存儲(chǔ)塊號(hào)(BNX3),與地址中的索引號(hào)、偏移量一同作為軌跡點(diǎn)內(nèi)容填入在 一級(jí)軌道表中相應(yīng)軌跡的相應(yīng)表項(xiàng)。在運(yùn)行過(guò)程中,當(dāng)上述軌跡點(diǎn)所在軌道表項(xiàng)被軌跡頭讀到時(shí),所述軌跡點(diǎn)表項(xiàng)中 的內(nèi)容是以三級(jí)存儲(chǔ)器TBN為目標(biāo)地址的。因此可以根據(jù)該TBN中的第一地址(94)到隨 機(jī)訪問(wèn)存儲(chǔ)器(98)進(jìn)行尋址。在本實(shí)施例中,使用第一地址(94)在隨機(jī)訪問(wèn)存儲(chǔ)器(98)中并行讀出對(duì)應(yīng)的二 級(jí)軌道號(hào)和有效位以及一級(jí)軌道號(hào)和有效位。根據(jù)TBN中索引位(97)(如LSB1、LSB0) 通過(guò)多路選擇器(93)在四個(gè)一級(jí)軌道號(hào)BN及有效位中選出一個(gè)一級(jí)軌道號(hào)BN及有效位 (99)。此外,根據(jù)索引位(97)中的高位(90)(如=LSBl)通過(guò)多路選擇器(92)在兩個(gè)二級(jí) 存儲(chǔ)塊的塊號(hào)及有效位中選出一個(gè)二級(jí)存儲(chǔ)塊的塊號(hào)及有效位(91)。如果選出的一級(jí)軌道號(hào)有效,說(shuō)明所述軌跡點(diǎn)對(duì)應(yīng)的目標(biāo)指令段已經(jīng)被填充到一 級(jí)存儲(chǔ)器中,直接將所述有效的一級(jí)軌道號(hào)BNXl通過(guò)總線(99)輸出替換軌道表中所述軌 跡點(diǎn)中的TBN第一維地址BNX3。同時(shí)拋棄相應(yīng)的索引,塊內(nèi)偏移(BNY)不變。這樣TBN成 為BN。要注意的是此例中僅憑BNX3 (94)并不能確定一個(gè)一級(jí)存儲(chǔ)塊(一個(gè)三級(jí)存儲(chǔ)塊含 有四個(gè)一級(jí)存儲(chǔ)塊),要由BNX3(94)與索引(97) —起才能確定具體是四個(gè)一級(jí)存儲(chǔ)塊中的 哪一個(gè)。而視情況需要,一級(jí)存儲(chǔ)器中可以含有同一個(gè)三級(jí)存儲(chǔ)塊中零個(gè)、一個(gè)、兩個(gè)、三個(gè) 或四個(gè)一級(jí)存儲(chǔ)塊,二級(jí)存儲(chǔ)器中可以含有同一個(gè)三級(jí)存儲(chǔ)塊中零個(gè)、一個(gè)、或兩個(gè)一級(jí)存 儲(chǔ)塊。如果選出的一級(jí)軌道號(hào)無(wú)效,說(shuō)明所述軌跡點(diǎn)對(duì)應(yīng)的目標(biāo)指令段尚未被填充到一 級(jí)存儲(chǔ)器中。如果選出的二級(jí)軌道號(hào)有效,意味著TBN代表的指令段已經(jīng)被填充到二級(jí)存 儲(chǔ)器中,對(duì)應(yīng)的有效二級(jí)軌道號(hào)通過(guò)總線(91)被送出。這時(shí)要把二級(jí)存儲(chǔ)器中與這個(gè)TBN 對(duì)應(yīng)的存儲(chǔ)塊填充到一級(jí)存儲(chǔ)器,同時(shí)把一級(jí)存儲(chǔ)塊的塊號(hào)BNXl (95)及有效位填到(89) 該TBN中BNX3(94)與索引(97)指示的存儲(chǔ)一級(jí)軌道號(hào)及有效位的位置,同時(shí)也要將軌道 表中該TBN替換成一級(jí)軌跡點(diǎn)格式(一級(jí)存儲(chǔ)器塊號(hào))BNXl (95)。所述一級(jí)軌跡點(diǎn)格式包 含第一地址(如BNX1)和第二地址(如偏移量或BNY)。如果選出的二級(jí)軌道號(hào)無(wú)效,意味著TBN代表的指令段在三級(jí)存儲(chǔ)器中但不在二 級(jí)與一級(jí)存儲(chǔ)器中。這時(shí)要把三級(jí)存儲(chǔ)器中這個(gè)TBN對(duì)應(yīng)的存儲(chǔ)塊填充到二級(jí)與一級(jí)存 儲(chǔ)器,同時(shí)把被填充的二級(jí)存儲(chǔ)塊的塊號(hào)及有效位填到(88)中該TBN中BNX3(94)與高位 LSBl (90)指示的位置,一級(jí)存儲(chǔ)塊的塊號(hào)BNXl及有效位填到(89)中該TBN中BNX3 (94)與 索引(97)指示的位置。此外,若存在三級(jí)存儲(chǔ)器到一級(jí)存儲(chǔ)器的旁路通道,則可以在將指令段從三級(jí)存 儲(chǔ)器填充到二級(jí)存儲(chǔ)器的同時(shí),將所述指令段填充到一級(jí)存儲(chǔ)器,并更新隨機(jī)訪問(wèn)存儲(chǔ)器 (98)中相應(yīng)位置及所述軌跡點(diǎn)中第一地址值,以達(dá)到更好的性能。圖9是本發(fā)明所述分配器中主動(dòng)表的實(shí)施例。在本實(shí)施例中主動(dòng)表的主體部分由 數(shù)據(jù)地址雙向?qū)ぶ菲?100)構(gòu)成。數(shù)據(jù)地址雙向?qū)ぶ菲?100)中包含多個(gè)表項(xiàng)(Entry) (101)。每個(gè)表項(xiàng)(101)包 含一個(gè)存儲(chǔ)器、標(biāo)志位V位(111)、標(biāo)志位A位(112)、標(biāo)志位U位(113)、一個(gè)比較器。所有比較結(jié)果被送入編碼器(102)產(chǎn)生匹配表項(xiàng)號(hào)??刂凭€(107)用于輸入讀寫(xiě)狀態(tài)控制信 號(hào)。所有V位(111)初始值均為零。所有A位(11 的值由外部Active信號(hào)通過(guò)A位信 號(hào)輸入線(119)寫(xiě)入。寫(xiě)地址指針(Write Pointer) (105)指向的表項(xiàng)地址由循環(huán)自增裝 置(Wrap Around Increment) (110)產(chǎn)生,循環(huán)自增裝置(110)的輸出最大值為最大表項(xiàng) 號(hào),輸出為此值時(shí)再自增一次則輸出為零,循環(huán)自增繼續(xù)。如果寫(xiě)地址指針(10 當(dāng)前指向 表項(xiàng)的V位和A位的值均為零,則表示該表項(xiàng)可以被新數(shù)據(jù)寫(xiě)入,待寫(xiě)入完成后,循環(huán)自增 裝置(110)的輸出值增加一,寫(xiě)地址指針(10 指向下一個(gè)表項(xiàng);如果這兩個(gè)值中至少有一 個(gè)為一,則表示該表項(xiàng)當(dāng)前不能被新數(shù)據(jù)寫(xiě)入,此時(shí)寫(xiě)入循環(huán)自增裝置(110)的輸出值增 加一,寫(xiě)地址指針(10 指向下一個(gè)表項(xiàng),繼續(xù)進(jìn)行判斷。寫(xiě)入時(shí),通過(guò)寫(xiě)入數(shù)據(jù)總線(104) 輸入的寫(xiě)入數(shù)據(jù)先與所有表項(xiàng)所存儲(chǔ)的數(shù)據(jù)進(jìn)行比較,如有匹配,則從匹配表項(xiàng)號(hào)輸出線 (109)輸出匹配表項(xiàng)號(hào),如沒(méi)有匹配,則寫(xiě)入數(shù)據(jù)被寫(xiě)入由寫(xiě)地址指針(105)指向的表項(xiàng), 同時(shí)該表項(xiàng)中V位值被置為零,該表項(xiàng)的表項(xiàng)號(hào)通過(guò)匹配表項(xiàng)號(hào)輸出線(109)輸出,寫(xiě)地址 指針(10 指向下一個(gè)表項(xiàng);讀出時(shí),讀地址線(106)指向的表項(xiàng)的內(nèi)容通過(guò)讀出數(shù)據(jù)總線 (108)被讀出,表項(xiàng)號(hào)通過(guò)匹配表項(xiàng)號(hào)輸出線(109)輸出,同時(shí)該表項(xiàng)中V位也被置為一。標(biāo)志位U位(113)表示使用情況。當(dāng)寫(xiě)地址指針(105)指向一個(gè)表項(xiàng)(101)時(shí), 該表項(xiàng)U位(11 被置零。當(dāng)一個(gè)表項(xiàng)(101)被讀取時(shí),其U位(11 被置一。循環(huán)自增 裝置(110)產(chǎn)生的寫(xiě)地址指針(10 指向一個(gè)新的表項(xiàng)時(shí),U位會(huì)先被讀取,若此時(shí)U位為 零,則該表項(xiàng)可被替換,寫(xiě)地址指針(105)停在該表項(xiàng)以備寫(xiě)入數(shù)據(jù),若U位為一,則將寫(xiě) 地址指針(10 指向下一個(gè)表項(xiàng)。此方法可稱為改動(dòng),另增一窗口指針(116)負(fù)責(zé)將U位 置零,所述窗口指針(116)所指表項(xiàng)比寫(xiě)地址指針(10 提前N個(gè)表項(xiàng)。通過(guò)寫(xiě)地址指針 (105)的值模加N即可得到窗口指針(116)的值。N個(gè)表項(xiàng)即為一窗口,所述窗口指向?qū)懙?址指針(105)與窗口指針(116)間的表項(xiàng)。在寫(xiě)地址指針(105)移動(dòng)N個(gè)表項(xiàng)時(shí)間內(nèi)所經(jīng) 過(guò)的未被讀取之表項(xiàng)可被置換。改變N值即改變窗口大小,改變替換率。另外一個(gè)置換方 法是U位為復(fù)數(shù)位。寫(xiě)地址指針(10 或窗口指針(116)將表項(xiàng)置零,每次讀取給表項(xiàng)U 位加一。每次寫(xiě)之前將U位讀出與預(yù)設(shè)值做比較,若小于所述預(yù)設(shè)值,則該表項(xiàng)可被置換; 若大于等于所述預(yù)設(shè)值,則將寫(xiě)地址指針(10 移向下一個(gè)表項(xiàng)。圖10是本發(fā)明所述的不含保留表和交換器的低缺失率、低缺失懲罰的緩存裝置 填充指令的實(shí)施例。圖中低級(jí)存儲(chǔ)器(122)、高層次指令存儲(chǔ)器(124)和處理器核(125)為 普通體系結(jié)構(gòu)處理器中都有的模塊。本發(fā)明特有的裝置是填充/生成器(123)、分配器、軌 道存儲(chǔ)器及循跡器(170)。本實(shí)施例中分配器只包含主動(dòng)表(121),不含保留表。軌道存儲(chǔ) 器是一個(gè)存儲(chǔ)了軌道表(126)的存儲(chǔ)器。循跡器(170)由多路選擇器(137)、寄存器(138)、 累加器(136)和堆棧(135)構(gòu)成。處理器核(125)開(kāi)啟時(shí),重置信號(hào)把主動(dòng)表(121)的有效位置零。當(dāng)重置信號(hào)釋 放時(shí),重置向量(重置起點(diǎn)的指令地址值)被放上總線(141),因?yàn)樵谥鲃?dòng)表(121)中未尋 到匹配,主動(dòng)表(121)就把所述地址值的高位(upper part)存入指針(129)經(jīng)過(guò)地址總線 (153)所指的主動(dòng)表(121)中的表項(xiàng)(entry),同時(shí)將該表項(xiàng)對(duì)應(yīng)的有效位置為‘1’,并所述 地址值的高位放到總線(144)上,由填充引擎(132)經(jīng)總線(154)向低級(jí)存儲(chǔ)器(122)取 指令。。填充引擎(132)通過(guò)總線(154)從低級(jí)存儲(chǔ)器(122)中取得由重置向量尋址的指令,填充到高層次存儲(chǔ)器(124)中由指針(129)經(jīng)過(guò)地址總線(15 所指示的存儲(chǔ)單元塊 中,對(duì)應(yīng)的軌道信息寫(xiě)入由指針(129)經(jīng)過(guò)地址總線(153)所指示的軌道表(1 )中的相 應(yīng)行中。填充完成后指針(1 )向下移動(dòng)到下一個(gè)可用主動(dòng)表項(xiàng)的位置。在本實(shí)施例中, 虛實(shí)地址轉(zhuǎn)換模塊(131)可在如圖所示的位置,也可放到低級(jí)存儲(chǔ)器(12 的更外層,以減 少高層次指令存儲(chǔ)器(124)的填充延遲。生成器(130)掃描填充到高層次指令存儲(chǔ)器(124)的指令塊中每一條指令,遇到 分支指令,則算出分支目標(biāo)地址。所述分支目標(biāo)地址可以是被掃描指令段起點(diǎn)地址加上起 點(diǎn)至分支指令點(diǎn)的塊內(nèi)位移再加上分支轉(zhuǎn)移位移。將生成的目標(biāo)地址值中的高位與主動(dòng)表 (121)中的內(nèi)容匹配,若匹配不成功,主動(dòng)表(121)就把這個(gè)值放到總線(144)上,重復(fù)上述 填充過(guò)程。若所述匹配過(guò)程在主動(dòng)表(121)中有匹配,則只需把匹配的指針值(BNX)通過(guò)總 線(149)放入總線(153)及指針(143)指示的軌道表的單元中,再將生成器(130)生成的 目標(biāo)指令在指令段中的偏移量(BNY)也放入同一單元中。按如此順序掃描、生成至指令段 終了,則主動(dòng)表(121)、軌道表(126)、及高層次指令存儲(chǔ)器(124)中總線(153)所指的相 應(yīng)項(xiàng)各有該段指令的部分信息。高層次指令存儲(chǔ)器(124)中有該完整指令段以備處理器 核(12 取指,主動(dòng)表(121)中有該段指令的起始地址值以供后來(lái)的指令段匹配,而軌道表 (126)中存有該指令段中所有的分支點(diǎn)在這段指令中的位置及分支目標(biāo)BN值。所述BN值 由行地址BNX和列地址BNY組成。本發(fā)明所述循跡器(170)的輸出BN(151)的來(lái)源可以是從軌道表中相應(yīng)軌跡點(diǎn)中 讀出的BN(150)、當(dāng)前BN加一得到的新BN(165)、從棧寄存器堆來(lái)的BN(164)、以及事先存儲(chǔ) 在所述裝置中的指令對(duì)應(yīng)的BN(139)。所述事先存儲(chǔ)在所述裝置中的指令可以是異常處理 程序(exception handler) 0例如,當(dāng)異常發(fā)生時(shí),循跡器選擇BN(139)作為輸出的BN值, 從而使程序轉(zhuǎn)入異常處理。具體而言,循跡器(170)的輸出BN(151) ^BNX(152) ^P BNY(156)兩部分組成。多 路選擇器(137)有四個(gè)輸入來(lái)源通過(guò)總線(150)送來(lái)的存儲(chǔ)在軌跡點(diǎn)內(nèi)容中的BN、累加 器(136)輸出的BN、異常處理程序地址(exception handler address)寄存器(139)送來(lái) 的BN、棧寄存器堆(135)送來(lái)的BN。根據(jù)本發(fā)明所述技術(shù)方案,存儲(chǔ)在異常處理程序地址 寄存器(139)中的是異常處理程序(exception handler)的地址對(duì)應(yīng)的BN值,存儲(chǔ)在棧寄 存器堆(135)中的是函數(shù)返回(return)時(shí)的程序地址對(duì)應(yīng)的BN值。上述的BN值均包含 BNX 禾口 BNY0循跡器(170)提供作用于軌道表(126)的讀指針(151)。所述讀指針(151)在格 式上包括BNX和BNY。循跡器(170)根據(jù)讀指針(151)對(duì)應(yīng)軌跡點(diǎn)的內(nèi)容的不同,進(jìn)行不同 操作。例如如果軌跡點(diǎn)內(nèi)容表明該軌跡點(diǎn)不是分支指令軌跡點(diǎn),那么循跡器(170)將讀指 針更新為新BNX =舊BNX、新BNY =舊BNY+1。如果軌跡點(diǎn)內(nèi)容表明該軌跡點(diǎn)是條件分支指令軌跡點(diǎn),若處理器(12 送來(lái)的控 制信號(hào)顯示轉(zhuǎn)移沒(méi)有發(fā)生,則循跡器(170)將讀指針更新為新BNX =舊BNX、新BNY =舊 BNY+1 ;若處理器核(12 送來(lái)的控制信號(hào)顯示轉(zhuǎn)移成功發(fā)生,則循跡器(170)將讀指針更 新為新BNX =目標(biāo)BNX、新BNY =目標(biāo)BNY。如果軌跡點(diǎn)內(nèi)容表明該軌跡點(diǎn)是無(wú)條件分支指令軌跡點(diǎn),那么循跡器(170)將該軌跡點(diǎn)視為轉(zhuǎn)移成功發(fā)生的條件分支指令,在處理器核(12 執(zhí)行到該指令時(shí),讀指針更 新為新BNX =目標(biāo)BNX、新BNY =目標(biāo)BNY。如果軌跡點(diǎn)內(nèi)容表明該軌跡點(diǎn)是用于函數(shù)調(diào)用的分支指令軌跡點(diǎn),那么循跡器 (170)將當(dāng)前指針的一對(duì)BNX和BNY壓入棧(135)中,再如上述例子一樣,在處理器核(125) 執(zhí)行到該指令時(shí),將目標(biāo)BNX和目標(biāo)BNY作為新BNX和新BNY。當(dāng)發(fā)現(xiàn)當(dāng)前指針指向的軌跡 點(diǎn)是用于函數(shù)返回的分支指令軌跡點(diǎn)時(shí),循跡器(170)從棧(135)中彈出(pop)位于棧頂 的一對(duì)BNX和BNY,并在處理器核(125)執(zhí)行到該指令時(shí),將讀指針更新為新BNX =出棧 BNX、新BNY =出棧BNY。在某些情況下,函數(shù)返回到的并不是調(diào)用函數(shù)的指令,而是該指令 的后一條指令,則新BNY =出棧BNY+1。如果軌跡點(diǎn)內(nèi)容表明該軌跡點(diǎn)是用于異常調(diào)用的分支指令軌跡點(diǎn),循跡器(170) 從異常處理程序地址寄存器(139)讀出對(duì)應(yīng)異常處理程序的BNX及偏移量BNY,在處理器核 (125)執(zhí)行到該指令時(shí),將讀指針更新為新BNX =異常BNX、新BNY =異常BNY。由于在本實(shí)施例中,高層次指令存儲(chǔ)器(124)中足夠存儲(chǔ)所有要用到的指令,同 時(shí)主動(dòng)表(121)也足夠存儲(chǔ)所述指令對(duì)應(yīng)的各起始地址,因此分支目標(biāo)對(duì)應(yīng)的指令已在高 層次存儲(chǔ)器中。現(xiàn)在假設(shè)循跡器(170)的輸出BN(151)指示軌道表中某一個(gè)存儲(chǔ)單元,單元內(nèi)容 經(jīng)讀口(161)中讀出內(nèi)容后顯示這不是一個(gè)分支點(diǎn)、且所述軌跡點(diǎn)并不是軌道中的最后 一個(gè)指令時(shí),循跡器(170)據(jù)此在先前BNX(152)上不改變,BNY(156)不斷加一直到新的 BNY值指向當(dāng)前軌道上所述軌跡點(diǎn)后的第一個(gè)分支點(diǎn),從而構(gòu)成新的BN(165)。這個(gè)新的 BN(165)經(jīng)寄存器延時(shí)后作為循跡器(170)的輸出BN(151)指向原來(lái)的存儲(chǔ)單元同一行右 邊的存儲(chǔ)單元。由于指向高層次指令存儲(chǔ)器的只有行地址BNX,新的輸出BN(151)指向高層 次存儲(chǔ)器中與先前同一個(gè)的存儲(chǔ)單元塊。若所述指令不是一個(gè)分支點(diǎn)、且所述軌跡點(diǎn)是軌 道中的最后一個(gè)指令時(shí),則從按順序執(zhí)行的指令對(duì)應(yīng)的軌跡點(diǎn)開(kāi)始,BNX保持不變,BNY不 斷加一直到新的BNY值指向當(dāng)前軌道上所述軌跡點(diǎn)及其后軌跡點(diǎn)中的第一個(gè)分支點(diǎn),從而 構(gòu)成新的BN,新BN值指向相應(yīng)的存儲(chǔ)單元塊,也指向軌道表中相應(yīng)的存儲(chǔ)單元。如果現(xiàn)在循跡器(170)的輸出BN(151)所指的單元內(nèi)容顯示該段中有一分支轉(zhuǎn) 移,則將分支目標(biāo)BN指示的主動(dòng)表(121)中表項(xiàng)讀出。若處理器核(125)運(yùn)行到一個(gè)分支 點(diǎn)而確定不轉(zhuǎn)移、且所述軌跡點(diǎn)并不是軌道中的最后一個(gè)指令時(shí),BNX保持不變(152),仍 然指向先前BN指向的存儲(chǔ)單元塊,BNY(156)不斷加一直到新的BNY值指向當(dāng)前軌道上所 述軌跡點(diǎn)后的第一個(gè)分支點(diǎn),從而構(gòu)成新的BN(165);若處理器核(125)運(yùn)行到一個(gè)分支點(diǎn) 而確定不轉(zhuǎn)移、且所述分支點(diǎn)是軌道中的最后一個(gè)指令時(shí),則從按順序執(zhí)行的指令對(duì)應(yīng)的 軌跡點(diǎn)開(kāi)始,BNX保持不變,BNY不斷加一直到新的BNY值指向當(dāng)前軌道上所述軌跡點(diǎn)及其 后軌跡點(diǎn)中的第一個(gè)分支點(diǎn),從而構(gòu)成新的BN,新BN值指向相應(yīng)的存儲(chǔ)單元塊,也指向軌 道表中相應(yīng)的存儲(chǔ)單元;若在分支點(diǎn)確定轉(zhuǎn)移時(shí),則從所述單元內(nèi)存儲(chǔ)的BN值對(duì)應(yīng)的軌跡 點(diǎn)開(kāi)始,BNX保持不變,BNY不斷加一直到新的BNY值指向當(dāng)前軌道上所述軌跡點(diǎn)后的第一 個(gè)分支點(diǎn),從而構(gòu)成新的BN,新BN值指向相應(yīng)的存儲(chǔ)單元塊,也指向軌道表中相應(yīng)的存儲(chǔ) 單元。在所述存儲(chǔ)單元塊中具體取哪一條指令則由處理器核(12 產(chǎn)生的偏移量(155)指定。
軌道表(1 )中生成的軌道領(lǐng)先處理器核(12 實(shí)際執(zhí)行的指令地址,所以能將 指令填充到高層次指令存儲(chǔ)器,減少緩存缺失帶來(lái)的損失。提高軌道表運(yùn)行速度或增加BNY 的粒度、減少單元數(shù)目,如用一個(gè)軌道表單元代表復(fù)數(shù)條指令,都能達(dá)到這個(gè)目的。假設(shè)軌道A上第8號(hào)軌跡點(diǎn)W是分支指令,其目標(biāo)地址對(duì)應(yīng)的軌跡點(diǎn)是軌道B上 的第2號(hào)軌跡點(diǎn)X,即軌跡點(diǎn)X是軌跡點(diǎn)W對(duì)應(yīng)分支指令發(fā)生成功轉(zhuǎn)移后的目標(biāo)軌跡點(diǎn);假 設(shè)軌道B上第2號(hào)軌跡點(diǎn)X到第13號(hào)軌跡點(diǎn)對(duì)應(yīng)的指令均不是分支指令,第14號(hào)軌跡點(diǎn)Y 是以軌道C第5號(hào)軌跡點(diǎn)Z為目標(biāo)軌跡點(diǎn)的分支指令。在本實(shí)施例中,所有已建立的軌跡 點(diǎn)對(duì)應(yīng)的指令均已被填充在高層次指令存儲(chǔ)器(1 )中,且所述軌跡點(diǎn)所在軌道的BNX就 可在高層次指令存儲(chǔ)器(124)中找到對(duì)應(yīng)的指令段。當(dāng)軌跡點(diǎn)W對(duì)應(yīng)分支指令發(fā)生成功轉(zhuǎn)移后,BNX(152)指向軌道B,BNY(156)指向第 2號(hào)軌跡點(diǎn)。根據(jù)本發(fā)明所述技術(shù)方案,指向軌道B的BNX(152)同時(shí)指向高層次指令存儲(chǔ) 器(124)中的包含軌跡點(diǎn)X對(duì)應(yīng)指令的指令段,只需要在利用從處理器核(12 送到高層 次指令存儲(chǔ)器(1 )的程序計(jì)數(shù)器PC值偏移量(155),就可以從高層次指令存儲(chǔ)器(124) 中取得軌跡點(diǎn)X對(duì)應(yīng)的指令。當(dāng)處理器核(125)按正常速度執(zhí)行指令時(shí),BNY(156)指向的軌跡點(diǎn)的內(nèi)容通過(guò)輸 出(150)被送到循跡器(170)。由于軌道B上第2號(hào)軌跡點(diǎn)到第13號(hào)軌跡點(diǎn)對(duì)應(yīng)的指令均 不是分支指令,因此當(dāng)處理器核(12 執(zhí)行所述指令時(shí),循跡器(170)中多路選擇器(137) 選擇BNX不變、BNY加一作為輸出,又因?yàn)锽NY(156)指向的軌跡點(diǎn)對(duì)應(yīng)的指令不是分支指 令,寄存器(138)更新,故多路選擇器(137)輸出經(jīng)鎖存后作為新的BNX(152)和BNY(156) 送到軌道表(126),讀出下一個(gè)軌跡點(diǎn)的內(nèi)容,依次類(lèi)推,直到BNY (156)指向第14號(hào)軌跡點(diǎn) Y。在此過(guò)程中,由于BNX —直沒(méi)有改變,其指向的存儲(chǔ)塊依然包含處理器核(125)執(zhí)行的 指令,因此處理器核(12 根據(jù)程序計(jì)數(shù)器PC值偏移量(15 依然可以從BNX指向的存儲(chǔ) 塊中取得正確的指令。當(dāng)BNY(156)指向第14號(hào)軌跡點(diǎn)Y時(shí),軌跡點(diǎn)Y的內(nèi)容經(jīng)輸出(150)被送到循跡 器(170),即軌跡點(diǎn)Y的目標(biāo)軌跡點(diǎn)對(duì)應(yīng)的BNX和BNY通過(guò)輸出(150)被送到循跡器(170)。 因?yàn)锽NY(156)指向的軌跡點(diǎn)對(duì)應(yīng)的指令是分支指令,寄存器(138)保持原值不變,所以 BNY(156)停在指向軌跡點(diǎn)Y的位置上不動(dòng),直到處理器核(125)執(zhí)行到軌跡點(diǎn)Y對(duì)應(yīng)指令 時(shí),寄存器(138)才在處理器核(12 給出的信號(hào)的控制下停止保持原值,允許更新。此時(shí),若轉(zhuǎn)移不成功,則循跡器(170)中的多路選擇器(137)受處理器核(125)給 出的信號(hào)控制選擇BNX不變、BNY加一通過(guò)多路選擇器(137)輸出經(jīng)寄存器(138)鎖存后, 作為新的BNX和BNY,指向軌道表(126)中軌道B中的第15號(hào)軌跡點(diǎn)Y ;若轉(zhuǎn)移成功,則循跡 器(170)中的多路選擇器(137)受處理器核(12 給出的信號(hào)控制選擇軌道表(1 )的輸 出(150)的內(nèi)容通過(guò)多路選擇器(137)輸出經(jīng)寄存器(138)鎖存后,作為新的BNX和BNY, 即將軌跡點(diǎn)Y的內(nèi)容中的BNX和BNY作為新的BNX和BNY。由此,一旦轉(zhuǎn)移成功,BNX (152) 就指向軌道C,BNY指向第5號(hào)軌跡點(diǎn),進(jìn)入到目標(biāo)軌跡點(diǎn)Z,處理器核(125)根據(jù)程序計(jì)數(shù) 器PC值偏移量(155)即可以從BNX(152)新指向的存儲(chǔ)塊中取得分支目標(biāo)地址對(duì)應(yīng)的指 令。根據(jù)本發(fā)明所述技術(shù)方案,軌道表(126)也可供其他目的使用。舉例而言,軌道 表(126)可以用來(lái)實(shí)現(xiàn)計(jì)算機(jī)系統(tǒng)中處理器核(125)的自動(dòng)功耗管理。如可以將軌道表
36(126)中的一條軌道分配給處理器核(125)處于空轉(zhuǎn)狀態(tài)下對(duì)應(yīng)的空轉(zhuǎn)任務(wù)(空轉(zhuǎn)軌道)。 這樣,計(jì)算機(jī)系統(tǒng)可以統(tǒng)計(jì)得到該空轉(zhuǎn)軌道被使用或被訪問(wèn)的百分比率。計(jì)算機(jī)系統(tǒng)可以 通過(guò)將該百分比率與預(yù)先設(shè)定的數(shù)值進(jìn)行比較和判斷,對(duì)處理器核(12 及整個(gè)系統(tǒng)進(jìn)行 功耗調(diào)整。具體的調(diào)整方法包括改變時(shí)鐘頻率或調(diào)整處理器核(12 及系統(tǒng)的供電電壓。圖11是本發(fā)明所述交換器的實(shí)施例。圖中TBNX表(190)的表項(xiàng)與主動(dòng)表中的表 項(xiàng)一一對(duì)應(yīng),用于映射從主動(dòng)表中轉(zhuǎn)移到保留表中的表項(xiàng)。TBNX表(190)中的每個(gè)表項(xiàng)存 儲(chǔ)的內(nèi)容包括對(duì)應(yīng)的保留表表項(xiàng)號(hào)、標(biāo)志位G位。BNX表(191)的表項(xiàng)與保留表中的表項(xiàng) 一一對(duì)應(yīng),用于映射從保留表中轉(zhuǎn)移到主動(dòng)表中的表項(xiàng)。BNX表(191)中的每個(gè)表項(xiàng)存儲(chǔ)的 內(nèi)容包括對(duì)應(yīng)的主動(dòng)表表項(xiàng)號(hào)和有效位。所述主動(dòng)表表項(xiàng)號(hào)即本發(fā)明所述BNX值。在本實(shí) 施例中,軌道表輸出的軌跡點(diǎn)位置信息(150)中還包含一個(gè)G位(192)。G位(192)與TBNX 表(190)中對(duì)應(yīng)G位相等,則表示BNX值對(duì)應(yīng)的地址在當(dāng)前是真實(shí)存在于主動(dòng)表中的,此時(shí) 可以直接將所述BNX值輸出(166);否則需要進(jìn)行映射。當(dāng)主動(dòng)表中某一表項(xiàng)因替換而被轉(zhuǎn)移到保留表中時(shí),TBNX表(190)中對(duì)應(yīng)表項(xiàng)寫(xiě) 入保留表表項(xiàng)號(hào)(172)。當(dāng)保留表中某一表項(xiàng)因填充而被轉(zhuǎn)移到主動(dòng)表中時(shí),BNX表(191) 根據(jù)主動(dòng)表表號(hào)(17 將對(duì)應(yīng)的表項(xiàng)置為有效。當(dāng)軌跡點(diǎn)位置信息(150)中包含的是保留表表項(xiàng)號(hào)時(shí),以所述表項(xiàng)號(hào)為索引從 BNX表(191)中對(duì)應(yīng)行讀出BNX值和有效位。若該BNX值是有效的,則將所述BNX值作為正 確的軌跡點(diǎn)位置信息輸出(166);若該BNX值是無(wú)效的,則將所述保留表表項(xiàng)號(hào)為索引通過(guò) 總線(180)到保留表讀出地址進(jìn)行填充。當(dāng)軌跡點(diǎn)位置信息(150)中包含的是主動(dòng)表項(xiàng)號(hào),即BN時(shí),若位置信息(150)中 的G位與TBNX表(190)中對(duì)應(yīng)表項(xiàng)的G位相等時(shí),則將所述BN值作為正確的軌跡點(diǎn)位置 信息輸出(166)。若位置信息(150)中的G位與TBNX表(190)中對(duì)應(yīng)表項(xiàng)的G位不等,則讀出所述 表項(xiàng)中保留表表項(xiàng)號(hào),以所述表項(xiàng)號(hào)為索引從BNX表(191)中對(duì)應(yīng)行讀出BNX值和有效位。 若該BNX值是有效的,則將所述BNX值及位置信息(150)中的BNY作為正確的軌跡點(diǎn)位置 信息輸出(166);若該BNX值是無(wú)效的,則將所述保留表表項(xiàng)號(hào)為索引通過(guò)總線(180)到保 留表讀出地址進(jìn)行填充。根據(jù)本發(fā)明技術(shù)方案,只要TBNX表(190)和BNX表(191)中有有效的表項(xiàng),替換 模塊(193)就不斷掃描軌道表,從總線(159)讀入軌跡點(diǎn)位置信息。若某個(gè)軌跡點(diǎn)位置信 息包含的主動(dòng)表表項(xiàng)號(hào)對(duì)應(yīng)TBNX表(190)中表項(xiàng)為有效,則通過(guò)總線(158)輸出保留表表 項(xiàng)號(hào),將所述位置信息相應(yīng)地改為所述保留表表項(xiàng)號(hào);若某個(gè)軌跡點(diǎn)位置信息包含的保留 表表項(xiàng)號(hào)對(duì)應(yīng)BNX表(191)中表項(xiàng)為有效,則通過(guò)總線(158)輸出主動(dòng)表表項(xiàng)號(hào),將所述位 置信息相應(yīng)地改為所述主動(dòng)表表項(xiàng)號(hào)。圖中略去了用于替換時(shí)對(duì)軌道表尋址的地址線。對(duì) 軌道表做一輪完整的掃描替換,即可實(shí)現(xiàn)針對(duì)TBNX表(190)或BNX表(191)中某一表項(xiàng)在 軌道表中的掃描、替換。完成所述掃描、替換后,將TBNX表(190)或BNX表(191)中對(duì)應(yīng)表 項(xiàng)置為無(wú)效。舉例而言,主動(dòng)表表項(xiàng)已滿同時(shí)意味著高層次指令存儲(chǔ)器已滿,若要進(jìn)行指令填 充,則必須對(duì)高層次指令存儲(chǔ)器中某一存儲(chǔ)塊及主動(dòng)表中對(duì)應(yīng)表項(xiàng)的內(nèi)容進(jìn)行替換。因?yàn)?被替換的主動(dòng)表項(xiàng)中的值被移到保留表中,軌道表中所有包含該主動(dòng)表項(xiàng)BN的軌跡點(diǎn)的內(nèi)容都需要被相應(yīng)更改(交換)為保留表號(hào)TBN。該更改(交換)過(guò)程完成后,在TBNX表 (190)和BNX表(191)中的相應(yīng)表項(xiàng)被置為無(wú)效。圖12是本發(fā)明所述的含有保留表和交換器的低缺失率、低缺失懲罰的緩存裝置 填充指令的實(shí)施例。圖12與圖10相比,差別在于分配器中增加了保留表(120),且在軌 道存儲(chǔ)器(126)和循跡器(170)之間增加了交換器(133)。其中,軌道表(126)與交換器 (133)間的總線(159)相當(dāng)于圖11中的總線(159),軌道表(126)與交換器(133)間的總 線(158)相當(dāng)于圖11中的總線(158),軌道表(126)讀口 (161)與交換器(133)間的總線 相當(dāng)于圖11中的總線(150),交換器(133)與保留表(120)間的總線(180)相當(dāng)于圖11中 的總線(180),交換器(133)與循跡器(170)間的總線(166)相當(dāng)于圖11中的總線(166)。在本實(shí)施例中,處理器核(12 開(kāi)啟時(shí),重置信號(hào)把主動(dòng)表(121)的有效位置零。 當(dāng)處理器核重置信號(hào)釋放時(shí),重置向量(重置起點(diǎn)的指令地址值)被放上總線(141),因?yàn)?在保留表(120)與主動(dòng)表(121)中都未尋到匹配,保留表(120)就把所述地址值放到總線 (144)上,由填充引擎(132)經(jīng)總線(154)向低級(jí)存儲(chǔ)器(122)取指令。當(dāng)所述指令被取來(lái) 時(shí),所述地址值被寫(xiě)入指針(129)所指示主動(dòng)表(121)中的表項(xiàng),所述表項(xiàng)對(duì)應(yīng)的有效位置 一,指針(127)所指示保留表(120)中表項(xiàng)的有效位置零。取來(lái)的指令寫(xiě)入由指針(129) 所指示的存儲(chǔ)單元塊號(hào)(BNX)索引的存儲(chǔ)單元塊中,對(duì)應(yīng)的軌道信息寫(xiě)入由指針(129)經(jīng) 過(guò)地址總線(15 所指示的軌道表(1 )中的行中。填充完成后指針(1 )向下移動(dòng),直 到第一個(gè)有效位為零的表項(xiàng)對(duì)應(yīng)的指針位置。當(dāng)從低級(jí)存儲(chǔ)器(122)處取得的指令經(jīng)由總線(140)傳送至生成器(130),并被寫(xiě) 入高層次指令存儲(chǔ)器(124)中由總線(153)指示BNX對(duì)應(yīng)的存儲(chǔ)單元塊時(shí),生成器(130) 掃描經(jīng)過(guò)的指令塊中每一條指令,遇到分支指令,則算出分支目標(biāo)地址。所述分支目標(biāo)地址 可以是被掃描指令段起點(diǎn)地址加上所述分支指令相距所述起點(diǎn)的位移再加上轉(zhuǎn)移位移量。 然后把目標(biāo)地址值與保留表(120)和主動(dòng)表(121)中的內(nèi)容匹配,若匹配不成功,則將目標(biāo) 地址放入保留表(120)中由指針(127)所指示的表項(xiàng),同時(shí)把所述指針值放入軌道表(126) 中總線(153)所指示的行中由總線(143)指示的存儲(chǔ)單元??偩€(143)指示的列地址對(duì)應(yīng) 所述分支距該段指令相對(duì)指令段起點(diǎn)的位移。若所述匹配過(guò)程在保留表(120)中有匹配,則只需把匹配的指針值放入總線 (153)及指針(143)指示的存儲(chǔ)單元。若所述匹配過(guò)程在主動(dòng)表(121)中有匹配,則只 需把匹配的指針指示的表項(xiàng)中的BNX值及由生成器(130)生成的偏移地址(BNY)放入總 線(153)及指針(143)指示的存儲(chǔ)單元。按如此順序掃描、生成至指令段終了,則主動(dòng)表 (121)、軌道表(1 )、及高層次指令存儲(chǔ)器(124)中總線(15 所指的相應(yīng)項(xiàng)有該段指令 的部分信息,高層次指令存儲(chǔ)器(124)中有該完整指令段以備處理器核(12 取指,主動(dòng)表 (121)中有該段指令的起始地址值以供后來(lái)的指令段匹配,而軌道表(1 )中存有該指令 段中所有的分支點(diǎn)在這段指令中的位置及分支目標(biāo)BN值。所述BN值包括BNX值BNY值。當(dāng)循跡器(170)的輸出BN(151)指示軌道表中某一個(gè)存儲(chǔ)單元,單元內(nèi)容經(jīng)讀口 (161)中讀出內(nèi)容后顯示這不是一個(gè)分支點(diǎn)時(shí),后續(xù)操作與圖10實(shí)施例中相應(yīng)操作相同。如果現(xiàn)在循跡器(170)的輸出BN(151)所指的單元內(nèi)容顯示該段中有一分支,則 將分支目標(biāo)BN讀出送往交換器(133),按圖11實(shí)施例中的做法進(jìn)行映射。若分支目標(biāo)指令 已在高層次指令存儲(chǔ)器(124)中,則直接輸出對(duì)應(yīng)的BN;若所述分支目標(biāo)指令段不在高層次存儲(chǔ)器中,則進(jìn)行指令填充、映射后輸出對(duì)應(yīng)的BN。后續(xù)操作與圖10實(shí)施例中相應(yīng)操作 相同。在本實(shí)施例中,隨著軌道延伸,不斷有新軌道可能要追加新指令到高層次存儲(chǔ)器 與軌道表。而這兩者的容量都是有限的,故此要有替換策略。所述替換策略可以是最近最 少使用(LRU)替換策略,也可以是最少頻繁使用(LFU)替換策略,或是兩者的組合。本發(fā)明 在LRU(LFU)替換策略的基礎(chǔ)上,還提出了一種針對(duì)分配器(主動(dòng)表、保留表)的基于移動(dòng) 窗口的LRU(LFU)替換策略。以下以針對(duì)主動(dòng)表的基于移動(dòng)窗口的LRU替換策略為例說(shuō)明。 移動(dòng)窗口由主指針(129)和清掃指針定義而成。所述清掃指針總是處于領(lǐng)先主指針(129) 若干表項(xiàng)的位置上,所述若干表項(xiàng)可以是可變數(shù)目的表項(xiàng)。在清掃指針移動(dòng)過(guò)程中所指的 表項(xiàng)中的U位都被清‘0’。另一方面,凡是被訪問(wèn)過(guò)的表項(xiàng),其U位都被重新置為‘1’。當(dāng) 主動(dòng)表已滿且需要替換時(shí),通過(guò)檢測(cè)主指針(129)指向的表項(xiàng)的U位可以確定是否替換該 表項(xiàng)。若該表項(xiàng)U位為‘1’,表示該表項(xiàng)最近剛被訪問(wèn)過(guò),不是最近最少使用的表項(xiàng),因此主 指針(129)移動(dòng)到下一個(gè)表項(xiàng);若該表項(xiàng)U位為‘0’,則主指針(129)停留在該表項(xiàng)上進(jìn)行 替換操作。以針對(duì)主動(dòng)表的基于移動(dòng)窗口的LFU替換策略為例說(shuō)明。該替換策略中的移動(dòng)窗 口與LRU替換策略中的一樣,但使用一個(gè)訪問(wèn)次數(shù)計(jì)數(shù)器代替LRU替換策略中的U位,將該 計(jì)數(shù)器的計(jì)數(shù)值與處理器核(12 預(yù)設(shè)的一個(gè)判決值進(jìn)行比較。當(dāng)主指針(129)指向的表 項(xiàng)的計(jì)數(shù)值大于等于判決值時(shí),主指針(129)移動(dòng)到下一個(gè)表項(xiàng);否則主指針(129)停留在 該表項(xiàng)上進(jìn)行替換操作。本發(fā)明的替換主要由主動(dòng)表(121)協(xié)同保留表(120)以及軌道表(126)共同作用 完成。根據(jù)本發(fā)明技術(shù)方案,可以確定主動(dòng)表中可替換的表項(xiàng)。舉例說(shuō)軌道表(126)通過(guò) 總線(180)要求將編號(hào)118號(hào)對(duì)應(yīng)的指令段填充到高層次指令存儲(chǔ)器中,在保留表中發(fā)現(xiàn) 118號(hào)對(duì)應(yīng)的指令段地址為OxlFCO,此時(shí)主動(dòng)表(121)中總線(153)指向表項(xiàng)006號(hào),其地 址為0x4000。替換時(shí)保留表(120)中替換項(xiàng)的指令地址OxlFCO被讀出到總線(144)上送 往主動(dòng)表(121)替換由總線(153)指示的006號(hào)表項(xiàng)的指令地址,同時(shí)也被送到填充引擎 (132)中從低級(jí)存儲(chǔ)器(12 中取回OxlFCO地址指令段放置到高層次指令存儲(chǔ)器(124)中 總線(15 指示的006號(hào)存儲(chǔ)單元塊替換原來(lái)在這塊中的0x4000地址對(duì)應(yīng)的指令段。主 動(dòng)表(121)中的006號(hào)對(duì)應(yīng)的0x4000地址被放入保留表(120)中的由指針(171)指示的 表項(xiàng)中。根據(jù)本發(fā)明所述技術(shù)方案,可以由生成器對(duì)分支指令的源地址、分支目標(biāo)偏移量 相加計(jì)算得到分支目標(biāo)指令地址,其中分支指令的源地址可以通過(guò)分支指令所在指令段的 段地址加上所述分支指令在該指令段中的位置偏移量得到。分支目標(biāo)指令地址的高位被送 到分配器(如主動(dòng)表、保留表)中進(jìn)行匹配,分配器輸出相應(yīng)的BN或TBN,與指令類(lèi)型等 信息一起存儲(chǔ)到軌道表中所述分支指令對(duì)應(yīng)的軌跡點(diǎn)。所述軌跡點(diǎn)由所述分支指令所在指 令段地址(分支指令源地址的高位)對(duì)應(yīng)的BNX及所述分支指令在該指令段中的位置偏移 量(BNY)在軌道表中尋址得到。即,軌道表的寫(xiě)地址對(duì)應(yīng)于分支指令的源地址,寫(xiě)入軌道表 的內(nèi)容對(duì)應(yīng)于分支指令的指令類(lèi)型信息和目標(biāo)地址。本實(shí)施例中循跡器(170)的結(jié)構(gòu)與工作原理與圖10實(shí)施例中的循跡器相同。在 本實(shí)施例中,交換器(13 負(fù)責(zé)將軌道表中的TBNX轉(zhuǎn)換成BNX,并將相應(yīng)的指令段從低級(jí)存儲(chǔ)器填充到高層次指令存儲(chǔ)器中。具體而言,假設(shè)軌道表(126)中,軌道A上第8號(hào)軌跡 點(diǎn)W是分支指令,其目標(biāo)地址對(duì)應(yīng)的軌跡點(diǎn)是軌道B上的第2號(hào)軌跡點(diǎn)X,即軌跡點(diǎn)X是軌 跡點(diǎn)W對(duì)應(yīng)分支指令發(fā)生成功轉(zhuǎn)移后的目標(biāo)軌跡點(diǎn);假設(shè)軌道B上第2號(hào)軌跡點(diǎn)X到第13 號(hào)軌跡點(diǎn)對(duì)應(yīng)的指令均不是分支指令,第14號(hào)軌跡點(diǎn)Y是以軌道C第5號(hào)軌跡點(diǎn)Z為目標(biāo) 軌跡點(diǎn)的分支指令。再假設(shè)軌道B對(duì)應(yīng)的指令段已經(jīng)填充在高層次指令存儲(chǔ)器(124)中, 當(dāng)軌跡點(diǎn)W對(duì)應(yīng)分支指令發(fā)生成功轉(zhuǎn)移后,BNX指向軌道B,BNY指向第2號(hào)軌跡點(diǎn)。根據(jù) 本發(fā)明所述技術(shù)方案,指向軌道B的BNX同時(shí)指向高層次指令存儲(chǔ)器(124)中的包含軌跡 點(diǎn)X對(duì)應(yīng)指令的指令段,只需要在利用從處理器核(12 送到高層次指令存儲(chǔ)器(IM)的 程序計(jì)數(shù)器PC值偏移量(155),就可以從高層次指令存儲(chǔ)器(124)中取得軌跡點(diǎn)X對(duì)應(yīng)的 指令。當(dāng)處理器核(125)按正常速度執(zhí)行指令時(shí),BNY指向的軌跡點(diǎn)的內(nèi)容通過(guò)輸出 (161)被送到交換器(133),再經(jīng)交換器(133)的輸出(166)送到循跡器(170)。由于軌道 B上第2號(hào)軌跡點(diǎn)到第13號(hào)軌跡點(diǎn)對(duì)應(yīng)的指令均不是分支指令,因此當(dāng)處理器核(125)執(zhí) 行所述指令時(shí),循跡器(170)中多路選擇器選擇BNX不變、BNY加一作為輸出,又因?yàn)锽NY指 向的軌跡點(diǎn)對(duì)應(yīng)的指令不是分支指令,寄存器更新,故循跡器(170)中多路選擇器輸出經(jīng) 鎖存后作為新的BNX和BNY送到軌道表(126),讀出下一個(gè)軌跡點(diǎn)的內(nèi)容,依次類(lèi)推,直到 BNY指向第14號(hào)軌跡點(diǎn)Y。在此過(guò)程中,由于BNX —直沒(méi)有改變,其指向的存儲(chǔ)塊依然包含 處理器核(12 執(zhí)行的指令,因此處理器核(12 根據(jù)程序計(jì)數(shù)器PC值偏移量(15 依然 可以從BNX指向的存儲(chǔ)塊中取得正確的指令。當(dāng)BNY指向第14號(hào)軌跡點(diǎn)Y時(shí),軌跡點(diǎn)Y的內(nèi)容經(jīng)輸出(161)被送到交換器 (133)。若軌跡點(diǎn)Y包含的是TBN,則說(shuō)明軌跡點(diǎn)Y的目標(biāo)軌跡點(diǎn)對(duì)應(yīng)的指令段未在高層次 指令存儲(chǔ)器(124)中,則按前述實(shí)施例所述產(chǎn)生新的BN替換所述TBN,并通過(guò)總線(180)在 保留表中找到所述TBNX對(duì)應(yīng)的地址將相應(yīng)指令段填充到高層次指令存儲(chǔ)器(IM)中所述 BNX對(duì)應(yīng)的存儲(chǔ)塊中;若軌跡點(diǎn)Y包含的是BN,則說(shuō)明軌跡點(diǎn)Y的目標(biāo)軌跡點(diǎn)對(duì)應(yīng)的指令段 已被填充到高層次指令存儲(chǔ)器(124)中。無(wú)論原先存儲(chǔ)在軌跡點(diǎn)Y中的是BN還是TBNJS 交換器(133)處理后,即可將所述目標(biāo)軌跡點(diǎn)對(duì)應(yīng)的BNX和BNY通過(guò)輸出(166)送到循跡 器(170)。因?yàn)锽NY指向的軌跡點(diǎn)對(duì)應(yīng)的指令是分支指令,寄存器保持原值不變,所以BNY 停在指向軌跡點(diǎn)Y的位置上不動(dòng),直到處理器核(12 執(zhí)行到軌跡點(diǎn)Y對(duì)應(yīng)指令時(shí),寄存器 才在處理器核(12 給出的信號(hào)的控制下停止保持原值,允許更新。此時(shí),若轉(zhuǎn)移不成功,則循跡器(170)中的多路選擇器受處理器核(12 給出的信 號(hào)控制選擇BNX不變、BNY加一通過(guò)多路選擇器輸出經(jīng)寄存器鎖存后,作為新的BNX和BNY, 指向軌道表(126)中軌道B中的第15號(hào)軌跡點(diǎn);若轉(zhuǎn)移成功,則循跡器(170)中的多路選 擇器受處理器核(12 給出的信號(hào)控制選擇交換器(13 的輸出(166)的內(nèi)容通過(guò)多路選 擇器輸出經(jīng)寄存器鎖存后,作為新的BNX和BNY,即將軌跡點(diǎn)Y的內(nèi)容中的BNX和BNY作為 新的BNX和BNY。由此,一旦轉(zhuǎn)移成功,BNX就指向軌道C,BNY指向第5號(hào)軌跡點(diǎn),進(jìn)入到目 標(biāo)軌跡點(diǎn)Z,處理器核(12 根據(jù)程序計(jì)數(shù)器PC值偏移量(15 即可以從BNX新指向的存 儲(chǔ)塊中取得分支目標(biāo)地址對(duì)應(yīng)的指令。圖13是本發(fā)明所述的支持多線程的低缺失率、低缺失懲罰的緩存裝置填充指令 的實(shí)施例。根據(jù)本發(fā)明所述技術(shù)方案,軌道表中的各軌道可以對(duì)應(yīng)同一個(gè)線程,也可以對(duì)應(yīng)不同線程。由于在切換線程時(shí)需要保存、恢復(fù)處理器狀態(tài),因此在本實(shí)施例中,所述裝置具 有復(fù)數(shù)個(gè)棧寄存器堆,用于保存每個(gè)線程各自壓入棧中的值。線程標(biāo)識(shí)器(188)中存儲(chǔ)的 是當(dāng)前運(yùn)行的線程的線程號(hào),當(dāng)循跡器(170)需要用到棧寄存器堆時(shí),訪問(wèn)由線程標(biāo)識(shí)器 (188)中存儲(chǔ)的線程號(hào)指向的棧寄存器堆,即可正確實(shí)現(xiàn)棧操作。在本實(shí)施例中,低級(jí)存儲(chǔ)器(12 的外層還有一個(gè)填充/生成器(187)。填充/生 成器(187)中的生成器(186)與填充/生成器(123)中的生成器(130)相同,但具有更高 的輸入帶寬,能一次對(duì)更多的輸入指令掃描、分析。填充/生成器(187)對(duì)保留表(120)的 操作類(lèi)似于填充/生成器(123)對(duì)主動(dòng)表(121)的操作,即存在于保留表(120)中的地址 對(duì)應(yīng)的指令都被填充引擎(18 從更低速的存儲(chǔ)器填充到低級(jí)存儲(chǔ)器(12 中。這樣就保 證了只要是在保留表(120)中的地址,其對(duì)應(yīng)的指令必定在低級(jí)存儲(chǔ)器(12 中,能有效地 降低甚至掩蓋處理器核(125)需要所述指令引起的等待時(shí)延。在所述裝置中,不同的軌道可以對(duì)應(yīng)同一個(gè)存儲(chǔ)單元塊。本實(shí)施例中的虛實(shí)地址 旁路緩沖翻譯轉(zhuǎn)換模塊(TLB) (131)的位置可以處于填充引擎(18 的外層,這樣使得低級(jí) 存儲(chǔ)器(12 和高層次指令存儲(chǔ)器(124)中的指令都是處在虛地址模式下,處理器核(125) 可以直接訪問(wèn)所述指令,能減少或避免地址翻譯造成的時(shí)延。如果在更外層還有控制更低級(jí)存儲(chǔ)器填充的填充/生成器,那么可以將TLB模塊 放在最外層的填充引擎之外,使內(nèi)部所有指令都處在虛地址模式下,以減少或避免地址翻 譯造成的時(shí)延。對(duì)于數(shù)據(jù),也可以達(dá)到類(lèi)似的效果。具體而言,主動(dòng)表(121)中的每一個(gè)表項(xiàng)都對(duì)應(yīng)高層次指令存儲(chǔ)器(124)中的一 個(gè)存儲(chǔ)塊以及軌道表(126)中的一條軌道,即通過(guò)主動(dòng)表(121)管理高層次指令存儲(chǔ)器 (124) 0保留表(120)中的每一個(gè)表項(xiàng)都對(duì)應(yīng)低級(jí)存儲(chǔ)器(12 中的一個(gè)存儲(chǔ)塊,即通過(guò)保 留表(120)管理低級(jí)存儲(chǔ)器(12 。任何地址均不同時(shí)存在與主動(dòng)表(121)和保留表(120) 中,即高層次指令存儲(chǔ)器(124)和低級(jí)存儲(chǔ)器(12 中不會(huì)同時(shí)存儲(chǔ)有同一地址對(duì)應(yīng)的指 令。按前述實(shí)施例由生成器(130)掃描、分析指令段,建立軌道時(shí),若所述軌道中分支 指令目標(biāo)地址在主動(dòng)表(121)中匹配成功,即表示高層次指令存儲(chǔ)器(124)中已包含所 述目標(biāo)地址對(duì)應(yīng)指令段,則將所述目標(biāo)地址對(duì)應(yīng)的BNX和BNY作為軌跡點(diǎn)內(nèi)容存儲(chǔ)到軌 道表(1 )中即可;若所述軌道中分支指令目標(biāo)地址在保留表(120)中匹配成功,即表示 低級(jí)存儲(chǔ)器(122)中已包含所述目標(biāo)地址對(duì)應(yīng)指令段,則將所述目標(biāo)地址對(duì)應(yīng)的TBNX和 TBNY作為軌跡點(diǎn)內(nèi)容存儲(chǔ)到軌道表(126)中即可;若所述軌道中分支指令目標(biāo)地址在主動(dòng) 表(121)和保留表(120)中均未匹配成功,即表示高層次指令存儲(chǔ)器(124)和低級(jí)存儲(chǔ)器 (122)中均未包含所述目標(biāo)地址對(duì)應(yīng)指令段,則產(chǎn)生新的TBNX和TBNY作為軌跡點(diǎn)內(nèi)容,同 時(shí)將所述目標(biāo)地址送到填充引擎(185),經(jīng)虛實(shí)地址旁路緩沖翻譯轉(zhuǎn)換模塊(131)轉(zhuǎn)換后 從更低級(jí)別的存儲(chǔ)器(圖13中未表示)中取得所述目標(biāo)地址對(duì)應(yīng)指令段填充到低級(jí)存儲(chǔ) 器(122)中。根據(jù)本發(fā)明所述技術(shù)方案,當(dāng)循跡器輸出的指針BNX和BNY停止在包含TBN的分 支指令軌跡點(diǎn)時(shí),用前述實(shí)施例中相同的方法在主動(dòng)表中產(chǎn)生新的BN,并將所述目標(biāo)地址 存儲(chǔ)在主動(dòng)表中所述BN中BNX對(duì)應(yīng)的表項(xiàng)中;同時(shí)由低級(jí)存儲(chǔ)器(122)和高層次指令存儲(chǔ) 器(124)之間的填充引擎根據(jù)保留表(120)送來(lái)的所述TBN中TBNX在低級(jí)存儲(chǔ)器(122)中找到對(duì)應(yīng)指令段填充到高層次指令存儲(chǔ)器(124)中所述BN中BNX對(duì)應(yīng)的存儲(chǔ)塊中,并將 所述軌道表中的所述TBN替換成所述BN、去除保留表中所述TBN中TBNX對(duì)應(yīng)表項(xiàng)內(nèi)容。在 上述填充過(guò)程中,所述被填充的指令段經(jīng)生成器(130)的掃描、分析,生成新的軌道存儲(chǔ)到 軌道表(126)中。根據(jù)本發(fā)明所述技術(shù)方案,當(dāng)主動(dòng)表(121)中的內(nèi)容被替換到保留表時(shí),軌道表 中述內(nèi)容對(duì)應(yīng)的BN被替換為對(duì)應(yīng)的TBN ;高層次指令存儲(chǔ)器(124)中所述BN中BNX對(duì)應(yīng) 的指令段也被存儲(chǔ)到低級(jí)存儲(chǔ)器(122)中所述TBN中TBNX對(duì)應(yīng)的存儲(chǔ)單元塊中。圖14是本發(fā)明所述的低缺失率、低缺失懲罰的緩存裝置填充數(shù)據(jù)的實(shí)施例。本實(shí) 施例中,將數(shù)據(jù)填充到高層次數(shù)據(jù)存儲(chǔ)器時(shí)只需要用到主動(dòng)表,不需要保留表和交換器,圖 中交換器(13 是供指令填充使用的。圖14中供數(shù)據(jù)使用的主動(dòng)表(195)在結(jié)構(gòu)上與供指令使用的主動(dòng)表一樣。主動(dòng) 表(1%)中每一個(gè)表項(xiàng)對(duì)應(yīng)高層次數(shù)據(jù)存儲(chǔ)器(196)中的一個(gè)存儲(chǔ)單元塊。在本實(shí)施例中, 所述裝置還包括基址指針存儲(chǔ)器(197)用于存放各基址指針(基地址號(hào))對(duì)應(yīng)的存儲(chǔ)單元 塊號(hào)?;分羔槾鎯?chǔ)器(197)中基址指針數(shù)量與處理器核(12 可能用到的基址指針數(shù)量 相同,在本實(shí)施例中為8個(gè)。此外,在本實(shí)施例中,處理器核(12 在訪問(wèn)存儲(chǔ)器數(shù)據(jù)時(shí),尋 址方式為基地址加上偏移量。所述偏移量能保證需要的數(shù)據(jù)不超出所述基地址對(duì)應(yīng)的存儲(chǔ) 單元塊的范圍。本實(shí)施例支持多線程情況下的指令、數(shù)據(jù)填充,所述裝置中復(fù)數(shù)個(gè)棧寄存器堆 (135)供多線程情況下的指令填充使用,復(fù)數(shù)個(gè)基址指針存儲(chǔ)器(197)供多線程情況下的 數(shù)據(jù)填充使用,線程標(biāo)識(shí)器(188)中的線程號(hào)對(duì)應(yīng)的棧寄存器堆和基址指針存儲(chǔ)器供當(dāng)前 線程使用。如果只需要支持一個(gè)線程,那么本實(shí)施例中的棧寄存器堆和基址指針存儲(chǔ)器各 只需要一個(gè),且不再需要線程標(biāo)識(shí)器(188)。當(dāng)生成器(130)掃描、分析得到正在填充的指令是改變數(shù)據(jù)基地址的指令時(shí),將 所述指令中包含的基地址號(hào)信息、立即數(shù)信息、寄存器號(hào)信息等存儲(chǔ)到所述指令在軌道表 (126)對(duì)應(yīng)的軌跡點(diǎn)中。當(dāng)處理器(12 執(zhí)行到改變數(shù)據(jù)基地址的指令對(duì)應(yīng)的軌跡點(diǎn)時(shí),首先將所述軌跡 點(diǎn)中包含的數(shù)據(jù)基地址直接、或經(jīng)過(guò)加、移位等運(yùn)算后得到的實(shí)際基地址送往主動(dòng)表(195) 進(jìn)行匹配,若有匹配成功,則將匹配成功項(xiàng)的表項(xiàng)號(hào)送往基址指針存儲(chǔ)器(197)中所述指 令中基地址號(hào)對(duì)應(yīng)的基址指針中。由于主動(dòng)表(1%)表項(xiàng)與高層次數(shù)據(jù)存儲(chǔ)器(196)中存 儲(chǔ)單元塊的一一對(duì)應(yīng)關(guān)系,所述基址指針中存儲(chǔ)的就是含有所述數(shù)據(jù)基地址對(duì)應(yīng)數(shù)據(jù)段的 存儲(chǔ)單元塊。若匹配不成功,則將所述數(shù)據(jù)基地址發(fā)送給填充引擎(132)進(jìn)行填充。當(dāng)取 得所述數(shù)據(jù)基地址對(duì)應(yīng)的數(shù)據(jù)段時(shí),將所述數(shù)據(jù)基地址值填充到由指針(198)指向的主動(dòng) 表表項(xiàng)中,并所述數(shù)據(jù)段存儲(chǔ)到高層次數(shù)據(jù)存儲(chǔ)器(196)中同樣由指針(198)指向的存儲(chǔ) 單元塊內(nèi)。再將所述表項(xiàng)的表項(xiàng)號(hào)送往基址指針存儲(chǔ)器(197)中所述指令中基地址號(hào)對(duì)應(yīng) 的基址指針中。同指令填充時(shí)一樣,指針(198)向下移動(dòng)到下一個(gè)可用主動(dòng)表項(xiàng)的位置。當(dāng)處理器(12 執(zhí)行到需要訪問(wèn)存儲(chǔ)器中數(shù)據(jù)的指令時(shí),以所述指令中的基地址 號(hào)(189)為索引在基址指針存儲(chǔ)器(197)中相應(yīng)項(xiàng)讀出存儲(chǔ)單元塊號(hào),再以所述指令中的 偏移量(194)為索引,在所述存儲(chǔ)單元塊號(hào)指向的存儲(chǔ)單元塊中找到需要的數(shù)據(jù),即可進(jìn) 行讀寫(xiě)操作。
圖15是基于低缺失率、低缺失懲罰的緩存的存儲(chǔ)層次結(jié)構(gòu)實(shí)施例。在本實(shí)施例 中,處理器核(201)對(duì)應(yīng)的存儲(chǔ)層次結(jié)構(gòu)從高速到低速分別為一級(jí)存儲(chǔ)器002)、二級(jí)存 儲(chǔ)器003)、主存儲(chǔ)器004)、硬盤(pán)驅(qū)動(dòng)器005)。本實(shí)施例的附圖僅僅是示意圖,存儲(chǔ)層次 中每一層次的方框大小并不代表其實(shí)際大小。典型情況下,一級(jí)存儲(chǔ)器O02)的容量小于 二級(jí)存儲(chǔ)器(20 的容量、二級(jí)存儲(chǔ)器(20 的容量小于主存儲(chǔ)器(204)的容量、主存儲(chǔ)器 (204)的容量小于磁盤(pán)驅(qū)動(dòng)器O05)的容量。如果僅在處理器核(201)與一級(jí)存儲(chǔ)器(20 之間有本發(fā)明所述裝置O06),雖然 處理器內(nèi)核(201)所需的指令、數(shù)據(jù)只要存在于一級(jí)存儲(chǔ)器O02)中,通過(guò)填充,處理器內(nèi) 核O01)可即時(shí)得到所需的指令、數(shù)據(jù),保證了極高的命中率。但是一旦所述指令、數(shù)據(jù)不 在一級(jí)存儲(chǔ)器O02)中,一級(jí)存儲(chǔ)器O02)需要較多周期才能從二級(jí)存儲(chǔ)器O03)中取的 所述指令、數(shù)據(jù)。在本實(shí)施例中,一級(jí)存儲(chǔ)器(20 與二級(jí)存儲(chǔ)器(20 之間、二級(jí)存儲(chǔ)器(203)與 主存儲(chǔ)器(204)之間、主存儲(chǔ)器(204)與磁盤(pán)驅(qū)動(dòng)器(20 之間都有本發(fā)明所述裝置,分別 為裝置007)、裝置008)、裝置009)。以裝置(207)為例,由于處理器核(201)所需要的 指令必定來(lái)自一級(jí)存儲(chǔ)器002),而一級(jí)存儲(chǔ)器Q02)中的所述指令必定來(lái)自二級(jí)存儲(chǔ)器 O03),因此在所述指令通過(guò)裝置(207)時(shí),裝置(207)即可以對(duì)所述指令進(jìn)行預(yù)掃描、產(chǎn)生 地址并進(jìn)行填充,這樣做保證了一級(jí)存儲(chǔ)器(20 所需指令、數(shù)據(jù)極高的命中率,從而保證 了處理器核(201)所需指令、數(shù)據(jù)極高的命中率。裝置(207)在結(jié)構(gòu)上與裝置(206)完全一 樣,與一級(jí)存儲(chǔ)器O02)的接口有地址總線010)、讀數(shù)據(jù)總線011)和寫(xiě)數(shù)據(jù)總線012), 與二級(jí)存儲(chǔ)器(203)的接口有地址總線013)、讀數(shù)據(jù)總線(214)和寫(xiě)數(shù)據(jù)總線015)。同樣地,在二級(jí)存儲(chǔ)器Q03)與主存儲(chǔ)器O04)間的裝置(208)能保證二級(jí)存儲(chǔ) 器(20 所需指令、數(shù)據(jù)極高的命中率;在主存儲(chǔ)器(204)與磁盤(pán)驅(qū)動(dòng)器Q05)間的裝置 (209)能保證主存儲(chǔ)器(204)所需指令、數(shù)據(jù)極高的命中率。假設(shè)磁盤(pán)驅(qū)動(dòng)器(20 已經(jīng)包 含了處理器內(nèi)核(201)所需的全部指令和數(shù)據(jù),那么通過(guò)這樣的層層填充,保證了處理器 內(nèi)核(201)所需的全部指令和數(shù)據(jù)的極高的命中率,能達(dá)到本發(fā)明的目的。通常情況下,存儲(chǔ)層次中速度較慢的存儲(chǔ)器間所述裝置的填充帶寬,即一次能取 入的指令或數(shù)據(jù)的個(gè)數(shù)和所述高速存儲(chǔ)器的容量都大于存儲(chǔ)層次中速度較慢的存儲(chǔ)器間 所述裝置的填充帶寬和所述高速存儲(chǔ)器容量。在本實(shí)施例中,裝置O09)的填充帶寬和所 述高速存儲(chǔ)器容量大于裝置O08)的填充帶寬和所述高速存儲(chǔ)器容量,裝置O08)的填 充帶寬和所述高速存儲(chǔ)器容量大于裝置O07)的填充帶寬和所述高速存儲(chǔ)器容量,裝置 (207)的填充帶寬和所述高速存儲(chǔ)器容量大于裝置O06)的填充帶寬和所述高速存儲(chǔ)器容 量。在本實(shí)施例中,裝置(208)還具有旁路通道016),能在將指令段或數(shù)據(jù)段從主 存儲(chǔ)器(204)填充到二級(jí)存儲(chǔ)器O03)的同時(shí),將所述指令段或數(shù)據(jù)段填充到一級(jí)存儲(chǔ)器 (202),從而提高整個(gè)系統(tǒng)的效率。
權(quán)利要求
1.一數(shù)字系統(tǒng),包括一處理器核,所述處理器核連接一個(gè)包含可執(zhí)行指令的第一存儲(chǔ)器和一個(gè)比第一存儲(chǔ) 器速度更快的第二存儲(chǔ)器,且所述處理器用于執(zhí)行一條或多條存儲(chǔ)在第二存儲(chǔ)器中的可執(zhí) 行指令,和一個(gè)緩存控制單元,所述緩存控制單元連接第一存儲(chǔ)器、第二存儲(chǔ)器和處理器核,用于 在處理器核執(zhí)行第一存儲(chǔ)器中的至少一條或多條指令之前將這一條或多條指令填充到第 二存儲(chǔ)器中,其特征在于所述緩存控制單元可進(jìn)一步用于對(duì)正被從第一存儲(chǔ)器填充到第二存儲(chǔ)器的指令進(jìn)行審查,從而提取出至少包含分支信 息的指令信息,根據(jù)提取出的指令信息建立復(fù)數(shù)條軌道,根據(jù)復(fù)數(shù)條指令軌道中的一條或多條軌道填充至少一條或多條指令。
2.根據(jù)權(quán)利要求1所述數(shù)字系統(tǒng),其特征在于所述指令信息進(jìn)一步包括的指令類(lèi)型可以是分支指令和非分支指令之一。
3.根據(jù)權(quán)利要求1所述數(shù)字系統(tǒng),其特征在于所述分支信息進(jìn)一步包括分支的源地址和分支的目標(biāo)地址。
4.根據(jù)權(quán)利要求1所述數(shù)字系統(tǒng),其特征在于所述復(fù)數(shù)條軌道按一種地址樹(shù)配置方式安置,其中一條樹(shù)干對(duì)應(yīng)一條軌道,以及一個(gè) 樹(shù)的分支點(diǎn)對(duì)應(yīng)一個(gè)分支指令。
5.根據(jù)權(quán)利要求4所述數(shù)字系統(tǒng),其特征在于第一存儲(chǔ)器中的可執(zhí)行指令被劃分成復(fù)數(shù)個(gè)指令段,和第二存儲(chǔ)器包含與所述復(fù)數(shù)個(gè)軌道對(duì)應(yīng)的復(fù)數(shù)個(gè)存儲(chǔ)塊,每個(gè)存儲(chǔ)塊用于存儲(chǔ)一個(gè)指 令段,若第二存儲(chǔ)器中尚未包含分支指令對(duì)應(yīng)的新軌道的第一指令段或分支指令的下一順 序執(zhí)行指令對(duì)應(yīng)的第二指令段,則在處理器核執(zhí)行分支指令前將所述第一指令段和第二指 令段從第一存儲(chǔ)器填充到第二存儲(chǔ)器中對(duì)應(yīng)存儲(chǔ)塊中。
6.根據(jù)權(quán)利要求5所述數(shù)字系統(tǒng),其特征在于從第一存儲(chǔ)器將所述新軌道中第一個(gè)分支軌跡點(diǎn)的分支目標(biāo)指令對(duì)應(yīng)的一個(gè)第三指 令段填充到第二存儲(chǔ)器相應(yīng)存儲(chǔ)塊中。
7.根據(jù)權(quán)利要求5所述數(shù)字系統(tǒng),其特征在于在處理器核執(zhí)行所述分支指令前,將根據(jù)所述新軌道上分支軌跡點(diǎn)得到的第二新軌道 對(duì)應(yīng)的第三指令段也從第一存儲(chǔ)器填充到第二存儲(chǔ)器中對(duì)應(yīng)存儲(chǔ)塊中。
8.根據(jù)權(quán)利要求2所述數(shù)字系統(tǒng),其特征在于所述緩存控制單元包含一個(gè)軌道表,所述軌道表包含復(fù)數(shù)個(gè)軌道表行,每個(gè)表行對(duì)應(yīng) 一個(gè)軌道。
9.根據(jù)權(quán)利要求8所述數(shù)字系統(tǒng),其特征在于一個(gè)軌道表行包含復(fù)數(shù)個(gè)表項(xiàng),每個(gè)表項(xiàng)對(duì)應(yīng)一個(gè)軌跡點(diǎn);所述軌跡點(diǎn)對(duì)應(yīng)至少一條 指令。
10.根據(jù)權(quán)利要求9所述數(shù)字系統(tǒng),其特征在于可以通過(guò)由軌道號(hào)決定的第一地址和由軌道內(nèi)偏移量決定的第二地址尋址找到軌跡點(diǎn)ο
11.根據(jù)權(quán)利要求10所述數(shù)字系統(tǒng),其特征在于當(dāng)處理器核執(zhí)行軌跡點(diǎn)對(duì)應(yīng)的指令時(shí),所述緩存控制單元提供第一地址,用于確定包 含所述指令的存儲(chǔ)塊,和處理器核提供所述指令在存儲(chǔ)塊中的偏移量,用于從第二存儲(chǔ)器取得所述指令。
12.根據(jù)權(quán)利要求10所述數(shù)字系統(tǒng),其特征在于分支軌跡點(diǎn)對(duì)應(yīng)的表項(xiàng)存儲(chǔ)的第一地址和第二地址指向新的軌跡點(diǎn);所述新的軌跡點(diǎn) 即所述分支軌跡點(diǎn)對(duì)應(yīng)的分支指令的分支目標(biāo)地址對(duì)應(yīng)的軌跡點(diǎn)。
13.根據(jù)權(quán)利要求12所述數(shù)字系統(tǒng),其特征在于所述分支目標(biāo)地址可以通過(guò)對(duì)所述分支軌跡點(diǎn)對(duì)應(yīng)指令段的塊地址、所述軌跡點(diǎn)在所 述軌道中的偏移量和所述分支指令的轉(zhuǎn)移偏移量三者求和得到。
14.根據(jù)權(quán)利要求10所述數(shù)字系統(tǒng),其特征在于所述緩存控制單元進(jìn)一步包含一個(gè)循跡器,用于提供第一地址和第二地址;所述地址 的來(lái)源包括軌道表、和一個(gè)地址自增器。
15.根據(jù)權(quán)利要求14所述數(shù)字系統(tǒng),其特征在于所述地址的來(lái)源還可以包括至少一個(gè)棧和一個(gè)異常處理程序寄存器。
16.根據(jù)權(quán)利要求14所述數(shù)字系統(tǒng),其特征在于為提供所述第一地址和第二地址,循 跡器可進(jìn)一步用于判斷當(dāng)前軌跡點(diǎn)是否對(duì)應(yīng)分支指令;若當(dāng)前跡點(diǎn)不對(duì)應(yīng)分支指令,保持第一地址不變作為下一第一地址,和 使用地址自增器對(duì)當(dāng)前第二地址增一作為下一第二地址,以到達(dá)下一軌跡點(diǎn)。
17.根據(jù)權(quán)利要求16所述數(shù)字系統(tǒng),其特征在于所述循跡器可進(jìn)一步用于若當(dāng)前跡點(diǎn)對(duì)應(yīng)分支指令,等待處理器核給出的表示分支轉(zhuǎn)移是否成功的控制信號(hào),和當(dāng)分支轉(zhuǎn)移成功時(shí),提供所述分支軌跡點(diǎn)表項(xiàng)中的第一地址和第二地址相應(yīng)地作為下 一第一地址和下一第二地址。
18.根據(jù)權(quán)利要求17所述數(shù)字系統(tǒng),其特征在于所述循跡器可進(jìn)一步用于當(dāng)分支轉(zhuǎn)移不成功時(shí),保持當(dāng)前第一地址不變作為下一第一地址,使用地址自增器對(duì) 當(dāng)前第二地址增一作為下一第二地址以到達(dá)下一軌跡點(diǎn)。
19.一種用于輔助處理器核運(yùn)行的方法,所述處理器核連接一個(gè)包含可執(zhí)行指令的第 一存儲(chǔ)器和一個(gè)比第一存儲(chǔ)器速度更快的第二存儲(chǔ)器;所述方法包括對(duì)正被從第一存儲(chǔ)器填充到第二存儲(chǔ)器的指令進(jìn)行審查,從而提取出至少包括分支信 息的指令信息;根據(jù)提取出的指令信息建立復(fù)數(shù)條軌道;根據(jù)復(fù)數(shù)條指令軌道中的一條或多條軌道將至少一條或多條指令在被處理器核執(zhí)行 前從第一存儲(chǔ)器填充到第二存儲(chǔ)器,使得處理器核能從第二存儲(chǔ)器獲取所述至少一條或多 條指令。
20.根據(jù)權(quán)利要求19所述方法,其特征在于所述指令信息進(jìn)一步包含的指令類(lèi)型可以是分支指令和非分支指令之一。
21.根據(jù)權(quán)利要求19所述方法,其特征在于所述分支信息進(jìn)一步包括分支的源地址和分支的目標(biāo)地址。
22.根據(jù)權(quán)利要求19所述方法,其特征在于所述方法進(jìn)一步包括按一種地址樹(shù)配置方式安置所述復(fù)數(shù)條軌道,其中一條樹(shù)干對(duì)應(yīng)一條軌道,以及一個(gè) 樹(shù)的分支點(diǎn)對(duì)應(yīng)一個(gè)分支指令。
23.根據(jù)權(quán)利要求22所述方法,其特征在于第一存儲(chǔ)器中的可執(zhí)行指令被劃分成復(fù)數(shù) 個(gè)指令段,第二存儲(chǔ)器包含與所述復(fù)數(shù)個(gè)軌道對(duì)應(yīng)的復(fù)數(shù)個(gè)存儲(chǔ)塊,每個(gè)存儲(chǔ)塊用于存儲(chǔ) 一個(gè)指令段,若第二存儲(chǔ)器中尚未包含分支指令對(duì)應(yīng)的新軌道的指令段或分支指令的下一順序執(zhí) 行指令對(duì)應(yīng)的指令段,則在處理器核執(zhí)行分支指令前將所述指令段從第一存儲(chǔ)器填充到第 二存儲(chǔ)器中對(duì)應(yīng)存儲(chǔ)塊中。
24.根據(jù)權(quán)利要求23所述方法,其特征在于從第一存儲(chǔ)器將所述新軌道中第一個(gè)分支軌跡點(diǎn)的分支目標(biāo)指令對(duì)應(yīng)的一個(gè)第三指 令段填充到第二存儲(chǔ)器相應(yīng)存儲(chǔ)塊中。
25.根據(jù)權(quán)利要求23所述方法,其特征在于在處理器核執(zhí)行所述分支指令前,將根據(jù)所述新軌道上分支軌跡點(diǎn)得到的第二新軌道 對(duì)應(yīng)的另一個(gè)指令段也從第一存儲(chǔ)器填充到第二存儲(chǔ)器中對(duì)應(yīng)存儲(chǔ)塊中。
26.根據(jù)權(quán)利要求21所述方法,其特征在于所述方法進(jìn)一步包括創(chuàng)建一個(gè)軌道表,所述軌道表包含對(duì)應(yīng)復(fù)數(shù)個(gè)軌道的復(fù)數(shù)個(gè)軌道表行,每個(gè)表行對(duì)應(yīng) 一個(gè)軌道。
27.根據(jù)權(quán)利要求26所述方法,其特征在于一個(gè)軌道表行包含復(fù)數(shù)個(gè)表項(xiàng),每個(gè)表項(xiàng)對(duì)應(yīng)一個(gè)軌跡點(diǎn);所述軌跡點(diǎn)對(duì)應(yīng)至少一條 指令。
28.根據(jù)權(quán)利要求27所述方法,其特征在于所述方法進(jìn)一步包括可以通過(guò)由軌道號(hào)決定的第一地址和由軌道內(nèi)偏移量決定的第二地址尋址找到軌跡點(diǎn)ο
29.根據(jù)權(quán)利要求28所述方法,其特征在于所述方法進(jìn)一步包括當(dāng)處理器核執(zhí)行軌跡點(diǎn)對(duì)應(yīng)的指令時(shí),提供用于確定包含所述指令的存儲(chǔ)塊的第一地 址,在所述存儲(chǔ)塊中可以根據(jù)處理器核提供的偏移量取得所需指令。
30.根據(jù)權(quán)利要求29所述方法,其特征在于所述方法進(jìn)一步包括存儲(chǔ)指向由分支軌跡點(diǎn)對(duì)應(yīng)表項(xiàng)中的一個(gè)分支目標(biāo)地址決定的新的軌道的第一地址。
31.根據(jù)權(quán)利要求30所述方法,其特征在于通過(guò)對(duì)所述分支軌跡點(diǎn)對(duì)應(yīng)指令段的塊地址、所述軌跡點(diǎn)在所述軌道中的偏移量和所 述分支指令的轉(zhuǎn)移偏移量三者求和得到所述分支目標(biāo)地址。
32.根據(jù)權(quán)利要求28所述方法,其特征在于所述方法進(jìn)一步包括提供第一地址和第二地址;所述地址的來(lái)源包括軌道表和一個(gè)地址自增器。
33.根據(jù)權(quán)利要求32所述方法,其特征在于所述方法進(jìn)一步包括 所述地址的來(lái)源還可以進(jìn)一步包括至少一個(gè)棧和一個(gè)異常處理程序寄存器。
34.根據(jù)權(quán)利要求32所述方法,其特征在于提供第一地址和第二地址的方法進(jìn)一步包括判斷當(dāng)前軌跡點(diǎn)是否對(duì)應(yīng)分支指令;若當(dāng)前跡點(diǎn)不對(duì)應(yīng)分支指令,保持第一地址不變作為下一第一地址,和使用地址自增 器對(duì)當(dāng)前第二地址增一作為下一第二地址,以到達(dá)下一軌跡點(diǎn)。
35.根據(jù)權(quán)利要求34所述方法,其特征在于所述方法進(jìn)一步包括若當(dāng)前跡點(diǎn)對(duì)應(yīng)分支指令,等待處理器核給出的表示分支轉(zhuǎn)移是否成功的控制信號(hào);當(dāng)分支轉(zhuǎn)移成功時(shí),提供所述分支軌跡點(diǎn)表項(xiàng)中的第一地址和第二地址相應(yīng)地作為下 一第一地址和下一第二地址。
36.根據(jù)權(quán)利要求35所述方法,其特征在于所述循跡器可進(jìn)一步用于當(dāng)分支轉(zhuǎn)移不成功時(shí),保持當(dāng)前第一地址不變作為下一第一地址,使用地址自增器對(duì) 當(dāng)前第二地址增一作為下一第二地址,以到達(dá)下一軌跡點(diǎn)。
37.一種用于緩存控制設(shè)備以控制處理器核緩存操作的方法;所述處理器核連接一個(gè) 包含可執(zhí)行指令的第一存儲(chǔ)器和一個(gè)比第一存儲(chǔ)器速度更快的第二存儲(chǔ)器;且所述處理器 核用于執(zhí)行一條或多條第二存儲(chǔ)器中可執(zhí)行指令;所述方法包括對(duì)正被從第一存儲(chǔ)器填充到第二存儲(chǔ)器的指令進(jìn)行審查;從被審查的指令中提取出指令信息;根據(jù)提取的指令信息,在處理器核執(zhí)行分支點(diǎn)前,確定所述分支點(diǎn);和將對(duì)應(yīng)于分支點(diǎn)的分支目標(biāo)指令的指令段從第一存儲(chǔ)器填充到第二存儲(chǔ)器,使第二存 儲(chǔ)器包含處理器核執(zhí)行所述分支點(diǎn)導(dǎo)致的任何指令。
38.根據(jù)權(quán)利要求37所述方法,其特征在于所述填充指令段進(jìn)一步包括確定第二存儲(chǔ)器中是否已經(jīng)包含所述指令段;和當(dāng)?shù)诙鎯?chǔ)器中尚未包含所述指令段時(shí),將分支點(diǎn)的分支指令的目標(biāo)指令對(duì)應(yīng)的指令 段從第一存儲(chǔ)器填充到第二存儲(chǔ)器,使第二存儲(chǔ)器包含處理器核執(zhí)行所述分支點(diǎn)導(dǎo)致的任 何指令。
39.根據(jù)權(quán)利要求37所述方法,其特征在于所述方法進(jìn)一步包括根據(jù)來(lái)源于處理器核的在分支點(diǎn)是否發(fā)生分支轉(zhuǎn)移的信息決定處理器核執(zhí)行的分支 點(diǎn)之后的下一分支點(diǎn)。
40.根據(jù)權(quán)利要求37所述方法,其特征在于使用領(lǐng)先(look-ahead)指針確定分支點(diǎn)的 方法進(jìn)一步包括創(chuàng)建一個(gè)軌道表,所述軌道表包含對(duì)應(yīng)復(fù)數(shù)個(gè)軌道的復(fù)數(shù)個(gè)軌道表行,每個(gè)表行對(duì)應(yīng) 一個(gè)軌道并包含復(fù)數(shù)個(gè)表項(xiàng),每個(gè)表項(xiàng)對(duì)應(yīng)一個(gè)軌跡點(diǎn),所述軌跡點(diǎn)對(duì)應(yīng)至少一條指令;和領(lǐng)先指針沿分支點(diǎn)對(duì)應(yīng)的軌道移動(dòng)直到到達(dá)所述分支點(diǎn)表項(xiàng)。
41.根據(jù)權(quán)利要求40所述方法,其特征在于所述方法進(jìn)一步包括確定與軌道表中一個(gè)或多個(gè)軌跡點(diǎn)相關(guān)聯(lián)的一個(gè)數(shù)據(jù)塊基地址指針;和在處理器核執(zhí)行所述一個(gè)或多個(gè)軌跡點(diǎn)之前,根據(jù)所述基地址指針填充所述一個(gè)或多 個(gè)軌跡點(diǎn)對(duì)應(yīng)的數(shù)據(jù)塊。
42.根據(jù)權(quán)利要求41所述方法,其特征在于所述方法進(jìn)一步包括將所述基地址指針存儲(chǔ)到軌道表對(duì)應(yīng)的一個(gè)基地址指針存儲(chǔ)單元中,所述基地址指針中的基地址和處理器核提供的一個(gè)偏移量一同對(duì)存儲(chǔ)塊中的數(shù)據(jù)尋址。
43.根據(jù)權(quán)利要求40所述方法,其特征在于所述方法進(jìn)一步包括使用一個(gè)循跡器沿軌道提供下一軌跡點(diǎn)地址,所述地址包括一個(gè)對(duì)應(yīng)于軌道表行號(hào)的 第一地址和一個(gè)對(duì)應(yīng)于軌道表列號(hào)的第二地址, 其中領(lǐng)先指針對(duì)應(yīng)第二地址。
44.根據(jù)權(quán)利要求43所述方法,其特征在于所述方法進(jìn)一步包括 保持當(dāng)前第一地址不變;對(duì)當(dāng)前第二地址增一使之到達(dá)下一軌跡點(diǎn); 判斷下一軌跡點(diǎn)是否是分支軌跡點(diǎn);和當(dāng)下一軌跡點(diǎn)是分支軌跡點(diǎn)時(shí),提供所述分支軌跡點(diǎn)的分支目標(biāo)地址的第一地址和第二地址。
45.根據(jù)權(quán)利要求44所述方法,其特征在于所述循跡器包括至少一個(gè)支持計(jì)算機(jī)程序中一系列子程序的多層棧操作功能的棧。
46.根據(jù)權(quán)利要求45所述方法,其特征在于所述至少一個(gè)的??梢员惶鎿Q為復(fù)數(shù)個(gè)棧,所述復(fù)數(shù)個(gè)棧支持多線程程序運(yùn)行,其中 每個(gè)線程對(duì)應(yīng)所述復(fù)數(shù)個(gè)棧中的一個(gè)單獨(dú)的棧。
47.根據(jù)權(quán)利要求45所述方法,其特征在于所述方法進(jìn)一步包括 在軌道表中用第一格式表示第一軌跡點(diǎn)的第一地址;和使用一個(gè)主動(dòng)表建立所述第一軌跡點(diǎn)的目標(biāo)軌道和第一存儲(chǔ)塊地址間的映射關(guān)系,其 中,在軌道表中按第一格式建立第一軌跡點(diǎn)時(shí),對(duì)應(yīng)于第一存儲(chǔ)塊地址的一個(gè)指令段被填 充到第二存儲(chǔ)器中。
48.根據(jù)權(quán)利要求47所述方法,其特征在于所述方法進(jìn)一步包括 在軌道表中用第二格式表示第二軌跡點(diǎn)的第一地址;和使用一個(gè)保留表建立所述第二軌軌跡點(diǎn)的目標(biāo)軌道和第二存儲(chǔ)塊地址間的映射關(guān)系, 其中,在軌道表中按第二格式建立第二軌跡點(diǎn)時(shí),對(duì)應(yīng)于第二存儲(chǔ)塊地址的指令段不被填 充到第二存儲(chǔ)器中。
49.根據(jù)權(quán)利要求48所述方法,其特征在于所述方法進(jìn)一步包括 使用一個(gè)交換器對(duì)第一格式和第二格式進(jìn)行交換。
50.根據(jù)權(quán)利要求40所述方法,其特征在于所述方法進(jìn)一步包括根據(jù)訪問(wèn)存儲(chǔ)在軌道表中的空轉(zhuǎn)(idle)軌道的頻率實(shí)現(xiàn)對(duì)處理器核的功耗調(diào)整。
51.根據(jù)權(quán)利要求37所述方法,其特征在于所述方法進(jìn)一步包括從第一存儲(chǔ)器中將與分支軌跡點(diǎn)有關(guān)的復(fù)數(shù)個(gè)指令段填充到第二存儲(chǔ)器中,其中 每個(gè)指令段被分割為多個(gè)指令片段; 每個(gè)指令片段被分配一個(gè)優(yōu)先級(jí);和根據(jù)每個(gè)指令片段的優(yōu)先級(jí)交替填充所述復(fù)數(shù)個(gè)指令段的多個(gè)指令片段。
52.根據(jù)權(quán)利要求40所述方法,其特征在于所述方法進(jìn)一步包括從第一存儲(chǔ)器中將與一個(gè)或多個(gè)軌跡點(diǎn)有關(guān)的復(fù)數(shù)個(gè)數(shù)據(jù)段填充到第二存儲(chǔ)器中,其中每個(gè)數(shù)據(jù)段被分割為多個(gè)數(shù)據(jù)片段;每個(gè)數(shù)據(jù)片段被分配一個(gè)優(yōu)先級(jí);和根據(jù)每個(gè)數(shù)據(jù)片段的優(yōu)先級(jí)交替填充所述復(fù)數(shù)個(gè)數(shù)據(jù)段的多個(gè)數(shù)據(jù)片段。
53.一種利用緩存控制單元控制包括第一存儲(chǔ)器和連接處理器核及第一存儲(chǔ)器的第二 存儲(chǔ)器在內(nèi)的復(fù)數(shù)個(gè)緩存存儲(chǔ)器的方法;所述方法包括對(duì)被填充到復(fù)數(shù)個(gè)存儲(chǔ)器中的指令進(jìn)行審查;從被審查的指令中提取出指令信息;根據(jù)提取出的指令信息在軌道表中創(chuàng)建軌跡點(diǎn),用低層次緩存存儲(chǔ)塊號(hào)和高層次緩存 存儲(chǔ)塊號(hào)之一表示分支目標(biāo)軌跡點(diǎn)的表項(xiàng);其中,當(dāng)使用低層次緩存存儲(chǔ)塊號(hào)表示分支目標(biāo)軌跡點(diǎn)時(shí),所述分支目標(biāo)軌跡點(diǎn)對(duì)應(yīng)的一個(gè) 指令段被填充到第一存儲(chǔ)器中;和當(dāng)使用高層次緩存存儲(chǔ)塊號(hào)表示分支目標(biāo)軌跡點(diǎn)時(shí),所述分支目標(biāo)軌跡對(duì)應(yīng)的指令段 被填充到第二存儲(chǔ)器而不是第一存儲(chǔ)器中。
54.根據(jù)權(quán)利要求53所述方法,其特征在于所述方法進(jìn)一步包括使用一個(gè)表建立低層次緩存存儲(chǔ)塊號(hào)與指令段存儲(chǔ)地址的映射關(guān)系,以及低層次緩存 存儲(chǔ)塊號(hào)與復(fù)數(shù)個(gè)高層次緩存存儲(chǔ)塊號(hào)的映射關(guān)系。
55.根據(jù)權(quán)利要求54所述方法,其特征在于所述方法進(jìn)一步包括判斷被分析的軌跡點(diǎn)表項(xiàng)是否包括一個(gè)預(yù)設(shè)的低層次緩存存儲(chǔ)塊號(hào);和當(dāng)所述軌跡點(diǎn)表項(xiàng)包括所述預(yù)設(shè)的低層次緩存存儲(chǔ)塊號(hào)時(shí),判斷是否能根據(jù)所述低層 次緩存存儲(chǔ)塊號(hào)尋址從所述表中選擇出一個(gè)有效的高層次緩存存儲(chǔ)塊號(hào)。
56.根據(jù)權(quán)利要求55所述方法,其特征在于所述方法進(jìn)一步包括若無(wú)法選擇出有效的高層次緩存存儲(chǔ)塊號(hào),則將所述指令段從第一存儲(chǔ)器填充到第二 存儲(chǔ)器;生成有效的高層次緩存存儲(chǔ)器號(hào);和將軌跡點(diǎn)中的所述低層次緩存存儲(chǔ)器塊號(hào)替換為所述高層次緩存存儲(chǔ)塊號(hào)。
57.根據(jù)權(quán)利要求56所述方法,其特征在于有一個(gè)位于第一存儲(chǔ)器和第二存儲(chǔ)器之間 連接兩者的第三存儲(chǔ)器;所述方法進(jìn)一步包括當(dāng)軌跡點(diǎn)表項(xiàng)包括所述預(yù)設(shè)的低層次緩存存儲(chǔ)器號(hào)時(shí),判斷是否能根據(jù)所述低層次存 儲(chǔ)塊號(hào)尋址從所述表中選擇出有效的高層次緩存存儲(chǔ)塊號(hào)和有效的第三存儲(chǔ)器存儲(chǔ)塊號(hào)。
58.根據(jù)權(quán)利要求57所述方法,其特征在于所述方法進(jìn)一步包括若無(wú)法選擇出有效的高層次緩存存儲(chǔ)塊號(hào),但能選擇出有效的第三存儲(chǔ)器存儲(chǔ)塊號(hào), 則將所述指令段從第三存儲(chǔ)器填充到第二存儲(chǔ)器;和生成有效的高層次緩存存儲(chǔ)器號(hào);和將軌跡點(diǎn)中的所述低層次緩存存儲(chǔ)器塊號(hào)替換為所述高層次緩存存儲(chǔ)塊號(hào)。
59.根據(jù)權(quán)利要求53所述方法,其特征在于低層次緩存存儲(chǔ)塊號(hào)關(guān)聯(lián)于第一個(gè)表,高 層次緩存存儲(chǔ)塊號(hào)關(guān)聯(lián)于第二個(gè)表,所述方法進(jìn)一步包括通過(guò)配置所述第一個(gè)表和第二個(gè)表以保證所述指令段被填充到第一存儲(chǔ)器或第二存 儲(chǔ)器中。
60.根據(jù)權(quán)利要求53所述方法,其特征在于低層次緩存存儲(chǔ)塊號(hào)關(guān)聯(lián)于第一個(gè)表,高 層次緩存存儲(chǔ)塊號(hào)關(guān)聯(lián)于第二個(gè)表,所述方法進(jìn)一步包括通過(guò)配置所述第一個(gè)表和第二個(gè)表以保證所述指令段被填充到第一存儲(chǔ)器和第二存 儲(chǔ)器中。
61.一個(gè)用于為處理器核控制緩存運(yùn)行緩存控制設(shè)備;所述處理器核連接一個(gè)包含可 執(zhí)行指令的第一存儲(chǔ)器和一個(gè)比第一存儲(chǔ)器速度更快的第二存儲(chǔ)器,且所述處理器用于執(zhí) 行第二存儲(chǔ)器中可執(zhí)行指令中的一條或多條;所述設(shè)備包括一個(gè)第一填充生成單元,用于審查從第一存儲(chǔ)器填充到第二存儲(chǔ)器中的指令,并從被 審查的指令中提取出指令信息;一個(gè)循跡器,用于根據(jù)提取的指令信息控制領(lǐng)先指針,從而在處理器核執(zhí)行到分支點(diǎn) 之前確定所述分支點(diǎn);和一個(gè)分配器,用于將分支點(diǎn)的目標(biāo)指令對(duì)應(yīng)的指令段從第一存儲(chǔ)器填充到第二存儲(chǔ) 器,使第二存儲(chǔ)器包含處理器核執(zhí)行所述分支點(diǎn)導(dǎo)致的任何指令。
62.根據(jù)權(quán)利要求61所述設(shè)備,其特征在于所述分配器可以進(jìn)一步用于 判斷第二存儲(chǔ)器中是否已經(jīng)包含了所述指令段;和若第二存儲(chǔ)器中尚未包含所述指令段,則控制第一填充生成單元將所述分支點(diǎn)的目標(biāo) 指令對(duì)應(yīng)的指令段從第一存儲(chǔ)器填充到第二存儲(chǔ)器,使第二存儲(chǔ)器包含處理器核執(zhí)行所述 分支點(diǎn)導(dǎo)致的任何指令。
63.根據(jù)權(quán)利要求62所述設(shè)備,其特征在于 所述第一填充生成單元包含了一個(gè)虛實(shí)地址轉(zhuǎn)換單元。
64.根據(jù)權(quán)利要求61所述設(shè)備,其特征在于所述循跡器可以進(jìn)一步用于根據(jù)提供給領(lǐng)先指針的來(lái)源于處理器核的在分支點(diǎn)是否發(fā)生分支轉(zhuǎn)移的信息,確定所 述處理器核執(zhí)行的分支點(diǎn)的下一分支點(diǎn)。
65.根據(jù)權(quán)利要求62所述設(shè)備,其特征在于所述設(shè)備進(jìn)一步包括一個(gè)軌道表,所述軌道表包含了對(duì)應(yīng)于復(fù)數(shù)條軌道的復(fù)數(shù)個(gè)軌道表項(xiàng),每個(gè)表行對(duì)應(yīng) 一個(gè)軌道且包含復(fù)數(shù)個(gè)表項(xiàng),每個(gè)表項(xiàng)對(duì)應(yīng)一個(gè)軌跡點(diǎn),所述軌跡點(diǎn)對(duì)應(yīng)至少一條指令;在所述軌道表中,循跡器控制領(lǐng)先指針沿分支點(diǎn)對(duì)應(yīng)的軌道移動(dòng)直到到達(dá)所述分支點(diǎn) 表項(xiàng)。
66.根據(jù)權(quán)利要求65所述設(shè)備,其特征在于所述填充生成單元可以進(jìn)一步用于 確定與軌道表中一個(gè)或多個(gè)軌跡點(diǎn)相關(guān)聯(lián)的一個(gè)數(shù)據(jù)塊基地址指針;和在處理器核執(zhí)行所述一個(gè)或多個(gè)軌跡點(diǎn)之前,根據(jù)所述基地址指針填充所述一個(gè)或多 個(gè)軌跡點(diǎn)對(duì)應(yīng)的數(shù)據(jù)塊。
67.根據(jù)權(quán)利要求66所述設(shè)備,其特征在于所述設(shè)備進(jìn)一步包括一個(gè)基地址指針存儲(chǔ)單元,用于對(duì)應(yīng)軌道表存儲(chǔ)所述基地址指針,所述基地址指針中 的基地址和處理器核提供的一個(gè)偏移量一同對(duì)存儲(chǔ)塊中的數(shù)據(jù)尋址。
68.根據(jù)權(quán)利要求63所述設(shè)備,其特征在于所述循跡器可以進(jìn)一步用于提供沿軌道的下一軌跡點(diǎn)的地址,所述地址包含一個(gè)對(duì)應(yīng)軌道表行號(hào)的第一地址和一 個(gè)對(duì)應(yīng)軌道表列號(hào)的第二地址, 其中領(lǐng)先指針對(duì)應(yīng)第二地址。
69.根據(jù)權(quán)利要求68所述設(shè)備,其特征在于所述循跡器可以進(jìn)一步用于 保持當(dāng)前第一地址不變;當(dāng)前第二地址增一使之到達(dá)下一軌跡點(diǎn); 判斷下一軌跡點(diǎn)是否是分支軌跡點(diǎn);和當(dāng)下一軌跡點(diǎn)是分支軌跡點(diǎn)時(shí),提供所述分支軌跡點(diǎn)的分支目標(biāo)地址的第一地址和第二地址。
70.根據(jù)權(quán)利要求69所述設(shè)備,其特征在于所述循跡器進(jìn)一步包括用于支持多線程程 序運(yùn)行的復(fù)數(shù)個(gè)棧,其中每個(gè)線程對(duì)應(yīng)所述復(fù)數(shù)個(gè)棧中的一個(gè)單獨(dú)的棧。
71.根據(jù)權(quán)利要求68所述設(shè)備,其特征在于在軌道表中用第一格式表示第一軌道的軌跡點(diǎn)的第一地址;和 所述分配器包括一個(gè)主動(dòng)表,用于建立所述第一軌道和第一存儲(chǔ)塊地址間的映射關(guān) 系,其中,在軌道表中按第一格式建立第一軌道的軌跡點(diǎn)時(shí),對(duì)應(yīng)于第一存儲(chǔ)塊地址的一個(gè) 指令段被填充到第二存儲(chǔ)器中。
72.根據(jù)權(quán)利要求71所述設(shè)備,其特征在于在軌道表中用第二格式表示第二軌跡點(diǎn)的第一地址;和所述分配器包括一個(gè)保留表,用于建立所述第二軌跡點(diǎn)和第二存儲(chǔ)塊地址間的映射關(guān) 系,其中,在軌道表中按第二格式建立第二軌跡點(diǎn)時(shí),對(duì)應(yīng)于第二存儲(chǔ)塊地址的指令段不被 填充到第二存儲(chǔ)器中。
73.根據(jù)權(quán)利要求72所述設(shè)備,其特征在于所述分配器根據(jù)主動(dòng)表和一個(gè)由指向主動(dòng)表項(xiàng)的主指針和指向主動(dòng)表項(xiàng)的清掃指針 定義的清除窗口對(duì)第二存儲(chǔ)器實(shí)現(xiàn)最近最少使用(LRU)替換策略和最少頻繁使用(LFU)替 換策略中的至少一種替換策略。
74.根據(jù)權(quán)利要求72所述設(shè)備,其特征在于所述設(shè)備進(jìn)一步包括 一個(gè)交換器對(duì)軌道表中的第一格式和第二格式進(jìn)行轉(zhuǎn)換。
75.根據(jù)權(quán)利要求72所述設(shè)備,其特征在于當(dāng)?shù)谝淮鎯?chǔ)器存儲(chǔ)塊號(hào)地址對(duì)應(yīng)的指令段被第二存儲(chǔ)器中的一個(gè)新的指令段替換時(shí), 在保留表中建立對(duì)應(yīng)的表項(xiàng);和交換器將軌道表中含有所述被替換指令段的目標(biāo)地址從第一格式改為第二格式。
76.根據(jù)權(quán)利要求72所述設(shè)備,其特征在于所述設(shè)備進(jìn)一步包括一個(gè)連接第一存儲(chǔ)器和第三存儲(chǔ)器的第二填充生成單元;所述第二填充生成單元包括 一個(gè)虛實(shí)地址轉(zhuǎn)換單元。
77.根據(jù)權(quán)利要求72所述設(shè)備,其特征在于 由主動(dòng)表管理第二存儲(chǔ)器;和由保留表管理第一存儲(chǔ)器。
78.根據(jù)權(quán)利要求65所述設(shè)備,其特征在于所述軌道表可以被用于存儲(chǔ)空轉(zhuǎn)軌道,根據(jù)訪問(wèn)所述空轉(zhuǎn)軌道的頻率實(shí)現(xiàn)對(duì)處理器核 的功耗調(diào)整。
全文摘要
一種低缺失率、低缺失懲罰的緩存方法和裝置,應(yīng)用于處理器領(lǐng)域時(shí)能在處理器核執(zhí)行指令前,將所述指令及所述指令需要訪問(wèn)的數(shù)據(jù)填充到所述處理器核能直接訪問(wèn)的高速存儲(chǔ)器中,幾乎使所述處理器核每次都能在所述高速存儲(chǔ)器中獲取到需要的指令或數(shù)據(jù),達(dá)到極高的緩存命中率。
文檔編號(hào)G06F12/08GK102110058SQ201010622609
公開(kāi)日2011年6月29日 申請(qǐng)日期2010年12月24日 優(yōu)先權(quán)日2009年12月25日
發(fā)明者任浩琪, 林正浩 申請(qǐng)人:上海芯豪微電子有限公司