一種改進(jìn)型lz4壓縮算法的硬件實現(xiàn)系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機(jī)數(shù)據(jù)無損壓縮技術(shù),尤其涉及一種改進(jìn)型LZ4壓縮算法的硬件 實現(xiàn)系統(tǒng)。
【背景技術(shù)】
[0002] 隨著計算機(jī)和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,互聯(lián)網(wǎng)每天產(chǎn)生的數(shù)據(jù)量正呈現(xiàn)爆發(fā)增長的 態(tài)勢,如何存儲不斷產(chǎn)生的海量數(shù)據(jù),如何提高存儲器利用效率,正成為存儲系統(tǒng)設(shè)計者的 一大難題。
[0003] 自兩位以色列研究者J. Ziv和A. Lempel在1977年提出了 LZ77壓縮算法以來,各 種基于字典匹配的LZ壓縮算法的變體相繼被提出,其中包括LZ78, LZW,LZO, LZSS等。大部 分基于LZ77的變體被廣泛用于文本和位圖的無損壓縮,其壓縮編碼的效率可以很大程度 上逼近信源的信息熵值。然而大部分LZ算法及其變體的壓縮和解壓縮的平均速度僅200~ 600MBps已經(jīng)不能適應(yīng)現(xiàn)代計算機(jī)設(shè)備中動輒IGBps以上的總線帶寬。于是提出了一種壓 縮解壓縮速度遠(yuǎn)高于目前無損壓縮解壓縮算法的LZ變體算法一一LZ4。
[0004] LZ4壓縮算法的速度優(yōu)勢在于其建立字典的過程中,減少了計算散列值和更新散 列表單元的次數(shù),并且,在輸出編碼方面采用直接編碼的方式,減小了算法輸出過程中的延 遲。但正是由于LZ4壓縮算法降低散列表更新次數(shù)以提高壓縮速度的做法,導(dǎo)致LZ4壓縮 算法的壓縮率會比其他基于LZ變體的壓縮算法要差一些。然而,目前所有的對LZ4壓縮算 法的評估都是建立在軟件實現(xiàn)的基礎(chǔ)上,由于CPU架構(gòu)的限制,并沒有體現(xiàn)出LZ4壓縮算法 的速度優(yōu)勢,并且,LZ4壓縮算法本身有一定的改進(jìn)空間,以在不顯著影響其壓縮速度的情 況下提升其壓縮率。
[0005] 并且,軟件壓縮系統(tǒng)會占用大量的CPU資源,且壓縮過程是串行執(zhí)行,處理效率低 下,數(shù)據(jù)壓縮造成的延遲比較大,拖慢了數(shù)據(jù)訪問速度。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明所要解決的技術(shù)問題在于改進(jìn)原始的LZ4壓縮算法,主要體現(xiàn)在采用全范 圍逐字散列的方法,改進(jìn)了原始LZ4算法中,對匹配字符串內(nèi)部不進(jìn)行散列表錄入的缺陷。 原始LZ4算法這樣設(shè)計的原因是由于軟件錄入散列表的過程會大量消耗cpu資源,所以在 匹配串內(nèi)部字符不會被錄入散列表,而改進(jìn)型LZ4算法是基于硬件電路優(yōu)化的,可以將匹 配串內(nèi)部的字符也錄入散列表,這樣的做法可以提升LZ4壓縮算法的壓縮率。使其在不顯 著增加額外的延遲的情況下使壓縮率有所提升,并且采用硬件電路實現(xiàn)該改進(jìn)型LZ4壓縮 算法。
[0007] 本發(fā)明具體采用以下技術(shù)方案解決上述技術(shù)問題:
[0008] -種改進(jìn)型LZ4壓縮算法的硬件實現(xiàn)系統(tǒng),通過硬件實現(xiàn)系統(tǒng)實現(xiàn)待壓縮文件的 全范圍逐字散列的LZ4壓縮算法;所述硬件實現(xiàn)系統(tǒng)包括數(shù)據(jù)輸入模塊、字符串拼接模塊、 滑動字典模塊、絕對地址產(chǎn)生模塊、地址轉(zhuǎn)換模塊、散列表模塊以及主控模塊;
[0009] 所述數(shù)據(jù)輸入模塊用于讀取待壓縮文件的數(shù)據(jù)塊,并暫存在FIFO中,等待后級模 塊的讀取;
[0010] 所述字符串拼接模塊由兩組移位寄存器構(gòu)成;用于從FIFO中讀取待壓縮文件中 的數(shù)據(jù),并將讀入的字符與之前3個字符組合成一個新的4字節(jié)字符串對數(shù)據(jù)進(jìn)行拼接,等 待所述散列表模塊或所述主控模塊的數(shù)據(jù)讀取請求;
[0011] 所述滑動字典模塊包含用于存儲當(dāng)前的字典以及緊鄰字典的數(shù)據(jù)的存儲器;用于 接收所述字符串拼接模塊拼接完成的數(shù)據(jù),并將其依次存入所述存儲器中更新滑動字典;
[0012] 所述絕對地址產(chǎn)生模塊包括地址累加電路,用于對文件中的每個字符產(chǎn)生獨(dú)一無 二的32位絕對地址;
[0013] 所述地址轉(zhuǎn)換模塊包含地址減法電路,用于將來自所述絕對地址產(chǎn)生模塊產(chǎn)生的 32位絕對地址轉(zhuǎn)換成適用于所述滑動字典模塊中的滑動字典尋址的16位相對地址;
[0014] 所述散列表模塊包含一個用于存儲散列表數(shù)據(jù)的存儲器和一個用于計算散列地 址的邏輯運(yùn)算電路;用于在更新過程中從所述字符串拼接模塊中讀取拼接好的4字節(jié)字符 串,并通過邏輯運(yùn)算電路計算字符串的散列地址,將該4字節(jié)字符串對應(yīng)的在數(shù)據(jù)塊中的 絕對首地址存入存儲器中散列地址對應(yīng)的存儲單元中;
[0015] 所述主控模塊用于接收所述字符串拼接模塊的4字節(jié)字符串作為當(dāng)前字符串,并 將其發(fā)送給散列表模塊計算散列地址;讀取散列表中對應(yīng)散列地址中的內(nèi)容,并根據(jù)散列 表中對應(yīng)散列地址中的內(nèi)容根據(jù)所述地址轉(zhuǎn)換模塊轉(zhuǎn)換的相對地址讀取滑動字典模塊中 的4字節(jié)字符串,并與當(dāng)前字符串比對,輸出匹配信息與未匹配信息。
[0016] 所述滑動字典模塊包含一個位寬32bit,深度32KB,總?cè)萘?28KB的存儲器,用于 存儲當(dāng)前的64KB字典以及緊鄰字典的數(shù)據(jù),用地址指針調(diào)度的方式實現(xiàn)滑動的功能。
[0017] 所述散列地址的計算過程為用32位二進(jìn)制值乘以0~232之間的黃金分割系數(shù), 然后保留第31位到第17位,得到15位散列地址。
[0018] 所述通過硬件實現(xiàn)系統(tǒng)實現(xiàn)待壓縮文件的全范圍逐字散列的LZ4壓縮算法包括 以下步驟:
[0019] 步驟1、初始化散列表和滑動字典,所有散列表存儲單元內(nèi)容全部初始化成0,滑 動字典初始化首地址和尾地址重合;
[0020] 步驟2、從待壓縮文件中讀入4字節(jié)字符串,計算該字符串散列地址,并將該字符 串在文件中的絕對首地址存入散列表中該字符串散列地址的對應(yīng)單元;在讀入過程中,將 所述字符串存入滑動字典中;
[0021] 步驟3、從待壓縮文件中讀入一個后續(xù)字符,將讀入的字符與之前3個字符組合成 一個新的4字節(jié)字符串并計算其散列地址;在讀入過程中,將所述字符存入滑動字典中直 至滑動字典達(dá)到設(shè)定大小并不斷進(jìn)行更新;
[0022] 步驟4、利用散列表查找滑動字典中是否存在新的4字節(jié)字符串的匹配字符串,如 果有匹配,則跳至步驟5,并保存當(dāng)前字符串的散列映射關(guān)系;如果沒有匹配,則返回步驟 3,同時計算匹配距離,且無匹配字符串長度加1并輸出無匹配字符;
[0023] 步驟5、從待壓縮文件中讀入一個后續(xù)字符,讀入過程中將讀入的字符與之前3個 字符組合成一個新的4字節(jié)字符串,計算其散列地址并將散列映射關(guān)系保存至散列表中; 從滑動字典中讀出步驟3的匹配字符串的后續(xù)字符;將讀入的字符與該后續(xù)字符作比較, 如果匹配,那么重復(fù)本步驟;否則計算匹配字符串長度,返回步驟4 ;
[0024] 步驟6、將步驟4和步驟5得到的無匹配字符串長度、無匹配字符串、匹配字符串長 度以及匹配距離編碼成壓縮后的數(shù)據(jù)格式,輸出到壓縮目標(biāo)文件中;同時,判斷待壓縮文件 是否結(jié)束,如果未結(jié)束,則返回步驟3 ;如果已結(jié)束,則結(jié)束壓縮過程。
[0025] 所述步驟3中滑動字典的設(shè)定大小為64KB。
[0026] 所述步驟6中的編碼:假設(shè)在掃描待處理區(qū)域字符的過程中,通過散列表找到了 在滑動字典中的匹配串,并且獲得了匹配串的首地址,則該匹配串長度為N,用當(dāng)前處理字 符的地址減去匹配串首地址得到有匹配字符串相對于滑動字典中的匹配串的偏移量0,用 當(dāng)前處理字符的地址減去滑動字典尾地址即無匹配字符串長度M ;如果M和N均小于等于 15,則將M和N拼接成一個8位編碼,其中M和N各占用4位;如果M超過15,則增加一個 8位編碼的無匹配串長度的附加字節(jié)來表示多出的計數(shù)值;如果N超過15,則增加一個有匹 配串長度附加字節(jié)來表示多出的計數(shù)值;然后將M個無匹配字符直接輸出到編碼中,最后 輸出16位的有匹配字符串的偏移量0以及可選的無匹配串長度附加位。
[0027] 相比現(xiàn)有技術(shù),本發(fā)明具有以下有益效果:
[0028] 本發(fā)明設(shè)計了一種壓縮速度高于現(xiàn)有的LZ系列無損壓縮算法,采用全范圍逐字 散列的方法,改進(jìn)了原始LZ4算法中,對匹配字符串內(nèi)部不進(jìn)行散列表錄入的缺陷。使其在 不顯著增加額外的延遲的情況下使壓縮率有所提升,并且采用硬件電路實現(xiàn)該改進(jìn)型LZ4 壓縮算法。該算法適用于對壓縮速度和處理帶寬要求很高的場合,并且保證壓縮率不劣于 現(xiàn)有壓縮算法;
[0029] 本發(fā)明采用全硬件實現(xiàn)該壓縮算法,相比較軟件實現(xiàn)的方式,硬件電路可以同時 處理壓縮過程中的多個步驟,壓縮過程造成的延時更低,處理性能更強(qiáng),并且硬件實現(xiàn)的壓 縮系統(tǒng)可以有效的降低數(shù)據(jù)中心服務(wù)器的CPU載荷。更有利于本發(fā)明算法的運(yùn)行。
【附圖說明】
[0030] 圖1為本發(fā)明的一種改進(jìn)型LZ4壓縮算法流程圖;
[0031] 圖2為本發(fā)明的一種改進(jìn)型LZ4壓縮算法的數(shù)據(jù)處理過程示意圖;
[0032] 圖3為本發(fā)明的一種改進(jìn)