面向重放機(jī)制的緩存操作方法及裝置制造方法
【專利摘要】本發(fā)明實(shí)施例提供了一種面向重放機(jī)制的緩存操作方法及裝置,涉及程序重放領(lǐng)域。保證了程序在重放時(shí)緩存命中率的穩(wěn)定性,并進(jìn)一步保證了重放機(jī)制中程序重放時(shí)緩存命中率優(yōu)于程序初次運(yùn)行的緩存命中率。本發(fā)明實(shí)施例提供的面向重放機(jī)制的緩存操作方法,包括:在初次運(yùn)行程序的過程中,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),根據(jù)所述與第一緩存行匹配的歷史緩存行生成替換信息并將所述第一緩存行中的局部唯一標(biāo)識信息替換與所述第一緩存行匹配的歷史緩存行中的局部唯一標(biāo)識信息保存在與第一緩存行匹配的歷史緩存行中;在重放程序的過程中,當(dāng)存在與第二緩存行匹配的替換信息時(shí),將所述第二緩存行保存到輔助緩存中。
【專利說明】面向重放機(jī)制的緩存操作方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及程序重放領(lǐng)域,特別是一種面向重放機(jī)制的緩存操作方法及裝置。
【背景技術(shù)】
[0002]程序重放是一種常見的應(yīng)用,在程序調(diào)試(特別是并行程序的調(diào)試)、錯(cuò)誤容忍和特征分析等領(lǐng)域有著極為重要的作用。
[0003]目前,程序重放機(jī)制只是在內(nèi)存層面對于內(nèi)存的訪存(load/store)行為有記錄,相對于內(nèi)存而言,緩存的速度對于數(shù)據(jù)訪問存儲和指令操作具有明顯的速度上的優(yōu)勢,但是緩存的大小相比之下又非常小,如何提高程序重放過程中數(shù)據(jù)訪存緩存的命中率是亟需解決的問題。
[0004]現(xiàn)有的程序重放機(jī)制在記錄緩存行為時(shí)僅僅是簡單的歷史訪存操作記錄,由于緩存的容量有限,在程序重放過程中發(fā)生緩存操作且該訪存操作未命中緩存時(shí),在緩存仍然有空閑的情況下直接將訪存操作對應(yīng)的內(nèi)存行以緩存行的形式存儲到緩存中,在緩存已滿的情況下,將符合替換策略(如先進(jìn)先出策略、最后最近使用型策略)的緩存行踢出所述緩存使得緩存空閑進(jìn)而使得訪存操作對應(yīng)的內(nèi)存行以緩存行的形式存儲到緩存中。
[0005]在實(shí)現(xiàn)本發(fā)明實(shí)施例的過程中,發(fā)明人發(fā)現(xiàn)完整的程序中可能需要對某一內(nèi)存行進(jìn)行多次的訪存操作,由于簡單的替換策略使得訪存操作需要多次訪問的內(nèi)存行可能被重復(fù)的存儲到緩存中并被多次的從緩存中踢出,進(jìn)而不能保證程序在重放時(shí)緩存命中率的穩(wěn)定性更不能保證重放機(jī)制中程序重放時(shí)緩存命中率優(yōu)于程序初次運(yùn)行的緩存命中率。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的在于提供一種面向重放機(jī)制的緩存操作方法及裝置,保證了程序在重放時(shí)緩存命中率的穩(wěn)定性,并進(jìn)一步保證了重放機(jī)制中程序重放時(shí)緩存命中率優(yōu)于程序初次運(yùn)行的緩存命中率。
[0007]一方面,本發(fā)明實(shí)施例提供了一種面向重放機(jī)制的緩存操作方法,用于面向重放機(jī)制的緩存,所述面向重放機(jī)制的緩存包括緩存數(shù)據(jù)區(qū)和緩存池,所述緩存數(shù)據(jù)區(qū)用于存放當(dāng)前運(yùn)行的程序根據(jù)訪存指令生成的第一類型緩存行,所述緩存池用于存放歷史緩存行,所述第一類型緩存行包括標(biāo)示TAG信息、局部唯一標(biāo)識信息以及訪存指令需要訪存的數(shù)據(jù),所述歷史緩存行包括程序初次運(yùn)行過程中被替換出來的第一類型緩存行的TAG信息和局部唯一標(biāo)識信息,所述方法,包括:
[0008]在初次運(yùn)行程序的過程中,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),根據(jù)所述與第一緩存行匹配的歷史緩存行生成替換信息并將所述第一緩存行中的局部唯一標(biāo)識信息替換與所述第一緩存行匹配的歷史緩存行中的局部唯一標(biāo)識信息保存在與第一緩存行匹配的歷史緩存行中,其中,所述第一緩存行為每當(dāng)接收到訪存指令且該訪存指令未命中已存滿的緩存數(shù)據(jù)區(qū)時(shí)生成的第一類型緩存行所述替換信息包括與第一緩存行匹配的歷史緩存行中的TAG信息和局部唯一標(biāo)識信息;[0009]在重放程序的過程中,當(dāng)存在與第二緩存行匹配的替換信息時(shí),將所述第二緩存行保存到輔助緩存中,所述第二緩存行為程序重放過程中每當(dāng)接收到訪存指令且該訪存指令既未命中已存滿緩存數(shù)據(jù)區(qū)也未命中所述輔助緩存時(shí)被替換出來的第一類型緩存行。
[0010]另一方面,本發(fā)明實(shí)施例還提供了一種面向重放機(jī)制的緩存操作裝置,用于面向重放機(jī)制的緩存,所述面向重放機(jī)制的緩存包括緩存數(shù)據(jù)區(qū)和緩存池,所述緩存數(shù)據(jù)區(qū)用于存放當(dāng)前運(yùn)行的程序根據(jù)訪存指令生成的第一類型緩存行,所述緩存池用于存放歷史緩存行,所述第一類型緩存行包括標(biāo)示TAG信息、局部唯一標(biāo)識信息以及訪存指令需要訪存的數(shù)據(jù),所述歷史緩存行包括程序初次運(yùn)行過程中被替換出來的第一類型緩存行的TAG信息和局部唯一標(biāo)識信息,所述裝置,包括:
[0011]第一生成單元,用于在初次運(yùn)行程序的過程中,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),根據(jù)所述與第一緩存行匹配的歷史緩存行生成替換信息并將所述第一緩存行中的局部唯一標(biāo)識信息替換與所述第一緩存行匹配的歷史緩存行中的局部唯一標(biāo)識信息保存在與第一緩存行匹配的歷史緩存行中,其中,所述第一緩存行為每當(dāng)接收到訪存指令且該訪存指令未命中已存滿的緩存數(shù)據(jù)區(qū)時(shí)生成的第一類型緩存行所述替換信息包括與第一緩存行匹配的歷史緩存行中的TAG信息和局部唯一標(biāo)識信息;
[0012]第一執(zhí)行單元,用于在重放程序的過程中,當(dāng)?shù)谝簧蓡卧傻奶鎿Q信息中存在與第二緩存行匹配的替換信息時(shí),將所述第二緩存行保存到輔助緩存中,所述第二緩存行為程序重放過程中每當(dāng)接收到訪存指令且該訪存指令既未命中已存滿緩存數(shù)據(jù)區(qū)也未命中所述輔助緩存時(shí)被替換出來的第一類型緩存行。
[0013]本發(fā)明實(shí)施例提供的面向重放機(jī)制的緩存操作方法及裝置,通過緩存行池保存程序初次運(yùn)行時(shí)從緩存數(shù)據(jù)區(qū)被替換出來的第一類型緩存行,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),說明在整個(gè)程序的初次運(yùn)行過程中,生成第一緩存行的訪存指令在生成第一緩存行之前保存在緩存數(shù)據(jù)區(qū)中并在第一緩存行的訪存指令到達(dá)之前被替換出緩存數(shù)據(jù)區(qū),從而使得第一緩存行被反復(fù)的從緩存數(shù)據(jù)區(qū)刪除和寫入,由于在初次運(yùn)行程序的時(shí)候?qū)⒎磸?fù)被刪除和寫入緩存數(shù)據(jù)區(qū)的緩存行以替換信息的形式記錄下來,并在重放程序的過程中根據(jù)替換信息,將與替換信息匹配的第二緩存行保存到輔助緩存中,那么第二緩存行對應(yīng)的訪存指令在后期到達(dá)時(shí)可以從輔助緩存中命中,進(jìn)而保證了程序重放過程中的緩存命中率并且還進(jìn)一步提高了程序重放過程中的緩存命中率。
【專利附圖】
【附圖說明】
[0014]圖1所示為本發(fā)明實(shí)施例提供的一種面向重放機(jī)制的緩存操作方法流程圖;
[0015]圖2為本發(fā)明實(shí)施例提供的面向重放機(jī)制的緩存操作方法中步驟101的流程圖;
[0016]圖3為本發(fā)明又一實(shí)施例提供的面向重放機(jī)制的緩存操作方法流程圖;
[0017]圖4a為本發(fā)明另一實(shí)施例提供的面向重放機(jī)制的緩存操作方法中初步運(yùn)行程序的流程圖;
[0018]圖4b為本發(fā)明另一實(shí)施例提供的面向重放機(jī)制的緩存操作方法中重放程序的流程圖;
[0019]圖5為本發(fā)明另一實(shí)施例提供的面向重放機(jī)制的緩存操作裝置的結(jié)構(gòu)示意圖;
[0020]圖6為圖4所示的面向重放機(jī)制的緩存操作方法中記錄用緩存的結(jié)構(gòu)結(jié)構(gòu)示意圖;
[0021]圖1為圖6所示的記錄用緩存中記錄用緩存組的結(jié)構(gòu)示意圖;
[0022]圖8為圖4所示的面向重放機(jī)制的緩存操作方法中重放用緩存的結(jié)構(gòu)結(jié)構(gòu)示意圖;
[0023]圖9為圖8所示的重放用緩存中重放用緩存組的結(jié)構(gòu)示意圖;
[0024]圖10為本發(fā)明實(shí)施例提供的面向重放機(jī)制的緩存操作裝置的結(jié)構(gòu)示意圖一;
[0025]圖11為圖10所示的面向重放機(jī)制的緩存操作裝置中第一生成單元的結(jié)構(gòu)示意圖;
[0026]圖12為本發(fā)明實(shí)施例提供的面向重放機(jī)制的緩存操作裝置的結(jié)構(gòu)示意圖二。【具體實(shí)施方式】
[0027]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0028]圖1所示為本發(fā)明實(shí)施例提供的一種面向重放機(jī)制的緩存操作方法流程圖。
[0029]如圖1所示,本發(fā)明實(shí)施例提供了一種面向重放機(jī)制的緩存操作方法,用于面向重放機(jī)制的緩存,所述面向重放機(jī)制的緩存包括緩存數(shù)據(jù)區(qū)和緩存池,所述緩存數(shù)據(jù)區(qū)用于存放當(dāng)前運(yùn)行的程序根據(jù)訪存指令生成的第一類型緩存行,所述緩存池用于存放歷史緩存行,所述第一類型緩存行包括標(biāo)示TAG信息、局部唯一標(biāo)識信息以及訪存指令需要訪存的數(shù)據(jù),所述歷史緩存行包括程序初次運(yùn)行過程中被替換出來的第一類型緩存行的TAG信息和局部唯一標(biāo)識信息,所述方法,包括:
[0030]步驟101、在初次運(yùn)行程序的過程中,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),根據(jù)所述與第一緩存行匹配的歷史緩存行生成替換信息并將所述第一緩存行中的局部唯一標(biāo)識信息替換與所述第一緩存行匹配的歷史緩存行中的局部唯一標(biāo)識信息保存在與第一緩存行匹配的歷史緩存行中。
[0031]其中,所述第一緩存行為每當(dāng)接收到訪存指令且該訪存指令未命中已存滿的緩存數(shù)據(jù)區(qū)時(shí)生成的第一類型緩存行所述替換信息包括與第一緩存行匹配的歷史緩存行中的TAG信息和局部唯一標(biāo)識信息。
[0032]步驟102、在重放程序的過程中,當(dāng)存在與第二緩存行匹配的替換信息時(shí),將所述第二緩存行保存到輔助緩存中。
[0033]其中,所述第二緩存行為程序重放過程中每當(dāng)接收到訪存指令且該訪存指令既未命中已存滿緩存數(shù)據(jù)區(qū)也未命中所述輔助緩存時(shí)被替換出來的第一類型緩存行。
[0034]值得說明的是,所述第一類型緩存行中的所述TAG信息與所述訪存指令需要訪存的數(shù)據(jù)均與現(xiàn)有技術(shù)中的定義相同,此處不再贅述,所述局部唯一標(biāo)識信息,為程序從頭到尾執(zhí)行一次出現(xiàn)的分配訪存指令的標(biāo)識,該標(biāo)識在程序頭到尾執(zhí)行的過程中是唯一的,且在重放程序的過程中,以初次運(yùn)行程序時(shí)采用的分配原則對訪存指令進(jìn)行標(biāo)識分配。
[0035]本發(fā)明實(shí)施例提供的面向重放機(jī)制的緩存操作方法,通過緩存行池保存程序初次運(yùn)行時(shí)從緩存數(shù)據(jù)區(qū)被替換出來的第一類型緩存行,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),說明在整個(gè)程序的初次運(yùn)行過程中,生成第一緩存行的訪存指令在生成第一緩存行之前保存在緩存數(shù)據(jù)區(qū)中并在第一緩存行的訪存指令到達(dá)之前被替換出緩存數(shù)據(jù)區(qū),從而使得第一緩存行被反復(fù)的從緩存數(shù)據(jù)區(qū)刪除和寫入,由于在初次運(yùn)行程序的時(shí)候?qū)⒎磸?fù)被刪除和寫入緩存數(shù)據(jù)區(qū)的緩存行以替換信息的形式記錄下來,并在重放程序的過程中根據(jù)替換信息,將與替換信息匹配的第二緩存行保存到輔助緩存中,那么第二緩存行對應(yīng)的訪存指令在后期到達(dá)時(shí)可以從輔助緩存中命中,進(jìn)而保證了程序重放過程中的緩存命中率并且還進(jìn)一步提高了程序重放過程中的緩存命中率。
[0036]圖2為本發(fā)明實(shí)施例提供的面向重放機(jī)制的緩存操作方法中步驟101的流程圖。在本發(fā)明一實(shí)施例中,如圖2所示,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),根據(jù)所述與第一緩存行匹配的歷史緩存行生成替換信息,可以通過以下步驟實(shí)現(xiàn):
[0037]步驟1011、在接收到訪存指令且該訪存指令未命中所述存數(shù)據(jù)區(qū)時(shí),根據(jù)該訪存指令生成第一緩存行。
[0038]步驟1012、根據(jù)預(yù)先設(shè)置的第一替換策略從所述緩存數(shù)據(jù)區(qū)中選出被替換的第一類型緩存行,將所述第一緩存行保存到被替換的第一緩存行的位置。
[0039]其中,所述第一替換策略可以是先進(jìn)先出策略、最后最近使用型策略等,此處不做限制。
[0040]步驟1013、將所述被替換的第一類型緩存行以歷史緩存行的形式保存到緩存行池中。
[0041]其中,所述歷史緩存行可以包括被替換的第一類型緩存行中的TAG信息和被替換的第一類型緩存行中的局部唯一標(biāo)識信息。優(yōu)選的,當(dāng)每個(gè)緩存數(shù)據(jù)區(qū)對應(yīng)一個(gè)緩存行池時(shí),每個(gè)緩存行池中保存的歷史緩存行可以只由TAG信息和局部唯一標(biāo)識組成,一對緩存數(shù)據(jù)區(qū)和緩存行池構(gòu)成一個(gè)記錄用緩存組,這樣能夠達(dá)到節(jié)省存儲空間。
[0042]值得說明的是,所述緩存行池可以保存在內(nèi)存中,也可以保存在緩存中,由于記錄程序(即初次運(yùn)行程序)只需要在執(zhí)行一次,如果需要將程序初次運(yùn)行過程中生成的歷史緩存行均記錄在緩存池中,以進(jìn)一步提高緩存的命中率,優(yōu)選采用內(nèi)存來保存所述緩存行池,值得說明的是,采用緩存也有其較好的效果,即在歷史緩存行數(shù)量較少時(shí)采用緩存在保證緩存命中率的同時(shí)還可以提高程序運(yùn)行效率。具體的:(1)所述緩存行池保存在內(nèi)存中,所述將所述被替換的第一類型緩存行以歷史緩存行的形式保存到緩存行池中,包括:將所述被替換的第一類型緩存行以歷史緩存行的形式直接保存到緩存行池中;(2)所述緩存行池保存在緩存中,所述將所述被替換的第一類型緩存行以歷史緩存行的形式保存到緩存行池中,包括:判斷所述緩存行池是否空閑;若所述緩存行池空閑,將所述被替換的第一類型緩存行以歷史緩存行的形式保存到所述緩存行池中,否則,將符合預(yù)先設(shè)置的第二替換策略的歷史緩存行刪除以使得所述緩存行池空閑,將所述被替換的第一類型緩存行以歷史緩存行的形式保存到所述緩存行池中。
[0043]圖3為本發(fā)明又一實(shí)施例提供的面向重放機(jī)制的緩存操作方法流程圖,在本發(fā)明又一實(shí)施例中,為了進(jìn)一步減少替換信息被重放程序過程中被獲取的效率,對初次運(yùn)行程序過程中生成的替換信息進(jìn)行編譯以形成日志文件,并在重放程序時(shí)接收到日志文件后對日志文件進(jìn)行解碼,由于編譯動(dòng)作可以縮小初次運(yùn)行程序過程中生成的替換信息的大小,便于其傳輸,從而提高日志文件的傳輸和操作效率。[0044]如圖3所示,本發(fā)明實(shí)施例提供的面向重放機(jī)制的緩存操作方法,用于面向重放機(jī)制的緩存,所述面向重放機(jī)制的緩存包括緩存數(shù)據(jù)區(qū)和緩存池,所述緩存數(shù)據(jù)區(qū)用于存放當(dāng)前運(yùn)行的程序根據(jù)訪存指令生成的第一類型緩存行,所述緩存池用于存放歷史緩存行,所述第一類型緩存行包括標(biāo)示TAG信息、局部唯一標(biāo)識信息以及訪存指令需要訪存的數(shù)據(jù),所述歷史緩存行包括程序初次運(yùn)行過程中被替換出來的第一類型緩存行的TAG信息和局部唯一標(biāo)識信息,所述方法,包括:
[0045]步驟301、在初次運(yùn)行程序的過程中,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),根據(jù)所述與第一緩存行匹配的歷史緩存行生成替換信息。
[0046]其中,所述第一緩存行為每當(dāng)接收到訪存指令且該訪存指令未命中已存滿的緩存數(shù)據(jù)區(qū)時(shí)生成的第一類型緩存行所述替換信息包括與第一緩存行匹配的歷史緩存行中的TAG信息和局部唯一標(biāo)識信息。
[0047]步驟302、在初次運(yùn)行所述程序的過程中,將所述替換信息保存至日志緩沖區(qū),在接收到編譯觸發(fā)時(shí)對所述日志緩沖區(qū)保存的至少一條替換信息進(jìn)行編碼以生成日志文件。
[0048]其中,所述步驟302的觸發(fā)形式可以是程序結(jié)束觸發(fā),也可以是當(dāng)日志緩沖區(qū)中保存的替換信息的條數(shù)達(dá)到一定閾值時(shí)觸發(fā),具體的,所述在接收到編譯觸發(fā)時(shí)對所述日志緩沖區(qū)保存的至少一條替換信息進(jìn)行編碼以生成日志文件,可以包括:在所述程序初次運(yùn)行結(jié)束時(shí),觸發(fā)編譯,對所述日志緩沖區(qū)保存的至少一條替換信息編譯以生成日志文件;還可以包括:在所述日志緩沖區(qū)中緩存的替換信息條數(shù)等于預(yù)先設(shè)置的第一閾值時(shí),觸發(fā)編譯,對所述日志緩沖區(qū)保存的替換信息編譯以生成日志文件并清除所述日志緩沖區(qū)中保存的替換信息;在所述程序運(yùn)行結(jié)束且所述日志緩沖區(qū)中保存有至少一條替換信息時(shí),觸發(fā)編譯,對所述日志緩沖區(qū)保存的替換信息編譯以生成日志文件。
[0049]值得說明的是,當(dāng)運(yùn)行龐大且復(fù)雜的程序時(shí),需要對海量的訪存操作進(jìn)行處理,則日志緩沖區(qū)的規(guī)模必然變得非常龐大,甚至超出內(nèi)存可分配的范圍,一方面會導(dǎo)致生成的日志文件規(guī)模巨大,一方面將導(dǎo)致日志文件的讀取、修改和轉(zhuǎn)移等操作不便,故在程序龐大且復(fù)雜時(shí),優(yōu)先采用當(dāng)日志緩沖區(qū)中保存的替換信息的條數(shù)達(dá)到一定閾值時(shí)觸發(fā)的觸發(fā)形式,實(shí)現(xiàn)了對大量訪存操作進(jìn)行分塊處理,日志文件的大小被分塊的規(guī)模所限制,對于日志文件的各種操作也更加方便和高效。
[0050]步驟303、在重放所述程序時(shí),獲取所述程序在初次運(yùn)行過程中生成的日志文件,將所述日志文件解碼以生成替換信息集合。
[0051]其中,所述替換信息集合包括至少一條所述替換信息。值得說明的是,步驟303的實(shí)現(xiàn)方式有多種,可以在重放程序開始時(shí)先獲取日志文件并對日志文件進(jìn)行解碼以生成替換信息集合。此處,若程序?yàn)閺?fù)雜且龐大的,會存在日志文件較大的問題,一次將文件進(jìn)行解碼會占用很大的存儲空間,故可以在生成替換信息的時(shí)候,以該替換信息生成時(shí)間的先后為順序保存至所述日志緩沖區(qū),然后根據(jù)替換信息的生成時(shí)間,在程序重放的過程中逐步解碼所述日志文件以生成所述替換信息集合。逐步解碼的過程不僅僅只用于程序結(jié)束觸發(fā)生成的日志文件,也可以用于替換信息達(dá)到一定數(shù)目進(jìn)行觸發(fā)生成的日志文件。
[0052]步驟304、在重放程序的過程中,當(dāng)存在與第二緩存行匹配的替換信息時(shí),將所述第二緩存行保存到輔助緩存中。
[0053]其中,所述第二緩存行為程序重放過程中每當(dāng)接收到訪存指令且該訪存指令既未命中已存滿緩存數(shù)據(jù)區(qū)也未命中所述輔助緩存時(shí)被替換出來的第一類型緩存行,所述輔助緩存可以是合作緩存,也可以是二級緩存。
[0054]本發(fā)明實(shí)施例提供的面向重放機(jī)制的緩存操作方法,通過緩存行池保存程序初次運(yùn)行時(shí)從緩存數(shù)據(jù)區(qū)被替換出來的第一類型緩存行,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),說明在整個(gè)程序的初次運(yùn)行過程中,生成第一緩存行的訪存指令在生成第一緩存行之前保存在緩存數(shù)據(jù)區(qū)中并在第一緩存行的訪存指令到達(dá)之前被替換出緩存數(shù)據(jù)區(qū),從而使得第一緩存行被反復(fù)的從緩存數(shù)據(jù)區(qū)刪除和寫入,由于在初次運(yùn)行程序的時(shí)候?qū)⒎磸?fù)被刪除和寫入緩存數(shù)據(jù)區(qū)的緩存行以替換信息的形式記錄下來,并在重放程序的過程中根據(jù)替換信息,將與替換信息匹配的第二緩存行保存到輔助緩存中,那么第二緩存行對應(yīng)的訪存指令在后期到達(dá)時(shí)可以從輔助緩存中命中,進(jìn)而保證了程序重放過程中的緩存命中率并且還進(jìn)一步提高了程序重放過程中的緩存命中率。
[0055]為了使得本領(lǐng)域技術(shù)人員更好的理解本發(fā)明實(shí)施例提供的方案,本發(fā)明另一實(shí)施例提供了面向重放機(jī)制的緩存操作方法,以一具體實(shí)例來進(jìn)行詳細(xì)的說明。
[0056]圖4a為本發(fā)明另一實(shí)施例提供的面向重放機(jī)制的緩存操作方法中初步運(yùn)行程序的流程圖,圖4b為本發(fā)明另一實(shí)施例提供的面向重放機(jī)制的緩存操作方法中重放程序的流程圖。圖5為本發(fā)明另一實(shí)施例提供的面向重放機(jī)制的緩存操作裝置,如圖4a和圖4b所示,在本實(shí)施例中,本發(fā)明另一實(shí)施例提供的面向重放機(jī)制的緩存操作方法,應(yīng)用于如圖5所示的面向重放機(jī)制的緩存操作裝置,該裝置包括記錄模塊51、重放模塊52以及日志緩沖區(qū)53。
[0057]值得說明的是,在本實(shí)施例中,將面向重放機(jī)制的緩存在程序初次運(yùn)行時(shí)稱為記錄用緩存,此時(shí)使用緩存中的數(shù)字緩存區(qū)和緩存行池,在程序重放時(shí)稱為重放用緩存,此時(shí)使用緩存中的數(shù)字緩存區(qū)和輔助緩存。
[0058]其中,所述記錄模塊51包括第一訪存計(jì)數(shù)器511、記錄用緩存512、記錄器513以及編碼器514。所述記錄用緩存512,如圖6所示,用于保存多個(gè)記錄用緩存組。記錄用緩存組,如圖7所示,包括緩存數(shù)據(jù)區(qū)和緩存行池,其中緩存數(shù)據(jù)區(qū)包括多條第一類型緩存行,每條第一類型緩存行包括標(biāo)示TAG信息(一般是該第一類型緩存行在內(nèi)存當(dāng)中對應(yīng)的地址,使得尋址操作能夠進(jìn)行)、訪存指令需要訪存的數(shù)據(jù)(內(nèi)存行當(dāng)中的內(nèi)容,也就是字I?字4,一般現(xiàn)在是一次內(nèi)存訪問是4字節(jié)也就是32個(gè)bit,所以在圖7中用4個(gè)字來標(biāo)示),即在現(xiàn)有緩存行的基礎(chǔ)上增加一局部唯一標(biāo)識信息,在本實(shí)施例中,通過第一訪存計(jì)數(shù)器實(shí)現(xiàn)對訪存指令進(jìn)行局部唯一標(biāo)識的分配,局部唯一標(biāo)識信息為歷史計(jì)數(shù)位,用于記錄該項(xiàng)第一類型緩存行被調(diào)入記錄用緩存數(shù)據(jù)區(qū)時(shí)第一訪存計(jì)數(shù)器當(dāng)前的計(jì)數(shù)器值。所述緩存行池包括至少一條歷史緩存行,歷史緩存行數(shù)量可以預(yù)先設(shè)定,用于記錄從記錄用數(shù)據(jù)緩存區(qū)中被替換出來的第一類型緩存行,在本實(shí)施例中,從記錄用數(shù)據(jù)緩存區(qū)中被替換出來的第一類型緩存行以歷史緩存行的形式保存在所述緩存行池中。在本實(shí)施例中,所述歷史緩存行僅包括TAG信息和歷史計(jì)數(shù)位信息,從而達(dá)到節(jié)省緩存空間和提高操作效率的目的。值得說明的是,所述緩存行池612也可以放在內(nèi)存中,采用與一般緩存不同的結(jié)構(gòu)和材質(zhì),并因此帶來緩存行池容量巨大的有益效果,這是由于用于記錄的程序只需要執(zhí)行一次,其執(zhí)行效率及代價(jià)為了重放操作可以做出犧牲。
[0059]值得說明的是,上述記錄用緩存512是現(xiàn)有緩存的改進(jìn)設(shè)計(jì),該現(xiàn)有緩存需要具備確定性的替換策略(deterministic replace strategy),要求多次運(yùn)行中同一條件下選擇的被替換出去的緩存行一致,典型的替換策略如先進(jìn)先出型(First In First Out,FIFO)、最后最近使用型(Last Recently Used,LRU)等,可為記錄器513提供額外的分析信息和記錄信息。由于采用了確定的替換策略之后,被替換出去的緩存行就有了一定的規(guī)律性,這樣在做記錄的時(shí)候就有可能使用到這樣的額外規(guī)律了。
[0060]對應(yīng)地,本發(fā)明實(shí)施例的重放模塊52包括解碼器521、第二訪存計(jì)數(shù)器522、重放用緩存523和重放器524。所述重放用緩存523,如圖8所示,包括至少一個(gè)重放用緩存組。重放用緩存組,如圖9所示,包括第重放用緩存數(shù)據(jù)區(qū)和合作緩存(本實(shí)施例中以合作緩存為例進(jìn)行詳細(xì)說明)。其中,第二緩存數(shù)據(jù)區(qū)包括多條第一類型緩存行。所述合作緩存也包括多條第一類型緩存行,合作緩存中第一類型緩存行的數(shù)量可以預(yù)先設(shè)定,用于存放從重放用緩存數(shù)據(jù)區(qū)被替換出去的并且有必要暫時(shí)保留的第一類型緩存行,這些第一類型緩存行雖已被替換出來,但以后還會被用到。值得說明的是,合作緩存812需要有快速的讀寫訪存能力,因此需要采用和現(xiàn)有緩存相同的材質(zhì)和結(jié)構(gòu),導(dǎo)致其容量有限,因此需要預(yù)先設(shè)定大小,這也同時(shí)帶來程序重放時(shí)不能保證緩存命中率100%的原因,但由于合作緩存的讀寫速度要遠(yuǎn)高于內(nèi)存,因此第一類型緩存行由合作緩存調(diào)入重放用緩存數(shù)據(jù)區(qū)在時(shí)間上可以認(rèn)為是緩存命中,從而可以在保證緩存命中率的基礎(chǔ)上提聞緩存命中率。
[0061]值得說明的是,因?yàn)槌绦虻某醮芜\(yùn)行和重放,在時(shí)間上是相互獨(dú)立的,所以第一訪存計(jì)數(shù)器和第二訪存計(jì)數(shù)器的功能可以通過一個(gè)計(jì)數(shù)器來實(shí)現(xiàn)。
[0062]對應(yīng)于上述裝置,本發(fā)明另一實(shí)施例提供的面向重放機(jī)制的緩存操作方法,包括:
[0063]如圖4a所示的步驟400a-程序初次運(yùn)行和如圖4b所示的步驟400b_程序重放。其中,
[0064]步驟400a,包括:
[0065]步驟401a、將記錄用緩存內(nèi)各緩存行清空,第一訪存計(jì)數(shù)器清零,記錄器和編碼器初始化。
[0066]步驟402a、訪存操作出現(xiàn)(即接收到訪存指令)時(shí),根據(jù)訪存指令獲取訪存地址。
[0067]步驟403a、對第一訪存計(jì)數(shù)器加一,根據(jù)訪存操作的地址用位操作方法計(jì)算出其SET部分(對應(yīng)記錄用緩存組)和TAG部分(對應(yīng)記錄緩存組中的第一類型緩存行),將訪存地址定位到記錄用緩存中緩存數(shù)據(jù)區(qū)的記錄用緩存組。
[0068]步驟404a、遍歷該記錄用緩存組中所有第一類型緩存行,與該次訪存指令的TAG部分進(jìn)行比較,判斷緩存是否命中(即判斷此次訪存目的地址代表的內(nèi)存行是否已經(jīng)調(diào)入緩存)。如果訪存命中,即訪存操作的目的內(nèi)存塊已經(jīng)被調(diào)入緩存,執(zhí)行步驟405a,如果訪存未命中,執(zhí)行步驟406a。
[0069]步驟405a、將被命中的第一類型緩存行的歷史計(jì)數(shù)位更新為第一訪存計(jì)數(shù)器當(dāng)前的計(jì)數(shù)值。轉(zhuǎn)到步驟411a。
[0070]步驟406a、判斷所映射的記錄用緩存組是否已滿,如果所映射的記錄用緩存組中仍有空閑緩存行(即未滿),則執(zhí)行步驟407a,否則執(zhí)行步驟408a-步驟411a。
[0071]步驟407a、將該次訪存指令訪問的數(shù)據(jù)從內(nèi)存調(diào)入記錄用緩存生成第一類型緩存行,將第一訪存計(jì)數(shù)器當(dāng)前計(jì)數(shù)值寫入該第一類型緩存行的歷史計(jì)數(shù)位中,轉(zhuǎn)到步驟411a,等待下一次訪存操作的到來,對余下的訪存操作進(jìn)行處理。
[0072]步驟408a、根據(jù)預(yù)先設(shè)置的第一替換策略,如先進(jìn)先出型(FIFO)、最后最近使用型(LRU)等,選擇記錄用緩存組中被替換的第一類型緩存行A,將該第一類型緩存行A調(diào)入到緩存行池,將訪存指令訪問的內(nèi)存行調(diào)入到記錄用緩存中生成第一類型緩存行B(即第一緩存行)。
[0073]步驟409a、遍歷該記錄用緩存組的緩存行池,判斷緩存行池中是否存在與第一類型緩存行B相匹配的歷史緩存行C (即判斷在之前的訪存操作中是否存在相同的內(nèi)存行被調(diào)入緩存然后又被調(diào)出),如果緩存行池中存在匹配的歷史緩存行C,則執(zhí)行步驟410a。
[0074]步驟410a、根據(jù)匹配的歷史緩存行C生成替換信息,并將歷史緩存行C中的歷史計(jì)數(shù)位更新為第一類型緩存行B的歷史計(jì)數(shù)位。
[0075]其中替換信息就是歷史緩存行C的歷史計(jì)數(shù)位和歷史緩存行C的TAG信息。
[0076]步驟411a,判斷第一訪存計(jì)數(shù)器當(dāng)前計(jì)數(shù)值是否達(dá)到上限,如果當(dāng)前計(jì)數(shù)值未達(dá)到上限,則轉(zhuǎn)到步驟402a,等待下一次訪存操作的到來,對余下的訪存操作進(jìn)行處理;如果當(dāng)前計(jì)數(shù)器值達(dá)到預(yù)先設(shè)定的閾值,即一次能處理的緩存操作的數(shù)量,則執(zhí)行步驟412a,將日志緩沖區(qū)中的計(jì)數(shù)值進(jìn)行排序,優(yōu)選地按照從小到大的順序排序,然后將緩沖器數(shù)據(jù)編碼并寫入日志文件中,清空記錄用緩存和第一訪存計(jì)數(shù)器。然后轉(zhuǎn)到步驟402a,等待下一次訪存操作到來,對余下的訪存操作進(jìn)行處理。
[0077]本實(shí)施例中,當(dāng)運(yùn)行龐大且復(fù)雜的程序時(shí),需要對海量的訪存操作進(jìn)行處理,則日志緩沖區(qū)的規(guī)模必然變得龐大,甚至超出內(nèi)存可分配的范圍,一方面會導(dǎo)致生成的日志文件的規(guī)模巨大,另一方面將導(dǎo)致日志文件的讀取、修改和轉(zhuǎn)移等操作不便。通過對第一訪存計(jì)數(shù)器設(shè)置閾值,實(shí)現(xiàn)對大量訪存操作進(jìn)行分塊處理的好處在于,采取分塊處理之后,日志文件的大小被分塊的規(guī)模所限制,對于日志文件的各種操作也將更加方便和高效。
[0078]此外,如果對于日志文件的記錄信息(本實(shí)施例的記錄信息為訪存操作的計(jì)數(shù)值)沒有進(jìn)行編碼操作的話,隨著程序執(zhí)行的不斷深入,訪存操作的計(jì)數(shù)值也越來越大,日志文件的規(guī)模也越來越龐大,甚至計(jì)數(shù)值的大小會超過一般程序規(guī)定的整數(shù)值的上限。對于注重效率的記錄和重放操作,這種情況是很容易出現(xiàn)的,而對于計(jì)數(shù)值的歸零操作無疑能給這種情況節(jié)省大量的存儲空間,并且也不會出現(xiàn)計(jì)數(shù)值超過整數(shù)值上限的問題。
[0079]應(yīng)當(dāng)理解,在上述操作進(jìn)行過程中,如果重放應(yīng)用還需要記錄有關(guān)訪存的其他信息,那么有關(guān)訪存操作的其他具體信息也應(yīng)當(dāng)根據(jù)具體的重放策略進(jìn)行記錄。
[0080]步驟400b-程序重放,包括:
[0081]步驟401b、將重放用緩存內(nèi)各緩存行被清空,第二訪存計(jì)數(shù)器清零,重放器和解碼器初始化。
[0082]步驟402b、打開日志文件,重放模塊的解碼器對于初次運(yùn)行時(shí)記錄得到的日志文件進(jìn)行解碼處理,獲得替換信息集合。
[0083]可選地,解碼這一步驟在程序重放過程中逐步實(shí)現(xiàn),可以避免在程序開始時(shí)全部處理所帶來的重放程序占用存儲空間的問題。
[0084]步驟403b、訪存操作出現(xiàn)時(shí)獲取訪存地址,第二訪存計(jì)數(shù)器加一,對訪存操作的地址進(jìn)行計(jì)算,用位操作方法計(jì)算出其SET部分和TAG部分,用以尋找該緩存行在重放用緩存組中應(yīng)當(dāng)出現(xiàn)的第一類型緩存行,通過其SET部分定位到重放用緩存組。[0085]步驟404b、遍歷該重放用緩存組中數(shù)據(jù)緩存區(qū)中所有第一類型緩存行,與該次訪存操作的TAG部分進(jìn)行比較,判斷緩存是否命中(即此次訪存目的地址代表的內(nèi)存行是否已經(jīng)調(diào)入緩存),如果訪存命中,執(zhí)行步驟405b,否則執(zhí)行步驟406b-步驟407b。
[0086]步驟405b、如果訪存命中,即訪存操作的目的內(nèi)存行已經(jīng)被調(diào)入緩存,將被命中的第一類型緩存行的歷史計(jì)數(shù)位更新為第二訪存計(jì)數(shù)器當(dāng)前計(jì)數(shù)值。然后轉(zhuǎn)到步驟412b。
[0087]步驟406b、如果訪存暫時(shí)沒有命中,遍歷重放用緩存組中合作緩存中所有第一類型緩存行,與該次訪存指令的TAG部分進(jìn)行比較,判斷此次訪存目的地址代表的內(nèi)存行是否已經(jīng)調(diào)入緩存。如果命中,執(zhí)行步驟407b,如果未命中執(zhí)行步驟408b-步驟409。
[0088]步驟407b、在合作緩存中通過TAG比較找到了與訪存地址中的TAG相匹配的第一類型緩存信息K,將第一類型緩存行K直接傳遞給中央處理器,并將緩存行K的歷史計(jì)數(shù)位更新為第二訪存計(jì)數(shù)器的當(dāng)前計(jì)數(shù)值。然后轉(zhuǎn)到步驟412b。
[0089]由于合作緩存仍然是緩存,采用了與緩存相同的結(jié)構(gòu)和材料,讀寫速度與普通緩存相同,并且不需要從一般內(nèi)存當(dāng)中讀取內(nèi)存行,仍然可以看作訪存命中。
[0090]步驟408b、在合作緩存中沒有找到TAG相匹配的第一類型緩存行,根據(jù)訪存指令生成第一類型緩存行L,第一類型緩存行L替代符合預(yù)先設(shè)置的第一替換策略的第一類型緩存行M保存到重放用緩存中的緩存數(shù)據(jù)區(qū)。
[0091]步驟40%、比較緩存行M的歷史計(jì)數(shù)位與之前在解碼階段得到的替換信息集合中替換信息中記載的歷史計(jì)數(shù)位。如果二者不同,說明緩存行M在后續(xù)的訪存操作中不會再次用到,執(zhí)行步驟410b、將第一類型緩存行M丟棄。然后轉(zhuǎn)到步驟403b等待下一次訪存操作到來,對余下的訪存操作進(jìn)行處理。否則說明緩存行M在后續(xù)的訪存操作中還會再次用至IJ,如果將其丟棄,那么下次對緩存行M的訪問就會產(chǎn)生緩存未命中(cache miss),并因此導(dǎo)致再次訪問內(nèi)存,造成增加訪存時(shí)間,降低命中率的不利后果,故執(zhí)行步驟411b、此時(shí)重放器將第一類型緩存行M存入到合作緩存中,以備后續(xù)訪存使用。然后轉(zhuǎn)到步驟412b。
[0092]具體的,判斷合作緩存是否已滿:遍歷合作緩存,如果存在位置標(biāo)記為可用的緩存行,則表明合作緩存未滿,將第一類型緩存行M存入到合作緩存的該可用位置。如果合作緩存中不存在位置標(biāo)記為可用的緩存行,表明合作緩存中的所有位置都已經(jīng)被占用,則根據(jù)預(yù)先設(shè)定的替換策略,例如選擇合作緩存中歷史計(jì)數(shù)位最小的第一類型緩存行N被替換出去,將第一類型緩存行M存入合作緩存中第一類型緩存行N的位置。
[0093]步驟412b、判斷第二訪存計(jì)數(shù)器值是否達(dá)到閾值。如果訪存計(jì)數(shù)器未達(dá)到閾值,則轉(zhuǎn)到步驟403b,等待下一次訪存操作的到來,否則執(zhí)行步驟413b,清空第二訪存計(jì)數(shù)器及合作緩存,然后轉(zhuǎn)到步驟403b,等待下一次訪存操作的到來。
[0094]特別需要說明的是,這里采用的合作緩存和傳統(tǒng)的受害者緩存(victim cache)有很大的不同,本發(fā)明實(shí)施例中的合作緩存是利用緩存行中的局部唯一標(biāo)識信息以及根據(jù)日志文件生成的替換信息來保證合作緩存中的緩存行不會頻繁地進(jìn)出,并且保證這些存儲在合作緩存(coherent cache)中的緩存行都有存在的意義。而傳統(tǒng)的受害者緩存(victimcache)僅僅是保留了最近從緩存中被替換出去的緩存行,這些緩存行是否都能在接下來的訪存操作中被使用到是一個(gè)無法確定的問題,這一問題非常重要,如果受害者緩存中的信息在后面不會被用到,那么這種方法的效率就會受到很大的影響。并且,每次在發(fā)生緩存未命中時(shí),受害者緩存都需要更新,這樣的操作頻度對于緩存來說是很大的負(fù)擔(dān)。合作緩存的好處在于,合作緩存的每一個(gè)緩存行的讀入都是通過日志信息流來確定的,在未來一定會被再次使用到,因此只需要在日志信息反映的特定訪存次數(shù)與當(dāng)前訪存的局部唯一標(biāo)識相合拍時(shí)才會進(jìn)行更新,并不會在每一次緩存未命中時(shí)都需要更新,從而在提高訪存命中率的同時(shí),訪存操作效率得到了保證。
[0095]本發(fā)明實(shí)施例提供的面向重放機(jī)制的緩存操作方法,通過緩存行池保存程序初次運(yùn)行時(shí)從緩存數(shù)據(jù)區(qū)被替換出來的第一類型緩存行,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),說明在整個(gè)程序的初次運(yùn)行過程中,生成第一緩存行的訪存指令在生成第一緩存行之前保存在緩存數(shù)據(jù)區(qū)中并在第一緩存行的訪存指令到達(dá)之前被替換出緩存數(shù)據(jù)區(qū),從而使得第一緩存行被反復(fù)的從緩存數(shù)據(jù)區(qū)刪除和寫入,由于在初次運(yùn)行程序的時(shí)候?qū)⒎磸?fù)被刪除和寫入緩存數(shù)據(jù)區(qū)的緩存行以替換信息的形式記錄下來,并在重放程序的過程中根據(jù)替換信息,將與替換信息匹配的第二緩存行保存到輔助緩存中,那么第二緩存行對應(yīng)的訪存指令在后期到達(dá)時(shí)可以從輔助緩存中命中,進(jìn)而保證了程序重放過程中的緩存命中率并且還進(jìn)一步提高了程序重放過程中的緩存命中率。
[0096]圖10為本發(fā)明實(shí)施例提供的一種面向重放機(jī)制的緩存操作裝置結(jié)構(gòu)示意圖。如圖10所示,本發(fā)明實(shí)施例提供了一種面向重放機(jī)制的緩存操作裝置,用于面向重放機(jī)制的緩存,所述面向重放機(jī)制的緩存包括緩存數(shù)據(jù)區(qū)和緩存池,所述緩存數(shù)據(jù)區(qū)用于存放當(dāng)前運(yùn)行的程序根據(jù)訪存指令生成的第一類型緩存行,所述緩存池用于存放歷史緩存行,所述第一類型緩存行包括標(biāo)示TAG信息、局部唯一標(biāo)識信息以及訪存指令需要訪存的數(shù)據(jù),所述歷史緩存行包括程序初次運(yùn)行過程中被替換出來的第一類型緩存行的TAG信息和局部唯一標(biāo)識信息,所述裝置,包括:第一生成單元91和第一執(zhí)行單元92。
[0097]第一生成單元91,用于在初次運(yùn)行程序的過程中,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),根據(jù)所述與第一緩存行匹配的歷史緩存行生成替換信息并將所述第一緩存行中的局部唯一標(biāo)識信息替換與所述第一緩存行匹配的歷史緩存行中的局部唯一標(biāo)識信息保存在與第一緩存行匹配的歷史緩存行中。
[0098]其中,所述第一緩存行為每當(dāng)接收到訪存指令且該訪存指令未命中已存滿的緩存數(shù)據(jù)區(qū)時(shí)生成的第一類型緩存行所述替換信息包括與第一緩存行匹配的歷史緩存行中的TAG信息和局部唯一標(biāo)識信息。
[0099]在本發(fā)明實(shí)施例中,如圖11所示,所述第一生成單元91,包括:
[0100]第一生成模塊911,用于在接收到訪存指令且該訪存指令未命中所述存數(shù)據(jù)區(qū)時(shí),根據(jù)該訪存指令生成第一緩存行;
[0101]第一執(zhí)行模塊912,用于根據(jù)預(yù)先設(shè)置的第一替換策略從所述緩存數(shù)據(jù)區(qū)中選出被替換的第一類型緩存行,將所述第一生成模塊生成的第一緩存行保存到被替換的第一緩存行的位置;
[0102]第二執(zhí)行模塊913,用于將被所述第一執(zhí)行模塊替換出來的第一類型緩存行以歷史緩存行的形式保存到緩存行池中;
[0103]第二生成模塊914,用于當(dāng)所述緩存行池中存在與所述第一生成模塊生成的第一緩存行匹配的歷史緩存行時(shí),根據(jù)所述與第一緩存行匹配的歷史緩存行生成替換信息。
[0104]在本發(fā)明實(shí)施例中,所述緩存行池保存在內(nèi)存中,所述第二執(zhí)行模塊,包括:第一執(zhí)行子模塊,用于將所述被替換的第一類型緩存行以歷史緩存行的形式直接保存到緩存行池中?;蛘撸鼍彺嫘谐乇4嬖诰彺嬷?,所述第二執(zhí)行模塊,還包括:判斷子模塊,用于判斷所述緩存行池是否空閑;第二執(zhí)行子模塊,用于在所述判斷子模塊判斷得到所述緩存池空閑時(shí),將所述被替換的第一類型緩存行以歷史緩存行的形式保存到所述緩存行池中;第三執(zhí)行子模塊,用于在所述判斷子模塊判斷得到所述緩存池存滿時(shí),用于將符合預(yù)先設(shè)置的第二替換策略的歷史緩存行刪除以使得所述緩存行池空閑,將所述被替換的第一類型緩存行以歷史緩存行的形式保存到所述緩存行池中。
[0105]第一執(zhí)行單元92,用于在重放程序的過程中,當(dāng)?shù)谝簧蓡卧傻奶鎿Q信息中存在與第二緩存行匹配的替換信息時(shí),將所述第二緩存行保存到輔助緩存中。
[0106]其中,所述第二緩存行為程序重放過程中每當(dāng)接收到訪存指令且該訪存指令既未命中已存滿緩存數(shù)據(jù)區(qū)也未命中所述輔助緩存時(shí)被替換出來的第一類型緩存行。
[0107]進(jìn)一步的,為了減少替換信息的保存空間,如圖12所示,所述面向重放機(jī)制的緩存操作裝置,還包括:執(zhí)行編譯單元93和獲取解碼單元94。
[0108]執(zhí)行編譯單元93,用于在初次運(yùn)行所述程序的過程中,將所述替換信息保存至日志緩沖區(qū),在接收到編譯觸發(fā)時(shí)對所述日志緩沖區(qū)保存的至少一條替換信息進(jìn)行編碼以生成日志文件。
[0109]在本發(fā)明實(shí)施例中所述執(zhí)行編譯單元,可以包括:第一觸發(fā)模塊,用于在所述程序初次運(yùn)行結(jié)束時(shí),觸發(fā)編譯;第一編譯模塊,用于在所述第一觸發(fā)模塊觸發(fā)編譯時(shí)對所述日志緩沖區(qū)保存的至少一條替換信息編譯以生成日志文件??蛇x的,所述執(zhí)行編譯單元,還可以包括:第二觸發(fā)模塊,用于在所述日志緩沖區(qū)中緩存的替換信息條數(shù)等于預(yù)先設(shè)置的第一閾值時(shí),觸發(fā)編譯;第二編譯模塊,用于在所述第二觸發(fā)模塊觸發(fā)編譯時(shí)對所述日志緩沖區(qū)保存的替換信息編譯以生成日志文件并清除所述日志緩沖區(qū)中保存的替換信息;第三觸發(fā)模塊,用于在所述程序運(yùn)行結(jié)束且所述日志緩沖區(qū)中保存有至少一條替換信息時(shí),觸發(fā)編譯;第二編譯模塊,還用于在所述第三觸發(fā)模塊觸發(fā)編譯時(shí)對所述日志緩沖區(qū)保存的替換信息編譯以生成日志文件。
[0110]獲取解碼單元94,用于在重放所述程序時(shí),獲取所述執(zhí)行編譯單元編譯生成的日志文件,將所述日志文件解碼以生成替換信息集合,所述替換信息集合包括至少一條所述替換信息。
[0111]值得說明的是,所述替換信息以該替換信息生成時(shí)間的先后為順序保存至所述日志緩沖區(qū);所述獲取解碼單元,包括:解碼模塊,用于根據(jù)替換信息的生成時(shí)間,在程序重放的過程中逐步解碼所述日志文件以生成所述替換信息集合。
[0112]進(jìn)一步的,所述面向重放機(jī)制的緩存操作裝置,還可以包括第二執(zhí)行單元,分配單元、以及丟棄單元,其中,
[0113]所述第二執(zhí)行單元,用于在初次運(yùn)行所述程序的過程中,當(dāng)接收到訪存指令且該訪存指令命中緩存數(shù)據(jù)區(qū)時(shí),將該訪存指令對應(yīng)的局部唯一標(biāo)識替換緩存數(shù)據(jù)區(qū)中被命中的第一類型緩存行中的局部唯一標(biāo)識保存在所述緩存數(shù)據(jù)區(qū);還用于在重放所述程序的過程中,當(dāng)接收到到訪存指令且該訪存指令命中緩存數(shù)據(jù)區(qū)或者輔助緩存時(shí),將該訪存指令對應(yīng)的局部唯一標(biāo)識替換緩存數(shù)據(jù)區(qū)或者輔助緩存中被命中的第一類型緩存行中的局部唯一標(biāo)識保存在所述緩存數(shù)據(jù)區(qū)。
[0114]所述分配單元,用于在運(yùn)行程序的過程中,當(dāng)接收到訪存指令時(shí),對所述訪存指令分配局部唯一標(biāo)識,所述運(yùn)行包括初次運(yùn)行和重放。
[0115]所述丟棄單元,用于當(dāng)不存在與所述第二緩存行匹配的替換信息時(shí),將所述第二緩存行丟棄。
[0116]本發(fā)明實(shí)施例提供的面向重放機(jī)制的緩存操作方法,通過緩存行池保存程序初次運(yùn)行時(shí)從緩存數(shù)據(jù)區(qū)被替換出來的第一類型緩存行,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),說明在整個(gè)程序的初次運(yùn)行過程中,生成第一緩存行的訪存指令在生成第一緩存行之前保存在緩存數(shù)據(jù)區(qū)中并在第一緩存行的訪存指令到達(dá)之前被替換出緩存數(shù)據(jù)區(qū),從而使得第一緩存行被反復(fù)的從緩存數(shù)據(jù)區(qū)刪除和寫入,由于在初次運(yùn)行程序的時(shí)候?qū)⒎磸?fù)被刪除和寫入緩存數(shù)據(jù)區(qū)的緩存行以替換信息的形式記錄下來,并在重放程序的過程中根據(jù)替換信息,將與替換信息匹配的第二緩存行保存到輔助緩存中,那么第二緩存行對應(yīng)的訪存指令在后期到達(dá)時(shí)可以從輔助緩存中命中,進(jìn)而保證了程序重放過程中的緩存命中率并且還進(jìn)一步提高了程序重放過程中的緩存命中率。
[0117]最后應(yīng)說明的是:以上所述,僅為本發(fā)明較佳的【具體實(shí)施方式】,各實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。
【權(quán)利要求】
1.一種面向重放機(jī)制的緩存操作方法,其特征在于,用于面向重放機(jī)制的緩存,所述面向重放機(jī)制的緩存包括緩存數(shù)據(jù)區(qū)和緩存池,所述緩存數(shù)據(jù)區(qū)用于存放當(dāng)前運(yùn)行的程序根據(jù)訪存指令生成的第一類型緩存行,所述緩存池用于存放歷史緩存行,所述第一類型緩存行包括標(biāo)示TAG信息、局部唯一標(biāo)識信息以及訪存指令需要訪存的數(shù)據(jù),所述歷史緩存行包括程序初次運(yùn)行過程中被替換出來的第一類型緩存行的TAG信息和局部唯一標(biāo)識信息,所述方法,包括: 在初次運(yùn)行程序的過程中,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),根據(jù)所述與第一緩存行匹配的歷史緩存行生成替換信息并將所述第一緩存行中的局部唯一標(biāo)識信息替換與所述第一緩存行匹配的歷史緩存行中的局部唯一標(biāo)識信息保存在與第一緩存行匹配的歷史緩存行中,其中,所述第一緩存行為每當(dāng)接收到訪存指令且該訪存指令未命中已存滿的緩存數(shù)據(jù)區(qū)時(shí)生成的第一類型緩存行所述替換信息包括與第一緩存行匹配的歷史緩存行中的TAG信息和局部唯一標(biāo)識信息; 在重放程序的過程中,當(dāng)存在與第二緩存行匹配的替換信息時(shí),將所述第二緩存行保存到輔助緩存中,所述第二緩存行為程序重放過程中每當(dāng)接收到訪存指令且該訪存指令既未命中已存滿緩存數(shù)據(jù)區(qū)也未命中所述輔助緩存時(shí)被替換出來的第一類型緩存行。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),根據(jù)所述與第一緩存行匹配的歷史緩存行生成替換信息,包括: 在接收到訪存指令且該訪存指令未命中所述存數(shù)據(jù)區(qū)時(shí),根據(jù)該訪存指令生成第一緩存行; 根據(jù)預(yù)先設(shè)置的第一替換策略從所述緩存數(shù)據(jù)區(qū)中選出被替換的第一類型緩存行,將所述第一緩存行保存到被 替換的第一緩存行的位置; 將所述被替換的第一類型緩存行以歷史緩存行的形式保存到緩存行池中; 當(dāng)所述緩存行池中存在與所述第一緩存行匹配的歷史緩存行時(shí),根據(jù)所述與第一緩存行匹配的歷史緩存行生成替換信息。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述緩存行池保存在內(nèi)存中,所述將所述被替換的第一類型緩存行以歷史緩存行的形式保存到緩存行池中,包括: 將所述被替換的第一類型緩存行以歷史緩存行的形式直接保存到緩存行池中。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述緩存行池保存在緩存中,所述將所述被替換的第一類型緩存行以歷史緩存行的形式保存到緩存行池中,包括: 判斷所述緩存行池是否空閑; 若所述緩存行池空閑,將所述被替換的第一類型緩存行以歷史緩存行的形式保存到所述緩存行池中,否則,將符合預(yù)先設(shè)置的第二替換策略的歷史緩存行刪除以使得所述緩存行池空閑,將所述被替換的第一類型緩存行以歷史緩存行的形式保存到所述緩存行池中。
5.根據(jù)權(quán)利要求1-4任一項(xiàng)所述的方法,其特征在于,每個(gè)緩存數(shù)據(jù)區(qū)對應(yīng)一個(gè)緩存行池,每個(gè)緩存行池中保存的歷史緩存行由TAG信息和局部唯一標(biāo)識組成,一對緩存數(shù)據(jù)區(qū)和緩存行池構(gòu)成一個(gè)記錄用緩存組。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 在初次運(yùn)行所述程序的過程中,將所述替換信息保存至日志緩沖區(qū),在接收到編譯觸發(fā)時(shí)對所述日志緩沖區(qū)保存的至少一條替換信息進(jìn)行編碼以生成日志文件;在重放所述程序時(shí),獲取所述程序在初次運(yùn)行過程中生成的日志文件,將所述日志文件解碼以生成替換信息集合,所述替換信息集合包括至少一條所述替換信息。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述在接收到編譯觸發(fā)時(shí)對所述日志緩沖區(qū)保存的至少一條替換信息進(jìn)行編碼以生成日志文件,包括: 在所述程序初次運(yùn)行結(jié)束時(shí),觸發(fā)編譯,對所述日志緩沖區(qū)保存的至少一條替換信息編譯以生成日志文件。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述在接收到編譯觸發(fā)時(shí)對所述日志緩沖區(qū)緩存的至少一條替換信息進(jìn)行編碼以生成日志文件,包括: 在所述日志緩沖區(qū)中緩存的替換信息條數(shù)等于預(yù)先設(shè)置的第一閾值時(shí),觸發(fā)編譯,對所述日志緩沖區(qū)保存的替換信息編譯以生成日志文件并清除所述日志緩沖區(qū)中保存的替換信息; 在所述程序運(yùn)行結(jié)束且所述日志緩沖區(qū)中保存有至少一條替換信息時(shí),觸發(fā)編譯,對所述日志緩沖區(qū)保存的替換信息編譯以生成日志文件。
9.根據(jù)權(quán)利要求6-8任一項(xiàng)所述的方法,其特征在于,所述替換信息以該替換信息生成時(shí)間的先后為順序保存至所述日志緩沖區(qū); 所述將所述日志文件解碼以生成替換信息集合,包括: 根據(jù)替換信息的生成時(shí)間,在程序重放的過程中逐步解碼所述日志文件以生成所述替換信息集合。
10.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 在初次運(yùn)行所述程序的過程中,當(dāng)接收到訪存指令且該訪存指令命中緩存數(shù)據(jù)區(qū)時(shí),將該訪存指令對應(yīng)的局部唯一標(biāo)識替換緩存數(shù)據(jù)區(qū)中被命中的第一類型緩存行中的局部唯一標(biāo)識保存在所述緩存數(shù)據(jù)區(qū); 在重放所述程序的過程中,當(dāng)接收到到訪存指令且該訪存指令命中緩存數(shù)據(jù)區(qū)或者輔助緩存時(shí),將該訪存指令對應(yīng)的局部唯一標(biāo)識替換緩存數(shù)據(jù)區(qū)或者輔助緩存中被命中的第一類型緩存行中的局部唯一標(biāo)識保存在所述緩存數(shù)據(jù)區(qū)。
11.根據(jù)權(quán)利要求1-4、6-8以及10中任一項(xiàng)所述的方法,其特征在于,還包括: 在運(yùn)行程序的過程中,當(dāng)接收到訪存指令時(shí),對所述訪存指令分配局部唯一標(biāo)識,所述運(yùn)行包括初次運(yùn)行和重放。
12.根據(jù)權(quán)利要求11所述的方法,其特征在于,還包括: 當(dāng)不存在與所述第二緩存行匹配的替換信息時(shí),將所述第二緩存行丟棄。
13.根據(jù)權(quán)利要求11所述的方法,所述輔助緩存為合作緩存或者二級緩存。
14.一種面向重放機(jī)制的緩存操作裝置,其特征在于,用于面向重放機(jī)制的緩存,所述面向重放機(jī)制的緩存包括緩存數(shù)據(jù)區(qū)和緩存池,所述緩存數(shù)據(jù)區(qū)用于存放當(dāng)前運(yùn)行的程序根據(jù)訪存指令生成的第一 類型緩存行,所述緩存池用于存放歷史緩存行,所述第一類型緩存行包括標(biāo)示TAG信息、局部唯一標(biāo)識信息以及訪存指令需要訪存的數(shù)據(jù),所述歷史緩存行包括程序初次運(yùn)行過程中被替換出來的第一類型緩存行的TAG信息和局部唯一標(biāo)識信息,所述裝置,包括: 第一生成單元,用于在初次運(yùn)行程序的過程中,當(dāng)緩存行池中存在與第一緩存行匹配的歷史緩存行時(shí),根據(jù)所述與第一緩存行匹配的歷史緩存行生成替換信息并將所述第一緩存行中的局部唯一標(biāo)識信息替換與所述第一緩存行匹配的歷史緩存行中的局部唯一標(biāo)識信息保存在與第一緩存行匹配的歷史緩存行中,其中,所述第一緩存行為每當(dāng)接收到訪存指令且該訪存指令未命中已存滿的緩存數(shù)據(jù)區(qū)時(shí)生成的第一類型緩存行所述替換信息包括與第一緩存行匹配的歷史緩存行中的TAG信息和局部唯一標(biāo)識信息; 第一執(zhí)行單元,用于在重放程序的過程中,當(dāng)?shù)谝簧蓡卧傻奶鎿Q信息中存在與第二緩存行匹配的替換信息時(shí),將所述第二緩存行保存到輔助緩存中,所述第二緩存行為程序重放過程中每當(dāng)接收到訪存指令且該訪存指令既未命中已存滿緩存數(shù)據(jù)區(qū)也未命中所述輔助緩存時(shí)被替換出來的第一類型緩存行。
15.根據(jù)權(quán)利要求14所述的裝置,其特征在于,所述第一生成單元,包括: 第一生成模塊,用于在接收到訪存指令且該訪存指令未命中所述存數(shù)據(jù)區(qū)時(shí),根據(jù)該訪存指令生成第一緩存行; 第一執(zhí)行模塊,用于根據(jù)預(yù)先設(shè)置的第一替換策略從所述緩存數(shù)據(jù)區(qū)中選出被替換的第一類型緩存行,將所述第一生成模塊生成的第一緩存行保存到被替換的第一緩存行的位置; 第二執(zhí)行模塊,用于將被所述第一執(zhí)行模塊替換出來的第一類型緩存行以歷史緩存行的形式保存到緩存行池中; 第二生成模塊,用于當(dāng)所述緩存行池中存在與所述第一生成模塊生成的第一緩存行匹配的歷史緩存行時(shí),根據(jù)所述與第一緩存行匹配的歷史緩存行生成替換信息。
16.根據(jù)權(quán)利要求15所述的裝置,其特征在于,所述緩存行池保存在內(nèi)存中,所述第二執(zhí)行模塊,包括: 第一執(zhí)行子模塊,用于將所述被替換的第一類型緩存行以歷史緩存行的形式直接保存到緩存行池中。 或者,所述緩存行池保存在緩存中,所述第二執(zhí)行模塊,還包括: 判斷子模塊,用于判斷所述緩存行池是否空閑; 第二執(zhí)行子模塊,用于在所述判斷子模塊判斷得到所述緩存池空閑時(shí),將所述被替換的第一類型緩存行以歷史緩存行的形式保存到所述緩存行池中; 第三執(zhí)行子模塊,用于在所述判斷子模塊判斷得到所述緩存池存滿時(shí),用于將符合預(yù)先設(shè)置的第二替換策略的歷史緩存行刪除以使得所述緩存行池空閑,將所述被替換的第一類型緩存行以歷史緩存行的形式保存到所述緩存行池中。
17.根據(jù)權(quán)利要求14所述的裝置,其特征在于,還包括: 執(zhí)行編譯單元,用于在初次運(yùn)行所述程序的過程中,將所述替換信息保存至日志緩沖區(qū),在接收到編譯觸發(fā)時(shí)對所述日志緩沖區(qū)保存的至少一條替換信息進(jìn)行編碼以生成日志文件; 獲取解碼單元,用于在重放所述程序時(shí),獲取所述執(zhí)行編譯單元編譯生成的日志文件,將所述日志文件解碼以生成替換信息集合,所述替換信息集合包括至少一條所述替換信息。
18.根據(jù)權(quán)利要求17所述的裝置,其特征在于,所述執(zhí)行編譯單元,包括: 第一觸發(fā)模塊,用于在所述程序初次運(yùn)行結(jié)束時(shí),觸發(fā)編譯; 第一編譯模塊,用于在所述第一觸發(fā)模塊觸發(fā)編譯時(shí)對所述日志緩沖區(qū)保存的至少一條替換信息編譯以生成日志文件。
19.根據(jù)權(quán)利要求17所述的裝置,其特征在于,所述執(zhí)行編譯單元,包括: 第二觸發(fā)模塊,用于在所述日志緩沖區(qū)中緩存的替換信息條數(shù)等于預(yù)先設(shè)置的第一閾值時(shí),觸發(fā)編譯; 第二編譯模塊,用于在所述第二觸發(fā)模塊觸發(fā)編譯時(shí)對所述日志緩沖區(qū)保存的替換信息編譯以生成日志文件并清除所述日志緩沖區(qū)中保存的替換信息; 第三觸發(fā)模塊,用于在所述程序運(yùn)行結(jié)束且所述日志緩沖區(qū)中保存有至少一條替換信息時(shí),觸發(fā)編譯; 第二編譯模塊,還用于在所述第三觸發(fā)模塊觸發(fā)編譯時(shí)對所述日志緩沖區(qū)保存的替換信息編譯以生成日志文件。
20.根據(jù)權(quán)利要求17-19任一項(xiàng)所述的裝置,其特征在于,所述替換信息以該替換信息生成時(shí)間的先后為順序保存至所述日志緩沖區(qū); 所述獲取解碼單元,包括: 解碼模塊,用于根據(jù)替換信息的生成時(shí)間,在程序重放的過程中逐步解碼所述日志文件以生成所述替換信息集合。
21.根據(jù)權(quán)利要求14所述的裝置,其特征在于,還包括: 第二執(zhí)行單元,用于在初次運(yùn)行所述程序的過程中,當(dāng)接收到訪存指令且該訪存指令命中緩存數(shù)據(jù)區(qū)時(shí),將該訪存指令對應(yīng)的局部唯一標(biāo)識替換緩存數(shù)據(jù)區(qū)中被命中的第一類型緩存行中的局部唯一標(biāo)識保存在所述緩存數(shù)據(jù)區(qū); 所述第二執(zhí)行單元,還用于在重放所述程序的過程中,當(dāng)接收到到訪存指令且該訪存指令命中緩存數(shù)據(jù)區(qū)或者輔助緩存時(shí),將該訪存指令對應(yīng)的局部唯一標(biāo)識替換緩存數(shù)據(jù)區(qū)或者輔助緩存中被命中的第一類型緩存行中的局部唯一標(biāo)識保存在所述緩存數(shù)據(jù)區(qū)。
22.根據(jù)權(quán)利要求14-19以及21中任一項(xiàng)所述的裝置,其特征在于,還包括: 分配單元,用于在運(yùn)行程序的過程中,當(dāng)接收到訪存指令時(shí),對所述訪存指令分配局部唯一標(biāo)識,所述運(yùn)行包括初次運(yùn)行和重放。
23.根據(jù)權(quán)利要求22所述的裝置,其特征在于,還包括: 丟棄單元,用于當(dāng)不存在與所述第二緩存行匹配的替換信息時(shí),將所述第二緩存行丟棄。
【文檔編號】G06F11/36GK103744800SQ201310746996
【公開日】2014年4月23日 申請日期:2013年12月30日 優(yōu)先權(quán)日:2013年12月30日
【發(fā)明者】王佳, 陳云霽, 尹夕振 申請人:龍芯中科技術(shù)有限公司