一種基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器及其預(yù)取方法
【專利摘要】本發(fā)明公開了一種基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器及其預(yù)取方法,所述預(yù)取器包括步幅預(yù)取表、歷史數(shù)據(jù)表、數(shù)據(jù)隊(duì)列;所述預(yù)取方法通過步幅預(yù)取表和歷史數(shù)據(jù)表對(duì)二級(jí)緩存未命中進(jìn)行檢測(cè),判斷是否進(jìn)入預(yù)取狀態(tài),相應(yīng)的在數(shù)據(jù)隊(duì)列中添加預(yù)取請(qǐng)求,并對(duì)向外存訪問接口發(fā)出預(yù)取信號(hào)進(jìn)行預(yù)取。所述預(yù)取器及其預(yù)取方法在步幅預(yù)取方案的基礎(chǔ)上增加關(guān)聯(lián)性預(yù)取的技術(shù)特點(diǎn),減少步幅預(yù)取方案的訓(xùn)練過程,從而提高步幅預(yù)取方案的預(yù)取覆蓋率,實(shí)現(xiàn)性能提升并且節(jié)省了大量存儲(chǔ)空間。
【專利說(shuō)明】
一種基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器及其預(yù)取方法
技術(shù)領(lǐng)域
[0001 ]本發(fā)明涉及一種基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器及其預(yù)取方法。
【背景技術(shù)】
[0002]由于處理器和存儲(chǔ)器性能差距的不斷擴(kuò)大,訪存延時(shí)嚴(yán)重降低處理器性,已經(jīng)成為制約處理器性能提升的主要瓶頸。雖然高速緩存(Cache)的使用可以有效地填補(bǔ)處理器與存儲(chǔ)器之間的性能鴻溝,但是面對(duì)應(yīng)用程序中復(fù)雜多樣的訪存地址模式以及頻繁的的數(shù)據(jù)交換,即使采用大容量片上緩存也可能難以滿足應(yīng)用程序的數(shù)據(jù)訪問需求。因此,如何涉及有效的高命中率的預(yù)取方案,是提高處理器性能的關(guān)鍵問題之一。
[0003]目前預(yù)取模塊有數(shù)據(jù)關(guān)聯(lián)型和數(shù)據(jù)規(guī)律型兩種方向。
[0004]數(shù)據(jù)關(guān)聯(lián)型基于歷史數(shù)據(jù)流進(jìn)行預(yù)取,將第二級(jí)緩存數(shù)據(jù)缺失的地址信息記錄下來(lái)或者記錄鏈?zhǔn)皆L問的節(jié)點(diǎn)地址,在后續(xù)的數(shù)據(jù)訪問過程中,若發(fā)現(xiàn)此地址之前已完成記錄,則預(yù)取記錄中下一個(gè)數(shù)據(jù)。數(shù)據(jù)關(guān)聯(lián)型雖能顯著提升某些算法的性能,但是需要消耗大量的存儲(chǔ)資源。
[0005]數(shù)據(jù)規(guī)律型基于數(shù)據(jù)在外存中的分布規(guī)律,研究發(fā)現(xiàn),數(shù)據(jù)訪問過程中,各數(shù)據(jù)的地址間隔經(jīng)常是相同的,通過檢測(cè)這樣的間隔實(shí)現(xiàn)預(yù)取功能。數(shù)據(jù)規(guī)律型方向的方案主要為基于步幅的方案。此方案分為三步:定位、訓(xùn)練、預(yù)取。通過地址高位信息完成定位,定位相同的地址將進(jìn)入訓(xùn)練過程。訓(xùn)練過程中,若步幅相同則計(jì)數(shù)加I,達(dá)到閾值后進(jìn)入單步預(yù)取模式;若步幅在兩種長(zhǎng)度間循環(huán)變化,則進(jìn)入多步預(yù)取模式。預(yù)取過程即根據(jù)相應(yīng)的步幅信息,提前發(fā)起數(shù)據(jù)請(qǐng)求。步幅預(yù)取放方案硬件資源消耗少,但是性能提升效果一般。
[0006]現(xiàn)有的預(yù)取方案大多數(shù)是依據(jù)數(shù)據(jù)關(guān)聯(lián)或者數(shù)據(jù)規(guī)律的單一預(yù)取方案,忽視了某些算法的數(shù)據(jù)同時(shí)具有內(nèi)存中分布的規(guī)律性和前后數(shù)據(jù)的關(guān)聯(lián)性兩個(gè)特點(diǎn),因此不能在性能和資源消耗做出一種平衡。
【發(fā)明內(nèi)容】
[0007]發(fā)明目的:為了克服現(xiàn)有技術(shù)中存在的不足,本發(fā)明提供一種基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器及其預(yù)取方法,不僅可以提高預(yù)取器的運(yùn)算性能,同時(shí)能夠有效降低存儲(chǔ)資源的使用。
[0008]技術(shù)方案:為實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案為:
[0009]—種基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器,所述預(yù)取器包括未命中地址緩存、步幅預(yù)取表、歷史數(shù)據(jù)表、數(shù)據(jù)隊(duì)列;
[0010]其中,所述未命中地址緩存,用于記錄二級(jí)緩存收到的數(shù)據(jù)請(qǐng)求地址,將該地址稱為未命中地址,并且將該未命中地址發(fā)送給步幅預(yù)取表和歷史數(shù)據(jù)表;
[0011]所述步幅預(yù)取表,用于步幅預(yù)取的訓(xùn)練和實(shí)現(xiàn),若成功進(jìn)入預(yù)取模式,則將相關(guān)數(shù)據(jù)發(fā)送給歷史數(shù)據(jù)表;
[0012]所述歷史數(shù)據(jù)表,用于記錄成功進(jìn)入預(yù)取狀態(tài)的數(shù)據(jù)流,是一個(gè)先進(jìn)先出緩存,設(shè)計(jì)為環(huán)狀結(jié)構(gòu);
[0013]所述數(shù)據(jù)隊(duì)列,用于記錄數(shù)據(jù)請(qǐng)求和得到的數(shù)據(jù),是一個(gè)先進(jìn)先出FIFO緩存。
[0014]所述步幅預(yù)取表按時(shí)間順序存儲(chǔ)各個(gè)數(shù)據(jù)流信息;對(duì)當(dāng)前未命中地址所屬數(shù)據(jù)流,對(duì)比當(dāng)前未命中地址與歷史數(shù)據(jù)流信息,判斷步幅預(yù)取表是否命中,若命中,則使用當(dāng)前未命中地址更新歷史數(shù)據(jù)流信息,若連續(xù)命中達(dá)N次,則狀態(tài)機(jī)進(jìn)入預(yù)取模式;當(dāng)狀態(tài)機(jī)退出預(yù)取模式時(shí),則步幅預(yù)取表將自身的歷史數(shù)據(jù)流信息發(fā)送給歷史數(shù)據(jù)表。
[0015]作為優(yōu)選,為了對(duì)二級(jí)緩存未命中距離的步幅訓(xùn)練和實(shí)現(xiàn),所述步幅預(yù)取表存儲(chǔ)多個(gè)條目,每個(gè)條目包括:
[0016]前置位字段,用于辨別不同的數(shù)據(jù)流,若當(dāng)前未命中地址的前置位與某個(gè)數(shù)據(jù)流的前置位在同一范圍內(nèi),則認(rèn)為當(dāng)前未命中地址屬于該數(shù)據(jù)流;
[0017]前地址字段,用于記錄上一次二級(jí)緩存未命中的地址;
[0018]地址差值字段,記錄前地址字段與當(dāng)前未命中地址的差值,該差值稱為當(dāng)前未命中地址的步幅;
[0019]狀態(tài)機(jī)字段,用于記錄當(dāng)前訓(xùn)練過程中狀態(tài);若計(jì)數(shù)器I為i= 0,則狀態(tài)機(jī)為初始模式;若計(jì)數(shù)器I為l〈i〈N,則狀態(tài)機(jī)為訓(xùn)練模式;若計(jì)數(shù)器I為i多N,則狀態(tài)機(jī)為預(yù)取模式;
[0020]計(jì)數(shù)器I字段,用于記錄當(dāng)前數(shù)據(jù)流在訓(xùn)練過程中有多少個(gè)相同的步幅;若當(dāng)前未命中地址的步幅與屬于相同數(shù)據(jù)流的上一次未命中地址的步幅相同,則計(jì)數(shù)器I加I;若當(dāng)前未命中地址的步幅與屬于相同數(shù)據(jù)流的上一次未命中地址的步幅不同,則計(jì)數(shù)器I置O。
[0021]所述歷史數(shù)據(jù)表按時(shí)間順序存儲(chǔ)各個(gè)歷史未命中地址預(yù)取流數(shù)據(jù)流信息;對(duì)當(dāng)前未命中地址所屬數(shù)據(jù)流,并對(duì)比當(dāng)前未命中地址與歷史數(shù)據(jù)流信息歷史預(yù)取流,判斷歷史數(shù)據(jù)表是否命中,若命中,則狀態(tài)機(jī)進(jìn)入預(yù)取模式,歷史數(shù)據(jù)表將命中歷史數(shù)據(jù)流信息發(fā)送給步幅預(yù)取表;步幅預(yù)取表首先使用命中歷史數(shù)據(jù)流信息替換自身的歷史數(shù)據(jù)流信息,然后使用當(dāng)前未命中地址更新歷史數(shù)據(jù)流信息。
[0022]作為優(yōu)選,為了檢測(cè)二級(jí)緩存未命中距離是否命中歷史數(shù)據(jù)表,所述歷史數(shù)據(jù)表中,僅保存屬于相同數(shù)據(jù)流的最近的M個(gè)預(yù)取流,每個(gè)預(yù)取流存儲(chǔ)在一個(gè)歷史數(shù)據(jù)條目下,每個(gè)歷史數(shù)據(jù)條目還包括如下屬性:
[0023]前置位字段:用于辨別不同的數(shù)據(jù)流,若兩個(gè)以上未命中地址的前置位在同一范圍內(nèi),則認(rèn)為該兩個(gè)以上未命中地址屬于同一數(shù)據(jù)流;
[0024]起始地址字段,用于記錄預(yù)取流的起始地址的索引位;
[0025]地址差值字段,用于記錄預(yù)取流的步幅;
[0026]計(jì)數(shù)器2字段,用于記錄進(jìn)入此預(yù)取模式的請(qǐng)求個(gè)數(shù)預(yù)取流的地址個(gè)數(shù);
[0027]判斷歷史數(shù)據(jù)表是否命中的方法為:用當(dāng)前未命中地址的索引位的起始地址分別減去屬于相同數(shù)據(jù)流的最近的M個(gè)未命中地址預(yù)取流起始地址的索引位起始地址,差值分別除以對(duì)應(yīng)的M個(gè)未命中地址的地址差值,將M個(gè)結(jié)果分別與對(duì)應(yīng)的M個(gè)計(jì)數(shù)器2相減,若存在一個(gè)以上小于零的差值,則認(rèn)為歷史數(shù)據(jù)表命中;若歷史數(shù)據(jù)表命中,則歷史數(shù)據(jù)表將當(dāng)前未命中地址和命中預(yù)取流的地址差值、計(jì)數(shù)器2發(fā)送給步幅預(yù)取表并存儲(chǔ)則步幅預(yù)取表將當(dāng)前未命中地址發(fā)送給歷史數(shù)據(jù)表并存儲(chǔ)。
[0028]所述數(shù)據(jù)隊(duì)列按時(shí)間順序存儲(chǔ)數(shù)據(jù)請(qǐng)求的地址,數(shù)據(jù)請(qǐng)求包括二級(jí)緩存直接發(fā)起的數(shù)據(jù)請(qǐng)求和預(yù)取模式發(fā)起的數(shù)據(jù)請(qǐng)求。
[0029]作為優(yōu)選,為了記錄預(yù)取器發(fā)出的請(qǐng)求,存儲(chǔ)預(yù)取的數(shù)據(jù),所述數(shù)據(jù)隊(duì)列存儲(chǔ)多個(gè)條目,每個(gè)條目包括:
[0030]有效標(biāo)志字段,用于表示二級(jí)緩存直接發(fā)起的訪存請(qǐng)求或者由預(yù)取發(fā)起的訪存請(qǐng)求有效,有效置I;
[0031 ]發(fā)起標(biāo)志字段,用于表示預(yù)取請(qǐng)求已經(jīng)發(fā)起,I表示預(yù)取請(qǐng)求已經(jīng)完成,O表示預(yù)取請(qǐng)求尚未完成;
[0032]預(yù)取標(biāo)志字段,用于表示哪種模式發(fā)起的預(yù)取請(qǐng)求,10表示由二級(jí)緩存發(fā)起的訪存請(qǐng)求,OI表示由預(yù)取發(fā)起模塊發(fā)起的訪存請(qǐng)求,11表示由二級(jí)緩存與預(yù)取發(fā)起模塊發(fā)起的訪存請(qǐng)求;
[0033]地址字段,用于記錄預(yù)取的起始地址;
[0034]數(shù)據(jù)有效字段,用于表示已從外部存儲(chǔ)獲得數(shù)據(jù),I表示數(shù)據(jù)已經(jīng)完成讀取,O表示數(shù)據(jù)尚未完成讀取;
[0035]數(shù)據(jù)字段,用于存儲(chǔ)從動(dòng)態(tài)隨機(jī)存儲(chǔ)器中預(yù)取的數(shù)據(jù)。
[0036]所述數(shù)據(jù)隊(duì)列還包括冗余檢測(cè)模塊,通過冗余檢測(cè)和預(yù)取標(biāo)志能夠判斷預(yù)取是否成功,同時(shí)排除重復(fù)請(qǐng)求。
[0037]為了進(jìn)一步實(shí)現(xiàn)發(fā)明目的,本發(fā)明還提供了一種基于上述基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器的預(yù)取方法,包括以下步驟:
[0038](I)當(dāng)二級(jí)緩存發(fā)送未命中后,將請(qǐng)求加入數(shù)據(jù)隊(duì)列,并將數(shù)據(jù)隊(duì)列中的預(yù)取標(biāo)志記為10;將該地址稱為當(dāng)前未命中地址;同時(shí)執(zhí)行步驟(2);
[0039](2)當(dāng)二級(jí)緩存發(fā)送未命中后,將未命中地址的前置位與步幅預(yù)取表中的前置位相比較,找到對(duì)應(yīng)的數(shù)據(jù)流,通過與前地址和地址差值比較,決定狀態(tài)機(jī)的狀態(tài),如果相等稱為步幅預(yù)取表命中;同時(shí)執(zhí)行步驟(3);
[0040](3)當(dāng)二級(jí)緩存發(fā)送未命中后,未命中的地址與歷史數(shù)據(jù)表中的起始地址、步幅和次數(shù)比較,若命中歷史數(shù)據(jù)表,則步幅預(yù)取表中的狀態(tài)機(jī)直接進(jìn)入預(yù)取狀態(tài),并替換前地址和地址差值;
[0041](4)步驟(2)中狀態(tài)機(jī)剛開始進(jìn)入初始狀態(tài),如果步幅預(yù)取表未命中,則狀態(tài)機(jī)讓處于初始狀態(tài);如果步幅預(yù)取表命中,狀態(tài)機(jī)進(jìn)入訓(xùn)練狀態(tài);如果歷史數(shù)據(jù)表命中,狀態(tài)機(jī)進(jìn)入預(yù)取狀態(tài);
[0042](5)若狀態(tài)機(jī)處于訓(xùn)練狀態(tài),如果步幅預(yù)取表未命中,則狀態(tài)機(jī)讓進(jìn)入初始狀態(tài);如果步幅預(yù)取表命中,則狀態(tài)機(jī)仍處于訓(xùn)練狀態(tài),同時(shí)計(jì)數(shù)器I字段加I;直到計(jì)數(shù)器I字段大于等于3時(shí)步幅預(yù)取再次表命中或者歷史數(shù)據(jù)表命中,狀態(tài)機(jī)進(jìn)入預(yù)取狀態(tài);
[0043](6)若狀態(tài)機(jī)進(jìn)入預(yù)取狀態(tài),則通過步幅預(yù)取表中的前地址和地址差值計(jì)算得到預(yù)取地址,將此請(qǐng)求加入數(shù)據(jù)隊(duì)列;若步幅預(yù)取表持續(xù)命中,則狀態(tài)機(jī)保持預(yù)取狀態(tài),計(jì)數(shù)器I字段加I;若步幅預(yù)取表未命中,則狀態(tài)機(jī)進(jìn)入初始狀態(tài)。
[0044]有益效果:本發(fā)明與現(xiàn)有技術(shù)相比,在步幅預(yù)取方案的基礎(chǔ)上增加關(guān)聯(lián)性預(yù)取的技術(shù)特點(diǎn),減少步幅預(yù)取方案的訓(xùn)練過程,從而提高步幅預(yù)取方案的預(yù)取覆蓋率,實(shí)現(xiàn)性能提升。與傳統(tǒng)數(shù)據(jù)關(guān)聯(lián)型預(yù)取相比節(jié)省了大量存儲(chǔ)空間。
【附圖說(shuō)明】
[0045]圖1為為本發(fā)明的預(yù)取系統(tǒng)的工作狀態(tài)連接圖;
[0046]圖2為本發(fā)明的數(shù)據(jù)預(yù)取器結(jié)構(gòu)圖;
[0047]圖3為本發(fā)明的步幅預(yù)取表狀態(tài)轉(zhuǎn)換圖。
【具體實(shí)施方式】
[0048]下面結(jié)合附圖對(duì)本發(fā)明作更進(jìn)一步的說(shuō)明。
[0049]如圖1所示,本發(fā)明的數(shù)據(jù)預(yù)取器與外部存儲(chǔ)器接口連接;本發(fā)明的基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器,預(yù)取器包括未命中地址緩存、步幅預(yù)取表、歷史數(shù)據(jù)表、數(shù)據(jù)隊(duì)列;
[0050]其中,未命中地址緩存,用于記錄二級(jí)緩存收到的數(shù)據(jù)請(qǐng)求地址,將該地址稱為未命中地址,并且將該未命中地址發(fā)送給步幅預(yù)取表和歷史數(shù)據(jù)表;
[0051]步幅預(yù)取表,用于步幅預(yù)取的訓(xùn)練和實(shí)現(xiàn),若成功進(jìn)入預(yù)取模式,則將相關(guān)數(shù)據(jù)發(fā)送給歷史數(shù)據(jù)表;按時(shí)間順序存儲(chǔ)各個(gè)數(shù)據(jù)流信息;對(duì)當(dāng)前未命中地址所屬數(shù)據(jù)流,對(duì)比當(dāng)前未命中地址與歷史數(shù)據(jù)流信息,判斷步幅預(yù)取表是否命中,若命中,則使用當(dāng)前未命中地址更新歷史數(shù)據(jù)流信息,若連續(xù)命中達(dá)N次,則狀態(tài)機(jī)進(jìn)入預(yù)取模式;當(dāng)狀態(tài)機(jī)退出預(yù)取模式時(shí),則步幅預(yù)取表將自身的歷史數(shù)據(jù)流信息發(fā)送給歷史數(shù)據(jù)表;
[0052]歷史數(shù)據(jù)表,用于記錄成功進(jìn)入預(yù)取狀態(tài)的數(shù)據(jù)流;按時(shí)間順序存儲(chǔ)各個(gè)歷史未命中地址預(yù)取流數(shù)據(jù)流信息;對(duì)當(dāng)前未命中地址所屬數(shù)據(jù)流,并對(duì)比當(dāng)前未命中地址與歷史數(shù)據(jù)流信息歷史預(yù)取流,判斷歷史數(shù)據(jù)表是否命中,若命中,則狀態(tài)機(jī)進(jìn)入預(yù)取模式,歷史數(shù)據(jù)表將命中歷史數(shù)據(jù)流信息發(fā)送給步幅預(yù)取表;步幅預(yù)取表首先使用命中歷史數(shù)據(jù)流信息替換自身的歷史數(shù)據(jù)流信息,然后使用當(dāng)前未命中地址更新歷史數(shù)據(jù)流信息。
[0053]數(shù)據(jù)隊(duì)列,用于記錄數(shù)據(jù)請(qǐng)求和得到的數(shù)據(jù);按時(shí)間順序存儲(chǔ)數(shù)據(jù)請(qǐng)求的地址,數(shù)據(jù)請(qǐng)求包括二級(jí)緩存直接發(fā)起的數(shù)據(jù)請(qǐng)求和預(yù)取模式發(fā)起的數(shù)據(jù)請(qǐng)求。
[0054]步幅預(yù)取表存儲(chǔ)多個(gè)條目,每個(gè)條目包括:
[0055]前置位字段,用于辨別不同的數(shù)據(jù)流,若當(dāng)前未命中地址的前置位與某個(gè)數(shù)據(jù)流的前置位在同一范圍內(nèi),則認(rèn)為當(dāng)前未命中地址屬于該數(shù)據(jù)流;
[0056]前地址字段,用于記錄上一次二級(jí)緩存未命中的地址;
[0057]地址差值字段,記錄前地址字段與當(dāng)前未命中地址的差值,該差值稱為當(dāng)前未命中地址的步幅;
[0058]狀態(tài)機(jī)字段,用于記錄當(dāng)前訓(xùn)練過程中狀態(tài);若計(jì)數(shù)器I為i= 0,則狀態(tài)機(jī)為初始模式;若計(jì)數(shù)器I為l〈i〈N,則狀態(tài)機(jī)為訓(xùn)練模式;若計(jì)數(shù)器I為i多N,則狀態(tài)機(jī)為預(yù)取模式;
[0059]計(jì)數(shù)器I字段,用于記錄當(dāng)前數(shù)據(jù)流在訓(xùn)練過程中有多少個(gè)相同的步幅;若當(dāng)前未命中地址的步幅與屬于相同數(shù)據(jù)流的上一次未命中地址的步幅相同,則計(jì)數(shù)器I加I;若當(dāng)前未命中地址的步幅與屬于相同數(shù)據(jù)流的上一次未命中地址的步幅不同,則計(jì)數(shù)器I置O。
[0060]歷史數(shù)據(jù)表中,僅保存屬于相同數(shù)據(jù)流的最近的M個(gè)預(yù)取流,每個(gè)預(yù)取流存儲(chǔ)在一個(gè)歷史數(shù)據(jù)條目下,每個(gè)歷史數(shù)據(jù)條目還包括如下屬性:
[0061]前置位字段:用于辨別不同的數(shù)據(jù)流,若兩個(gè)以上未命中地址的前置位在同一范圍內(nèi),則認(rèn)為該兩個(gè)以上未命中地址屬于同一數(shù)據(jù)流;
[0062]起始地址字段,用于記錄預(yù)取流的起始地址的索引位;
[0063]地址差值字段,用于記錄預(yù)取流的步幅;
[0064]計(jì)數(shù)器2字段,用于記錄進(jìn)入此預(yù)取模式的請(qǐng)求個(gè)數(shù)預(yù)取流的地址個(gè)數(shù);
[0065]判斷歷史數(shù)據(jù)表是否命中的方法為:用當(dāng)前未命中地址的索引位的起始地址分別減去屬于相同數(shù)據(jù)流的最近的M個(gè)未命中地址預(yù)取流起始地址的索引位起始地址,差值分別除以對(duì)應(yīng)的M個(gè)未命中地址的地址差值,將M個(gè)結(jié)果分別與對(duì)應(yīng)的M個(gè)計(jì)數(shù)器2相減,若存在一個(gè)以上小于零的差值,則認(rèn)為歷史數(shù)據(jù)表命中;若歷史數(shù)據(jù)表命中,則歷史數(shù)據(jù)表將當(dāng)前未命中地址和命中預(yù)取流的地址差值、計(jì)數(shù)器2發(fā)送給步幅預(yù)取表并存儲(chǔ)則步幅預(yù)取表將當(dāng)前未命中地址發(fā)送給歷史數(shù)據(jù)表并存儲(chǔ)。
[0066]數(shù)據(jù)隊(duì)列存儲(chǔ)多個(gè)條目,每個(gè)條目包括:
[0067]有效標(biāo)志字段,用于表示二級(jí)緩存直接發(fā)起的訪存請(qǐng)求或者由預(yù)取發(fā)起的訪存請(qǐng)求有效,有效置I;
[0068]發(fā)起標(biāo)志字段,用于表示預(yù)取請(qǐng)求已經(jīng)發(fā)起,I表示預(yù)取請(qǐng)求已經(jīng)完成,O表示預(yù)取請(qǐng)求尚未完成;
[0069]預(yù)取標(biāo)志字段,用于表示哪種模式發(fā)起的預(yù)取請(qǐng)求,10表示由二級(jí)緩存發(fā)起的訪存請(qǐng)求,OI表示由預(yù)取發(fā)起模塊發(fā)起的訪存請(qǐng)求,11表示由二級(jí)緩存與預(yù)取發(fā)起模塊發(fā)起的訪存請(qǐng)求;
[0070]地址字段,用于記錄預(yù)取的起始地址;
[0071]數(shù)據(jù)有效字段,用于表示已從外部存儲(chǔ)獲得數(shù)據(jù),I表示數(shù)據(jù)已經(jīng)完成讀取,O表示數(shù)據(jù)尚未完成讀取;
[0072]數(shù)據(jù)字段,用于存儲(chǔ)從動(dòng)態(tài)隨機(jī)存儲(chǔ)器中預(yù)取的數(shù)據(jù)。
[0073]數(shù)據(jù)隊(duì)列還包括冗余檢測(cè)模塊,通過冗余檢測(cè)和預(yù)取標(biāo)志能夠判斷預(yù)取是否成功,同時(shí)排除重復(fù)請(qǐng)求。
[0074]冗余檢測(cè)模塊的機(jī)制為:
[0075]將當(dāng)前數(shù)據(jù)請(qǐng)求地址與數(shù)據(jù)隊(duì)列中預(yù)取標(biāo)志位不為00的歷史數(shù)據(jù)條目地址字段比較,若地址不同,則將當(dāng)前數(shù)據(jù)請(qǐng)求地址加入數(shù)據(jù)隊(duì)列;若地址相同,則比較預(yù)取標(biāo)志位;
[0076]若當(dāng)前數(shù)據(jù)請(qǐng)求預(yù)取標(biāo)志位為01,則取消此數(shù)據(jù)請(qǐng)求;若當(dāng)前數(shù)據(jù)請(qǐng)求預(yù)取標(biāo)志位為10,且歷史數(shù)據(jù)條目預(yù)取標(biāo)志位為11或10,則將當(dāng)前數(shù)據(jù)請(qǐng)求地址加入數(shù)據(jù)隊(duì)列;若當(dāng)前數(shù)據(jù)請(qǐng)求預(yù)取標(biāo)志位為10,且歷史數(shù)據(jù)條目標(biāo)志位為01,則將歷史數(shù)據(jù)條目復(fù)制重新加入數(shù)據(jù)隊(duì)列,并將新的數(shù)據(jù)條目預(yù)取標(biāo)志位改為11,原有歷史數(shù)據(jù)條目預(yù)取標(biāo)志位改為00。
[0077]—種基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器的預(yù)取方法,包括以下步驟:
[0078](I)當(dāng)二級(jí)緩存發(fā)送未命中后,將請(qǐng)求加入數(shù)據(jù)隊(duì)列,并將數(shù)據(jù)隊(duì)列中的預(yù)取標(biāo)志記為10;將該地址稱為當(dāng)前未命中地址;同時(shí)執(zhí)行步驟(2);
[0079](2)當(dāng)二級(jí)緩存發(fā)送未命中后,將未命中地址的前置位與步幅預(yù)取表中的前置位相比較,找到對(duì)應(yīng)的數(shù)據(jù)流,通過與前地址和地址差值比較,決定狀態(tài)機(jī)的狀態(tài),如果相等稱為步幅預(yù)取表命中;同時(shí)執(zhí)行步驟(3);
[0080](3)當(dāng)二級(jí)緩存發(fā)送未命中后,未命中的地址與歷史數(shù)據(jù)表中的起始地址、步幅和次數(shù)比較,若命中歷史數(shù)據(jù)表,則步幅預(yù)取表中的狀態(tài)機(jī)直接進(jìn)入預(yù)取狀態(tài),并替換前地址和地址差值;
[0081](4)步驟(2)中狀態(tài)機(jī)剛開始進(jìn)入初始狀態(tài),如果步幅預(yù)取表未命中,則狀態(tài)機(jī)讓處于初始狀態(tài);如果步幅預(yù)取表命中,狀態(tài)機(jī)進(jìn)入訓(xùn)練狀態(tài);如果歷史數(shù)據(jù)表命中,狀態(tài)機(jī)進(jìn)入預(yù)取狀態(tài);
[0082](5)若狀態(tài)機(jī)處于訓(xùn)練狀態(tài),如果步幅預(yù)取表未命中,則狀態(tài)機(jī)讓進(jìn)入初始狀態(tài);如果步幅預(yù)取表命中,則狀態(tài)機(jī)仍處于訓(xùn)練狀態(tài),同時(shí)計(jì)數(shù)器I字段加I;直到計(jì)數(shù)器I字段大于等于3時(shí)步幅預(yù)取再次表命中或者歷史數(shù)據(jù)表命中,狀態(tài)機(jī)進(jìn)入預(yù)取狀態(tài);
[0083](6)若狀態(tài)機(jī)進(jìn)入預(yù)取狀態(tài),則通過步幅預(yù)取表中的前地址和地址差值計(jì)算得到預(yù)取地址,將此請(qǐng)求加入數(shù)據(jù)隊(duì)列;若步幅預(yù)取表持續(xù)命中,則狀態(tài)機(jī)保持預(yù)取狀態(tài),計(jì)數(shù)器I字段加I;若步幅預(yù)取表未命中,則狀態(tài)機(jī)進(jìn)入初始狀態(tài)。
[0084]實(shí)施例
[0085]如圖2所示,當(dāng)二級(jí)緩存發(fā)送未命中后,將訪存請(qǐng)求加入數(shù)據(jù)隊(duì)列并將數(shù)據(jù)隊(duì)列中的預(yù)取標(biāo)志記為10;同時(shí)將未命中地址的前置位與步幅預(yù)取表中的前置位相比較,找到對(duì)應(yīng)的數(shù)據(jù)流,通過與前地址和地址差值比較,決定狀態(tài)機(jī)的狀態(tài),如果相等稱為步幅預(yù)取表命中;同時(shí)未命中的地址與歷史數(shù)據(jù)表中的起始地址、步幅和次數(shù)比較,若命中歷史數(shù)據(jù)表,則步幅預(yù)取表中的狀態(tài)機(jī)直接進(jìn)入預(yù)取狀態(tài),并替換前地址和地址差值。
[0086]如圖3所示,狀態(tài)機(jī)剛開始進(jìn)入初始狀態(tài),如果步幅預(yù)取表未命中,則狀態(tài)機(jī)讓處于初始狀態(tài);如果步幅預(yù)取表命中,狀態(tài)機(jī)進(jìn)入訓(xùn)練狀態(tài);如果歷史數(shù)據(jù)表命中,狀態(tài)機(jī)進(jìn)入預(yù)取狀態(tài);若狀態(tài)機(jī)處于訓(xùn)練狀態(tài),如果步幅預(yù)取表未命中,則狀態(tài)機(jī)讓進(jìn)入初始狀態(tài);如果步幅預(yù)取表命中,則狀態(tài)機(jī)仍處于訓(xùn)練狀態(tài),同時(shí)計(jì)數(shù)器I加I;直到計(jì)數(shù)器I大于等于3時(shí)步幅預(yù)取再次表命中或者歷史數(shù)據(jù)表命中,狀態(tài)機(jī)進(jìn)入預(yù)取狀態(tài);若狀態(tài)機(jī)進(jìn)入預(yù)取狀態(tài),則通過步幅預(yù)取表中的前地址和地址差值計(jì)算得到預(yù)取地址,將此請(qǐng)求加入數(shù)據(jù)隊(duì)列;若步幅預(yù)取表持續(xù)命中,則狀態(tài)機(jī)保持預(yù)取狀態(tài),計(jì)數(shù)器I讓加I;若步幅預(yù)取表未命中,則狀態(tài)機(jī)進(jìn)入初始狀態(tài)。
[0087]以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出:對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
【主權(quán)項(xiàng)】
1.一種基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器,其特征在于:所述預(yù)取器包括未命中地址緩存、步幅預(yù)取表、歷史數(shù)據(jù)表、數(shù)據(jù)隊(duì)列; 其中,所述未命中地址緩存,用于記錄二級(jí)緩存收到的數(shù)據(jù)請(qǐng)求地址,將該地址稱為未命中地址,并且將該未命中地址發(fā)送給步幅預(yù)取表和歷史數(shù)據(jù)表; 所述步幅預(yù)取表,用于步幅預(yù)取的訓(xùn)練和實(shí)現(xiàn),若成功進(jìn)入預(yù)取模式,則將相關(guān)數(shù)據(jù)發(fā)送給歷史數(shù)據(jù)表; 所述歷史數(shù)據(jù)表,用于記錄成功進(jìn)入預(yù)取狀態(tài)的數(shù)據(jù)流; 所述數(shù)據(jù)隊(duì)列,用于記錄數(shù)據(jù)請(qǐng)求和得到的數(shù)據(jù)。2.如權(quán)利要求1所述的基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器,其特征在于:所述步幅預(yù)取表按時(shí)間順序存儲(chǔ)各個(gè)數(shù)據(jù)流信息;對(duì)當(dāng)前未命中地址所屬數(shù)據(jù)流,對(duì)比當(dāng)前未命中地址與歷史數(shù)據(jù)流信息,判斷步幅預(yù)取表是否命中,若命中,則使用當(dāng)前未命中地址更新歷史數(shù)據(jù)流信息,若連續(xù)命中達(dá)N次,則狀態(tài)機(jī)進(jìn)入預(yù)取模式;當(dāng)狀態(tài)機(jī)退出預(yù)取模式時(shí),則步幅預(yù)取表將自身的歷史數(shù)據(jù)流信息發(fā)送給歷史數(shù)據(jù)表。3.如權(quán)利要求1或2所述的基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器,其特征在于:所述步幅預(yù)取表存儲(chǔ)多個(gè)條目,每個(gè)條目包括: 前置位字段,用于辨別不同的數(shù)據(jù)流,若當(dāng)前未命中地址的前置位與某個(gè)數(shù)據(jù)流的前置位在同一范圍內(nèi),則認(rèn)為當(dāng)前未命中地址屬于該數(shù)據(jù)流; 前地址字段,用于記錄上一次二級(jí)緩存未命中的地址; 地址差值字段,記錄前地址字段與當(dāng)前未命中地址的差值,該差值稱為當(dāng)前未命中地址的步幅; 狀態(tài)機(jī)字段,用于記錄當(dāng)前訓(xùn)練過程中狀態(tài);若計(jì)數(shù)器I為i=0,則狀態(tài)機(jī)為初始模式;若計(jì)數(shù)器I為l〈i〈N,則狀態(tài)機(jī)為訓(xùn)練模式;若計(jì)數(shù)器I為i多N,則狀態(tài)機(jī)為預(yù)取模式; 計(jì)數(shù)器I字段,用于記錄當(dāng)前數(shù)據(jù)流在訓(xùn)練過程中有多少個(gè)相同的步幅;若當(dāng)前未命中地址的步幅與屬于相同數(shù)據(jù)流的上一次未命中地址的步幅相同,則計(jì)數(shù)器I加I;若當(dāng)前未命中地址的步幅與屬于相同數(shù)據(jù)流的上一次未命中地址的步幅不同,則計(jì)數(shù)器I置O。4.如權(quán)利要求1所述的基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器,其特征在于:所述歷史數(shù)據(jù)表按時(shí)間順序存儲(chǔ)各個(gè)歷史未命中地址預(yù)取流數(shù)據(jù)流信息;對(duì)當(dāng)前未命中地址所屬數(shù)據(jù)流,并對(duì)比當(dāng)前未命中地址與歷史數(shù)據(jù)流信息歷史預(yù)取流,判斷歷史數(shù)據(jù)表是否命中,若命中,則狀態(tài)機(jī)進(jìn)入預(yù)取模式,歷史數(shù)據(jù)表將命中歷史數(shù)據(jù)流信息發(fā)送給步幅預(yù)取表;步幅預(yù)取表首先使用命中歷史數(shù)據(jù)流信息替換自身的歷史數(shù)據(jù)流信息,然后使用當(dāng)前未命中地址更新歷史數(shù)據(jù)流信息。5.如權(quán)利要求1或4所述的基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器,其特征在于:所述歷史數(shù)據(jù)表中,僅保存屬于相同數(shù)據(jù)流的最近的M個(gè)預(yù)取流,每個(gè)預(yù)取流存儲(chǔ)在一個(gè)歷史數(shù)據(jù)條目下,每個(gè)歷史數(shù)據(jù)條目還包括如下屬性: 前置位字段:用于辨別不同的數(shù)據(jù)流,若兩個(gè)以上未命中地址的前置位在同一范圍內(nèi),則認(rèn)為該兩個(gè)以上未命中地址屬于同一數(shù)據(jù)流; 起始地址字段,用于記錄預(yù)取流的起始地址的索引位; 地址差值字段,用于記錄預(yù)取流的步幅; 計(jì)數(shù)器2字段,用于記錄進(jìn)入此預(yù)取模式的請(qǐng)求個(gè)數(shù)預(yù)取流的地址個(gè)數(shù); 判斷歷史數(shù)據(jù)表是否命中的方法為:用當(dāng)前未命中地址的索引位的起始地址分別減去屬于相同數(shù)據(jù)流的最近的M個(gè)未命中地址預(yù)取流起始地址的索引位起始地址,差值分別除以對(duì)應(yīng)的M個(gè)未命中地址的地址差值,將M個(gè)結(jié)果分別與對(duì)應(yīng)的M個(gè)計(jì)數(shù)器2相減,若存在一個(gè)以上小于零的差值,則認(rèn)為歷史數(shù)據(jù)表命中;若歷史數(shù)據(jù)表命中,則歷史數(shù)據(jù)表將當(dāng)前未命中地址和命中預(yù)取流的地址差值、計(jì)數(shù)器2發(fā)送給步幅預(yù)取表并存儲(chǔ)則步幅預(yù)取表將當(dāng)前未命中地址發(fā)送給歷史數(shù)據(jù)表并存儲(chǔ)。6.如權(quán)利要求1所述的基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器,其特征在于:所述數(shù)據(jù)隊(duì)列按時(shí)間順序存儲(chǔ)數(shù)據(jù)請(qǐng)求的地址,數(shù)據(jù)請(qǐng)求包括二級(jí)緩存直接發(fā)起的數(shù)據(jù)請(qǐng)求和預(yù)取模式發(fā)起的數(shù)據(jù)請(qǐng)求。7.如權(quán)利要求1或6所述的基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器,其特征在于:所述數(shù)據(jù)隊(duì)列存儲(chǔ)多個(gè)條目,每個(gè)條目包括: 有效標(biāo)志字段,用于表示二級(jí)緩存直接發(fā)起的訪存請(qǐng)求或者由預(yù)取發(fā)起的訪存請(qǐng)求有效,有效置I; 發(fā)起標(biāo)志字段,用于表示預(yù)取請(qǐng)求已經(jīng)發(fā)起,I表示預(yù)取請(qǐng)求已經(jīng)完成,O表示預(yù)取請(qǐng)求尚未完成; 預(yù)取標(biāo)志字段,用于表示哪種模式發(fā)起的預(yù)取請(qǐng)求,10表示由二級(jí)緩存發(fā)起的訪存請(qǐng)求,01表示由預(yù)取發(fā)起模塊發(fā)起的訪存請(qǐng)求,11表示由二級(jí)緩存與預(yù)取發(fā)起模塊發(fā)起的訪存請(qǐng)求; 地址字段,用于記錄預(yù)取的起始地址; 數(shù)據(jù)有效字段,用于表示已從外部存儲(chǔ)獲得數(shù)據(jù),I表示數(shù)據(jù)已經(jīng)完成讀取,O表示數(shù)據(jù)尚未完成讀取; 數(shù)據(jù)字段,用于存儲(chǔ)從動(dòng)態(tài)隨機(jī)存儲(chǔ)器中預(yù)取的數(shù)據(jù)。8.如權(quán)利要求7所述的基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器,其特征在于:所述數(shù)據(jù)隊(duì)列還包括冗余檢測(cè)模塊,通過冗余檢測(cè)和預(yù)取標(biāo)志能夠判斷預(yù)取是否成功,同時(shí)排除重復(fù)請(qǐng)求。9.一種基于權(quán)利要求1所述基于步幅和數(shù)據(jù)相關(guān)性的數(shù)據(jù)預(yù)取器的預(yù)取方法,其特征在于,包括以下步驟: (1)當(dāng)二級(jí)緩存發(fā)送未命中后,將請(qǐng)求加入數(shù)據(jù)隊(duì)列,并將數(shù)據(jù)隊(duì)列中的預(yù)取標(biāo)志記為10;將該地址稱為當(dāng)前未命中地址;同時(shí)執(zhí)行步驟(2); (2)當(dāng)二級(jí)緩存發(fā)送未命中后,將未命中地址的前置位與步幅預(yù)取表中的前置位相比較,找到對(duì)應(yīng)的數(shù)據(jù)流,通過與前地址和地址差值比較,決定狀態(tài)機(jī)的狀態(tài),如果相等稱為步幅預(yù)取表命中;同時(shí)執(zhí)行步驟(3); (3)當(dāng)二級(jí)緩存發(fā)送未命中后,未命中的地址與歷史數(shù)據(jù)表中的起始地址、步幅和次數(shù)比較,若命中歷史數(shù)據(jù)表,則步幅預(yù)取表中的狀態(tài)機(jī)直接進(jìn)入預(yù)取狀態(tài),并替換前地址和地址差值; (4)步驟(2)中狀態(tài)機(jī)剛開始進(jìn)入初始狀態(tài),如果步幅預(yù)取表未命中,則狀態(tài)機(jī)讓處于初始狀態(tài);如果步幅預(yù)取表命中,狀態(tài)機(jī)進(jìn)入訓(xùn)練狀態(tài);如果歷史數(shù)據(jù)表命中,狀態(tài)機(jī)進(jìn)入預(yù)取狀態(tài); (5)若狀態(tài)機(jī)處于訓(xùn)練狀態(tài),如果步幅預(yù)取表未命中,則狀態(tài)機(jī)讓進(jìn)入初始狀態(tài);如果步幅預(yù)取表命中,則狀態(tài)機(jī)仍處于訓(xùn)練狀態(tài),同時(shí)計(jì)數(shù)器I字段加I;直到計(jì)數(shù)器I字段大于等于3時(shí)步幅預(yù)取再次表命中或者歷史數(shù)據(jù)表命中,狀態(tài)機(jī)進(jìn)入預(yù)取狀態(tài); (6)若狀態(tài)機(jī)進(jìn)入預(yù)取狀態(tài),則通過步幅預(yù)取表中的前地址和地址差值計(jì)算得到預(yù)取地址,將此請(qǐng)求加入數(shù)據(jù)隊(duì)列;若步幅預(yù)取表持續(xù)命中,則狀態(tài)機(jī)保持預(yù)取狀態(tài),計(jì)數(shù)器I字段加I;若步幅預(yù)取表未命中,則狀態(tài)機(jī)進(jìn)入初始狀態(tài)。
【文檔編號(hào)】G06F12/0862GK106021128SQ201610374345
【公開日】2016年10月12日
【申請(qǐng)日】2016年5月31日
【發(fā)明人】劉楊, 陳壯, 劉波, 龔宇, 陸生禮
【申請(qǐng)人】東南大學(xué)—無(wú)錫集成電路技術(shù)研究所