本發(fā)明涉及一種微處理器技術(shù),特別涉及一種基于散列的加速壓縮方法以及使用此方法的裝置。
背景技術(shù):
::對于壓縮加速器(compressionaccelerator)來說,最復(fù)雜的部分在于進(jìn)行最長前綴字符串匹配(longest-prefixstringmatching),而最長前綴字符串匹配方法通??蓺w類為:基于內(nèi)容可尋址內(nèi)存(cam-,contentaddressablememory-based);及基于散列(hash-based)二種?;谏⒘械淖址ヅ渫ǔ6冀逵山档蜕⒘墟滈L度和/或使用低沖突函數(shù)來進(jìn)行優(yōu)化,而上述優(yōu)化均為軟件算法上的優(yōu)化。然而,軟件的執(zhí)行效能往往劣于專屬硬件的執(zhí)行效能。因此,需要一種基于散列的加速壓縮方法以及使用此方法的裝置,用以克服上述缺陷。技術(shù)實(shí)現(xiàn)要素:本發(fā)明的實(shí)施例提出一種基于散列的加速壓縮方法,實(shí)施于微處理器的壓縮加速器中,至少包含以下步驟:多個散列函數(shù)并行接收從有限狀態(tài)機(jī)傳來的多個子字符串;每一散列函數(shù)將接收的子字符串映射成散列索引,及依據(jù)散列索引驅(qū)動選擇器以連接至多個匹配路徑中的一個;當(dāng)連接的匹配路徑中的匹配器判定散列表不包含子字符串時,傳送不匹配的信息給有限狀態(tài)機(jī);以及當(dāng)連接的匹配路徑中的匹配器判定散列表包含子字符串時,傳送匹配的信息及散列表中相應(yīng)于子字符串的匹配偏移量給有限狀態(tài)機(jī)。本發(fā)明的實(shí)施例提出一種基于散列的加速壓縮裝置,至少包含:有限狀態(tài)機(jī);及散列匹配器。散列匹配器耦接于有限狀態(tài)機(jī),包含:多個散列函數(shù);選擇器,耦接于散列函數(shù);以及對應(yīng)于多個散列函數(shù)的多個匹配路徑,耦接至選擇器。多個散列函數(shù)并行接收有限狀態(tài)機(jī)傳來的多個子字符串,并將每一子字符串映射成散列索引,及依據(jù)散列索引驅(qū)動選擇器以連接至匹配路徑中的一個。當(dāng)連接的匹配路徑判定散列表不包含子字符串時,傳送不匹配的信息給有限狀態(tài)機(jī)。當(dāng)連接的匹配路徑判定散列表包含子字符串時,傳送匹配的信息及散列表中相應(yīng)于子字符串的匹配偏移量給有限狀態(tài)機(jī)。本發(fā)明的前述有限狀態(tài)機(jī)可以在同一時鐘周期同時輸出多個散列請求分別給多個散列函數(shù)并行進(jìn)行散列匹配,并且藉由本發(fā)明之中介緩存器記錄各實(shí)例的狀態(tài)、匹配長度及匹配偏移量,使得亂序執(zhí)行散列匹配和最長匹配后的實(shí)例能夠按照待壓縮字符串中的原始順序退卻以進(jìn)行壓縮。附圖說明圖1是依據(jù)本發(fā)明實(shí)施例的微處理器的系統(tǒng)架構(gòu)圖。圖2是依據(jù)本發(fā)明實(shí)施例的壓縮加速器的方塊圖。圖3是依據(jù)本發(fā)明實(shí)施例的狀態(tài)圖。圖4是依據(jù)本發(fā)明實(shí)施例的散列請求程序的流程圖。圖5是依據(jù)本發(fā)明實(shí)施例的散列回復(fù)處理程序的流程圖。圖6是依據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)回復(fù)處理程序的流程圖。圖7是依據(jù)本發(fā)明實(shí)施例的退卻處理程序的流程圖。圖8是依據(jù)本發(fā)明實(shí)施例的散列匹配器的方塊圖。圖9是依據(jù)本發(fā)明實(shí)施例的匹配器的方塊圖。圖10是依據(jù)本發(fā)明實(shí)施例的散列匹配方法的流程圖。【符號說明】10微處理器;110末級快??;130加速器接口;150_1~150_i壓縮加速器;170_1~170_j處理器內(nèi)核;20壓縮加速器;210數(shù)據(jù)緩存器;220提取單元;230中介緩存器;240有限狀態(tài)機(jī);250散列匹配器;260最長字串匹配器;270格式化器;280預(yù)取緩存器;s31空閑狀態(tài);s32散列請求狀態(tài);s33數(shù)據(jù)請求狀態(tài);s34不匹配狀態(tài);s36完全匹配狀態(tài);s37部分匹配狀態(tài);s410~s470方法步驟;s510~s577方法步驟;s610~s695方法步驟;s710~s770方法步驟;810_1~810_4散列函數(shù);830選擇器;850_1~850_4先進(jìn)先出隊(duì)列;870_1~870_4匹配器;890_1~890_4存儲器庫;910_1~910_3比較器;930仲裁器;s1010~s1077方法步驟。具體實(shí)施方式以下說明為完成發(fā)明的優(yōu)選實(shí)現(xiàn)方式,其目的在于描述本發(fā)明的基本精神,但并不用以限定本發(fā)明。實(shí)際的
發(fā)明內(nèi)容必須參考之后的權(quán)利要求范圍。必須了解的是,使用于本說明書中的“包含”、“包括”等詞,用以表示存在特定的技術(shù)特征、數(shù)值、方法步驟、作業(yè)處理、元件和/或組件,但并不排除可加上更多的技術(shù)特征、數(shù)值、方法步驟、作業(yè)處理、元件、組件,或以上的任意組合。在權(quán)利要求中使用如“第一”、“第二”、“第三”等詞用來修飾權(quán)利要求中的元件,并非用來表示之間具有優(yōu)先權(quán)順序,先行關(guān)系,或者是一個元件先于另一個元件,或者是執(zhí)行方法步驟時的時間先后順序,僅用來區(qū)別具有相同名字的元件。圖1是依據(jù)本發(fā)明實(shí)施例的微處理器的系統(tǒng)架構(gòu)圖。微處理器10可包含多個處理器內(nèi)核170_1至170_j及多個加速器(accelerator)150_1至150_i,i、j為整數(shù),隨著不同設(shè)計(jì)需求而有不同。加速器150_1至150_i舉例而言可以是加速功能單元(afu,acceleratorfunctionalunits)。處理器內(nèi)核170_1至170_j中的任何一個包含的組件都涉及計(jì)算機(jī)指令的執(zhí)行,包括算術(shù)邏輯單元(alu,arithmeticlogicunit)、浮點(diǎn)運(yùn)算單元(fpu,floatingpointunit)、一級快取(l1cache)及二級快取(l2cache)。每一處理器內(nèi)核采用指令周期(有時亦稱提取-解碼-執(zhí)行周期),作為基本操作流程。此流程用以讓處理器內(nèi)核從存儲器取得程序指令,判定此指令指示進(jìn)行何種操作,并且執(zhí)行這些操作。加速器150_1至150_n可執(zhí)行不同功能,并通過加速器接口(acceleratorinterface)130連接至末級快取(last-levelcache)110,用以與處理器內(nèi)核170_1至170_j通過虛擬地址(virtualaddress)進(jìn)行數(shù)據(jù)交換。加速器150_1至150_i中的任何一個可協(xié)助處理器內(nèi)核170_1至170_j以更有效率地方式執(zhí)行特定功能,上述特定功能包括例如壓縮,加解密或正則匹配等運(yùn)算量較大的功能,從而減輕處理器內(nèi)核170_1至170_j的工作負(fù)擔(dān)。加速器150_1至150_i中的一個可為壓縮加速器(compressionaccelerator),用以完成字符串壓縮功能。圖2是依據(jù)本發(fā)明實(shí)施例的壓縮加速器的方塊圖。壓縮加速器20包含數(shù)據(jù)緩存器210,長度可為1024m字節(jié)(bytes),用以存儲原始字符串(rawstring)及壓縮后字符串(compressedstring),值得注意的是,在其它實(shí)施例中,數(shù)據(jù)緩存器210可以位于例如圖1的末級快取110中,即位于壓縮加速器20外部。提取單元220每次向數(shù)據(jù)緩存器210發(fā)出預(yù)取請求(lookaheadrequest),用以從數(shù)據(jù)緩存器210提取固定長度的待壓縮的原始字符串,例如16字節(jié),并存儲至預(yù)取緩存器(lookaheadbuffer)280中,作為進(jìn)行字符串壓縮的對象。該待壓縮字符串更按序存儲至中介緩存器(intermediarybuffer)230中,中介緩存器230存儲關(guān)聯(lián)于每一個字符的散列及最長字串匹配的相關(guān)運(yùn)算信息。詳細(xì)來說,中介緩存器230劃分出多段存儲器空間,每段可用來存儲一個實(shí)例(instance)的信息。每個實(shí)例包含數(shù)個字段,用以記錄索引、字符、狀態(tài)、匹配偏移量(matchedoffset)及匹配長度(matchedlength)等。由于壓縮加速器20包含許多并行運(yùn)算,使得相應(yīng)于每一個實(shí)例的運(yùn)算時間(或稱時鐘周期數(shù)目)無法預(yù)測,也就是說,相應(yīng)于較后實(shí)例的運(yùn)算結(jié)果可能早于相應(yīng)于較前實(shí)例的運(yùn)算結(jié)果。因此,本發(fā)明通過中介緩存器230讓所有實(shí)例的計(jì)算結(jié)果的輸出順序相符于待壓縮的原始字符的原始順序,據(jù)以完成最終的最長字串匹配。中介緩存器230還包含發(fā)布指針(issuancepointer)及退卻指針(retirementpointer),分別指向下一個需要發(fā)出散列請求及退卻的實(shí)例。在初始時,提取單元220從數(shù)據(jù)緩存器210的待壓縮的原始字符串提取多個字符并依序?qū)懭胫薪榫彺嫫?30的實(shí)例。有限狀態(tài)機(jī)(fsm,finite-statemachine)240可發(fā)出散列請求(hashrequest)給散列匹配器(hashmatcher)250,用以取得相應(yīng)于一個實(shí)例且長度為n的字符串是否可匹配散列表(hashtable)中的一個散列鍵的信息。在一些實(shí)施例中,n為3或以上。有限狀態(tài)機(jī)240另可針對一個實(shí)例發(fā)出數(shù)據(jù)請求(datarequest)給最長字串匹配器(longeststringmatcher)260,用以取得相應(yīng)于一個實(shí)例的字符串以后可匹配到數(shù)據(jù)緩存器210的滑動窗(slidingwindow)中的原始字符串的長度。應(yīng)注意的是,滑動窗中的原始字符串位于中介緩存器230中的待壓縮的原始字符串之前,即滑動窗中的原始字符串是已經(jīng)被壓縮過的字符串。有限狀態(tài)機(jī)240可在可編程邏輯裝置(pld,programmablelogicdevice)、可編程控制器(plc,programmablelogiccontroller)、現(xiàn)場可編程門陣列(fpga,fieldprogrammablegatearray)或特殊應(yīng)用集成電路(asic,application-specificintegratedcircuit)中實(shí)現(xiàn)固定功能(fixedfunctions)來完成本發(fā)明實(shí)施例中描述的控制。圖3是依據(jù)本發(fā)明實(shí)施例的狀態(tài)圖。初始時,提取單元220從數(shù)據(jù)緩存器210的原始字符串提取固定長度的待壓縮的字符串并依序存儲其中的字符至中介緩存器230的實(shí)例。舉例來說,提取單元220從數(shù)據(jù)緩存器210提取字符串“abcdxyzefgaf”并依序存儲其中的字符至中介緩存器230。初始時,每個實(shí)例的狀態(tài)為空閑狀態(tài)(idlestate)s31,可表示為虛無值(nullvalue)。表1顯示實(shí)例的初始結(jié)果:表1其中,符號“/”代表虛無值。基于散列的加速壓縮方法包含數(shù)個程序:散列請求;散列回復(fù)處理;數(shù)據(jù)回復(fù)處理;及退卻處理。散列請求及退卻處理為并行處理程序,并且擁有較高的優(yōu)先級。圖4是依據(jù)本發(fā)明實(shí)施例的散列請求程序的流程圖。在每一個時鐘周期,有限狀態(tài)機(jī)240取得發(fā)布指針指向的實(shí)例(步驟s410),為取得的實(shí)例發(fā)出散列請求給散列匹配器250(步驟s430),更新此實(shí)例的狀態(tài)為“hash_issued”以指出此實(shí)例進(jìn)入散列請求狀態(tài)s32(步驟s450),以及更新發(fā)布指針以指向下一個實(shí)例(步驟s470)。散列請求包含從此實(shí)例開始且長度為n的連續(xù)實(shí)例的字符,例如,參考表1,相應(yīng)于實(shí)例0的散列請求包含字符串“abc”,相應(yīng)于實(shí)例1的散列請求包含字符串“bcd”,依此類推。字符串“abc”及“bcd”可稱為字符串“abcdxyzefgaf”的子字符串(substring)。圖5是依據(jù)本發(fā)明實(shí)施例的散列回復(fù)處理程序的流程圖。當(dāng)有限狀態(tài)機(jī)240從散列匹配器250接收到相應(yīng)于一個實(shí)例的回復(fù)后(步驟s510),判斷回復(fù)中是否包含匹配的信息(步驟s530)。當(dāng)回復(fù)中包含不匹配的信息時(步驟s530中”否”的路徑),更新此實(shí)例的狀態(tài)為“nm”以指出此實(shí)例進(jìn)入不匹配狀態(tài)s34(步驟s550)。從散列匹配器250接收到的回復(fù)中包含先前請求的字符串,用以讓有限狀態(tài)機(jī)240辨認(rèn)此回復(fù)相應(yīng)于哪個實(shí)例。當(dāng)一個實(shí)例進(jìn)入不匹配狀態(tài)s34時,有限狀態(tài)機(jī)240便可于將來的時鐘周期回收此實(shí)例的存儲器空間給將來產(chǎn)生的實(shí)例使用。當(dāng)回復(fù)中包含匹配的信息時(步驟s530中“是”的路徑),有限狀態(tài)機(jī)240從回復(fù)中取得匹配偏移量(步驟s571),發(fā)出相應(yīng)于此實(shí)例的數(shù)據(jù)請求給最長字串匹配器260,其中,數(shù)據(jù)請求包含上述匹配偏移量,用以讓最長字串匹配器260搜尋中介緩存器230中相應(yīng)于此實(shí)例的字符串開始的字符串及數(shù)據(jù)緩存器210的滑動窗(slidingwindow)中從該匹配偏移量開始的字符串兩者之間的最大匹配長度(步驟s573),更新此實(shí)例的匹配長度為n(步驟s575),以及更新此實(shí)例的狀態(tài)為”data_issued”以指出此實(shí)例進(jìn)入數(shù)據(jù)請求狀態(tài)s33(步驟s577)。舉例來說,經(jīng)過7個時鐘周期后,有限狀態(tài)機(jī)240依據(jù)散列匹配器250及最長字串匹配器260的回復(fù)結(jié)果將中介緩存器230的實(shí)例狀態(tài)更新為表2:表2表2顯示相應(yīng)于實(shí)例0至6的散列請求已經(jīng)發(fā)出給散列匹配器250。有限狀態(tài)機(jī)240已經(jīng)從散列匹配器250接收到相應(yīng)于實(shí)例0、2至3及5至6的回復(fù),其中包含沒有匹配的信息,即均為nm(nomatch),即是說實(shí)例0、2至3及5至6對應(yīng)的字符串“abc”“cdx”“dxy”“yze”“zef”均未在散列匹配器250中匹配,即均未在數(shù)據(jù)緩存器210的滑動窗(slidingwindow)中的原始字符串出現(xiàn)過。有限狀態(tài)機(jī)240已經(jīng)從散列匹配器250接收到相應(yīng)于實(shí)例4的回復(fù),其中包含匹配的信息,以及已經(jīng)發(fā)出數(shù)據(jù)請求給最長字串匹配器260但尚未接收到任何回復(fù),即實(shí)例4對應(yīng)的字符串“xyz”在散列匹配器250中匹配,即字符串“xyz”在數(shù)據(jù)緩存器210的滑動窗中的原始字符串出現(xiàn)過;有限狀態(tài)機(jī)240取得實(shí)例4對應(yīng)的字符串“xyz”在滑動窗中的匹配偏移量offset,徐協(xié)成并發(fā)出包含該匹配偏移量offset的數(shù)據(jù)請求給最長字串匹配器260,用以搜尋中介緩存器230中相應(yīng)于實(shí)例4的字符串“xyz”開始的字符串及數(shù)據(jù)緩存器210的滑動窗中從偏移量1000開始的字符串兩者之間的最大匹配長度。此外,有限狀態(tài)機(jī)240尚未從散列匹配器250接收到相應(yīng)于實(shí)例1的任何回復(fù)。值得注意的是,在其它實(shí)施中,有限狀態(tài)機(jī)240從回復(fù)中取得匹配偏移量(步驟s571)后直接發(fā)出相應(yīng)于此實(shí)例的數(shù)據(jù)請求給最長字串匹配器260,并不會更新中介緩存器230中此實(shí)例的內(nèi)容,即不會執(zhí)行步驟s575和步驟s577。圖6是依據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)回復(fù)處理程序的流程圖。當(dāng)有限狀態(tài)機(jī)240從最長字串匹配器260接收到相應(yīng)于一個實(shí)例的回復(fù)后(步驟s610),從回復(fù)中取得最長字串匹配器260計(jì)算出的長度l(步驟s630),以及判斷長度l是否小于最大匹配長度max_match(步驟s650)。當(dāng)長度l小于最大匹配長度max_match時(步驟s650中“是”的路徑),更新此實(shí)例的狀態(tài)為“pm”以指出此實(shí)例進(jìn)入部分匹配狀態(tài)s37(步驟s671),以及更新此實(shí)例的匹配長度len=len+l(步驟s673)。當(dāng)一個實(shí)例進(jìn)入部分匹配狀態(tài)s37時,有限狀態(tài)機(jī)240便可于將來的時鐘周期回收此實(shí)例的存儲器空間給將來產(chǎn)生的實(shí)例使用。當(dāng)長度l不小于(通常為等于)最大匹配長度max_match時(步驟s650中“否”的路徑),更新此實(shí)例的狀態(tài)為“fm”以指出此實(shí)例進(jìn)入完全匹配狀態(tài)s36(步驟s691),更新此實(shí)例的匹配長度為len=len+max_match(步驟s693),以及發(fā)出相應(yīng)于此實(shí)例的另一數(shù)據(jù)請求給最長字串匹配器260,用以繼續(xù)后續(xù)的字串比對(步驟s695)。值得注意的是,在圖5如果不執(zhí)行更新中介緩存器230中實(shí)例的內(nèi)容的步驟,則圖6中更新匹配長度時len還要加上實(shí)例所對應(yīng)的子字符串的長度n(例如n=3)。在一個時鐘周期中,有限狀態(tài)機(jī)240除了執(zhí)行散列請求程序,更執(zhí)行退卻處理程序。圖7是依據(jù)本發(fā)明實(shí)施例的退卻處理程序的流程圖。在每一個時鐘周期,有限狀態(tài)機(jī)240取得退卻指針指向的實(shí)例的狀態(tài)(步驟s710),判斷中介緩存器230中此實(shí)例的狀態(tài)是否為不匹配狀態(tài)(步驟s731)。當(dāng)此實(shí)例的狀態(tài)是不匹配狀態(tài)時(步驟s731中“是”的路徑),輸出此實(shí)例的字符給格式化器270,使得格式化器270可據(jù)以壓縮預(yù)取緩存器280中的待壓縮字符串(步驟s733),更新此實(shí)例的狀態(tài)為虛無值并更新退卻指針以指向下一個實(shí)例,用以退卻此實(shí)例,使得此存儲器空間可提供給將來推入的實(shí)例(步驟s770)。當(dāng)此實(shí)例的狀態(tài)不是不匹配狀態(tài)時(步驟s731中“否”的路徑),判斷中介緩存器230中此實(shí)例的狀態(tài)是否為部分匹配狀態(tài)(步驟s751)。當(dāng)此實(shí)例的狀態(tài)是部分匹配狀態(tài)時(步驟s751中“是”的路徑),輸出此實(shí)例的匹配偏移量及匹配長度給格式化器270,使得格式化器270可據(jù)以壓縮預(yù)取緩存器280中的待壓縮字符串(步驟s753),更新此實(shí)例的狀態(tài)為虛無值并更新退卻指針以指向下一個實(shí)例,用以退卻此實(shí)例,使得此存儲器空間可提供給將來推入的實(shí)例(步驟s770)。格式化器270可使用lz4、lzo(lempel-ziv-oberhumer)、deflate等算法來壓縮待壓縮的原始字符串。當(dāng)此實(shí)例的狀態(tài)為匹配但不是部分匹配狀態(tài)時(步驟s751中“否”的路徑),即為完全匹配時,則如圖6s691所述,有限狀態(tài)機(jī)240會發(fā)出相應(yīng)于此實(shí)例的另一數(shù)據(jù)請求給最長字串匹配器260用以繼續(xù)后續(xù)的字串比對,而并不會執(zhí)行該實(shí)例的退卻程序,在圖7中步驟s751中“否”的路徑會返回步驟s710繼續(xù)等待該實(shí)例狀態(tài)的變化。概括之,有限狀態(tài)機(jī)240在圖7的執(zhí)行退卻處理程序時,是按照中介緩存器230中各個實(shí)例關(guān)聯(lián)的子字符串在待壓縮字符串中的原始順序(例如退卻指針依照的順序),并依據(jù)每一實(shí)例在中介緩存器230中對應(yīng)狀態(tài)、匹配長度及匹配偏移量(如后續(xù)表2至表5所示)輸出結(jié)果給格式化器270,使得格式化器270據(jù)以壓縮待壓縮的原始字符串。后面會配合表2至表5詳述之。接續(xù)表2的范例。假設(shè)在時鐘周期c7,發(fā)布指針指向?qū)嵗?,退卻指針指向?qū)嵗?,最大匹配長度max_match預(yù)設(shè)為16,且有限狀態(tài)機(jī)240從最長字串匹配器260接收到相應(yīng)于實(shí)例4的回復(fù):參考圖4。于此時鐘周期,有限狀態(tài)機(jī)240取得發(fā)布指針指向的實(shí)例7(步驟s410),為實(shí)例7發(fā)出散列請求給散列匹配器250,其中包含字符串“efg”(步驟s430),更新實(shí)例7的狀態(tài)為“hash_issued”以指出實(shí)例7進(jìn)入散列請求狀態(tài)s32(步驟s450),以及更新發(fā)布指針以指向?qū)嵗?(步驟s470)。參考圖7。有限狀態(tài)機(jī)240取得退卻指針指向的實(shí)例0的狀態(tài)(步驟s710)。因?yàn)閷?shí)例0的狀態(tài)為不匹配狀態(tài),有限狀態(tài)機(jī)240輸出實(shí)例0的字符“a”給格式化器270,使得格式化器270可據(jù)以壓縮預(yù)取緩存器280中的待壓縮的原始字符串(步驟s733),因?yàn)閷?shí)例0的狀態(tài)為不匹配狀態(tài),這里字符“a”保留不做壓縮動作;并且讓數(shù)據(jù)緩存器210的中滑動窗向前移動一個字符,即讓數(shù)據(jù)緩存器210的中的字符“a”滑動進(jìn)入其滑動窗中成為新字典的一部分,更新實(shí)例0的狀態(tài)為虛無值“/”并更新退卻指針以指向?qū)嵗?(步驟s770)。參考圖6。在此時鐘周期,有限狀態(tài)機(jī)240從相應(yīng)于實(shí)例4的回復(fù)中取得最長字串匹配器260計(jì)算出的長度l=2(步驟s630)。因?yàn)閘<max_match,更新實(shí)例4的狀態(tài)為“pm”以指出實(shí)例4進(jìn)入部分匹配狀態(tài)s37(步驟s671),以及更新實(shí)例4的匹配長度len=3+2=5(步驟s673)。中介緩存器230的實(shí)例狀態(tài)更新為表3:表3接續(xù)表3的范例。假設(shè)在時鐘周期c8,有限狀態(tài)機(jī)240從散列匹配器250接收到相應(yīng)于實(shí)例1的回復(fù):參考圖4。在此時鐘周期,有限狀態(tài)機(jī)240取得發(fā)布指針指向的實(shí)例8(步驟s410),為實(shí)例8發(fā)出散列請求給散列匹配器250,其中包含字符串“fga”(步驟s430),更新實(shí)例8的狀態(tài)為“hash_issued”以指出實(shí)例8進(jìn)入散列請求狀態(tài)s32(步驟s450),以及更新發(fā)布指針以指向?qū)嵗?(步驟s470)。參考圖7。有限狀態(tài)機(jī)240取得退卻指針指向的實(shí)例1的狀態(tài)(步驟s710)。因?yàn)閷?shí)例1的狀態(tài)為散列請求狀態(tài),有限狀態(tài)機(jī)240不做任何處理。參考圖5。于此時鐘周期,有限狀態(tài)機(jī)240從散列匹配器250接收到相應(yīng)于實(shí)例1的回復(fù)(步驟s510)。因?yàn)榛貜?fù)中包含不匹配的信息,更新實(shí)例1的狀態(tài)為“nm”以指出實(shí)例1進(jìn)入不匹配狀態(tài)s34(步驟s550)。中介緩存器230的實(shí)例狀態(tài)更新為表4:表4接續(xù)表4的范例。假設(shè)在時鐘周期c9,有限狀態(tài)機(jī)240從散列匹配器250接收到相應(yīng)于實(shí)例7的回復(fù):參考圖4。在此時鐘周期,有限狀態(tài)機(jī)240取得發(fā)布指針指向的實(shí)例9(步驟s410),為實(shí)例9發(fā)出散列請求給散列匹配器250,其中包含字符串“gaf”(步驟s430),更新實(shí)例9的狀態(tài)為“hash_issued”以指出實(shí)例9進(jìn)入散列請求狀態(tài)s32(步驟s450),以及更新發(fā)布指針以指向?qū)嵗?0(步驟s470)。參考圖7。有限狀態(tài)機(jī)240取得退卻指針指向的實(shí)例1的狀態(tài)(步驟s710)。因?yàn)閷?shí)例1的狀態(tài)為不匹配狀態(tài),有限狀態(tài)機(jī)240輸出實(shí)例1的字符“b”給格式化器270,使得格式化器270可據(jù)以壓縮預(yù)取緩存器280中的待壓縮的原始字符串(步驟s733),因?yàn)閷?shí)例1的狀態(tài)為不匹配狀態(tài),這里字符“b”保留不做壓縮動作;并且讓數(shù)據(jù)緩存器210的中滑動窗向前移動一個字符,即讓數(shù)據(jù)緩存器210的中的字符“b”滑動進(jìn)入其滑動窗中成為新字典的一部分,更新實(shí)例1的狀態(tài)為虛無值“/”并更新退卻指針以指向?qū)嵗?(步驟s770)。參考圖5。于此時鐘周期,有限狀態(tài)機(jī)240從散列匹配器250接收到相應(yīng)于實(shí)例7的回復(fù)(步驟s510)。因?yàn)榛貜?fù)中包含不匹配的信息,更新實(shí)例7的狀態(tài)為“nm”以指出實(shí)例7進(jìn)入不匹配狀態(tài)s34(步驟s550)。中介緩存器230的實(shí)例狀態(tài)更新為表5:表5索引字符狀態(tài)匹配長度(len)匹配偏移量(offset)0a/1b/2cnm3dnm4xpm510005ynm6znm7enm8fhash_issued9ghash_issued10a/11f/參考圖7。經(jīng)過一段時間,當(dāng)有限狀態(tài)機(jī)240取得退卻指針指向的實(shí)例4的狀態(tài)(步驟s710)。值得注意的是,在此之前,預(yù)取緩存器280中的待壓縮的原始字符串中的字符“c”和“d”均為不匹配,因此保留不做壓縮動作;并且數(shù)據(jù)緩存器210的中的字符“c”和“d”也已經(jīng)滑動進(jìn)入其滑動窗中成為新字典的一部分。在本時鐘周期,因?yàn)閷?shí)例4的狀態(tài)為部分匹配狀態(tài),有限狀態(tài)機(jī)240輸出實(shí)例4的匹配偏移量offset=1000及匹配長度len=5給格式化器270,使得格式化器270可據(jù)以壓縮預(yù)取緩存器280中的待壓縮的原始字符串(步驟s753),因?yàn)閷?shí)例4的狀態(tài)為部分匹配狀態(tài)且匹配長度len=5,因此預(yù)取緩存器280中的字符“xyzef”以(offset,len)代替,即以(1000,5)代替;并且讓數(shù)據(jù)緩存器210的中滑動窗向前移動5個字符,即讓數(shù)據(jù)緩存器210的中的字符“xyzef”滑動進(jìn)入其滑動窗中成為新字典的一部分。如以上范例所示,雖然有限狀態(tài)機(jī)240依實(shí)例的先后順序發(fā)出相應(yīng)的散列請求來啟動壓縮程序,應(yīng)注意的是,但因?yàn)樯⒘衅ヅ淦?50及最長字串匹配器260的運(yùn)算時間無法預(yù)期,使得每個實(shí)例無法依原來的順序進(jìn)入不匹配狀態(tài)s340或部分匹配狀態(tài)s370。盡管每個實(shí)例無法依原來的順序進(jìn)入不匹配狀態(tài)s340或部分匹配狀態(tài)s370,通過以上所述的實(shí)施例,有限狀態(tài)機(jī)240還是可根據(jù)退卻指針依原來順序輸出相應(yīng)于每個實(shí)例的散列匹配器250及最長字串匹配器260的運(yùn)算結(jié)果給格式化器270。圖8是依據(jù)本發(fā)明實(shí)施例的散列匹配器的方塊圖。為加速散列匹配,散列匹配器可包含多個可平行處理的匹配路徑,每一個路徑包含先進(jìn)先出隊(duì)列、匹配器及存儲器庫(memorybank)。例如,第一匹配路徑包含先進(jìn)先出隊(duì)列850_1、匹配器870_1及存儲器庫890_1,第二匹配路徑包含先進(jìn)先出隊(duì)列850_2、匹配器870_2及存儲器庫890_2,依此類推。散列函數(shù)(hashfunctions)810_1至810_4中的任何一個將有限狀態(tài)機(jī)240傳來的子字符串映射成散列索引(hashindex),依據(jù)上述散列索引驅(qū)動選擇器830以連接至匹配路徑中的一個,用以傳送此子字符串至連接上的匹配路徑。當(dāng)連接的匹配路徑判定散列表(hashtable)不包含此子字符串時,傳送不匹配的信息給有限狀態(tài)機(jī)240。當(dāng)連接的匹配路徑判定散列表包含此子字符串(即該子字符串在數(shù)據(jù)緩存器210的中的滑動窗中存在,例如散列表中包含實(shí)例4對應(yīng)的子字符串“xyz”,即說明子字符串“xyz”在數(shù)據(jù)緩存器210的中的滑動窗中存在)時,傳送匹配的信息及散列表中相應(yīng)于此子字符串的匹配偏移量給有限狀態(tài)機(jī)240。雖然本發(fā)明實(shí)施例使用四套的匹配路徑說明,本領(lǐng)域技術(shù)人員可依據(jù)設(shè)計(jì)需求于散列匹配器250中配置較多或較少的匹配路徑,本發(fā)明并不因此受限。散列表分散存儲于四個存儲器庫(memorybanks)870_1至870_4。存儲器庫870_1至870_4可以快取存儲器(cache)實(shí)現(xiàn)。散列表包含n筆條目(entries)。存儲器庫870_1存儲第0筆至第(n/4-1)筆條目,存儲器庫870_2存儲第(n/4)筆至第(n/2-1)筆條目,存儲器庫870_3存儲第(n/2)筆至第(3n/4-1)筆條目,及存儲器庫870_4存儲第(3n/4)筆至第(n-1)筆條目,即散列表按照散列表地址高兩位來分布。在其它實(shí)施中,散列表也可以按照散列表地址的低兩位或者散列表地址的其他位來分布。在本實(shí)施例中,每筆條目可包含多個,例如三個散列鍵(hashkeys)的相關(guān)信息,而這三個散列鍵擁有相同的散列索引而形成散列鏈結(jié)(hashchain)。舉例來說,n為3且使用16字節(jié)存儲每筆條目的數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)如表6所示:表6每筆條目的第0字節(jié)存儲標(biāo)簽“tag”,使用固定位置的3比特分別表示此條目中的三個散列鍵是否有效。例如,3比特“100”代表此筆條目中的第一散列鍵有效而第二及第三散列鍵無效,3比特“110”代表此筆條目中的第一及第二散列鍵有效而第三散列鍵無效,依此類推。每筆條目的第1至3字節(jié)存儲關(guān)聯(lián)于一個散列索引的第一散列鍵“hash_key_1”,表示滑動窗的原始字符串中包含第一散列鍵“hash_key_1”對應(yīng)的子字符串;第4至5字節(jié)存儲關(guān)聯(lián)于第一散列鍵的第一散列偏移量“hash_offset_1”,其代表滑動窗的原始字符串中所包含的第一散列鍵對應(yīng)的子字符串的偏移量。此條目的第6至8字節(jié)存儲關(guān)聯(lián)于相同散列索引的第二散列鍵“hash_key_2”,表示滑動窗的原始字符串中包含第二散列鍵“hash_key_2”對應(yīng)的子字符串;第9至10字節(jié)存儲關(guān)聯(lián)于第二散列鍵的第二散列偏移量“hash_offset_2”,其代表滑動窗的原始字符串中所包含的第二散列鍵對應(yīng)的子字符串的偏移量。此條目的第11至13字節(jié)存儲關(guān)聯(lián)于相同散列索引的第三散列鍵“hash_key_3”,表示滑動窗的原始字符串中包含第三散列鍵”hash_key_3”對應(yīng)的子字符串;第14至15字節(jié)存儲關(guān)聯(lián)于第三散列鍵的第三散列偏移量”hash_offset_3”,其代表滑動窗的原始字符串中所包含的第三散列鍵對應(yīng)的子字符串的偏移量。本領(lǐng)域技術(shù)人員可依據(jù)設(shè)計(jì)需求改變每筆條目的內(nèi)容,用以存儲更多或更少的散列鍵及關(guān)聯(lián)的散列偏移量,本發(fā)明并不因此受限。為了加速散列匹配,散列匹配器250可包含四個散列函數(shù)810_1至810_4,散列函數(shù)810_1至810_4執(zhí)行相同的算法,用以將任意的子字符串映射成固定長度的散列索引(hashindex)。散列索引的長度少于子字符串的長度。有限狀態(tài)機(jī)240可以以四發(fā)射(4-issue)的方式在同一時鐘周期同時輸出四個散列請求分別給散列函數(shù)810_1至810_4中的一個。散列函數(shù)810_1至810_4中的任何一個依據(jù)映射出的散列索引驅(qū)動選擇器830連接自己至先進(jìn)先出隊(duì)列850_1至850_4中的一個,用以將散列請求推入連接的先進(jìn)先出隊(duì)列。例如,當(dāng)散列函數(shù)810_1將字符串“abc”(亦即是子字串符)映射出散列索引“0”時,驅(qū)動選擇器830連接散列函數(shù)810_1至先進(jìn)先出隊(duì)列850_1,用以將散列請求推入先進(jìn)先出隊(duì)列850_1。在此須注意的是,散列請求包含有限狀態(tài)機(jī)240產(chǎn)生的字符串及相應(yīng)散列函數(shù)產(chǎn)生的散列索引。散列匹配器250可包含四個平行處理的匹配器(matchers)870_1至870_4分別連接于先進(jìn)先出隊(duì)列850_1及存儲器庫890_1之間、先進(jìn)先出隊(duì)列850_2及存儲器庫890_2之間、先進(jìn)先出隊(duì)列850_3及存儲器庫890_3之間及先進(jìn)先出隊(duì)列850_4及存儲器庫890_4之間。匹配器870_1至870_4中的任何一個從連接的先進(jìn)先出隊(duì)列取出一個最早進(jìn)入的散列請求,從其連接的存儲器庫找尋符合散列請求中的散列索引的條目,并且藉檢查找尋到的條目的標(biāo)簽判斷是否存在有效的散列鍵。當(dāng)不存在有效的散列鍵時,匹配器判定找尋不到符合散列請求中的散列索引的條目,并且回復(fù)有限狀態(tài)機(jī)240關(guān)于散列請求中的字符串不匹配的信息。當(dāng)存在有效的散列鍵時,匹配器更判斷是否存在任何有效的散列鍵與散列請求中的字符串相同。當(dāng)所有有效的散列鍵與散列請求中的字符串不同時,匹配器回復(fù)有限狀態(tài)機(jī)240關(guān)于散列請求中的字符串不匹配的信息。當(dāng)存在一個有效的散列鍵與散列請求中的字符串相同時,此匹配器回復(fù)有限狀態(tài)機(jī)240關(guān)于散列請求中的字符串已匹配的信息及此散列鍵關(guān)聯(lián)的散列偏移量。圖9是依據(jù)本發(fā)明實(shí)施例的匹配器的方塊圖。雖然本發(fā)明實(shí)施例以匹配器870_1舉例說明,熟習(xí)此技藝人士可據(jù)以類推出匹配器870_2至870_4的技術(shù)細(xì)節(jié)。匹配器870_1包含比較器910_1至910_3及仲裁器930。比較器910_1從先進(jìn)先出隊(duì)列850_1取得散列請求中的字符串以及從存儲器庫890_1中相應(yīng)條目的第一散列鍵及第一散列偏移量,以及判斷字符串與第一散列鍵是否相同。當(dāng)字符串與第一散列鍵相同時,比較器910_1輸出第一散列偏移量給仲裁器930。比較器910_2從先進(jìn)先出隊(duì)列850_1取得散列請求中的字符串以及從存儲器庫890_1中相應(yīng)條目的第二散列鍵及第二散列偏移量,以及判斷字符串與第二散列鍵是否相同。當(dāng)字符串與第二散列鍵相同時,比較器910_2輸出第二散列偏移量給仲裁器930。比較器910_3從先進(jìn)先出隊(duì)列850_1取得散列請求中的字符串以及從存儲器庫890_1中相應(yīng)條目的第三散列鍵及第三散列偏移量,以及判斷字符串與第三散列鍵是否相同。當(dāng)字符串與第三散列鍵相同時,比較器910_3輸出第三散列偏移量給仲裁器930。當(dāng)仲裁器930從比較器910_1至910_3沒有接收到任何散列偏移量時,回復(fù)有限狀態(tài)機(jī)240關(guān)于散列請求中的字符串不匹配的信息。當(dāng)仲裁器930從比較器910_1至910_3接收到一個散列偏移量時,回復(fù)有限狀態(tài)機(jī)240關(guān)于散列請求中的字符串已匹配的信息及接收到的散列偏移量。當(dāng)仲裁器930從比較器910_1至910_3接收到二個以上散列偏移量時,回復(fù)有限狀態(tài)機(jī)240關(guān)于散列請求中的字符串已匹配的信息及接收到的散列偏移量中的最小值。舉例而言,散列請求中的字符串“abc”,其通過散列函數(shù)810_1映射(或計(jì)算)出散列索引“0”時,對應(yīng)的存儲器庫890_1中相應(yīng)散列索引“0”的條目包括3個散列鍵及其散列偏移量:第一散列鍵“abc”(散列偏移量為50),第二散列鍵“xyz”(散列偏移量為100)及第三散列鍵“abc”(散列偏移量為200),值得注意的是,雖然散列鍵“abc”和“xyz”的鍵值不同,但有可能經(jīng)過散列函數(shù)810_1映射(或計(jì)算)出的散列索引卻相同,這跟散列函數(shù)的運(yùn)算規(guī)則有關(guān),例如這里的散列鍵“abc”和“xyz”的散列索引均為“0”;此外,2個相同的散列鍵“abc”表示在滑動窗的原始字符串中的不同偏移位置出現(xiàn)了2次子字符串“abc”,但其散列偏移量不同。因?yàn)榈谝簧⒘墟I“abc”和第三散列鍵“abc”均與散列請求中的字符串“abc”相同,因此比較器910_1和比較器910_3會分別輸出第一散列偏移量(50)和第三散列偏移量(200)給仲裁器930,此時仲裁器930會將字符串“abc”已匹配的信息及較小的散列偏移量50回復(fù)有限狀態(tài)機(jī)240。值得注意的是,在其它實(shí)施方式中,當(dāng)存儲器庫中的每個散列表?xiàng)l目有前述多個匹配(即多個散列鍵均為“abc”)時,仲裁器930會回復(fù)有限狀態(tài)機(jī)240關(guān)于散列請求中的字符串已匹配的信息,并且將所有匹配的散列偏移量均推送給有限狀態(tài)機(jī)240。圖10是依據(jù)本發(fā)明實(shí)施例的散列匹配方法的流程圖。散列函數(shù)810_1至810_4并行接收從有限狀態(tài)機(jī)240傳來的多個子字符串(步驟s1010)。接著,散列函數(shù)810_1將接收的子字符串映射成散列索引及依據(jù)散列索引驅(qū)動選擇器830連接至多個匹配路徑中的一個(步驟s1031),散列函數(shù)810_2將接收的子字符串映射成散列索引及依據(jù)散列索引驅(qū)動選擇器830連接至多個匹配路徑中的一個(步驟s1033),依此類推。在此須注意的是,在步驟s1031、s1033、s1035、s1037中,散列函數(shù)810_1至810_4中的至少二者可連接到相同的匹配路徑,并且將包含這些子字符串的散列請求推入此匹配路徑中的先進(jìn)先出隊(duì)列。接著,當(dāng)散列函數(shù)810_1連接的匹配路徑中的匹配器(如匹配器870_1、870_2、870_3或870_4)判定散列表不包含散列函數(shù)810_1接收的子字符串時,傳送不匹配的信息給有限狀態(tài)機(jī)240(步驟s1051),以及當(dāng)散列函數(shù)810_1連接的匹配路徑中的匹配器判定散列表包含散列函數(shù)810_1接收的子字符串時,傳送匹配的信息及散列表中相應(yīng)于子字符串的匹配偏移量給有限狀態(tài)機(jī)240(步驟s1071)。當(dāng)散列函數(shù)810_2連接的匹配路徑中的匹配器(如匹配器870_1、870_2、870_3或870_4)判定散列表不包含散列函數(shù)810_2接收的子字符串時,傳送不匹配的信息給有限狀態(tài)機(jī)240(步驟s1053),以及當(dāng)散列函數(shù)810_2連接的匹配路徑中的匹配器判定散列表包含散列函數(shù)810_2接收的子字符串時,傳送匹配的信息及散列表中相應(yīng)于子字符串的匹配偏移量給有限狀態(tài)機(jī)240(步驟s1073)。步驟s1055、s1075、s1057及s1077的細(xì)節(jié)可從如上所述的步驟推論而得,不再贅述。在此須注意的是,當(dāng)一個匹配路徑的先進(jìn)先出隊(duì)列包含二個以上的散列請求時,此匹配路徑的匹配器依據(jù)散列請求到達(dá)的先后順序執(zhí)行如上所述的判斷。例如,當(dāng)一個匹配路徑的先進(jìn)先出隊(duì)列包含散列函數(shù)810_1及810_2的散列請求且散列函數(shù)810_1的散列請求較早時,步驟s1031、s1051及s1071的執(zhí)行早于步驟s1033、s1053及s1073的執(zhí)行。本發(fā)明的前述有限狀態(tài)機(jī)可以在同一時鐘周期同時輸出多個散列請求分別給多個散列函數(shù)并行進(jìn)行散列匹配,并且藉由本發(fā)明之中介緩存器記錄各實(shí)例的狀態(tài)、匹配長度及匹配偏移量,使得亂序執(zhí)行散列匹配和最長匹配后的實(shí)例能夠按照待壓縮字符串中的原始順序退卻以進(jìn)行壓縮。雖然圖1、2、8、9中包含了以上描述的元件,但不排除在不違反發(fā)明的精神下,使用更多其他的附加元件,以達(dá)成更佳的技術(shù)效果。此外,雖然第4至7及10圖的方法流程圖采用特定的順序來執(zhí)行,但是在不違反發(fā)明精神的情況下,熟習(xí)此技藝人士可以在達(dá)到相同效果的前提下,修改這些步驟間的順序,所以,本發(fā)明并不局限于僅使用如上所述的順序。雖然本發(fā)明使用以上實(shí)施例進(jìn)行說明,但需要注意的是,這些描述并非用以限縮本發(fā)明。相反地,此發(fā)明涵蓋了本領(lǐng)域技術(shù)人員顯而易見的修改與相似設(shè)置。所以,申請權(quán)利要求范圍須以最寬廣的方式解釋來包含所有顯而易見的修改與相似設(shè)置。當(dāng)前第1頁12當(dāng)前第1頁12