欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于流水線的數(shù)據(jù)匹配方法和裝置制造方法

文檔序號:7545756閱讀:382來源:國知局
一種基于流水線的數(shù)據(jù)匹配方法和裝置制造方法
【專利摘要】本發(fā)明公開一種基于流水線的數(shù)據(jù)匹配方法和裝置,該方法包括:將參與匹配壓縮原始源文件分塊順序逐次讀入字典存儲器,根據(jù)匹配壓縮的進度適時更新字典存儲器中的數(shù)據(jù);順序?qū)ψ值浯鎯ζ髦羞B續(xù)3個字符進行改進哈希算法運算,根據(jù)得到的哈希值預(yù)判可能匹配字符串,據(jù)此構(gòu)成可能匹配字符存儲串的地址鏈;同時以地址鏈中的值為地址,依次從字典存儲器中取值并比較后,將最優(yōu)匹配結(jié)果輸出。以上3步同時進行,流水線操作,由于讀入和哈希計算速度很快,該流水線的數(shù)據(jù)依賴性很小。
【專利說明】一種基于流水線的數(shù)據(jù)匹配方法和裝置
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明實施例涉及數(shù)據(jù)壓縮【技術(shù)領(lǐng)域】,尤其涉及一種基于流水線的數(shù)據(jù)匹配方法和裝置。
【背景技術(shù)】
[0002]目前,為了節(jié)省數(shù)據(jù)存儲空間,減少存儲介質(zhì)需求,同時提高數(shù)據(jù)傳輸效率,數(shù)據(jù)壓縮技術(shù)在物聯(lián)網(wǎng)、數(shù)據(jù)庫、云存儲等領(lǐng)域有著廣泛的應(yīng)用。其中,Gzip壓縮算法是目前應(yīng)用最廣泛的一種高效且開源壓縮算法,例如,使用Gzip壓縮算法在Web服務(wù)器上將網(wǎng)頁進行壓縮,可以提高訪問響應(yīng)速度。
[0003]Gzip壓縮算法具體包括兩部分:LZ77算法和哈夫曼(Huffman)編碼。其中哈夫曼編碼不在本專利討論范圍之內(nèi)。LZ77算法通過匹配替換將原始源文件進行去冗余,以達到壓縮的目的。LZ77算法的軟件實現(xiàn)方法是:先使用哈希算法,將可能匹配的字符串的地址構(gòu)成鏈表;然后在匹配范圍內(nèi)(也被稱為滑動窗口,大小為32768,32KB),將當前處理字符串與上述鏈表中字符串,不斷迭代尋找最佳匹配;最后將匹配串替換來去冗余。
目前LZ77算法軟件實現(xiàn)時,會使用哈希算法構(gòu)造鏈表;從文件頭開始,為原始源文件中每3個連續(xù)字節(jié)(3 byte: 24bit)計算得出一個15比特(15bit)哈希值(根據(jù)哈希算法,哈希值相同,即有可能存在匹配),然后會用一個鏈表數(shù)據(jù)結(jié)構(gòu)保存所有哈希相同的字符索引;對每個進行匹配的字符,首先計算其和其后2個字節(jié)(Byte),一共連續(xù)3個字節(jié)(Byte),的哈希值;然后維護哈希鏈表的同時,使用哈希鏈表循環(huán)取出匹配范圍內(nèi)可能匹配的字符串地址,根據(jù)地址依次將字符串取出進行匹配比較;匹配成功部分字符串也需要通過哈希計算并插入鏈表,供后面字符匹配查找時使用。
[0004]在實現(xiàn)本發(fā)明過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題:
使用軟件對LZ77算法進行順序串行(哈希計算一鏈表維護一取值比較(循環(huán)迭代取值比較))處理時,處理效率非常低,消耗大量的處理器與存儲器資源;目前LZ77算法軟件實現(xiàn)哈希計算方法存在缺陷,相鄰編碼字符串的哈希值之間容易沖突(字符串不同,哈希值相同),造成無效匹配;兩者是軟件實現(xiàn)LZ77算法的性能瓶頸。

【發(fā)明內(nèi)容】

[0005]本發(fā)明提供一種基于流水線的數(shù)據(jù)匹配方法和裝置,以解決現(xiàn)有技術(shù)中,軟件實現(xiàn)LZ77算法,順序串行迭代處理的匹配成功率低,效率差、且消耗大量處理器與存儲器資源的缺陷,該LZ77算法實施例現(xiàn)通過基于可編程門陣列的硬件來實現(xiàn)。
本發(fā)明提供一種基于流水線的數(shù)據(jù)匹配方法,包括:
字典存儲器用于分部存儲將要被匹配壓縮的文件,根據(jù)匹配壓縮的進度適時,字典存儲器循環(huán)從參與匹配壓縮原始源文件中順序逐次分塊讀入并更新內(nèi)容,直至整個文件匹配壓縮完畢;哈希單元使用改進哈希算法計算當前處理字符及隨后2個字節(jié)的字符(共3個字節(jié)(Byte)的字符,以下簡稱為:當前處理字符段)的哈希值,并以此哈希值為地址,將當前處理字符在字典存儲器中的位置信息為內(nèi)容,存儲到的鏈頭存儲器中;根據(jù)上述地址中鏈頭隨機存儲器中內(nèi)容的情況,對鏈頭存儲器、回溯存儲器和相關(guān)鏈頭匹配先入先出存儲器進行維護;匹配比較單元,從鏈頭匹配先入先出存儲器和回溯存儲器中順序取得可能匹配的字符串索引,并依次使用改進匹配比較方法取值比較,同時維護回溯存儲器,直至匹配比較結(jié)束。以上均為并行操作同時進行,流水線操作。由于讀入操作和哈希計算速度很快,流水線數(shù)據(jù)依賴性很小。所述改進匹配比較方法,區(qū)別于每次只匹配比較I個字節(jié)舊方法,通過從字典存儲器取值、拼接,使每次匹配比較8個字節(jié)(Byte),匹配比較后輸出匹配失敗或匹配成功字節(jié)數(shù);若匹配成功字節(jié)數(shù)為8,則繼續(xù)匹配后8個字節(jié)(Byte),直至得到最長匹配長度為止。
本發(fā)明實施例還提供一種基于流水線的裝置,包括:
字典存儲器,用于順序分塊存儲參與匹配壓縮原始源文件,并且根據(jù)匹配壓縮情況更新;哈希單元,用于計算當前處理字符段的哈希值,并以哈希值為地址,將當前處理字符在字典存儲器中的位置信息存入鏈頭存儲器。如果在鏈頭存儲器中已經(jīng)存儲有以哈希值為地址的舊位置信息,則使用新位置信息替代所述舊位置信息。哈希單元使用新位置信息替代舊位置信息時,會將新位置信息和舊位置信息拼接后,放入鏈頭匹配先入先出存儲器中;匹配比較單元在匹配比較時,再從鏈頭匹配先入先出存儲器中取出該信息,用于遍歷回溯存儲器得到哈希值相同的地址。以上述地址從字典存儲器中取值,匹配替代去冗余。
本發(fā)明提供的一種基于流水線的數(shù)據(jù)匹配方法和裝置,通過基于可編程門陣列的硬件來實現(xiàn)LZ77算法,克服了現(xiàn)有軟件實現(xiàn)技術(shù)中順序串行迭代處理的匹配成功率低,效率差、且消耗大量處理器與存儲器資源的缺陷,能夠提高LZ77算法的處理效率,極大地減少了處理器與存儲器和資源消耗。
【專利附圖】

