本發(fā)明涉及計(jì)算機(jī)
技術(shù)領(lǐng)域:
,尤其涉及一種cache的壓縮方法和裝置。
背景技術(shù):
:在微處理器的設(shè)計(jì)中,為了提升處理器的性能,需要克服訪存速度與處理器計(jì)算速度之間的巨大差距。由于數(shù)據(jù)或指令從是從主存中獲取的,而主存的訪問速度遠(yuǎn)小于處理器的計(jì)算速度,從而每次訪問主存時(shí)均需要數(shù)百拍的訪問延遲,從而造成訪問數(shù)據(jù)的速度較慢。可以在主存和處理器之間加入了多級高速緩存(cache,簡稱cache),一般的多級高速緩存為二到三級,最后一級高速緩存簡稱為llc(lastlevelcache,llc),最后一級高速緩存的訪問延遲一般為幾十拍??梢詫⒔?jīng)常使用的數(shù)據(jù)或指令放入最后一級高速緩存中,從而可以通過訪問最后一級高級緩存中數(shù)據(jù)或指令,進(jìn)而加快訪問數(shù)據(jù)的速度。現(xiàn)有技術(shù)中,具有多種壓縮算法可以對數(shù)據(jù)或指令進(jìn)行壓縮。然而現(xiàn)有技術(shù)中,現(xiàn)有的壓縮算法可以將數(shù)據(jù)或指令壓縮為字節(jié)較小的數(shù)據(jù)或指令,然后將壓縮結(jié)果放入llc中,在對llc中的數(shù)據(jù)或指令進(jìn)行訪問的時(shí)候,需要在從llc將數(shù)據(jù)或指令取出時(shí)對數(shù)據(jù)或指令進(jìn)行解壓縮;當(dāng)現(xiàn)有的壓縮算法將數(shù)據(jù)或指令壓縮為較小的數(shù)據(jù)或指令的時(shí)候,此時(shí)壓縮率較好,往往壓縮算法比較復(fù)雜,從而造成解壓縮的過程復(fù)雜,解壓縮的時(shí)間較長,進(jìn)而造成過高的解壓延遲,而由于解壓的過程放在llc訪問的關(guān)鍵路徑上執(zhí)行,會造成存儲器的訪問延遲增加;當(dāng)現(xiàn)有的壓縮算法的壓縮率較差時(shí),往往壓縮算法較為簡單,造成的解壓延遲較小,但是此時(shí)壓縮率較差,使得llc無法得到有效利用。從而如何選擇壓縮算法,在壓縮率和解壓延遲之間進(jìn)行平衡成為一個(gè)亟待解決的問題,亟需提供出一種具有較好壓縮率,且較小的解壓延遲的壓縮方法。技術(shù)實(shí)現(xiàn)要素:本發(fā)明提供一種cache的壓縮方法和裝置,用以解決現(xiàn)有技術(shù)中如何選擇壓縮算法,在壓縮率和解壓延遲之間進(jìn)行平衡成為一個(gè)亟待解決的問題,亟需提供出一種具有較好壓縮率,且較小的解壓延遲的壓縮方法的問題。本發(fā)明的一方面是提供一種cache的壓縮方法,包括:獲取待壓縮的緩存cache塊;分別采用至少兩種壓縮算法對所述待壓縮的cache塊進(jìn)行壓縮,生成所述至少兩種壓縮算法的壓縮結(jié)果,并根據(jù)所述至少兩種各壓縮算法的壓縮結(jié)果確定所述至少兩種壓縮算法的壓縮率;根據(jù)所述至少兩種壓縮算法的壓縮率確定最優(yōu)壓縮率,并確定與所述最優(yōu)壓縮率對應(yīng)的壓縮算法;將與所述最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果,寫入至寫回緩存區(qū)。如所述的方法中,所述至少兩種壓縮算法包括:第一壓縮算法和第二壓縮算法;所述根據(jù)至少兩種壓縮算法的壓縮率確定最優(yōu)壓縮率,并確定與所述最優(yōu)壓縮率對應(yīng)的壓縮算法,包括:若所述第一壓縮算法的壓縮率小于等于所述第二壓縮算法的壓縮率,或者所述第一壓縮算法的壓縮率大于所述第二壓縮算法的壓縮率、且第一壓縮算法的壓縮率與第二壓縮算法的壓縮率之間的壓縮率差值小于等于預(yù)設(shè)字節(jié)數(shù),則確定最優(yōu)壓縮率為所述第一壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為所述第一壓縮算法;否則,確定最優(yōu)壓縮率為所述第二壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為所述第二壓縮算法。如所述的方法中,所述至少兩種壓縮算法包括:第一壓縮算法和第二壓縮算法;所述根據(jù)至少兩種壓縮算法的壓縮率確定最優(yōu)壓縮率,并確定與所述最優(yōu)壓縮率對應(yīng)的壓縮算法,包括:若所述第一壓縮算法的壓縮率小于第一值,則確定最優(yōu)壓縮率為所述第一壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為所述第一壓縮 算法;若所述第一壓縮算法的壓縮率大于所述第一值,所述第一壓縮算法的壓縮率在預(yù)設(shè)區(qū)間中,且所述第一壓縮算法的壓縮率大于所述第二壓縮算法的壓縮率,則確定最優(yōu)壓縮率為所述第二壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為所述第二壓縮算法。如所述的方法中,至少兩種壓縮算法包括:第一壓縮算法和第二壓縮算法;所述將與所述最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果,寫入至寫回緩存區(qū),包括:將所述第一壓縮算法的壓縮結(jié)果寫入至所述寫回緩存區(qū);若確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為所述第一壓縮算法,則保留所述寫回緩存區(qū)中的所述第一壓縮算法的壓縮結(jié)果;若確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為所述第二壓縮算法,則將所述寫回緩存區(qū)中的所述第一壓縮算法的壓縮結(jié)果替換為所述第二壓縮算法的壓縮結(jié)果。如所述的方法中,至少兩種壓縮算法包括:第一壓縮算法和第二壓縮算法,所述第一壓縮算法為fvc壓縮算法,所述第二壓縮算法為c-pack壓縮算法;所述采用第一壓縮算法對所述待壓縮的cache塊進(jìn)行壓縮,生成第一壓縮算法的壓縮結(jié)果,并確定所述第一壓縮算法的壓縮率,包括:將fvc壓縮算法中的掩碼組合中的每一個(gè)掩碼的掩碼位,修改為5位掩碼位;采用預(yù)設(shè)字典對所述待壓縮的cache塊進(jìn)行壓縮,生成5位掩碼位的掩碼以及壓縮數(shù)據(jù),以構(gòu)成fvc壓縮算法的壓縮結(jié)果,并計(jì)算fvc壓縮算法的壓縮率。本發(fā)明的另一方面是提供一種cache的壓縮裝置,包括:獲取模塊,用于獲取待壓縮的cache塊;壓縮模塊,用于分別采用至少兩種壓縮算法對所述待壓縮的cache塊進(jìn)行壓縮,生成所述至少兩種壓縮算法的壓縮結(jié)果,并根據(jù)所述至少兩種壓縮算法的壓縮結(jié)果確定所述至少兩種壓縮算法的壓縮率;仲裁模塊,用于根據(jù)所述至少兩種壓縮算法的壓縮率確定最優(yōu)壓縮率,并確定與所述最優(yōu)壓縮率對應(yīng)的壓縮算法;寫入模塊,用于將與所述最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果,寫入至寫回緩存區(qū)。如上所述的裝置中,所述至少兩種壓縮算法包括:第一壓縮算法和第二壓縮算法;所述仲裁模塊,包括:第一仲裁子模塊,用于若所述第一壓縮算法的壓縮率小于等于所述第二壓縮算法的壓縮率,或者所述第一壓縮算法的壓縮率大于所述第二壓縮算法的壓縮率、且第一壓縮算法的壓縮率與第二壓縮算法的壓縮率之間的壓縮率差值小于等于預(yù)設(shè)字節(jié)數(shù),則確定最優(yōu)壓縮率為所述第一壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為所述第一壓縮算法;第二仲裁子模塊,用于所述第一壓縮算法的壓縮率與所述第二壓縮算法的壓縮率不符合所述第一仲裁子模塊的條件時(shí),確定最優(yōu)壓縮率為所述第二壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為所述第二壓縮算法。如上所述的裝置中,所述至少兩種壓縮算法包括:第一壓縮算法和第二壓縮算法;所述仲裁模塊,包括:第三仲裁子模塊,用于若所述第一壓縮算法的壓縮率小于第一值,則確定最優(yōu)壓縮率為所述第一壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為所述第一壓縮算法;第四仲裁子模塊,用于若所述第一壓縮算法的壓縮率大于所述第一值,所述第一壓縮算法的壓縮率在預(yù)設(shè)區(qū)間中,且所述第一壓縮算法的壓縮率大于所述第二壓縮算法的壓縮率,則確定最優(yōu)壓縮率為所述第二壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為所述第二壓縮算法。如上所述的裝置中,所述至少兩種壓縮算法包括:第一壓縮算法和第二壓縮算法;所述寫入模塊,包括:寫入子模塊,用于將所述第一壓縮算法的壓縮結(jié)果寫入至所述寫回緩存 區(qū);保留子模塊,用于若確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為所述第一壓縮算法,則保留所述寫回緩存區(qū)中的所述第一壓縮算法的壓縮結(jié)果;替換子模塊,用于若確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為所述第二壓縮算法,則將所述寫回緩存區(qū)中的所述第一壓縮算法的壓縮結(jié)果替換為所述第二壓縮算法的壓縮結(jié)果。如上所述的裝置中,所述至少兩種壓縮算法包括:第一壓縮算法和第二壓縮算法,所述第一壓縮算法為fvc壓縮算法,所述第二壓縮算法為c-pack壓縮算法;所述壓縮模塊,具體用于:將fvc壓縮算法中的掩碼組合中的每一個(gè)掩碼的掩碼位,修改為5位掩碼位;采用預(yù)設(shè)字典對所述待壓縮的cache塊進(jìn)行壓縮,生成5位掩碼位的掩碼以及壓縮數(shù)據(jù),以構(gòu)成fvc壓縮算法的壓縮結(jié)果,并計(jì)算fvc壓縮算法的壓縮率;并采用第二壓縮算法對所述待壓縮的cache塊進(jìn)行壓縮,生成第二壓縮結(jié)果,并確定所述第二壓縮算法的壓縮率。本實(shí)施例分別通過采用至少兩種壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成與采用的壓縮算法分別對應(yīng)的壓縮結(jié)果,同時(shí)根據(jù)至少兩種壓縮算法的壓縮結(jié)果分別確定至少兩種壓縮算法的壓縮率,壓縮率表征采用壓縮算法對cache塊壓縮后生成的壓縮結(jié)果的字節(jié)大??;然后將多種壓縮算法各自壓縮率進(jìn)行比較,確定出最優(yōu)壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法;最終將與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果,寫入至寫回緩存區(qū)。從而提供了一種cache的壓縮方法,將壓縮算法進(jìn)行組合,對多種壓縮算法的壓縮率以及多種壓縮算法生成的壓縮結(jié)果進(jìn)行仲裁,進(jìn)而比較出最優(yōu)的壓縮率,進(jìn)而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果;從而在壓縮率和解壓延遲之間進(jìn)行平衡,提供了一種具有較好壓縮率,且較小的解壓延遲的壓縮方法。附圖說明圖1為本發(fā)明實(shí)施例一提供的cache的壓縮方法的流程圖;圖2為本發(fā)明實(shí)施例二提供的cache的壓縮方法的流程圖;圖3為本發(fā)明實(shí)施例三提供的cache的壓縮方法的流程圖;圖4為本發(fā)明實(shí)施例四提供的cache的壓縮裝置的結(jié)構(gòu)示意圖;圖5為本發(fā)明實(shí)施例五提供的cache的壓縮裝置的結(jié)構(gòu)示意圖;圖6為本發(fā)明實(shí)施例六提供的cache的壓縮裝置的結(jié)構(gòu)示意圖。具體實(shí)施方式為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。圖1為本發(fā)明實(shí)施例一提供的cache的壓縮方法的流程圖,如圖1所示,本實(shí)施例的方法包括:步驟101、獲取待壓縮的cache塊。在本實(shí)施例中,具體的,首先在傳統(tǒng)的一級cache與llc之間設(shè)置一個(gè)寫回緩沖區(qū),在將數(shù)據(jù)或指令放入寫回緩存區(qū)之前首先需要將數(shù)據(jù)或指令進(jìn)行壓縮。獲取待壓縮的cache塊,待壓縮的cache塊中包括至少一個(gè)數(shù)據(jù)或指令。待壓縮的cache塊可以具有多種的cache塊組合方式。舉例來說,例如,對于一個(gè)4路組相聯(lián)cache,此時(shí)具有4個(gè)cache塊,每個(gè)cache塊的大小為64byte,一組cache塊的總?cè)萘繛?56byte,每組cache塊被以4byte為單位分割為64個(gè)相等的子塊;一個(gè)未被壓縮的cache塊占據(jù)原有的64byte,即占據(jù)了16個(gè)子塊;在理論上來說,一個(gè)被壓縮的cache塊可以占據(jù)1~16個(gè)不等的子塊。步驟102、分別采用至少兩種壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成至少兩種壓縮算法的壓縮結(jié)果,并根據(jù)至少兩種壓縮算法的壓縮結(jié)果確定至少兩種壓縮算法的壓縮率。其中,各壓縮算法代表上述至少兩種壓縮算法中的每種壓縮算法,也即至少兩種壓縮算法。在本實(shí)施例中,具體的,可以分別采用現(xiàn)有技術(shù)中的壓縮算法對待壓縮 的cache塊進(jìn)行壓縮??梢圆捎枚喾N壓縮算法對步驟101中的待壓縮cache塊進(jìn)行壓縮,可以設(shè)定采用的壓縮算法的個(gè)數(shù)為預(yù)設(shè)個(gè)數(shù),預(yù)設(shè)個(gè)數(shù)根據(jù)實(shí)際的使用情況而設(shè)定;可以是兩種,也可以采用4種或5種壓縮算法對步驟101中的待壓縮cache塊進(jìn)行壓縮。分別采用多種壓縮算法對步驟101中的待壓縮cache塊進(jìn)行壓縮之后,可以生成多種壓縮結(jié)果;在對待壓縮cache塊進(jìn)行壓縮之后,確定出多種壓縮結(jié)果的字節(jié)大小,其中,壓縮結(jié)果的字節(jié)大小為與壓縮結(jié)果對應(yīng)的壓縮算法的壓縮率,進(jìn)而可以各壓縮算法的壓縮結(jié)果確定各壓縮算法的壓縮率。多種壓縮算法分別對cache塊進(jìn)行壓縮的過程,可以同時(shí)進(jìn)行;也可以先執(zhí)行前幾種壓縮算法對cache塊進(jìn)行壓縮的過程,再執(zhí)行后幾種壓縮算法對cache塊進(jìn)行壓縮的過程。并且,本實(shí)施例中的多種壓縮算法可以采用現(xiàn)有技術(shù)中的壓縮算法,壓縮算法的具體原理與現(xiàn)有技術(shù)相同。舉例來說,采用了兩種壓縮算法對待壓縮的cache塊進(jìn)行壓縮,具體來說,分別采用第一種壓縮算法、第二種壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成第一壓縮結(jié)果和第二壓縮結(jié)果,然后根據(jù)各壓縮結(jié)果分別確定第一種壓縮算法的壓縮率和第二種壓縮算法的壓縮率。再舉例來說,采用了四種壓縮算法對待壓縮的cache塊進(jìn)行壓縮,具體來說,分別采用第一種壓縮算法、第二種壓縮算法、第三種壓縮算法、第四種壓縮算法對待壓縮的cache塊進(jìn)行壓縮,分別生成第一壓縮結(jié)果、第二壓縮結(jié)果、第三壓縮結(jié)果、第四壓縮結(jié)果,然后根據(jù)各壓縮結(jié)果分別確定第一種壓縮算法的壓縮率、第二種壓縮算法的壓縮率、第三種壓縮算法的壓縮率、第四種壓縮算法的壓縮率。步驟103、根據(jù)至少兩種壓縮算法的壓縮率確定最優(yōu)壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法。在本實(shí)施例中,具體的,對步驟102中確定出的至少兩種壓縮算法的壓縮率進(jìn)行比較,確定出一個(gè)最優(yōu)壓縮率,進(jìn)而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法。最優(yōu)壓縮率表征了將待壓縮的cache塊壓縮之后得到的壓縮結(jié)果的字節(jié)較小,或者表征了將待壓縮的cache塊壓縮之后得到的壓縮結(jié)果的字節(jié)適中且壓縮時(shí)間較短。例如,采用了兩種壓縮算法對cache塊進(jìn)行壓縮,此時(shí),對步驟102中確定出的第一種壓縮算法的壓縮率以及第二種壓縮算法的壓縮率進(jìn)行比較,確定出一個(gè)最優(yōu)壓縮率,進(jìn)而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法。若確定第一種壓縮算法的壓縮率為最優(yōu)壓縮率,從而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一種壓縮算法;若確定第二種壓縮算法的壓縮率為最優(yōu)壓縮率,從而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法為二種壓縮算法。此時(shí),確定最優(yōu)壓縮率,以及確定與最優(yōu)壓縮率對應(yīng)的壓縮算法的過程,可以構(gòu)成一個(gè)仲裁器,仲裁器對壓縮率和壓縮算法進(jìn)行仲裁之后,再確定寫入到寫回緩存區(qū)中的壓縮結(jié)果是哪種壓縮算法生成的壓縮結(jié)果。舉例來說,可以將壓縮率較低的作為最優(yōu)壓縮率,即將壓縮結(jié)果的字節(jié)較小的壓縮率作為最優(yōu)壓縮率;也可以將壓縮時(shí)間較短的壓縮算法的壓縮率,作為最優(yōu)壓縮率;也可以設(shè)定一個(gè)壓縮率區(qū)間,將位于該壓縮率區(qū)間的壓縮率作為最優(yōu)壓縮率。再舉例來說,對于一個(gè)cache塊a,采用解壓延遲較小、壓縮率較高的壓縮算法m對a進(jìn)行壓縮,進(jìn)行多次試驗(yàn)之后,得到壓縮算法m對于a的任意一個(gè)壓縮率c(m,a),且1字節(jié)<=c(m,a)<=64字節(jié);采用壓縮算法n對a進(jìn)行壓縮,進(jìn)行多次試驗(yàn)之后,得到壓縮算法n對于a的任意一個(gè)壓縮率c(n,a),且1字節(jié)<=c(m,a)<c(n,a)<=64字節(jié);此時(shí)壓縮算法m對于a的實(shí)際壓縮率為c(m,a),壓縮算法n對于a的實(shí)際壓縮率為c(n,a);當(dāng)c(n,a)等于c(n,a)時(shí),可知采用壓縮算法m對a進(jìn)行壓縮可以得到較好的壓縮率,且壓縮延遲適中;當(dāng)c(n,a)大于c(n,a)時(shí),若c(m,a)小于c(n,a),可知采用壓縮算法m對a進(jìn)行壓縮可以得到較好的壓縮率,此時(shí)可以采用壓縮算法m對a進(jìn)行壓縮得到壓縮結(jié)果,當(dāng)c(n,a)大于c(n,a)時(shí),若c(m,a)大于c(n,a),可以采用壓縮算法m對a進(jìn)行壓縮會造成壓縮延遲較大,此時(shí)可以采用壓縮算法n對a進(jìn)行壓縮得到壓縮結(jié)果。再例如,采用了四種壓縮算法對cache塊進(jìn)行壓縮,此時(shí),對步驟102中確定出的第一種壓縮算法的壓縮率、第二種壓縮算法的壓縮率、第三種壓縮算法的壓縮率、第四種壓縮算法的壓縮率進(jìn)行比較,確定出一個(gè)最優(yōu)壓縮率,進(jìn)而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法。若確定第三種壓縮算法的壓縮率為最優(yōu)壓縮率,從而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法為第三種壓縮 算法;若確定第四種壓縮算法的壓縮率為最優(yōu)壓縮率,從而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法為第四種壓縮算法。同樣的,此時(shí),確定最優(yōu)壓縮率,以及確定與最優(yōu)壓縮率對應(yīng)的壓縮算法的過程,可以構(gòu)成一個(gè)仲裁器,仲裁器對壓縮率和壓縮算法進(jìn)行仲裁之后,再確定寫入到寫回緩存區(qū)中的壓縮結(jié)果是哪種壓縮算法生成的壓縮結(jié)果。步驟104、將與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果,寫入至寫回緩存區(qū)。在本實(shí)施例中,具體的,在步驟103確定了與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果之后,將確定好的壓縮結(jié)果寫入到寫回緩存區(qū)中。例如,采用了兩種壓縮算法對cache塊進(jìn)行壓縮,此時(shí),若最優(yōu)壓縮率為第一種壓縮算法的壓縮率,則將第一壓縮結(jié)果寫入到寫回緩存區(qū)中;若最優(yōu)壓縮率為第二種壓縮算法的壓縮率,則將第二壓縮結(jié)果寫入到寫回緩存區(qū)中。舉例來說,可以生成第一種壓縮算法的第一壓縮結(jié)果、第二種壓縮算法的第二壓縮結(jié)果,此時(shí)不把任何一個(gè)壓縮結(jié)果寫入到寫回緩存區(qū)中,在確定了最優(yōu)壓縮率之后,再將與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果寫入至寫回緩存區(qū)中;若采用第一種壓縮算法對cache塊壓縮的時(shí)間較短,此時(shí)會先生成第一壓縮結(jié)果,可以先將第一壓縮結(jié)果放入到寫回緩存區(qū)中,若確定了最優(yōu)壓縮率為第二種壓縮算法的壓縮率,再將寫回緩存區(qū)中的第一壓縮結(jié)果替換為第二壓縮結(jié)果,若確定了最優(yōu)壓縮率為第一種壓縮算法的壓縮率,則保留寫回緩存區(qū)中的第一壓縮結(jié)果。再例如,采用了四種壓縮算法對cache塊進(jìn)行壓縮,此時(shí),若最優(yōu)壓縮率為第三種壓縮算法的壓縮率,則將第三中壓縮算法的壓縮結(jié)果寫入到寫回緩存區(qū)中;若最優(yōu)壓縮率為第四種壓縮算法的壓縮率,則將第四種壓縮算法的壓縮結(jié)果寫入到寫回緩存區(qū)中。在本實(shí)施例中,對于采用的多種壓縮算法,在對cache塊進(jìn)行壓縮的時(shí)候,可以進(jìn)行適應(yīng)性的壓縮,在cache塊中的數(shù)據(jù)集較小的時(shí)候,可以選擇完全不壓縮數(shù)據(jù),以達(dá)到無解壓延遲的損失。在本實(shí)施例中,采用的多種壓縮算法,只需采用任何多種具有有解壓延遲和壓縮能力差異的壓縮算法即可,可以通過對多種壓縮算法的壓縮了的比 較,得到最優(yōu)壓縮率,以及與最優(yōu)壓縮率對應(yīng)的壓縮算法,從而得到一種壓縮能力較好,且解壓延遲較小的組合壓縮方法。本實(shí)施例分別通過采用至少兩種壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成與采用的壓縮算法分別對應(yīng)的壓縮結(jié)果,同時(shí)根據(jù)至少兩種壓縮算法的壓縮結(jié)果分別確定至少兩種壓縮算法的壓縮率,壓縮率表征采用壓縮算法對cache塊壓縮后生成的壓縮結(jié)果的字節(jié)大?。蝗缓髮⒍喾N壓縮算法各自壓縮率進(jìn)行比較,確定出最優(yōu)壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法;最終將與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果,寫入至寫回緩存區(qū)。從而提供了一種cache的壓縮方法,將壓縮算法進(jìn)行組合,對多種壓縮算法的壓縮率以及多種壓縮算法生成的壓縮結(jié)果進(jìn)行仲裁,進(jìn)而比較出最優(yōu)的壓縮率,進(jìn)而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果;從而在壓縮率和解壓延遲之間進(jìn)行平衡,提供了一種具有較好壓縮率,且較小的解壓延遲的壓縮方法。圖2為本發(fā)明實(shí)施例二提供的cache的壓縮方法的流程圖,如圖2所示,在實(shí)施例一的基礎(chǔ)上,至少兩種壓縮算法包括:第一壓縮算法和第二壓縮算法,步驟102中采用第一壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成第一壓縮結(jié)果,并確定第一壓縮算法的壓縮率,具體包括:將fvc壓縮算法中的掩碼組合中的每一個(gè)掩碼的掩碼位,修改為5位掩碼位;采用預(yù)設(shè)字典對待壓縮的cache塊進(jìn)行壓縮,生成5位掩碼位的掩碼以及壓縮數(shù)據(jù),以構(gòu)成fvc壓縮算法的壓縮結(jié)果,并計(jì)算fvc壓縮算法的壓縮率。在本實(shí)施例中,具體的,可以采用兩種壓縮算法,對待壓縮的cache塊進(jìn)行壓縮,這兩種壓縮算法分別為第一壓縮算法和第二壓縮算法;其中,第一壓縮算法采用fvc壓縮算法,第二壓縮算法采用c-pack壓縮算法。c-pack壓縮算法可以參照文章《c-pack:ahigh-performancemicroproces-sorcachecompressionalgorithm》中的介紹。c-pack壓縮算法具有較好的壓縮率,但是一般情況下c-pack壓縮算法的解壓延遲較高。c-pack壓縮方法常被用于llc的壓縮,壓縮單位為4byte,即壓縮單位為一個(gè)字長,對于1個(gè)64byte的cache塊,可以選擇16個(gè)字同時(shí)壓縮的方式、或者兩 個(gè)字同時(shí)壓縮的方式、或四個(gè)字同時(shí)壓縮的方式。在c-pack壓縮算法中,每個(gè)cache塊中后一個(gè)字的壓縮或者解壓縮依賴于前面的字生成的字典編碼項(xiàng),即cache塊中的第一個(gè)字一定會被壓入字典,以作為壓縮或者解壓的起點(diǎn)。當(dāng)同時(shí)壓縮或者解壓縮16個(gè)字時(shí),由于需要維護(hù)依賴關(guān)系,從而c-pack壓縮算法需要很大的邏輯面積。在c-pack壓縮算法中,每次進(jìn)行壓縮或解壓縮的時(shí)候,需要維護(hù)一個(gè)16項(xiàng)的動態(tài)字典。以兩個(gè)字同時(shí)壓縮解壓縮為例,采用c-pack算法進(jìn)行壓縮時(shí),首先匹配該字是否為零(zzzz)或者單字節(jié)字(zzzx),若是則輸出編碼和單字節(jié)部分;若不是則匹配字典,看是否能在動態(tài)字典中匹配全部或者部分匹配,此時(shí)匹配形式為mmmm,mmxx,mmmx,若匹配則輸出編碼和字典項(xiàng)入口地址和剩余部分,將該字壓入字典,若不匹配則說明為xxxx無法壓縮,需要輸出完整的字,并將該字壓入字典,用于后續(xù)壓縮。相應(yīng)的,在采用c-pack壓縮算法對c-pack壓縮算法壓縮的cache塊進(jìn)行解壓縮時(shí),首先解釋編碼,若為兩位,則輸出組合零位或未匹配單字節(jié),若為四位則看是否匹配或部分匹配字典項(xiàng),若匹配,則查找相應(yīng)字典項(xiàng)并輸出,否則輸出未被壓縮的字,并壓入字典。舉例來說,可以提供一個(gè)碼表,如表1碼表所示:表1碼表codepatternoutputlength00zzzz(00)201xxxx(01)bbbb3410mmmm(10)bbbb61100mmxx(1100)bbbbbb241101zzzx(1101)b121110mmmx(1110)bbbbb16其中,z為00000000;x代表未匹配,大小為8bit;m代表匹配,大小為8bit。設(shè)定動態(tài)字典為12345678aaaaaaaa123400003527894e。對于cache塊中一個(gè)字,一個(gè)字為4byte,字采用十六進(jìn)制;若字為000000ab,首先確定該字是否符合匹配模式zzzz或者zzzx,確定符合匹配模式,從而可以在表1碼表中進(jìn)行查找,以確定組合編碼1110,然后得到壓縮后的組合編碼和單字節(jié)(1100)ab;若字為bbbb2022,首先確定該字是否符合匹配模式zzzz或zzzx,確定不符合,從而在動態(tài)字典中匹配字典,確定在動態(tài)字典中也不 匹配,從而將該字放入到動態(tài)字典中,此時(shí)動態(tài)字典為12345678aaaaaaaa123400003527894ebbbb2022,然后輸出一個(gè)位置編碼01以及完整的字,得到壓縮后的(01)bbbb2022;若字為123456aa,首先確定該字是否符合匹配模式zzzz或zzzx,確定不符合,從而在動態(tài)字典中匹配字典,可以在動態(tài)字典中進(jìn)行部分的匹配,從而得到編碼1110,并確定出字典項(xiàng)入口地址00,確定剩余部分aa,進(jìn)而得到壓縮后的(111000)aa。第一種壓縮算法采用fvc壓縮算法,同時(shí)對fvc壓縮算法進(jìn)行改進(jìn)。改進(jìn)后的fvc壓縮算法中,將fvc壓縮算法中的掩碼組合中的每一個(gè)掩碼的掩碼位,修改為5位掩碼位;設(shè)定預(yù)設(shè)字典,預(yù)設(shè)字典為靜態(tài)字典;從而采用預(yù)設(shè)字典對待壓縮的cache塊進(jìn)行壓縮,生成5位掩碼位的掩碼以及壓縮數(shù)據(jù),同時(shí)計(jì)算出改進(jìn)后的fvc壓縮算法的壓縮率。具體來說,將掩碼(mask,簡稱mask)進(jìn)行擴(kuò)充,每個(gè)字的mask設(shè)定為5位,從而64byte的cache塊的共需要5bit*16=10byte的mask。其中,5位的mask中,若第一位為0,此時(shí)第一位表示當(dāng)前字在頻率值字典中,后4位表示當(dāng)前字的字典入口地址;若第一位為1,此時(shí)第一位表示為當(dāng)前字沒有出現(xiàn)在頻率值字典中,當(dāng)前字為非壓縮字,后四位為當(dāng)前字在后續(xù)的數(shù)據(jù)陣列中的位置。由于將fvc壓縮算法中的掩碼組合中的每一個(gè)掩碼的掩碼位,修改為5位掩碼位,從而可以保證具有16個(gè)子的cache塊可以全部被壓縮。并且,在本實(shí)施例中,將fvc的mask放在數(shù)據(jù)陣列中,放在其壓縮數(shù)據(jù)的前面,進(jìn)而前了10byte的mask;進(jìn)而在解壓縮的過程中,通過tag中的起始地址字段和壓縮長度字段讀出壓縮數(shù)據(jù),通過本實(shí)施例中的1位壓縮類型位決定數(shù)據(jù)的解釋方式,即用哪種方法進(jìn)行解壓縮。tag陣列如表28tag陣列所示:表28tag陣列其中,舉例來說,tag2表征了一致性協(xié)議位:2,壓縮長度位:4,起始地址位:6,壓縮狀態(tài)位:1,壓縮類型位:1,物理tag:12。若壓縮狀態(tài)位為1,則表征了當(dāng)前的cache塊采用了第一種壓縮算法進(jìn)行壓縮,若壓縮狀態(tài)位為2,則表征了當(dāng)前的cache塊采用了第二種壓縮算法進(jìn)行壓縮。對于改進(jìn)后的fvc壓縮算法,舉例來說,對于一個(gè)64byte的cache塊, 對每個(gè)字的壓縮需要一個(gè)5bit的編碼,第一位為0,代表常見值,后面3位是字典項(xiàng)入口地址,第一位為1,代表未壓縮,后面3位代表數(shù)據(jù)陣列中的該未壓縮字的位置,共需5bit*16=10byte的mask,對于表3中的cache塊:表3cache塊:0x10x00xef0xab0xcd0xab0x00x10x20x00xab0x10x20xab0xcd0xab具有預(yù)設(shè)的預(yù)設(shè)字典,表4預(yù)設(shè)字典:表4預(yù)設(shè)字典0x00x10x20xffffffff可以生成mask,得到表5mask:表5mask00001000001000010001100101001100000000010001000000101000000100010101011011010111并得到數(shù)據(jù)陣列,可得到表6壓縮數(shù)據(jù):表6壓縮數(shù)據(jù)0xef0xab0xcd0xab0xab0xab0xcd0xab同時(shí),對于fvc壓縮算法中的字典,可以設(shè)置為動態(tài)字典,但需要限定動態(tài)字典的字典項(xiàng)的索引過程拍數(shù)在預(yù)設(shè)拍數(shù)范圍內(nèi),以使動態(tài)字典的字典項(xiàng)的索引過程拍數(shù)不能過多。在本實(shí)施例中,對于c-pack壓縮算法和fvc壓縮算法,在對cache塊進(jìn)行壓縮的時(shí)候,可以進(jìn)行適應(yīng)性的壓縮,在cache塊中的數(shù)據(jù)集較小的時(shí)候,可以選擇完全不壓縮數(shù)據(jù),以達(dá)到無解壓延遲的損失。步驟103,包括:步驟1031、若第一壓縮算法的壓縮率小于等于第二壓縮算法的壓縮率,或者第一壓縮算法的壓縮率大于第二壓縮算法的壓縮率、且第一壓縮算法的壓縮率與第二壓縮算法的壓縮率之間的壓縮率差值小于等于預(yù)設(shè)字節(jié)數(shù),則確定最優(yōu)壓縮率為第一壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法。在本實(shí)施例中,具體的,首先將兩種壓縮方法的壓縮率輸入仲裁器中,使得仲裁器對兩個(gè)壓縮率進(jìn)行仲裁。此時(shí),第一壓縮算法為fvc壓縮算法,第二壓縮算法為c-pack壓縮算法,fvc壓縮算法為采用5位掩碼位的fvc壓縮算法。在多次的實(shí)現(xiàn)中,發(fā) 現(xiàn)c-pack壓縮算法和fvc壓縮算法,這兩種壓縮算法的壓縮率具有雙極性的,具體來說,對于某一種的cache塊,這兩種壓縮算法均具有較好的壓縮性,都可以獲得50%以下的壓縮率;對于另一種cache塊,c-pack壓縮算法的壓縮性能較好,而fvc基本無法壓縮,此時(shí),c-pack壓縮算法的壓縮率在50%左右,fvc壓縮算法的壓縮率在80%~90%;對于剩下的種類的cache塊,以上兩種壓縮算法均無法很好的壓縮,都不具有較低的壓縮率。若第一壓縮算法的壓縮率小于等于第二壓縮算法的壓縮率,此時(shí)fvc壓縮算法的壓縮率小于等于c-pack壓縮算法的壓縮率,fvc壓縮算法的壓縮率較好,由于改進(jìn)后的fvc壓縮算法具有較低的解壓延遲,此時(shí)確定最優(yōu)壓縮率為第一壓縮算法fvc壓縮算法的壓縮率,確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法fvc壓縮算法?;蛘?,若第一壓縮算法的壓縮率大于第二壓縮算法的壓縮率,此時(shí)fvc壓縮算法的壓縮率大于c-pack壓縮算法的壓縮率,但是第一壓縮算法fvc壓縮算法的壓縮率與第二壓縮算法c-pack壓縮算法的壓縮率之間的壓縮率差值小于等于預(yù)設(shè)字節(jié)數(shù),預(yù)設(shè)字節(jié)數(shù)設(shè)定為28byte,此時(shí)確定在壓縮率和解壓延遲之間進(jìn)行平衡,還是選擇最優(yōu)壓縮率為第一壓縮算法fvc壓縮算法的壓縮率,確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法fvc壓縮算法。舉例來說,64byte的cache塊,具有4byte的16個(gè)子塊,從而在fvc壓縮算法的壓縮率大于c-pack壓縮算法的壓縮率時(shí),若兩種算法的壓縮率之差小于等于7個(gè)子塊,即小于等于28byte,則確定最優(yōu)壓縮率為第一壓縮算法fvc壓縮算法的壓縮率,此時(shí)兩種壓縮算法的壓縮率平均差在45%左右。步驟1032、否則,確定最優(yōu)壓縮率為第二壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法。在本實(shí)施例中,具體的,若在比較第一壓縮算法的壓縮率與第二壓縮算法的壓縮率的時(shí)候,兩者之間的大小均不符合步驟1031中的條件,則確定最優(yōu)壓縮率為第二壓縮算法c-pack壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法c-pack壓縮算法。具體來說,若fvc壓縮算法的壓縮率大于c-pack壓縮算法的壓縮率,但是第一壓縮算法fvc壓縮算法的壓縮率與第二壓縮算法c-pack壓縮算法的壓縮率之間的壓縮率差值大于預(yù)設(shè)字節(jié)數(shù)28byte,確定最優(yōu)壓縮率為第二壓縮算法c-pack壓縮算法的壓縮 率。舉例來說,64byte的cache塊,具有4byte的16個(gè)子塊,從而在fvc壓縮算法的壓縮率大于c-pack壓縮算法的壓縮率時(shí),若兩種算法的壓縮率之差大于7個(gè)子塊,即大于28byte,則確定最優(yōu)壓縮率為第二壓縮算法c-pack壓縮算法的壓縮率。步驟104,包括:步驟1041、將第一壓縮算法的壓縮結(jié)果寫入至寫回緩存區(qū)。在本實(shí)施例中,具體的,此時(shí),第一壓縮算法為fvc壓縮算法,第二壓縮算法為c-pack壓縮算法,fvc壓縮算法為采用5位掩碼位的fvc壓縮算法。由于改進(jìn)后的fvc壓縮算法比較簡單,從而改進(jìn)后的fvc壓縮算法的壓縮時(shí)間較短,進(jìn)而其壓縮的cache塊在進(jìn)行解壓縮的時(shí)候解壓延遲較小,從而可以將采用第一壓縮算法fvc壓縮算法壓縮得到的第一壓縮算法的壓縮結(jié)果,先寫入至寫回緩存區(qū)中。一般對于64byte的cahe塊,采用fvc壓縮算法可以在2~3拍之內(nèi)并行壓縮完成。步驟1042、若確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法,則保留寫回緩存區(qū)中的第一壓縮算法的壓縮結(jié)果。在本實(shí)施例中,具體的,在步驟103對第一壓縮算法fvc壓縮算法的壓縮率、以及第二壓縮算法c-pack壓縮算法的壓縮率,進(jìn)行仲裁之后,若確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法fvc壓縮算法,從而保留寫回緩存區(qū)中的fvc壓縮算法壓縮生成的第一壓縮算法的壓縮結(jié)果。步驟1043、若確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法,則將寫回緩存區(qū)中的第一壓縮算法的壓縮結(jié)果替換為第二壓縮算法的壓縮結(jié)果。在本實(shí)施例中,具體的,在步驟103對第一壓縮算法fvc壓縮算法的壓縮率、以及第二壓縮算法c-pack壓縮算法的壓縮率,進(jìn)行仲裁之后,若確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法c-pack壓縮算法,從而將寫回緩存區(qū)中的fvc壓縮算法壓縮生成的第一壓縮算法的壓縮結(jié)果,替換為c-pack壓縮算法壓縮生成的第二壓縮算法的壓縮結(jié)果。并且,通過實(shí)驗(yàn)證明,通過本發(fā)明的方法,在原始數(shù)據(jù)集大小通過一般壓縮算法能夠有效的提升性能的情況下,可以超過原有的兩種壓縮算法中的 任何一種達(dá)到整體的提升,和單獨(dú)使用c-pack壓縮算法比較,本發(fā)明的方法可以比c-pack壓縮算法多提升10%到40%的壓縮性能。本實(shí)施例通過采用第一壓縮算法fvc壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成第一壓縮結(jié)果,并確定第一壓縮算法的壓縮率,在該過程中將fvc壓縮算法中的掩碼組合中的每一個(gè)掩碼的掩碼位,修改為5位掩碼位,從而可以保證采用fvc壓縮算法壓縮cache塊時(shí),具有16個(gè)子的cache塊可以全部被壓縮;并采用第二壓縮算法c-pack壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成第二壓縮結(jié)果,并確定第二壓縮算法的壓縮率;由于改進(jìn)后的fvc壓縮算法的壓縮時(shí)間較短,先將采用法fvc壓縮算法壓縮得到的第一壓縮結(jié)果,寫入至寫回緩存區(qū)中;若fvc壓縮算法的壓縮率小于等于c-pack壓縮算法的壓縮率,或者fvc壓縮算法的壓縮率大于c-pack壓縮算法的壓縮率、且fvc壓縮算法的壓縮率與c-pack壓縮算法的壓縮率之間的壓縮率差值小于等于預(yù)設(shè)字節(jié)數(shù),則保留寫回緩存區(qū)中fvc壓縮算法生成的壓縮結(jié)果;否則,將寫回緩存區(qū)中的fvc壓縮算法生成的壓縮結(jié)果替換為c-pack壓縮算法生成的壓縮結(jié)果;從而改進(jìn)后的fvc壓縮算法比較簡單,可以先于c-pack壓縮算法將壓縮結(jié)果寫入寫回緩存區(qū),同時(shí)返回仲裁結(jié)果后,決定是否覆蓋fvc壓縮算法已經(jīng)寫入的壓縮結(jié)果,減少寫入寫回緩存區(qū)的次數(shù),同時(shí),相比于仲裁后再決定哪種壓縮結(jié)果寫入寫回緩存區(qū),可以提高寫回緩沖區(qū)的效率。提供了一種cache的壓縮方法,將壓縮算法進(jìn)行組合,對各個(gè)壓縮算法的壓縮率以及各個(gè)壓縮算法生成的壓縮結(jié)果進(jìn)行仲裁,通過比較fvc壓縮算法與c-pack壓縮算法的壓縮率的大小,并設(shè)定壓縮率差值的預(yù)設(shè)字節(jié)數(shù),進(jìn)而比較出最優(yōu)的壓縮率,進(jìn)而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果;從而在壓縮率和解壓延遲之間進(jìn)行平衡,提供了一種具有較好壓縮率,且較小的解壓延遲的壓縮方法。圖3為本發(fā)明實(shí)施例三提供的cache的壓縮方法的流程圖,如圖3所示,在實(shí)施例一、實(shí)施例二的基礎(chǔ)上,至少兩種壓縮算法包括:第一壓縮算法和第二壓縮算法,步驟103,包括:步驟1033、若第一壓縮算法的壓縮率小于第一值,則確定最優(yōu)壓縮率為第一壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法。在本實(shí)施例中,具體的,可以采用兩種壓縮算法,對待壓縮的cache塊進(jìn)行壓縮,這兩種壓縮算法分別為第一壓縮算法和第二壓縮算法。在cache塊的壓縮過程中,具有相鄰物理地址的cache塊往往具有連續(xù)相似的壓縮率,即,隨著物理地址的遞增,cache塊的壓縮率趨近于連續(xù)函數(shù)變化,而非離散性很強(qiáng)的變化。因此,當(dāng)?shù)谝粔嚎s算法m對某個(gè)cache塊a的壓縮率為x時(shí),可以假設(shè)其物理地址鄰近的cache塊的壓縮率同樣近似為x,同樣的,第二壓縮算法n對cache塊a的壓縮率為y,對其臨近的cache塊a的壓縮率近似為y。假設(shè)第一壓縮算法m對cache塊a的壓縮,可以達(dá)到壓縮率小于50%,即一個(gè)cache塊塊的物理容量可以占用兩個(gè)tag,一倍物理容量提供兩倍有效容量,此時(shí),若解壓延遲長的第二壓縮算法n能夠替代第一壓縮算法m,需要達(dá)到壓縮率小于33%,占用3個(gè)tag,一倍物理容量提供三倍有效容量。以壓縮率比值進(jìn)行設(shè)計(jì),其中,壓縮率比值代表壓縮算法壓縮cache塊之前,cache塊的字節(jié)大小為p,壓縮之后的壓縮結(jié)果的字節(jié)大小為q,可以得到壓縮率比值p:q,p:q=1:3、或者p:q=1:3=2:3,等等。從而以此類推,第一壓縮算法m的壓縮率比值在1:3臨界點(diǎn),第二壓縮算法n的壓縮率比值需要在1:4臨界點(diǎn);第一壓縮算法m的壓縮率比值在1:4臨界點(diǎn),第二壓縮算法n的壓縮率比值需要在1:5臨界點(diǎn);第一壓縮算法m的壓縮率比值在2:3臨界點(diǎn),第二壓縮算法n的壓縮率比值需要在2:4臨界點(diǎn);第一壓縮算法m的壓縮率比值在3:4臨界點(diǎn),第二壓縮算法n的壓縮率比值需要在3:5臨界點(diǎn);第一壓縮算法m的壓縮率比值在4:5臨界點(diǎn),第二壓縮算法n的壓縮率比值需要在4:6臨界點(diǎn),以此類推。若第一壓縮算法的壓縮率小于第一值,則確定最優(yōu)壓縮率為第一壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法。具體來說,當(dāng)?shù)谝粔嚎s算法m的壓縮率比值在1:3臨界點(diǎn)以下,不論第二壓縮算法n壓縮率為多少,都確定最優(yōu)壓縮率為第一壓縮算法m的壓縮率,確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法m。步驟1034、若第一壓縮算法的壓縮率大于第一值,第一壓縮算法的壓縮率在預(yù)設(shè)區(qū)間中,且第一壓縮算法的壓縮率大于第二壓縮算法的壓縮率,則確定最優(yōu)壓縮率為第二壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮 算法為第二壓縮算法。在本實(shí)施例中,具體的,第一壓縮算法m的壓縮率大于第一值,第一壓縮算法m的壓縮率在預(yù)設(shè)區(qū)間中,且第一壓縮算法m的壓縮率大于第二壓縮算法n的壓縮率,則確定最優(yōu)壓縮率為第二壓縮算法n的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法n。具體來說,當(dāng)?shù)谝粔嚎s算法m的壓縮率比值在1:2至1:3間,若第二壓縮算法n的壓縮率比值在1:3臨界點(diǎn)下,則確定最優(yōu)壓縮率為第二壓縮算法n的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法n。當(dāng)?shù)谝粔嚎s算法m的壓縮率比值在2:3和1:2間,若第二壓縮算法n的壓縮率比值在1:2臨界點(diǎn)下,則確定最優(yōu)壓縮率為第二壓縮算法n的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法n。當(dāng)?shù)谝粔嚎s算法m的壓縮率比值在3:4和2:3間,若第二壓縮算法n的壓縮率比值在2:3臨界點(diǎn)下,則確定最優(yōu)壓縮率為第二壓縮算法n的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法n。當(dāng)?shù)谝粔嚎s算法m的壓縮率比值在4:5和3:4間,若第二壓縮算法n的壓縮率比值在3:4臨界點(diǎn)下,則確定最優(yōu)壓縮率為第二壓縮算法n的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法n。當(dāng)?shù)谝粔嚎s算法m的壓縮率比值在4:5以上,即采用第一壓縮算法m的4倍物理容量,無法壓縮5個(gè)有效cache塊,此時(shí)若第二壓縮算法n的壓縮率比值在4:5臨界點(diǎn)以下,則確定最優(yōu)壓縮率為第二壓縮算法n的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法n;此時(shí)若第二壓縮算法n的壓縮率比值在4:5臨界點(diǎn)以上,則確定最優(yōu)壓縮率為第一壓縮算法m的壓縮率,確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法m。在本實(shí)施例提供的方法中,采用的仲裁邏輯,需要設(shè)置幾個(gè)并行的比較器,從而可以比較第一壓縮算法m的壓縮率比值與設(shè)定的幾個(gè)預(yù)設(shè)區(qū)間中的閾值點(diǎn)之間的大小,從而可以確定第一壓縮算法m的壓縮率比值在哪個(gè)預(yù)設(shè)區(qū)間中;然后比較第一壓縮算法m的壓縮率比值與第二壓縮算法n的壓縮率比值。幾個(gè)比較器并行的計(jì)算兩種壓縮算法的壓縮率比值之間,確定第一壓縮算法m的壓縮率比值在一個(gè)預(yù)設(shè)區(qū)間中之后,若第一壓縮算法m的壓縮率比值大于該預(yù)設(shè)區(qū)間的寬度,即第一壓縮算法m的壓縮率比值大于第二壓 縮算法n的壓縮率比值,且第一壓縮算法m的壓縮率比值p:q的p與第二壓縮算法n的壓縮率比值p相同時(shí),而第二壓縮算法n的壓縮率比值q與第一壓縮算法m的壓縮率比值p:q的q之差大于1,則確定第二壓縮算法n具有更多的有效容量,第二壓縮算法n比第一壓縮算法m對同一cache塊的壓縮率少12%~18%時(shí),此時(shí)第二壓縮算法n的壓縮效果更好,可以確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法n。在本實(shí)施例中,第一壓縮算法m采用實(shí)施例二中改進(jìn)后的fvc壓縮算法,第二壓縮算法n采用c-pack壓縮算法。在本實(shí)施例中,其他步驟參照實(shí)施例二中的步驟,其他步驟與實(shí)施例二中的步驟的原理相同。本實(shí)施例通過采用第一壓縮算法fvc壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成第一壓縮結(jié)果,并確定第一壓縮算法的壓縮率,在該過程中將fvc壓縮算法中的掩碼組合中的每一個(gè)掩碼的掩碼位,修改為5位掩碼位,從而可以保證采用fvc壓縮算法壓縮cache塊時(shí),具有16個(gè)子的cache塊可以全部被壓縮;并采用第二壓縮算法c-pack壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成第二壓縮結(jié)果,并確定第二壓縮算法的壓縮率;由于改進(jìn)后的fvc壓縮算法的壓縮時(shí)間較短,先將采用法fvc壓縮算法壓縮得到的第一壓縮結(jié)果,寫入至寫回緩存區(qū)中;若第一壓縮算法fvc壓縮算法的壓縮率小于第一值,則確定最優(yōu)壓縮率為第一壓縮算法fvc壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法fvc壓縮算法,則保留寫回緩存區(qū)中fvc壓縮算法生成的壓縮結(jié)果;若第一壓縮算法fvc壓縮算法的壓縮率大于第一值,第一壓縮算法c-pack壓縮算法的壓縮率在預(yù)設(shè)區(qū)間中,且第一壓縮算法fvc壓縮算法的壓縮率大于第二壓縮算法c-pack壓縮算法的壓縮率,則確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法c-pack壓縮算法,將寫回緩存區(qū)中的fvc壓縮算法生成的壓縮結(jié)果替換為c-pack壓縮算法生成的壓縮結(jié)果;從而改進(jìn)后的fvc壓縮算法比較簡單,可以先于c-pack壓縮算法將壓縮結(jié)果寫入寫回緩存區(qū),同時(shí)返回仲裁結(jié)果后,決定是否覆蓋fvc壓縮算法已經(jīng)寫入的壓縮結(jié)果,減少寫入寫回緩存區(qū)的次數(shù),同時(shí),相比于仲裁后再決定哪種壓縮結(jié)果寫入寫回緩存區(qū),可以提高寫回緩沖區(qū)的效率。提供了一種cache的壓縮方法,將壓縮算法進(jìn)行組合,對各個(gè)壓縮算法的壓 縮率以及各個(gè)壓縮算法生成的壓縮結(jié)果進(jìn)行仲裁,通過比較第一壓縮算法fvc壓縮算法與第一值的大小,并確定第一壓縮算法fvc壓縮算法是否在預(yù)設(shè)區(qū)間中,比較第一壓縮算法fvc壓縮算法與第二壓縮算法c-pack壓縮算法的壓縮率的大小,進(jìn)而比較出最優(yōu)的壓縮率,進(jìn)而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果;從而在壓縮率和解壓延遲之間進(jìn)行平衡,提供了一種具有較好壓縮率,且較小的解壓延遲的壓縮方法。圖4為本發(fā)明實(shí)施例四提供的cache的壓縮裝置的結(jié)構(gòu)示意圖,如圖4所示,本實(shí)施例提供的cache的壓縮裝置,包括:獲取模塊41,用于獲取待壓縮的cache塊;壓縮模塊42,用于分別采用至少兩種壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成所述至少兩種壓縮算法的壓縮結(jié)果,并根據(jù)所述至少兩種壓縮算法的壓縮結(jié)果確定所述至少兩種壓縮算法的壓縮率;仲裁模塊43,用于根據(jù)所述至少兩種壓縮算法的壓縮率確定最優(yōu)壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法;寫入模塊44,用于將與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果,寫入至寫回緩存區(qū)。本實(shí)施例提供的cache的壓縮裝置可執(zhí)行本發(fā)明實(shí)施例一提供的cache的壓縮方法,其實(shí)現(xiàn)原理相類似,此處不再贅述。本實(shí)施例分別通過采用至少兩種壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成與采用的壓縮算法分別對應(yīng)的壓縮結(jié)果,同時(shí)根據(jù)至少兩種壓縮算法的壓縮結(jié)果確定至少兩種壓縮算法的壓縮率,壓縮率表征采用壓縮算法對cache塊壓縮后生成的壓縮結(jié)果的字節(jié)大??;然后將多種壓縮算法各自壓縮率進(jìn)行比較,確定出最優(yōu)壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法;最終將與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果,寫入至寫回緩存區(qū)。從而提供了一種cache的壓縮方法,將壓縮算法進(jìn)行組合,對多種壓縮算法的壓縮率以及多種壓縮算法生成的壓縮結(jié)果進(jìn)行仲裁,進(jìn)而比較出最優(yōu)的壓縮率,進(jìn)而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果;從而在壓縮率和解壓延遲之間進(jìn)行平衡,提供了一種具有較好壓縮率,且較小的解壓延遲的壓縮方法。圖5為本發(fā)明實(shí)施例五提供的cache的壓縮裝置的結(jié)構(gòu)示意圖,在實(shí)施 例四的基礎(chǔ)上,如圖5所示,本實(shí)施例提供的cache的壓縮裝置,至少兩種壓縮算法包括:第一壓縮算法和第二壓縮算法;仲裁模塊43,包括:第一仲裁子模塊431,用于若第一壓縮算法的壓縮率小于等于第二壓縮算法的壓縮率,或者第一壓縮算法的壓縮率大于第二壓縮算法的壓縮率、且第一壓縮算法的壓縮率與第二壓縮算法的壓縮率之間的壓縮率差值小于等于預(yù)設(shè)字節(jié)數(shù),則確定最優(yōu)壓縮率為第一壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法;第二仲裁子模塊432,用于第一壓縮算法的壓縮率與第二壓縮算法的壓縮率不符合第一仲裁子模塊431的條件時(shí),確定最優(yōu)壓縮率為第二壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法。寫入模塊44,包括:寫入子模塊441,用于將第一壓縮算法的壓縮結(jié)果寫入至寫回緩存區(qū);保留子模塊442,用于若確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法,則保留寫回緩存區(qū)中的第一壓縮算法的壓縮結(jié)果;替換子模塊443,用于若確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法,則將寫回緩存區(qū)中的第一壓縮算法的壓縮結(jié)果替換為第二壓縮算法的壓縮結(jié)果。第一壓縮算法為fvc壓縮算法,第二壓縮算法為c-pack壓縮算法。相應(yīng)的,壓縮模塊42,具體用于:將fvc壓縮算法中的掩碼組合中的每一個(gè)掩碼的掩碼位,修改為5位掩碼位;采用預(yù)設(shè)字典對待壓縮的cache塊進(jìn)行壓縮,生成5位掩碼位的掩碼以及壓縮數(shù)據(jù),以構(gòu)成fvc壓縮算法的壓縮結(jié)果,并計(jì)算fvc壓縮算法的壓縮率;并采用第二壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成第二壓縮結(jié)果,并確定第二壓縮算法的壓縮率。本實(shí)施例提供的cache的壓縮裝置可執(zhí)行本發(fā)明實(shí)施例二提供的cache的壓縮方法,其實(shí)現(xiàn)原理相類似,此處不再贅述。本實(shí)施例通過采用第一壓縮算法fvc壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成第一壓縮結(jié)果,并確定第一壓縮算法的壓縮率,在該過程中將fvc壓縮算法中的掩碼組合中的每一個(gè)掩碼的掩碼位,修改為5位掩碼位,從而 可以保證采用fvc壓縮算法壓縮cache塊時(shí),具有16個(gè)子的cache塊可以全部被壓縮;并采用第二壓縮算法c-pack壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成第二壓縮結(jié)果,并確定第二壓縮算法的壓縮率;由于改進(jìn)后的fvc壓縮算法的壓縮時(shí)間較短,先將采用法fvc壓縮算法壓縮得到的第一壓縮結(jié)果,寫入至寫回緩存區(qū)中;若fvc壓縮算法的壓縮率小于等于c-pack壓縮算法的壓縮率,或者fvc壓縮算法的壓縮率大于c-pack壓縮算法的壓縮率、且fvc壓縮算法的壓縮率與c-pack壓縮算法的壓縮率之間的壓縮率差值小于等于預(yù)設(shè)字節(jié)數(shù),則保留寫回緩存區(qū)中fvc壓縮算法生成的壓縮結(jié)果;否則,將寫回緩存區(qū)中的fvc壓縮算法生成的壓縮結(jié)果替換為c-pack壓縮算法生成的壓縮結(jié)果;從而改進(jìn)后的fvc壓縮算法比較簡單,可以先于c-pack壓縮算法將壓縮結(jié)果寫入寫回緩存區(qū),同時(shí)返回仲裁結(jié)果后,決定是否覆蓋fvc壓縮算法已經(jīng)寫入的壓縮結(jié)果,減少寫入寫回緩存區(qū)的次數(shù),同時(shí),相比于仲裁后再決定哪種壓縮結(jié)果寫入寫回緩存區(qū),可以提高寫回緩沖區(qū)的效率。提供了一種cache的壓縮方法,將壓縮算法進(jìn)行組合,對各個(gè)壓縮算法的壓縮率以及各個(gè)壓縮算法生成的壓縮結(jié)果進(jìn)行仲裁,通過比較fvc壓縮算法與c-pack壓縮算法的壓縮率的大小,并設(shè)定壓縮率差值的預(yù)設(shè)字節(jié)數(shù),進(jìn)而比較出最優(yōu)的壓縮率,進(jìn)而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果;從而在壓縮率和解壓延遲之間進(jìn)行平衡,提供了一種具有較好壓縮率,且較小的解壓延遲的壓縮方法。圖6為本發(fā)明實(shí)施例六提供的cache的壓縮裝置的結(jié)構(gòu)示意圖,在實(shí)施例四、實(shí)施例五的基礎(chǔ)上,如圖6所示,本實(shí)施例提供的cache的壓縮裝置,至少兩種壓縮算法包括:第一壓縮算法和第二壓縮算法;仲裁模塊43,包括:第三仲裁子模塊433,用于若第一壓縮算法的壓縮率小于第一值,則確定最優(yōu)壓縮率為第一壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法;第四仲裁子模塊434,用于若第一壓縮算法的壓縮率大于第一值,第一壓縮算法的壓縮率在預(yù)設(shè)區(qū)間中,且第一壓縮算法的壓縮率大于第二壓縮算法的壓縮率,則確定最優(yōu)壓縮率為第二壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法。本實(shí)施例的cache的壓縮裝置可執(zhí)行本發(fā)明實(shí)施例三提供的cache的壓縮方法,其實(shí)現(xiàn)原理相類似,此處不再贅述。本實(shí)施例通過采用第一壓縮算法fvc壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成第一壓縮結(jié)果,并確定第一壓縮算法的壓縮率,在該過程中將fvc壓縮算法中的掩碼組合中的每一個(gè)掩碼的掩碼位,修改為5位掩碼位,從而可以保證采用fvc壓縮算法壓縮cache塊時(shí),具有16個(gè)子的cache塊可以全部被壓縮;并采用第二壓縮算法c-pack壓縮算法對待壓縮的cache塊進(jìn)行壓縮,生成第二壓縮結(jié)果,并確定第二壓縮算法的壓縮率;由于改進(jìn)后的fvc壓縮算法的壓縮時(shí)間較短,先將采用法fvc壓縮算法壓縮得到的第一壓縮結(jié)果,寫入至寫回緩存區(qū)中;若第一壓縮算法fvc壓縮算法的壓縮率小于第一值,則確定最優(yōu)壓縮率為第一壓縮算法fvc壓縮算法的壓縮率,并確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第一壓縮算法fvc壓縮算法,則保留寫回緩存區(qū)中fvc壓縮算法生成的壓縮結(jié)果;若第一壓縮算法fvc壓縮算法的壓縮率大于第一值,第一壓縮算法c-pack壓縮算法的壓縮率在預(yù)設(shè)區(qū)間中,且第一壓縮算法fvc壓縮算法的壓縮率大于第二壓縮算法c-pack壓縮算法的壓縮率,則確定與最優(yōu)壓縮率對應(yīng)的壓縮算法為第二壓縮算法c-pack壓縮算法,將寫回緩存區(qū)中的fvc壓縮算法生成的壓縮結(jié)果替換為c-pack壓縮算法生成的壓縮結(jié)果;從而改進(jìn)后的fvc壓縮算法比較簡單,可以先于c-pack壓縮算法將壓縮結(jié)果寫入寫回緩存區(qū),同時(shí)返回仲裁結(jié)果后,決定是否覆蓋fvc壓縮算法已經(jīng)寫入的壓縮結(jié)果,減少寫入寫回緩存區(qū)的次數(shù),同時(shí),相比于仲裁后再決定哪種壓縮結(jié)果寫入寫回緩存區(qū),可以提高寫回緩沖區(qū)的效率。提供了一種cache的壓縮方法,將壓縮算法進(jìn)行組合,對各個(gè)壓縮算法的壓縮率以及各個(gè)壓縮算法生成的壓縮結(jié)果進(jìn)行仲裁,通過比較第一壓縮算法fvc壓縮算法與第一值的大小,并確定第一壓縮算法fvc壓縮算法是否在預(yù)設(shè)區(qū)間中,比較第一壓縮算法fvc壓縮算法與第二壓縮算法c-pack壓縮算法的壓縮率的大小,進(jìn)而比較出最優(yōu)的壓縮率,進(jìn)而確定出與最優(yōu)壓縮率對應(yīng)的壓縮算法的壓縮結(jié)果;從而在壓縮率和解壓延遲之間進(jìn)行平衡,提供了一種具有較好壓縮率,且較小的解壓延遲的壓縮方法。本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計(jì)算機(jī)可 讀取存儲介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲介質(zhì)包括:rom、ram、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。最后應(yīng)說明的是:以上實(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ù)方案的精神和范圍。當(dāng)前第1頁12