本申請案主張2014年8月12日提出申請的且標題為“自適應速率壓縮散列處理器(Adaptive Rate Compression Hash Processor)”的第62/036,453號美國臨時案的權益。
技術領域
本發(fā)明涉及用于壓縮數(shù)據(jù)的系統(tǒng)及方法。
背景技術:
軟件壓縮很好理解且在公用域中可易于存取用于如GZIP等程序的源代碼。考慮到GZIP壓縮是基于DEFLATE[2]算法及霍夫曼(Huffman)編碼[3],因此針對高帶寬應用在硬件中進行用以實施壓縮的算法是相對復雜的。壓縮的意圖是后期在數(shù)據(jù)流中使用所述數(shù)據(jù)流中早期出現(xiàn)的拷貝命令。因此,所有壓縮實施方案均需要一搜索歷史緩沖區(qū)及某一類型的比較長度函數(shù)以確定可用于拷貝命令的最長長度。用以在先前歷史中實施搜索匹配的一種方法是實施散列函數(shù),所述散列函數(shù)將可變長度字符串映射到可用于比較正壓縮的數(shù)據(jù)流的固定值。
圖1表示GZip的壓縮算法的功能性硬件框圖。輸入數(shù)據(jù)102由實施(舉例來說)LZ7/LZ78算法的模塊108的散列模塊104散列。將散列數(shù)據(jù)進行比較以由LZ CMD模塊108按藍波-立夫[4]算法或類似算法產(chǎn)生拷貝或文字命令。一旦收集對待壓縮數(shù)據(jù)的統(tǒng)計,所述統(tǒng)計便被進行霍夫曼譯碼且接著被壓縮以作為經(jīng)壓縮輸出數(shù)據(jù)110而被發(fā)送出去。
本文中所揭示的系統(tǒng)及方法提供用于散列輸入數(shù)據(jù)的經(jīng)改進方法。
附圖說明
為了將易于理解本發(fā)明的優(yōu)點,將參考所附圖式中所圖解說明的具體實施例再現(xiàn)以上簡略描述的對本發(fā)明的較特定說明。應理解,這些圖式僅描繪本發(fā)明的典型實施例且因此并非被視為對本發(fā)明的范圍的限制,透過使用附圖將運用額外特異性及細節(jié)來描述及闡釋本發(fā)明,在附圖中:
圖1是根據(jù)現(xiàn)有技術的用于實施壓縮方案的組件的示意性框圖;
圖2是根據(jù)本發(fā)明的實施例的圖解說明散列及散列鏈的產(chǎn)生的圖式;
圖3是根據(jù)本發(fā)明的實施例的用于產(chǎn)生散列鏈的方法的過程流程圖;
圖4是根據(jù)本發(fā)明的實施例的用于實施散列的電路的示意性框圖;
圖5是根據(jù)本發(fā)明的實施例的用于實施散列抑制的裝置的示意性框圖;
圖6是根據(jù)本發(fā)明的實施例的用于散列抑制的方法的過程流程圖;且
圖7是適于實施根據(jù)本發(fā)明的實施例的方法的計算機系統(tǒng)的示意性框圖。
具體實施方式
將易于理解,可將如在本文中大體描述及各圖中圖解說明的本發(fā)明的組件布置并設計成各種各樣的不同配置。因此,如各圖中所表示的對本發(fā)明的實施例的以下較詳細說明并不打算限制如所主張的本發(fā)明的范圍,而是僅表示根據(jù)本發(fā)明的目前所涵蓋實施例的某些實例。參考圖式將最佳地理解目前所描述實施例,其中通篇中相似部件由相似編號標示。
響應于此項技術的目前狀態(tài)且(特定來說)響應于此項技術中通過當前可用設備及方法尚未完全解決的問題及需要已開發(fā)本發(fā)明。
可利用一或多個計算機可用或計算機可讀媒體的任何組合,包含非暫時性媒體。舉例來說,計算機可讀媒體可包含以下各項中的一或多者:便攜式計算機磁盤、硬盤、隨機存取存儲器(RAM)裝置、只讀存儲器(ROM)裝置、可擦除可編程只讀存儲器(EPROM或快閃存儲器)裝置、便攜式光盤只讀存儲器(CDROM)、光學存儲裝置及磁性存儲裝置。在選定實施例中,計算機可讀媒體可包括可含有、存儲、傳遞、傳播或傳輸供由指令執(zhí)行系統(tǒng)、設備或裝置使用或連同指令執(zhí)行系統(tǒng)、設備或裝置一起使用的程序的任何非暫時性媒體。
用于實施本發(fā)明的操作的計算機程序代碼可以一或多種編程語言的任何組合而寫入,所述編程語言包含面向?qū)ο蟮木幊陶Z言(例如Java、Smalltalk、C++等等)及常規(guī)過程編程語言(例如“C”編程語言或類似編程語言)。所述程序代碼可作為獨立軟件封裝在計算機系統(tǒng)上整體地執(zhí)行、在獨立硬件單元上執(zhí)行、在與所述計算機相隔某一距離的遠程計算機上部分地執(zhí)行,或者在遠程計算機或服務器上整體地執(zhí)行。在于遠程計算機或服務器上整體地執(zhí)行的情景中,遠程計算機可透過任何類型的網(wǎng)絡(包含局域網(wǎng)絡(LAN)或廣域網(wǎng)絡(WAN))連接到所述計算機,或者可與外部計算機進行連接(舉例來說,使用因特網(wǎng)服務提供者透過因特網(wǎng)而進行)。
下文參考根據(jù)本發(fā)明的實施例的方法、設備(系統(tǒng))及計算機程序產(chǎn)品的流程圖圖解及/或框圖而描述本發(fā)明。將理解,所述流程圖圖解及/或框圖的每一框及所述流程圖圖解及/或框圖中的框的組合可由計算機程序指令或代碼實施。這些計算機程序指令可被提供到通用計算機、專用計算機或其它可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生機器,使得所述指令(其經(jīng)由計算機或其它可編程數(shù)據(jù)處理設備的處理器執(zhí)行)形成用于實施所述流程圖及/或框圖的一或若干框中所規(guī)定的功能/行為的手段。
這些計算機程序指令還可存儲于非暫時性計算機可讀媒體中,所述非暫時性計算機可讀媒體可引導計算機或其它可編程數(shù)據(jù)處理設備以特定方式起作用,使得存儲于計算機可讀媒體中的指令產(chǎn)生包含指令手段的制品,所述指令手段實施流程圖及/或框圖的一或若干框中所規(guī)定的功能/行為。
還可將計算機程序指令加載到計算機或其它可編程數(shù)據(jù)處理設備上以致使在計算機或其它可編程設備上執(zhí)行一系列操作步驟,以產(chǎn)生計算機實施的處理程序,使得在計算機或其它可編程設備上執(zhí)行的指令提供用于實施流程圖及/或框圖的一或若干框中所規(guī)定的功能/動作的處理程序。
參考圖2及3,使用散列200來迅速對稍后將按藍波-立夫(LZ)算法及其它壓縮衍生物壓縮的文件、字符串或其它數(shù)據(jù)集202的大部分或全部可能參考編索引。圖2中展示可產(chǎn)生的散列表204及散列鏈206的實例。散列表204及散列鏈206的填充可使用圖3的方法300執(zhí)行。如根據(jù)本文中所揭示的方法而產(chǎn)生的散列表204及散列鏈206可經(jīng)處理以根據(jù)此項技術中已知的任何方法(明確地,LZ算法)而壓縮原始數(shù)據(jù)集202。
在步驟302處,檢索當前位置P處的文字對N。首次地,文字對P可等于零。在圖2的實例中,位置P等于X且N等于‘a(chǎn)b’。方法300可包含確定304相對于文字N是否應抑制散列鏈的產(chǎn)生。此可包含執(zhí)行圖5的方法600。如果未發(fā)現(xiàn)304散列受到抑制,那么方法300可包含產(chǎn)生306文字對N的散列(即,Hash(N)),其中Hash()是散列函數(shù)。圖4中展示實例性散列函數(shù)及實施電路。
接著可查找308散列表204中在地址Hash(N)處的條目E。在圖2的實例中,針對第一次出現(xiàn)的文字對‘a(chǎn)b’,E的值為零。舉例來說,針對根據(jù)方法300而處理的每一扇區(qū)或數(shù)據(jù)文件,可將散列表204初始化為零。
接著可將E的值存儲310于散列鏈206中的位置P處。在圖2的實例中,值0存儲于散列鏈206中用于‘a(chǎn)b’的第一實例的位置X處。還可將P的值寫入312散列表204中的地址Hash(N)處。在所圖解說明實例中,可將X的值寫入散列表204中的地址Hash(‘a(chǎn)b’)處。
如果位置P是最后文字或文字對的位置,那么將發(fā)現(xiàn)314數(shù)據(jù)文件被完成且方法將結(jié)束。否則,將遞增P的值以指向下一文字(即,P=P+1文字位置),且方法將在步驟302處繼續(xù)進行。舉例來說,對于字符串‘a(chǎn)bcd’,在P=0處將首先處理文字對‘a(chǎn)b’。在P=1處,將處理文字對‘bc’,以此類推。即使在確定304散列受到抑制時,仍可執(zhí)行步驟314及316,如圖3中所展示。
在圖2的實例中,步驟304到312的下一迭代將致使響應于檢測到‘a(chǎn)b’下一次出現(xiàn)在位置Y處而從地址Hash(‘a(chǎn)b’)檢索X的值。因此,將X寫入散列鏈206中的位置Y處且將Y寫入散列表中的地址Hash(‘a(chǎn)b’)處。
響應于檢測到‘a(chǎn)b’下一次出現(xiàn)在位置Z處,從散列表204中的地址Hash(‘a(chǎn)b’)檢索值Y。因此,將Y寫入散列鏈206中的位置Z處且將Z寫入散列表中的地址Hash(‘a(chǎn)b’)處。
如易于顯而易見,散列表204及散列鏈206現(xiàn)在使一文字對的初次出現(xiàn)與所述相同文字對的一或多次后續(xù)出現(xiàn)相關。散列鏈中的位置X處的值指向位置Y。因此,當查找以文字‘a(chǎn)b’開始的字符串時,可遵循散列鏈206中對應于給出值Hash(‘a(chǎn)b’)的對的位置的指針而不必評估整個原始數(shù)據(jù)集。如上文所述,處理散列表204及/或散列鏈206以壓縮原始數(shù)據(jù)集的方式可包含此項技術中已知的任何方法,例如LZ算法。
參考圖4,散列函數(shù)(Hash())用于產(chǎn)生確定性索引,所述確定性索引是針對2個字節(jié)可存在的總共64K概率的子集。舉例來說,8個位的2個字節(jié)(例如,字節(jié)0及字節(jié)1)各自可表示2^8個可能字符及(2^8)*(2^8)=64KB的可能字符組合。散列函數(shù)產(chǎn)生將所需搜索空間減小到2^13的13位散列或具有兩個不同字節(jié)組合的概率的1/8的8K可能組合。此針對任何隨機兩字節(jié)組合產(chǎn)生相同散列值。
圖4中展示用于產(chǎn)生散列值的電路的實例。如顯而易見,字節(jié)400、402的位7到0被輸入到13個“異或非”門404的陣列。如顯而易見,如果N+3<=7,那么字節(jié)402在位置N處的位被輸入到具有字節(jié)400的位置N+3處的位的“異或非”門,或如果N+3>7,那么字節(jié)402在位置N處的位被輸入到具有字節(jié)400的位置N+3-7處的位的“異或非”門。同樣地,對于至多為N=4的N值,字節(jié)400的位置N處的每一位被輸入到具有位置N+3處的位的“異或非”門。
參考圖5,由于散列是基于字節(jié)的,因此通過使用具有在不需要大面積開銷的情況下允許多個同時寫入的多個存儲器組的散列處理器可滿足根據(jù)方法300來處理多個散列的挑戰(zhàn),這是因為單端口存儲器可用于存儲器組。FIFO可用于在將多個字節(jié)對寫入到相同存儲器組時處置散列沖突意向。當FIFO填滿時,散列處理器關閉散列計算及散列鏈接操作(例如,圖3的方法300)。關閉散列計算及散列鏈接會減小壓縮速率,這是因為新散列值并未產(chǎn)生且因此稍后無法被索引以用于按LZ算法進行拷貝。
散列處理器500可使用圖5中所展示的電路500來操作以計算每一字節(jié)對的散列值。舉例來說,散列處理器500可使用散列限制引擎504來檢測FIFO 506何時填滿及何時存在針對寫入的組沖突,使得散列處理器500可將散列產(chǎn)生抑制到對應于完整FIFO 506的SRAM散列組508,借此允許FIFO 506外流。通過抑制散列,散列處理器500能夠以對壓縮速率來說最小的成本維持高處理量。由于新散列值意指數(shù)據(jù)已經(jīng)不太可壓縮了,因此僅損失可忽略壓縮量。當散列處理器500遇到正被重復的文字時,散列處理器500使用文字行程長度引擎510來抑制相同文字字符的至多16個字節(jié)的散列產(chǎn)生,以使用于產(chǎn)生拷貝命令的散列鏈接的散列沖突的數(shù)目最小化。
在某一實施例中,8個存儲器組508可連同8個FIFO 506一起用于產(chǎn)生處理5個兩字節(jié)對從而有效地產(chǎn)生四個散列值所需的散列數(shù)據(jù)及平滑功能性。每一平滑F(xiàn)IFO 506可針對8個寫入存儲器組508實施為16深FIFO以處理在計算僅四個散列時出現(xiàn)的散列沖突。任何數(shù)目個存儲器組508可連同任何數(shù)目個FIFO 506一起用于產(chǎn)生正被散列的任何文字對的散列沖突的平滑功能性,只要所述數(shù)目超過需要存儲的散列的所需數(shù)目即可。舉例來說,對于需要較小帶寬的應用,可使用四個組508寫入及FIFO 506而非實例性實施方案中的八個來產(chǎn)生兩個散列。在散列處理因FIFO 506填滿而被停止之前,平滑F(xiàn)IFO 506可經(jīng)實施具有比16深或淺的深度,如圖6的方法600中所概述。
散列處理器500可實施圖6中所展示的方法600。舉例來說,對數(shù)據(jù)文件或字符串的壓縮可在步驟602處開始且可包含根據(jù)圖3的方法300產(chǎn)生604散列及散列鏈。如果發(fā)現(xiàn)606相同文字(即,重復文字),那么方法600可包含確定所述文字是否為第16個連續(xù)重復文字。如果否,那么產(chǎn)生所述文字的散列可受到抑制610,一直到第16個連續(xù)重復文字為止。如果確定612字符串或文件中的數(shù)據(jù)被完成,那么發(fā)送614數(shù)據(jù)以進行LZ匹配514過程,此過程根據(jù)霍夫曼譯碼或某一其它方法而用準備進行編碼的命令文件中的拷貝/文字命令來替換文字。如上文所描述的字符串或文件中所識別的重復文字的行程可用“行程長度”文字來替換,所述“行程長度”文字用重復文字的數(shù)目及到重復文字的第一實例的位置的偏移來替換重復文字。在一些實施例中,命令文件中針對單個字符文字行程(即,重復文字的行程)的行程長度可被約束為始終指向16字符偏移的倍數(shù)。以此方式,行程長度拷貝命令將提供超過90%的壓縮速率,此提供壓縮速率與實施行程長度拷貝命令的復雜性之間的良好平衡。
在一些實施例中,步驟606到610的行程長度散列抑制可限于關聯(lián)到匹配長度窗口的每隔一個字符或n的倍數(shù)個字符。舉例來說,可每隔一個字符或每n個字符執(zhí)行評估606及可能抑制610一次,其中n是大于2的整數(shù)。在一些實施例中,指示重復文字的字符串的行程長度命令可指重復文字的緊接在重復文字的字符串之前的初始實例或與自重復文字的字符串的偏移的多個文字位置。因此,在步驟606處確定文字被重復可包含評估文字在方法600的當前迭代中正處理的文字之前的任何任意偏移處是否被重復。
如果發(fā)現(xiàn)612較多數(shù)據(jù)將保留在文件或字符串中,那么處理在步驟604處相對于字符串或文件中的下一文字對繼續(xù)進行。
方法600可進一步包含確定616用于散列組508的FIFO緩沖區(qū)506是否填滿。如果是,那么可關閉618對所述FIFO緩沖區(qū)506的散列處理且處理在步驟612處繼續(xù)進行。如果否,那么所述方法可包含確定612字符串或文件的數(shù)據(jù)是否已全部被處理,且如果否,那么散列及散列鏈的產(chǎn)生可在步驟604處繼續(xù)進行。否則,針對所述字符串或文件執(zhí)行步驟614。
圖7是圖解說明實例性計算裝置700的框圖。計算裝置700可用于執(zhí)行各種過程,例如本文中所論述的那些過程。計算裝置700可充當服務器、客戶端或任何其它計算實體。計算裝置可執(zhí)行如本文中所論述的各種功能。計算裝置700可為各種各樣的計算裝置中的任一者,例如桌上型計算機、筆記型計算機、服務器計算機、手持式計算機、平板計算機等等。在一些實施例中,含有實施本文中所揭示的方法的電路的硬件裝置可包含于計算裝置700中或嵌入下文所列的計算裝置的組件中的任一者中。
計算裝置700包含一或多個處理器702、一或多個存儲器裝置704、一或多個接口706、一或多個大容量存儲裝置708、一或多個輸入/輸出(I/O)裝置710及顯示裝置730,此等全部耦合到總線712。處理器702包含執(zhí)行存儲器裝置704及/或大容量存儲裝置708中所存儲的指令的一或多個處理器或控制器。處理器702還可包含各種類型的計算機可讀媒體,例如高速緩沖存儲器。
存儲器裝置704包含各種計算機可讀媒體,例如易失性存儲器(例如,隨機存取存儲器(RAM)714)及/或非易失性存儲器(例如,只讀存儲器(ROM)716)。存儲器裝置704還可包含可重寫ROM,例如快閃存儲器。
大容量存儲裝置708包含各種計算機可讀媒體,例如磁帶、磁盤、光盤、固態(tài)存儲器(例如,快閃存儲器)等等。如圖7中所展示,特定大容量存儲裝置為硬盤驅(qū)動器724。大容量存儲裝置708中還可包含各種驅(qū)動器以實現(xiàn)從各種計算機可讀媒體的讀取及/或到各種計算機可讀媒體的寫入。大容量存儲裝置708包含可裝卸媒體726及/或不可裝卸媒體。
I/O裝置710包含允許將數(shù)據(jù)及/或其它信息輸入到計算裝置700或從計算裝置700檢索數(shù)據(jù)及/或其它信息的各種裝置。實例性I/O裝置710包含光標控制裝置、鍵盤、小鍵盤、麥克風、監(jiān)視器或其它顯示裝置、揚聲器、打印機、網(wǎng)絡接口卡、調(diào)制解調(diào)器、鏡頭、CCD或其它圖像俘獲裝置等等。
顯示裝置730包含能夠向計算裝置700的一或多個用戶顯示信息的任何類型的裝置。顯示裝置730的實例包含監(jiān)視器、顯示終端、視頻投影裝置等等。
接口706包含允許計算裝置700與其它系統(tǒng)、裝置或計算環(huán)境互動的各種接口。實例性接口706包含任何數(shù)目個不同網(wǎng)絡接口720,例如到局域網(wǎng)絡(LAN)、廣域網(wǎng)絡(WAN)、無線網(wǎng)絡及因特網(wǎng)的接口。其它接口包含用戶接口718及外圍裝置接口722。接口706還可包含一或多個用戶接口元件718。接口706還可包含一或多個外圍接口,例如用于打印機、指向裝置(鼠標、跟蹤墊等)、鍵盤等等的接口。
總線712允許處理器702、存儲器裝置704、接口706、大容量存儲裝置708及I/O裝置710彼此通信以及與耦合到總線712的其它裝置或組件通信。總線712表示數(shù)種類型的總線結(jié)構中的一或多者,例如系統(tǒng)總線、PCI總線、IEEE 1394總線、USB總線等等。
出于圖解目的,程序及其它可執(zhí)行程序成分在本文中展示為離散塊,但應理解,此些程序及成分可在各種時間駐存于計算裝置700的不同存儲組件中,且由處理器702執(zhí)行。另一選擇為,本文中所描述的系統(tǒng)及過程可以硬件或者硬件、軟件及/或固件的組合而實施。舉例來說,一或多個專用集成電路(ASIC)可經(jīng)編程以實施本文中所描述的系統(tǒng)及過程中的一或多者。
在不背離本發(fā)明的精神或本質(zhì)特性的情況下,本發(fā)明可體現(xiàn)為其它具體形式。所描述實施例在各方面均應視為僅為說明性的而非限制性的。因此,本發(fā)明的范圍由所附權利要求書而非由前述說明指示。屬于權利要求書的等效內(nèi)容的意義及范圍內(nèi)的所有改變均將涵蓋于權利要求書的范圍內(nèi)。
參考文獻
[1].J.Gailly and M.Adler,GZIP:The Data Compression Program,1993,http://www.gzip.org/.
[2]DEFLATE Compressed Data Format Specification version 1.3.IETF.May 1996.p.1.sec.Abstract.RFC 1951.Retrieved 11 Nov.2012.
[3]D.A.Huffman,"A method for the construction of minimum-redundancy codes"Proc.IRE 40(9).pp.1098-1101.1952.
[4].Ziv,J.;Lempel,A.(1978)."Compression of individual sequences via variable-rate coding".IEEE Transactions on Information Theory 24(5):530.