【附圖說明】
[0006]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0007]圖1是根據(jù)本發(fā)明實施例的基于流水線的數(shù)據(jù)匹配硬件的結(jié)構(gòu)示意圖;
圖2是根據(jù)本發(fā)明實施例的字典存儲器的裝置示意圖;
圖3是根據(jù)本發(fā)明實施例的哈希單元的裝置示意圖;
圖4是根據(jù)本發(fā)明實施例的鏈頭存儲器的裝置示意圖;
圖5是根據(jù)本發(fā)明實施例的回溯存儲器的裝置示意圖;
圖6是根據(jù)本發(fā)明實施例的鏈頭匹配先入先出存儲器的裝置示意圖;
圖7是根據(jù)本發(fā)明實施例的匹配比較范圍的示意圖;
圖8是根據(jù)本發(fā)明實施例的標志位寄存器的示意圖;
圖9是根據(jù)本發(fā)明實施例的匹配比較單元的裝置的示意圖;
圖10、圖11、圖12是根據(jù)本發(fā)明實施例的基于流水線數(shù)據(jù)匹配方法和主要存儲單元維護的流程圖?!揪唧w實施方式】
[0008]根據(jù)本發(fā)明的實施例,基于流水線的LZ77算法的裝置可基于專用集成電路(Application Specific Integrated Circuit ;簡稱 ASIC)或現(xiàn)場可編程門陣列(Field-Programmable Gate Array ;簡稱:FPGA)。其中,基于ASIC實現(xiàn)一次性投入門濫高,開發(fā)周期較長,對工藝依賴性強,并且最終產(chǎn)品不靈活等缺點,不太適合應(yīng)用于產(chǎn)品更新快、需求多變的網(wǎng)絡(luò)設(shè)備中?;贔PGA的方法一次性投入適中,開發(fā)周期短,平臺可移植性強。因此在本發(fā)明實施例中,采用基于FPGA的裝置來實現(xiàn)LZ77算法。
下面結(jié)合附圖和具體實施例進一步說明本發(fā)明實施例的技術(shù)方案。根據(jù)本發(fā)明的實施例,提供了一種數(shù)據(jù)匹配裝置,圖1是根據(jù)本發(fā)明實施例的數(shù)據(jù)匹配裝置示意圖,如圖1所示,根據(jù)本發(fā)明實施例的數(shù)據(jù)匹配裝置包括:字典存儲器10、哈希單元12、鏈頭存儲器14、回溯存儲器16、鏈頭匹配先入先出存儲器18、標志位寄存器20、匹配比較單元22。下面,對上述各個模塊進行詳細的說明。
字典存儲器10用于保存將要被壓縮處理的字符,分塊讀入?yún)⑴c匹配壓縮原始源文件,供哈希單元和匹配比較單元查詢讀取。字典存儲器中的內(nèi)容將按次序循環(huán)更新。在本發(fā)明的實施例中,如圖2上述分塊,字典存儲器被分為3塊,每塊大小為32千字節(jié)(KB)。
具體地,LZ77算法需要定義一個滑動窗口,簡稱窗口,其大小一般為32千字節(jié)(KB),當前處理字符段會在這個窗口中查找匹配。窗口隨著壓縮的進行移動,新內(nèi)容會移入,舊內(nèi)容會被移出。在本發(fā)明的實施例中,如圖7,將窗口大小設(shè)置為32千(32K)。
硬件實現(xiàn)LZ77算法時,為了實現(xiàn)操作管理簡單,很多都采用獨立窗口的實現(xiàn)方式:根據(jù)獨立窗口大小,將參與匹配壓縮原始源文件人為地拆分為獨立的32千字節(jié)(KB)段,存入字典存儲器10不同塊中,塊與塊之間互不相關(guān)。為了對參與匹配壓縮原始源文件進行連續(xù)窗口的處理以及流水線操作,本發(fā)明實施例的對字典存儲器10的存儲管理方式做了如下優(yōu)化:
使用特殊的預(yù)讀和清除管理機制管理字典存儲器10中的各塊內(nèi)容,如圖2,字典存儲器10分為3塊,每塊32千字節(jié)(KB),滑動窗口大小為32千字節(jié)(KB)。當且僅當滑動窗口移出字典存儲器10中某一塊時,標志位寄存器20中該塊對應(yīng)部分被設(shè)置標志位,如果參與匹配壓縮原始源文件尚未被處理完,則清除上述塊中內(nèi)容,并填入新的后續(xù)為參與匹配壓縮原始源文件,完成后清除該塊標志位。當窗口移入某一新塊是,先查詢標志位寄存器20中該塊所對應(yīng)的標志位,若標志位已被清除,則直接移入處理;若標志位已設(shè),則需等待標志位被清除后再移入。
字典存儲器10留有與哈希單元的接口,能夠順序地,每次右移一個字節(jié)(Byte),輸出連續(xù)3個字節(jié)(Byte)的字符串。具體操作如下,有2組位長大于3的寄存器(在本發(fā)明的實施例中,將寄存器位長設(shè)為8),根據(jù)需要順序從字典存儲器10中讀入并且數(shù)據(jù),交替更新,并且輸出連續(xù)3個字節(jié)(Byte)的字符串。
每個時鐘沿上,可能會同時有2個讀請求(哈希單元12,匹配比較單元22)訪問字典存儲器10,因此,必須采用讀協(xié)調(diào)模塊來避免讀沖突,在本發(fā)明實施例中,采用權(quán)限分級模式。通過計算評估最優(yōu)效率,令匹配比較單元22的訪問權(quán)限高于哈希單元12,若兩個單元時分單獨提出讀請求,則字典存儲器10立即響應(yīng);若上述兩個單元同時提出讀請求,則立即響應(yīng)匹配比較單元22,延時I個周期后再響應(yīng)字典存儲器10的請求。 哈希單元12用于計算從字典存儲器10輸出的連續(xù)3個字節(jié)(Byte)的字符串的哈希值,輸入為3個字節(jié)(Byte)的字符串的二進制值,輸出為16位(bit)哈希值。輸出哈希值,即為所處理字符串的字符索引。并以該哈希值為地址將字符串首字節(jié)在字典存儲器10中的地址(位置信息)作為內(nèi)容,存入鏈頭存儲器14中。
鏈頭存儲器14,用于以字符串哈希值為地址,存儲該字符串首字節(jié)在字典存儲器10中的地址(位置信息)。在存入前,首先確定該地址上數(shù)據(jù)是否有效,若為無效數(shù)據(jù),則直接往該地址存入新內(nèi)容;若為有效數(shù)據(jù),則將該數(shù)據(jù)和將要存入的數(shù)據(jù)拼接后,存入鏈頭匹配先入先出存儲器18 ;同時將要存入鏈頭存儲器14的數(shù)據(jù)為地址,以已存在的有效數(shù)據(jù)為內(nèi)容,存入回溯存儲器16 ;并將鏈頭存儲器14中已有的有效數(shù)據(jù)更新為新的數(shù)據(jù)。
具體地,判斷鏈頭存儲器14中將要存入地址上數(shù)據(jù)是否為有效,其判斷條件有二:
1.數(shù)據(jù)是否為全0,若為全0,則為無效數(shù)據(jù);若不為全0,則需要判斷將要存入的新數(shù)據(jù)與該數(shù)據(jù)的“差”(實際上指的是兩個地址間的距離)是否大于窗口大???(在本發(fā)明的實施例中,窗口大小設(shè)置為32千(32K)。)若大于,則為無效數(shù)據(jù);反之為有效數(shù)據(jù)。
鏈頭匹配先入先出存儲器18,用于在鏈頭存儲器中某一地址更新內(nèi)容,且該地址原先存放有有效數(shù)據(jù)時,存儲該新數(shù)據(jù)與舊的有效數(shù)據(jù)首尾拼接后的內(nèi)容。在本發(fā)明的實施例中,數(shù)據(jù)寬度設(shè)為34位(bit),深度為20千(20K)。鏈頭匹配先入先出存儲器18中的數(shù)據(jù),供匹配比較單元22在匹配比較時讀取。
回溯存儲器16用于在鏈頭存儲器中某一地址更新內(nèi)容,且該地址原先存放有有效數(shù)據(jù)時,在以新數(shù)據(jù)為地址位置空間,存儲舊的有效數(shù)據(jù)。在本發(fā)明的實施例中,回溯存儲器16,對應(yīng)于字典存儲器10,分為相應(yīng)的3塊。每塊大小為96千字節(jié)(96KB: 17bit*32K)的塊隨機存儲器(block RAM)構(gòu)成。字典存儲器10中各塊的內(nèi)容,也同步于字典存儲器10中相應(yīng)塊的內(nèi)容,字典存儲器10某塊內(nèi)容被清空時,其在回溯存儲器16對應(yīng)的塊中的內(nèi)容也一起被清空?;厮荽鎯ζ?6中的數(shù)據(jù),供匹配比較單元22在匹配比較時讀取。
標志位寄存器20由一組多個獨立的,對應(yīng)于字典存儲器10中塊數(shù)的寄存器構(gòu)成。在本發(fā)明的實施例中,每個寄存器至少為2位(bit)。標志位寄存器20用于標志字典存儲器10中各塊數(shù)據(jù)的狀態(tài)(空/有效/哈希計算過/無效)。當字典存儲器10中的某塊內(nèi)容被清空后尚未更新成新的內(nèi)容時,則其對應(yīng)的標志位被設(shè)為空;當字典存儲器10中的某塊內(nèi)容被更新成新的內(nèi)容,尚未經(jīng)過哈希單元12計算完哈希值時,則其對應(yīng)的標志位為有效;當字典存儲器10中的某塊內(nèi)容被哈希單元12計算完哈希值后,則其對應(yīng)的標志位被設(shè)為哈希計算過;當字典存儲器10中的某塊內(nèi)容被匹配比較單元22處理過所有數(shù)據(jù)時,則其對應(yīng)的標志位被設(shè)為無效。
[0009]每個時鐘沿上,可能會同時有2個讀寫請求(哈希單元12,匹配比較單元22)訪問回溯存儲器16。因此,必須采用讀寫協(xié)調(diào)模塊來避免讀沖突,在本發(fā)明實施例中,采用權(quán)限分級模式。通過計算評估最優(yōu)效率,令匹配比較單元22的訪問權(quán)限高于哈希單元。若上述兩個單元時分單獨提出讀、寫請求,則回溯存儲器16立即響應(yīng);若上述兩個單元同時提出讀、寫請求,則立即響應(yīng)匹配比較單元22的讀請求,延時I個周期后再響應(yīng)字典存儲器10的寫請求。匹配比較單元22,用于匹配比較并且輸出匹配結(jié)果(標志位,重復(fù)長度,指回距離)。每次匹配比較時:匹配比較單元22從鏈頭匹配先入先出存儲器18中取出第一對可能匹配的地址對。然后根據(jù)上述地址對查詢回溯存儲器16,以得到窗口內(nèi)其他與當前處理字符串可能匹配的字符串的地址。同時,從字典存儲器10中取出以上述地址起始的字符串,并進行比較。每次比較都追求最大的匹配長度,完成設(shè)置范圍內(nèi)所有的比較后,輸出最大的匹配長度已經(jīng)相應(yīng)的指回距離。然后,開始下一次的匹配比較。具體的,匹配比較單元22進行匹配比較時,在上述設(shè)置范圍內(nèi)進行。所設(shè)范圍有二:1.匹配內(nèi)容的最大長度,當匹配內(nèi)容大于等于該最大匹配長度、遇到文件末尾時,匹配動作將會停止并輸出匹配結(jié)果(匹配長度最大為255)。在本發(fā)明的實施例中,最大匹配長度255字節(jié)(Byte) ;2.最大回溯次數(shù),匹配比較單元,使用回溯存儲器16中地址進行匹配比較的次數(shù),較多回溯次數(shù)對應(yīng)較好的壓縮效果和較低的壓縮帶寬,反之對應(yīng)較高的壓縮帶寬和較差的壓縮效果,硬件實現(xiàn)時,該設(shè)置可設(shè)為固定值或設(shè)為可配置寄存器。在本發(fā)明的實施例中,回溯次數(shù)可為了不同的目標靈活設(shè)置,可設(shè)置為4次,8次,16次,32次和無窮多次。匹配比較單元22從鏈頭匹配先入先出存儲器18中取出的數(shù)據(jù),是由哈希單元使用新位置信息替代舊位置信息時,將新位置信息和舊位置信息拼接后放入其中的。該數(shù)據(jù)是當前處理字符的首地址和第一個可能與其匹配的字符串的首地址。匹配比較單元22將上述兩段地址取出并分拆后,根據(jù)這兩段地址從字典存儲器10中取出字符串并進行比較。
匹配比較單元22以上述分拆后的數(shù)據(jù)為地址,從回溯存儲器16中取出數(shù)據(jù),再以新取出的數(shù)據(jù)為地址訪問回溯存儲器16取值,如此循環(huán)遍歷出所有設(shè)置范圍內(nèi)可能匹配的字符串的地址。
匹配比較單元22以上述地址訪問字典存儲器10取得可能與當前處理字符可能匹配的字符串,進行匹配比較。字符串取值與匹配比較同時進行,匹配比較的同時從字典存儲器10中讀取下一次匹配比較所需的數(shù)據(jù)。每次讀入多個字節(jié)加入比較,取代軟件實現(xiàn)是按字節(jié)讀入比較,可以很大程度上提高比較效率。在本發(fā)明的實施例中,每次從字典存儲器10讀入8個字節(jié)(Byte)參與比較。
[0010]匹配比較單元22對每一對可能匹配的字符串進行匹配比較時,如果先期讀入的字符串的匹配比較結(jié)果為全部匹配,則繼續(xù)從字典存儲器10讀出后續(xù)的8個字節(jié)加入字符串,“延長”后,再進行比較匹配,直至得到最長的匹配結(jié)果,至此該對字符串匹配比較結(jié)束為止。每對字符串匹配完成后,匹配比較單元22會根據(jù)從回溯存儲器16中取出數(shù)據(jù)繼續(xù)從字典存儲器10讀出新的字符串,參與和當前處理字符串的比較。循環(huán)進行,直至范圍內(nèi)的所有匹配比較結(jié)束。比較結(jié)束后,匹配比較單元22輸出匹配比較結(jié)果。匹配比較結(jié)果包括標志位、匹配長度和指回距離,共3項。其中標志位用于標識輸出的內(nèi)容是未匹配的數(shù)據(jù),還是匹配成功的長度距離對(匹配長度、指回距離)。如果所有匹配均未成功,標志位未匹配數(shù)據(jù);如果匹配成功,除輸出相應(yīng)標志位外,還需要輸出匹配長度和與匹配長度相對應(yīng)的指回距離。所謂指回距離,是指匹配字符串的首字節(jié)之間的距離。
在實際的應(yīng)用中,本發(fā)明實施例的技術(shù)方案可應(yīng)用于各種存在數(shù)據(jù)壓縮需求的環(huán)境中,例如,透明硬件壓縮IP可以集成到數(shù)據(jù)服務(wù)器的網(wǎng)絡(luò)模塊中完成壓縮和解壓,數(shù)據(jù)服務(wù)器在收發(fā)文件時實時地將文件壓縮存儲或傳輸,節(jié)省存儲空間和網(wǎng)絡(luò)帶寬。將本發(fā)明實施例的數(shù)據(jù)匹配裝置應(yīng)用于該透明硬件壓縮IP中,在數(shù)據(jù)服務(wù)器高負載情況下能夠節(jié)省25%-40%的CPU使用率,并使其寫性能具有非常明顯的優(yōu)勢。通過使用本發(fā)明實施例的數(shù)據(jù)匹配裝置壓縮數(shù)據(jù)時,實現(xiàn)了壓縮對系統(tǒng)CPU的“零消耗”,進而改善了系統(tǒng)的整體性能。數(shù)據(jù)經(jīng)該壓縮文件系統(tǒng)的壓縮后,能夠節(jié)約超過40 %以上的磁盤存儲容量和50%的數(shù)據(jù)傳輸帶寬。
通過上述處理,本發(fā)明實施例基于專業(yè)的FPGA評估板,使用基于流水線的裝置實現(xiàn)LZ77算法,最終的壓縮率和軟件實現(xiàn)方法非常接近,但FPGA單通道的處理帶寬是軟件壓縮方式的8倍多,使用該FPGA實現(xiàn)方式峰值速度每秒處理事務(wù)的能力是單個CPU的24倍多,可以達到CPU無法達到的處理能力。
以上所描述的裝置實施例僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以是同一模塊,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性的勞動的情況下,即可以理解并實施。圖3為根據(jù)本發(fā)明實施例的哈希單元的裝置示意圖,其中,哈希單元,用于計算當前處理字符及隨后2位字符(共3位字符,以下簡稱為:當前處理字符段)的哈希值,使用改進哈希算法,輸入3字節(jié)(Byte)長的字符串二進制碼,輸出16bit哈希計算結(jié)果。該16位(bit)長的哈希值,可以有效避免哈希值臨近連續(xù)位的偽匹配。(字符串a(chǎn)bc與bed, bed與cde,通用哈希計算結(jié)果,哈希值相同,但字符串不匹配。)后續(xù)模塊以該哈希計算結(jié)果為地址,將當前處理字符在字典存儲器中的位置信息為內(nèi)容,存儲到的鏈頭存儲器中;根據(jù)上述地址中鏈頭隨機存儲器中內(nèi)容的情況,對鏈頭存儲器、回溯存儲器和相關(guān)鏈頭匹配先入先出存儲器進行維護。如圖4所示,鏈頭存儲器,是一組位寬為17bit,深度為64K,的塊隨機存儲單元。用于以當前處理字符段的哈希值為地址,存儲當前處理字符在字典存儲器中的位置信息。深度:2~16 (16位哈希值)=64K。
[0011]寬度:2bit (字典存儲器編號)+15bit (字典存儲器中的地址)=17bit。
如圖5所示,回溯存儲器是一組多塊96千字節(jié)(96KB:寬為17bit,深度為32K)的塊隨機存儲單元,每塊回溯存儲器與字典存儲器一一對應(yīng),用于存儲哈希值相同的字符段首位字符的地址映射。深度:與字典存儲器深度相同。寬度:2bit (字典存儲器編號)+15bit(字典存儲器中的地址)=17bit。
[0012]如圖6所示,鏈頭匹配先入先出存儲器,是一組先入先出存儲器。最先存入的數(shù)據(jù),將會被最早讀取出來。數(shù)據(jù)寬度設(shè)為34 bit,深度為2048 (20K),于存儲哈希值相同字符段的兩個首字符的地址,在匹配比較時,被順序讀取。當鏈頭存儲器中某一地址更新內(nèi)容,且該地址原先存放有有效數(shù)據(jù)時,存儲該新數(shù)據(jù)與舊的有效數(shù)據(jù)首尾拼接后的內(nèi)容。
[0013]深度:理論上越大越好,為節(jié)約資源設(shè)為20K 寬度:鏈頭存儲器寬度的2倍,17bit*2=34bit
圖7為匹配比較范圍的示意圖,圖7所示,自上而下,為32K滑動匹配窗口,緩緩“滑入”文件的示意圖。所有的匹配替換工作,都只針對,當前處理字符段與窗口內(nèi)的內(nèi)容。
如圖8所示,標志位寄存器是一組多個獨立的,對應(yīng)于字典存儲器中塊數(shù)的寄存器。每個寄存器至少為2bit寬。用于標志字典存儲器中各塊數(shù)據(jù)的狀態(tài),共有“空”、“有效”、“哈希計算過”、“無效”4種狀態(tài),當字典存儲器中的某塊內(nèi)容被清空后尚未更新成新的內(nèi)容時,則其對應(yīng)的標志位被設(shè)為“空”;當字典存儲器中的某塊內(nèi)容被更新成新的內(nèi)容,尚未經(jīng)過哈希計算時,則其對應(yīng)的標志位為“有效”;當字典存儲器中的某塊內(nèi)容被計算完哈希值后,則其對應(yīng)的標志位被設(shè)為“哈希計算過”;當字典存儲器中的某塊內(nèi)容被匹配比較處理所有數(shù)據(jù)時,則其對應(yīng)的標志位被設(shè)為“無效”;哈希單元計算到字典存儲器某一新塊時,會首先檢查其對應(yīng)的標志位寄存器,當且僅當該標志位寄存器為“有效”狀態(tài),才會開始計算;匹配比較模塊工作工程中將要處理到字典存儲器某一塊時,會首先檢查其對應(yīng)的標志位寄存器,當且僅當該標志位寄存器為“哈希計算過”狀態(tài),才會開始計算;當且僅當該標志位寄存器為“無效”狀態(tài),字典存儲器中該塊以及相應(yīng)的回溯存儲器的會被清空。
如圖9所示,匹配比較單元,使用一個管理模塊,該管理模塊根據(jù)匹配先入先出存儲器,和回溯存儲器中的內(nèi)容,遍歷所有可能匹配的字符串。每次比較匹配首地址起后續(xù)的8個字節(jié)(Byte)的字符。每次返回重復(fù)長度和指回距離。比較遍歷完成后,輸出最佳的重復(fù)長度和指回距離。
根據(jù)本發(fā)明的實施例,提供了一種數(shù)據(jù)匹配方法,圖10、圖11、圖12是根據(jù)本發(fā)明實施例的基于流水線數(shù)據(jù)匹配方法和主要存儲單元維護的流程圖。
圖10是字典存儲器10的維護流程圖,共分為3塊。3塊存儲單元首位相接循環(huán)填入新的數(shù)據(jù)。每塊填入數(shù)據(jù)時,首先檢查其相應(yīng)的標志位寄存器,確定該部分是否可寫;更新完數(shù)據(jù)后,判斷寫入的數(shù)據(jù)是不是文件的最后一塊。
[0014]圖11是鏈頭存儲器、鏈頭匹配先入先出存儲器、回溯存儲器維護流程圖。計算完哈希值后,判斷以該哈希值為地址鏈頭存儲器14中存儲的值是否為全0,若為全0,則直接將當前處理字符的地址存入;若不為全0,則需要判斷當前處理字符的地址與該值之間的距離是否大于32768 (32K),若大于32K,則直接將當前處理字符的地址存入;若小于32K,則將當前處理字符的地址存入鏈頭存儲器14,并且相應(yīng)的更新鏈頭匹配先入先出存儲器、回溯存儲器,具體不再贅述。在本發(fā)明實施例中,窗口大小等于字典存儲器10中塊的大小,當窗口移出字典存儲器10的某一塊(也就是窗口移入字典存儲器10的某一新塊時),將被移出的字典存儲器10的塊清空,同時清空回溯存儲器16中對應(yīng)的塊。
[0015]圖12是匹配流程圖,介紹了基于流水線的數(shù)據(jù)匹配方法的比較匹配部分的流程。匹配比較單元,在匹配過程中首先從鏈頭匹配先入先出存儲器18中取出的可能匹配的地址對,從字典存儲器10中取值比較,然后在不超過最大回溯匹配次數(shù)的情況下,再從回溯存儲器16取出的可能匹配的地址對,從字典存儲器10中取值比較。以上每次比較追求在最大匹配范圍內(nèi)的最長的匹配結(jié)果。所有匹配結(jié)束后,輸出匹配長度最長的結(jié)果。
[0016]需要說明的是,有關(guān)匹配查找單元的相關(guān)處理可以參照上述實施例中的相關(guān)內(nèi)容進行理解,相關(guān)的結(jié)構(gòu)示意圖可以參照圖1至圖9進行理解,在此不再贅述。
綜上所述,借助于本發(fā)明的技術(shù)方案,本發(fā)明實施例使用獨創(chuàng)的哈希算法,有效避免哈希值臨近連續(xù)位的偽匹配,提高了匹配比較的成功率;采用一塊鏈頭匹配先入先出存儲器18,暫存鏈頭匹配的地址對,打斷了哈希計算和匹配比較的循環(huán),實現(xiàn)了流水線操作實現(xiàn)比較匹配,實現(xiàn)壓縮,提高了速率;使用多塊字典存儲器10和相應(yīng)回溯存儲器16實現(xiàn)了壓縮窗口的連續(xù)性,提高了壓縮率;在匹配比較的同時,預(yù)讀取下一組參與匹配比較的內(nèi)容,極大地發(fā)揮了硬件系統(tǒng)的并行性,提高了效率。以上各種手段極大提高了數(shù)據(jù)壓縮的處理能力,可以達到CPU無法達到的處理能力。能夠提高LZ77算法的處理效率,極大地節(jié)省了 CPU與存儲器的資源。
[0017]本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲于計算機的可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括:R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
[0018]最后應(yīng)說明的是:以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當理解:其依然可以對前述各實施例記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。
【權(quán)利要求】
1.一種基于流水線的數(shù)據(jù)匹配方法,其特征在于,包括: 隨著匹配單元對文件進行匹配壓縮操作,字典存儲器將相應(yīng)地循環(huán)從參與匹配壓縮原始源文件中讀入并更新內(nèi)容,直至整個文件匹配壓縮完畢,其中,字典存儲器是一組隨機存儲器,存儲著將要被匹配壓縮的文件; 哈希單元計算當前處理字符段的哈希值,其中,所述當前處理字符段指當前處理的I個字節(jié)的(Byte )的字符及隨后的2個字節(jié)(Byte )的字符,共3個字節(jié)(Byte )的字符;并以此哈希值為地址,將當前處理字符在字典存儲器中的位置信息為內(nèi)容,存儲到的鏈頭存儲器中;根據(jù)上述地址中鏈頭隨機存儲器中內(nèi)容的情況,對鏈頭存儲器、回溯存儲器和相關(guān)鏈頭匹配先入先出存儲器進行維護; 匹配比較單元從鏈頭匹配先入先出存儲器和回溯存儲器中順序取得可能匹配的字符串索引,并依次使用改進匹配比較方法取值比較,同時維護回溯存儲器,直至匹配比較結(jié)束。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,字典存儲器是一組多塊32千字節(jié)(32KB:8byte*4K或4Byte*8K)的塊隨機存儲器(block RAM),參與匹配壓縮原始源文件被順序存儲在字典存儲器中,并且根據(jù)匹配壓縮情況更新,每組字典存儲器可由多塊(至少為3塊)隨機存儲器組成; 參與匹配壓縮原始源文件被順序存儲在字典存儲器中,隨著匹配壓縮的進行,當某一塊字典存儲器中的內(nèi)容完全脫離被匹配比較范圍(32768,32K)時,其中的數(shù)據(jù)將被清空,隨后填入新的后續(xù)的參與壓縮匹配的數(shù)據(jù),一組多塊字典存儲器輪流更新,直至匹配壓縮完成。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述哈希單元提供地址將所述當前處理字符在字典存儲器中的位置信息存儲在所述鏈頭存儲器中包括: 哈希單元使用改進哈希算法計算當前處理字符段的哈希值,使用3字節(jié)(3Byte:24bit)長的字符串計算得到16位(bit))長的哈希值,可有效避免哈希值臨近連續(xù)位的偽匹配; 以上述哈希值為地址,將當前處理字符在字典存儲器中的位置信息存入鏈頭存儲器;如果在所述鏈頭存儲器中,已經(jīng)存儲以所述哈希值為地址的舊位置信息,則使用新位置信息替代所述舊位置信息。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述匹配比較單元獲取所述鏈頭存儲器中的字符索引之前,所述方法還包括: 所述哈希單元在使用新位置信息替代所述舊位置信息時,將所述新位置信息和所述舊位置信息拼接后,放入鏈頭匹配先入先出存儲器中;所述匹配比較單元在匹配比較開始時,從鏈頭匹配先入先出存儲器中取出所述新位置信息和所述舊位置信息拼接后的數(shù)據(jù); 計算舊位置信息和新位置信息間距離,若該距離已經(jīng)大于匹配比較范圍(32768,32K),則只使用新位置信息替代所述舊位置信息,不放入鏈頭匹配先入先出存儲器中。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述哈希單元在使用新位置信息替代所述舊位置信息時,將所述新位置信息和所述舊位置信息拼接后,放入鏈頭匹配先入先出存儲器中之后,所述方法還包括:以新位置信息為索引地址,將舊位置信息存入到回溯存儲器中,當與回溯存儲器對應(yīng)的某塊字典存儲中的內(nèi)容完全脫離被匹配比較范圍時,該回溯存儲器中的數(shù)據(jù)將被清空。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述匹配比較單元根據(jù)所述鏈頭匹配先入先出存儲器和回溯存儲器中的數(shù)據(jù)進行匹配包括:所述匹配比較單元,從鏈頭匹配先入先出存儲器中讀取出與鏈頭可能匹配的地址對,并在使用改進比較方法進行匹配比較:通過從字典存儲器取值、拼接,使每次匹配比較8個字節(jié),匹配比較后輸出匹配失敗或匹配成功字節(jié)數(shù);若匹配成功字節(jié)數(shù)為8,則繼續(xù)匹配后8個字節(jié),直至得到最長匹配長度為止。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述改進匹配比較方法從鏈頭匹配先入先出存儲器中取得鏈頭可能匹配對的地址對,并在使用改進比較方法進行匹配比較,同時以鏈頭可能匹配對的后半部分為地址,在回溯存儲器中取值;再以該值為地址在回溯存儲器中取值,如此循環(huán)得上回溯存儲器中所有可能匹配的地址;取值的同時使用改進比較方法進行匹配比較;所有匹配結(jié)束后,輸出未匹配成功或匹配長度最優(yōu)的匹配結(jié)果。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述回溯存儲器、字典存儲器中的內(nèi)容將隨著匹配比較模塊和哈希單元的工作清空和重置;當哈希單元計算完字典存儲器某一塊中所有的哈希值時,會對該塊字典存儲器設(shè)一個標志位;哈希單元對字典存儲器三塊順序循環(huán)計算哈希值,當計算到字典存儲器某一新塊,先檢查與其對應(yīng)的標志位,若標志位已設(shè),哈希單元暫停計算,直至標志位被清除后再開始計算;匹配比較模塊,順序進行比較匹配工作,當發(fā)現(xiàn)字典存儲器某一塊中的內(nèi)容已經(jīng)完全脫離被匹配比較范圍,并且參與匹配壓縮原始源文件尚未被處理結(jié)束時,則將該字典存儲器以及相應(yīng)的回溯存儲器中的內(nèi)容清空,并且將新的內(nèi)容填入字典存儲器中,然后將標志位清除。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于: 所述鏈頭存儲器,是一塊192千字節(jié)(192KB:17bit*64K)的塊隨機存儲器(blockRAM); 所述鏈頭匹配先入先出存儲器是一種雙端口先入先出存儲器,其深度和數(shù)據(jù)寬度,由字典存儲器的塊數(shù)決定;其中,所述鏈頭匹配先入先出存儲器深度至少為32768 (32K),數(shù)據(jù)寬度至少為34位(bit); 所述回溯存儲器,是一組多塊96千字節(jié)(96KB:17bit*32K)的塊隨機存儲器(blockRAM);每塊回溯存儲器與字典存儲器一一對應(yīng);其中存儲著哈希值相同的字符段首位字符的地址映射。
10.一種數(shù)據(jù)匹配裝置,其特征在于,包括: 字典存儲器,用于分塊讀入?yún)⑴c匹配壓縮原始源文件; 哈希單元,使用改進算法計算所述當前處理字符段的哈希值,根據(jù)所述哈希值確定與所述當前處理字符的索引,并將所述當前處理字符地址存儲在所述鏈頭存儲器中,并且根據(jù)情況更新回溯存儲器和鏈頭匹配先入先出存儲器; 標志位寄存器,用于協(xié)助哈希單元和匹配比較單元工作,標志位寄存器用于標志字典存儲器中各塊數(shù)據(jù)的狀態(tài),共有“空”、“有效”、“哈希計算過”、“無效”4種狀態(tài),當字典存儲器中的某塊內(nèi)容被清空后尚 未更新成新的內(nèi)容時,則其對應(yīng)的標志位被設(shè)為“空”;當字典存儲器中的某塊內(nèi)容被更新成新的內(nèi)容,尚未經(jīng)過哈希計算時,則其對應(yīng)的標志位為“有效”;當字典存儲器中的某塊內(nèi)容被計算完哈希值后,則其對應(yīng)的標志位被設(shè)為“哈希計算過”;當字典存儲器中的某塊內(nèi)容被匹配比較處理所有數(shù)據(jù)時,則其對應(yīng)的標志位被設(shè)為“無效”;哈希單元計算到字典存儲器某一新塊時,會首先檢查其對應(yīng)的標志位寄存器,當且僅當該標志位寄存器為“有效”狀態(tài),才會開始計算;匹配比較模塊工作工程中將要處理到字典存儲器某一塊時,會首先檢查其對應(yīng)的標志位寄存器,當且僅當該標志位寄存器為“哈希計算過”狀態(tài),才會開始計算;當且僅當該標志位寄存器為“無效”狀態(tài),字典存儲器中該塊以及相應(yīng)的回溯存儲器的會被清空; 鏈頭存儲器,用于存儲以所述當前處理字符段的哈希值為地址,所述當前處理字符地址為內(nèi)容的信息;用于判斷在所述匹配比較范圍內(nèi),是否存在可能與所述當前處理字符段匹配的字符段; 鏈頭匹配先入先出存儲器,用于存儲匹配比較單元所處理的第一組可能匹配的字符段的地址對,供匹配比較模塊讀??; 回溯存儲器,用于存儲哈希值相同的字符段的首位地址構(gòu)成的鏈,供匹配比較模塊查詢讀取; 匹配比較單元,用于獲取所述鏈頭匹配先入先出存儲器以及所述回溯存儲器中可能與當前處理字符段匹配的所有字符段的首位地址,并據(jù)此進行匹配。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述字典存儲器具體包括:一組3塊32千字節(jié)(32KB:8byte*4K)的塊隨機存儲器,用于順序循環(huán)分塊讀入?yún)⑴c匹配壓縮原始源文件,用于匹配比較壓縮。
12.根據(jù) 權(quán)利要求11所述的裝置,其特征在于,哈希單元具體包括: 哈希計算模塊,用于使用改進哈希算法計算所述當前處理字符段的哈希值; 寫管理模塊,用于將對應(yīng)于所述哈希值的當前處理字符地址存儲所述鏈頭存儲器中,如果將要寫入存儲空間內(nèi)不存在有效數(shù)據(jù)(內(nèi)容為零),則僅直接寫入新數(shù)據(jù)到所述鏈頭存儲器中;如果將要寫入存儲空間內(nèi)已存在有效數(shù)據(jù)(內(nèi)容非零),則需要判斷此內(nèi)容與當前處理字符地址距離是否超出匹配比較范圍,若超出,則僅直接寫入新數(shù)據(jù)到所述鏈頭存儲器中;若不超出,則寫入新數(shù)據(jù)到所述鏈頭存儲器中的同時以新數(shù)據(jù)為地址,舊數(shù)據(jù)為內(nèi)容存入所述回溯存儲器中,并且將新數(shù)據(jù)和舊數(shù)據(jù)拼接后存入所述鏈頭匹配先入先出存儲器中。
13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述鏈頭存儲器具體包括:1塊192千字節(jié)(192KB:17bit*64K)的塊隨機存儲器,用于以哈希值為地址存儲所述當前處理字符地址,以判斷是否存在可能與所述當前處理字符段匹配的字符段。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述鏈頭匹配先入先出存儲器具體包括:1塊寬度為34位,深度至少為32768 (32K)的雙端口先入先出存儲器,供匹配比較模塊讀取第I對可能匹配的地址對。
15.根據(jù)權(quán)利要求14所述的裝置,其特征在于,所述回溯存儲器具體包括: 回溯存儲器存儲模塊,是3塊96千字節(jié)(96KB:17bit*32K)的塊隨機存儲器(blockRAM);每塊與一塊字典存儲器對應(yīng);其中存儲著哈希值相同的字符段首位字符的地址映射; 讀寫控制模塊,當哈希單元和匹配比較單元同時訪問(哈希單元寫請求,匹配比較單元讀請求),回溯存儲器時,先響應(yīng)哈希單元的訪問請求,匹配比較模塊被延后一個時鐘周期處理。
16.根據(jù)權(quán)利要求15所述的裝置,其特征在于,所述標志位寄存器具體包括:3個獨立的I位寄存器,每個標志位寄存器與一塊字典存儲器對應(yīng),用于協(xié)助哈希單元和匹配比較單元工作。
17.根據(jù)權(quán)利要求16所述的裝置,其特征在于,所述匹配比較單元具體包括: 匹配地址遍歷模塊,用于從鏈頭匹配先入先出存儲器和回溯存儲器取值,循環(huán)遍歷出所有可能與當前處理字符段匹配的字符串首位地址,并發(fā)往匹配字典取值模塊中; 匹配字典取值模塊:用于根據(jù)匹配地址遍歷模塊提供的地址,從字典存儲器中取出相應(yīng)字符串;通過取值拼接,每次輸出連續(xù)8個字節(jié)的字符串; 比較模塊:用于將匹配字典取值模塊連續(xù)字符串進行比較,完成所有匹配比較后,輸出最優(yōu)的匹配結(jié)果;匹配地址遍歷模塊根據(jù)上述匹配結(jié)果進行新一輪的匹配比較。
18.根據(jù)權(quán)利要求10至17中任一項所述的裝置,其特征在于,所述數(shù)據(jù)匹配裝置基于可編程門陣列。
【文檔編號】H03M7/30GK103997346SQ201410197834
【公開日】2014年8月20日 申請日期:2014年5月12日 優(yōu)先權(quán)日:2014年5月12日
【發(fā)明者】李冰, 董乾, 劉勇, 趙霞, 王剛 申請人:東南大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
柘城县| 乌鲁木齐县| 孝感市| 上杭县| 伊吾县| 扶绥县| 白城市| 穆棱市| 桐庐县| 米脂县| 哈密市| 枞阳县| 达日县| 香港 | 泸水县| 阜康市| 湘潭县| 绵阳市| 枣庄市| 龙南县| 丽江市| 安徽省| 贵定县| 礼泉县| 鄂伦春自治旗| 昌平区| 常宁市| 霍邱县| 东海县| 达日县| 浠水县| 平邑县| 亳州市| 海晏县| 正镶白旗| 儋州市| 海晏县| 栾城县| 鄂托克前旗| 安多县| 会同县|