本申請要求于2014年10月21日遞交的發(fā)明名稱為“數據壓縮系統(tǒng)、設備和方法”的第62/066,572號美國臨時專利申請案的在先申請優(yōu)先權,以及于2015年10月20日遞交的發(fā)明名稱為“基于字典的并行壓縮編碼器”的第14/887,908號美國申請案的在先申請優(yōu)先權,這些在先申請的內容以引入的方式并入本文。
技術領域
本文描述的實施例通常涉及數據壓縮系統(tǒng)、設備和方法,尤其涉及無損數據壓縮系統(tǒng)、設備和方法。
背景技術:
數據壓縮涉及對作為輸入的符號序列進行處理,并嘗試生成作為輸出的較短的序列。無損數據壓縮嘗試在不丟失信息的情況下,通過標識并消除輸入數據中的統(tǒng)計冗余以減少輸出。
附圖說明
圖1是一些實施例中提供的數據壓縮系統(tǒng)的示例的示意圖;
圖2是壓縮處理的說明示例性輸入的示意圖;
圖3是壓縮處理的說明示例性輸入的可替代示意圖;
圖4是一些實施例提供的示例性數據壓縮方法的流程圖;
圖5是一些實施例提供的用于數據壓縮的比較器網絡的示意圖;
圖6是一些實施例提供的用于數據壓縮的時序圖的示意圖;
圖7是一些實施例提供的示例性數據壓縮方法的可替代流程圖;
圖8是一些實施例提供的數據壓縮系統(tǒng)的示例的可替代示意圖;
圖9是壓縮處理的說明示例性輸入的可替代示意圖;
圖10和圖11是一些實施例提供的說明編碼過程的表格。
為了進行說明,這些附圖描述了示例性實施例。可以對這些示例性實施例進行變型、選擇配置、選擇組件以及作出修改。
技術實現要素:
在第一方面,提供了一種用于對輸入數據流進行編碼以生成壓縮輸出流的電路。所述電路包括:輸入單元,用于接收傳入的輸入數據流,所述輸入數據流包括:一系列令牌,其中每個令牌定義所述輸入數據流中的位置、長度和類型,所述類型為文字令牌或者復制令牌,每個文字令牌定義文字符號,每個復制令牌具有與所述數據流中一系列令牌中的另一令牌的位置的偏置;內存設備,用于將所述輸入數據流的所述一系列令牌存儲在存儲位置。
所述電路包括:并行處理器,用于在參考所述輸入數據流的一系列令牌中各自令牌的位置之前的其他令牌時,利用對內存設備中的所述輸入數據流的并行掃描對所述令牌進行編碼以同時處理所述輸入數據流中的各個令牌,所述并行處理器通過基于所述并行掃描的結果消除所述輸入數據流中的一部分令牌來生成所述壓縮輸出流。
所述電路包括:多個比較器,用于對來自并行掃描的存儲器中存儲位置的一系列令牌進行比較;內存選擇器,用于為每個復制令牌選擇對應于偏置的位置的存儲位置。所述電路包括:輸出單元,用于連接接收設備以輸出所述壓縮輸出流。
在一些實施例中,所述并行處理器采用反向計算、清除計算、正向計算的并行掃描以同時處理所述輸入數據流的令牌,以便更新用于生成所述壓縮輸出流的所述輸入數據流。
在一些實施例中,在生成所述壓縮輸出流時,所述并行處理器利用前導計算和布局計算消除所述輸入數據流的一部分令牌。
在一些實施例中,所述并行處理器利用反向計算更新所述傳入的輸入數據流以將文字令牌替換為附加復制令牌,所述被替換的文字令牌為前導復制令牌的末端,從所述壓縮輸出數據流中消除所述附加復制令牌,所述被替換的文字令牌被所述前導復制令牌覆蓋。
在一些實施例中,所述并行處理器利用清除計算更新所述傳入的輸入數據流,以將長度小于4的復制令牌替換為文字令牌。
在一些實施例中,所述并行處理器利用正向計算更新所述傳入的輸入數據流,以合并具有相同偏置的連續(xù)重疊復制令牌和相連的文字符號。
在一些實施例中,所述并行處理器利用前導計算將每個令牌標記為非前導令牌或前導令牌中的任一個,所述前導令牌為以下令牌中的至少一個:所述輸入數據流中的初始令牌、所述輸入數據流中在復制令牌之前或之后的文字令牌、所述輸入數據流中在文字令牌之前或之后的復制令牌,以及所述輸入數據流中在具有不同偏置的復制令牌之前或之后的復制令牌。
在一些實施例中,所述并行處理器利用布局計算生成所述令牌的大小,通過將所有非前導令牌的大小固定為0并將所有前導令牌的大小固定為1,并確定所述壓縮輸出數據流中令牌的位置,每個位置由令牌的末端和起點定義,所述末端為所有前述的令牌的大小的前綴總和,所述起點為所述位置和所述前綴總和之差。
在一些實施例中,通過使用令牌的大小將具有非0大小的所有令牌寫出至所述壓縮輸出數據流中所述令牌的位置,所述并行處理器使用所述布局計算的結果生成所述壓縮輸出數據流。
在一些實施例中,所述并行處理器通過將復制令牌合并成較大的復制令牌,通過將單獨的文字令牌合并成較大的文字令牌,并且,針對長度為n的復制令牌,通過消除所述輸入數據流中的接下來的n-1個令牌來消除所述輸入數據流的一部分令牌。
在一些實施例中,所述處理器通過增加與消除的部分復制令牌相鄰的復制令牌所要復制的符號的數量來消除一部分復制令牌。
在一些實施例中,所述編碼器通過將每個長度小于預定義門限的復制令牌替換為文字令牌來消除一部分復制令牌。
在一些實施例中,所述并行處理器執(zhí)行并行歷史搜索以生成所述輸入數據流的令牌。
在一些實施例中,所述并行處理器利用并行排序來執(zhí)行并行歷史搜索以生成所述輸入數據流的令牌。
在一些實施例中,所述并行處理器執(zhí)行順序歷史搜索以生成所述輸入數據流的令牌。
在另一方面,提供了一種具有所述電路和用于傳輸壓縮輸出流的網絡接口的壓縮設備。
在另一方面,提供了一種具有所述電路和用于將壓縮輸出流存儲在物理非瞬時性計算機可讀介質上的存儲控制器的壓縮系統(tǒng)。
在一些實施例中,所述電路實現于圖形處理器、并行中央處理器或者現場可編程門陣列之上。
在另一方面,提供了一種編碼過程,涉及:接收輸入數據流,所述輸入數據流包括:一系列令牌,其中每個令牌定義所述輸入數據流中的位置、長度和類型,所述類型為文字令牌或者復制令牌,每個文字令牌定義文字符號,每個復制令牌具有與所述輸入數據流中的一系列令牌中的另一令牌的位置的偏置;在參考所述輸入數據流的一系列令牌中各自令牌的位置之前的其他令牌時,利用對內存設備中的所述輸入數據流的并行掃描對所述令牌進行編碼以同時處理所述輸入數據流中的各個令牌;通過基于所述并行掃描的結果消除所述輸入數據流中的一部分令牌來生成壓縮輸出流;使作為非瞬時性計算機可讀介質或共享內存或傳輸的編碼后的壓縮輸出數據可用。
在一些實施例中,所述過程可以涉及采用反向計算、清除計算、正向計算的并行掃描對所述令牌進行編碼以同時處理所述輸入數據流的令牌,以便更新用于生成所述壓縮輸出流的所述輸入數據流。
在一些實施例中,所述過程可以涉及使用前導計算和布局計算標識所述壓縮輸出流中的非前導令牌、前導令牌、令牌的大小、以及令牌的位置以便在生成所述壓縮輸出流時消除所述輸入數據流的一部分令牌。
具體實施方式
數據壓縮涉及接收符號序列作為輸入,并嘗試生成較短的序列作為輸出。無損數據壓縮嘗試在不丟失信息的情況下,通過標識并消除輸入數據中的統(tǒng)計冗余以減少輸出。無損數據壓縮根據解壓縮生成原始輸入流。有損壓縮生成類似但可能不完全一樣的流。
基于字典的壓縮系統(tǒng)可用于在輸入中查找重復的子字符串并對隨后出現的這些子字符串進行編碼作為指向早期出現的指針。
在輸入流的每個位置,壓縮系統(tǒng)可用于考慮各種因素,例如,另一字符序列、之前已出現過的最長序列、最近出現等等。不同的因素可以決定壓縮系統(tǒng)、設備、或者方法運行的情況??梢允褂酶鞣N度量對壓縮系統(tǒng)進行評估,該度量包括例如壓縮率、壓縮/解壓縮速度、分裂性、壓縮/解壓縮過程中所需要的內存和其他資源、并行執(zhí)行工作的能力等等。壓縮速度可以與壓縮率成比例。例如,有些示例性系統(tǒng)可能壓縮速度快、壓縮率低,而其他系統(tǒng)可能壓縮速度較慢、壓縮率較高。
壓縮速度會是一個重要的考慮因素。以全部流吞吐量運行的快速壓縮系統(tǒng)會產生相對較小的壓縮率。不過這會有助于減少數據輸出。例如,壓縮設備可以放置在主機設備和網絡接口控制器設備或存儲控制器設備之間。
根據另一方面,提供了一種利用排序技術實現并行歷史搜索的壓縮設備。并行處理可以提高壓縮速度。
根據另一方面,提供了一種具備接收器以接收未壓縮輸入數據的壓縮設備。輸入數據可以表示為符號序列。所述壓縮設備可以包括:處理器,用于對所述輸入數據的符號序列執(zhí)行基于字典的歷史搜索,以便生成用于編碼的標簽或令牌的中間數據結構到壓縮輸出流中。所述壓縮設備還可以包括:編碼器,用于針對所述壓縮輸出流對輸入數據的符號序列進行編碼。輸出生成器可以利用編碼后的輸入數據的符號序列生成令牌作為壓縮輸出數據。所述壓縮設備可以包括:發(fā)送器,用于傳輸所述壓縮輸出數據;或者存儲設備,用于存儲所述壓縮輸出數據。
根據另一方面,提供了一種數據壓縮方法。所述方法可以涉及對表示為符號序列的輸入數據進行處理以生成輸出數據。在每個位置,所述方法可以創(chuàng)建帶有一個或多個符號的字符串的標簽以及位置。所述方法還可以涉及通過前綴對標簽進行排序以生成排序后的標簽序列。對于排序后的標簽序列中的每個標簽,所述方法還可以涉及將所述標簽和鄰近或相鄰標簽進行比較。如果一個具有定義數量符號的公共前綴的標簽有早期或其他來源,那么所述壓縮設備創(chuàng)建復制令牌,否則,所述壓縮設備創(chuàng)建文字令牌。所述方法可以涉及通過對應的位置或通過前綴對所述令牌進行排序。
根據一方面,提供了一種利用排序進行并行處理以實現歷史搜索的壓縮設備。例如,所述設備可以利用圖形處理器(Graphic Processing Unit,簡稱GPU)或者高度并行中央處理器(Central Processing Unit,簡稱CPU)來實現。
根據另一方面,提供了一種具有編碼器進行并行編碼以生成壓縮輸出數據的壓縮設備。所述編碼器可以對來源于歷史搜索的各種類型的輸入數據進行操作,例如,對所述壓縮輸出數據進行編碼。
根據另一方面,提供了一種壓縮設備,其具有寄存器、用于利用搜索歷史處理未壓縮輸入數據的現場可編程門陣列(Field Programmable Gate Array,簡稱FPGA)、以及存儲所述搜索歷史的結果的塊隨機存取存儲器。此處描述的實施例可以提供一種在FPGA上實現并行歷史搜索的過程。
根據另一方面,提供了一種壓縮設備,其具有用于實現基于字典的壓縮的歷史搜索的處理器以及收縮的基于字典的壓縮編碼器。
根據另一方面,提供了一種通過并行處理器進行基于字典的壓縮的編碼方法。所述方法可以涉及接收未壓縮輸入數據。所述方法可以涉及利用后向計算處理輸入數據。所述方法可以涉及利用清除計算處理輸入數據。所述方法可以涉及利用正向計算處理輸入數據。所述方法可以涉及利用前導計算處理輸入數據。所述方法可以涉及利用布局計算處理輸入數據。所述方法可以涉及利用后向計算、清除計算、正向計算、前導計算和布局計算的結果生成壓縮的輸入數據。
提供了說明性示例以說明此處所描述的實施例的各個方面。
圖1說明了示例性壓縮系統(tǒng)100的示意圖。此處描述的實施例可以提供用于透明徑內壓縮和解壓縮的硬件壓縮設備102,此處也可稱之為壓縮引擎設備。作為一個說明示例性的實施,壓縮設備102可以耦合到網絡接口控制器設備104用于在網絡106上進行數據傳輸。作為另一個說明示例性的實施,壓縮設備102可以耦合到存儲控制器設備108用于在存儲介質上進行數據存儲,例如,閃存設備112或DRAM內存卡110。此處描述的方法的結果可以是壓縮輸出數據的有形物理介質。
歷史搜索
根據一方面,此處描述的實施例可以提供基于字典的壓縮,例如,用于基于字典的壓縮的基于矢量的歷史搜索。
為了最大限度的壓縮,示例性壓縮系統(tǒng)可用于檢測并確定最長匹配序列。一種示例性系統(tǒng)可以由中央處理器(Central Processing Unit,簡稱CPU)使用名為樹的可持久化數據結構來執(zhí)行。這些數據結構可定義為記錄每個被觀測前綴的位置的二叉查找樹。
可替代地,另一個示例性壓縮系統(tǒng)可以記錄最近出現的符號字符串,該符號字符串與存儲在標簽數據結構中的不同數量的字符相匹配。作為一個說明性示例,存儲在標簽中的字符數量的范圍可以是4到7。如果標簽中的字符太少,在給定標簽和編碼的內存使用的前提下,處理后的字符串的壓縮程度可能就沒有那么高。如果每個標簽中的字符太多,排序就會增加,因此,標簽大小會增加內存使用。
作為一個說明性示例,4個字符的標簽可能是最短的且不會導致擴展的標簽。與重發(fā)送這4個字符作為文字相比,對復制了4個字符的標簽進行編碼可以保證不占用更多的空間。對于標簽的數量,不同的編碼方案可能會有不同的分界點。此處僅僅是個示例。在對排序后的鄰近或相鄰標簽進行比較時,較長的標簽可能會引入相當大的復雜度。由于較長的標簽能夠區(qū)分有5個符號或字符長度的復制和只有4個符號的復制,較長的標簽也會增加壓縮率。相應地,壓縮復雜度和壓縮率之間存在一定的折衷。
因為系統(tǒng)可能找不到復制參考的最佳匹配,因此系統(tǒng)可能會提供較低的壓縮率(例如,未壓縮的大小和壓縮后的大小相比),但是它可以提供較快的壓縮速度或吞吐量。示例性系統(tǒng)可以使用輪流在各個位置更新的散列表。系統(tǒng)可以是連續(xù)且數據相關的,并且可以具有軟件配置。
此處描述的實施例可以利用并行處理硬件進行運行以體現并行性的益處。此處描述的實施例可以利用改進的歷史搜索以利用排序來標識使用了基于排序的數據并行性的最近搜索。相應地,示例性系統(tǒng)100可以通過并行處理硬件來執(zhí)行。
根據一方面,此處描述的實施例可以提供基于字典的壓縮,例如,用于基于字典的壓縮的基于矢量的歷史搜索。硬件壓縮設備可以配置針對壓縮吞吐量而設計的各種壓縮實施。歷史搜索可能會是基于字典的壓縮中的瓶頸,技術可以創(chuàng)建難以或不可能為其提取并行性的強線性關系鏈。
相應地,此處描述的實施例可以涉及通過排序實現的歷史搜索。所述排序可以利用數據并行處理來實現,這將利用大量線程來進行并行化。
圖2說明了壓縮處理的示例性輸入。示例性輸入可以是統(tǒng)一大小的輸入符號的序列,典型的是8位字節(jié)。示例性輸出可以是與所述輸入長度相同的令牌的序列。令牌可以是文字(例如,字符或符號)或者復制指令中的任一個。復制指令可以包括字符或符號復制所在的序列中的位置,以及被復制符號的數量。圖2所示的示例說明了為符號9到13指向符號0到4的序列的早期實例的復制參考指針。這也可稱之為反向復制。
圖3說明了指向符號序列的后來實例的復制參考指針的替代實施,這也可稱之為正向復制。
所述壓縮設備102(如圖1所示)可以有用于歷史搜索輸入數據流以生成歷史搜索輸出流的電路。所述電路可以有輸入單元,用以接收符號序列的傳入的輸入數據流。內存設備將輸入數據流的符號序列存儲在存儲位置。這也可稱之為歷史緩存。所述存儲位置可與符號序列的位置相關聯。
所述電路具有并行處理器,用以利用并行排序對內存設備中的輸入數據流執(zhí)行基于字典的歷史搜索,以生成令牌的歷史搜索輸出數據流。每個令牌定義一種類型,所述類型為文字令牌或復制令牌。每個文字令牌定義輸入數據流的符號序列的文字符號。每個復制令牌具有復制參考指針,用于標識輸入數據流的符號序列中的一個或多個被復制符號的位置。所述位置對應存儲所述輸入數據流的內存設備的存儲位置中的一個存儲位置。所述被復制符號可以與歷史搜索輸出數據流的文字令牌的一個或多個文字符號相對應。也就是說,所述復制令牌可以指輸入數據流中的位置或偏置,用以參考在那個位置或偏置的文字符號的復制。所述復制令牌也可以指示要復制多少符號。相應地,復制令牌可以定義符號的長度和復制參考指針的偏置值。
比較器將來自存儲器中存儲位置的符號序列進行比較,以標識一個或多個被復制符號和對應的一個或多個文字符號來進行并行排序。內存選擇器為每個復制參考指針選擇與各自復制參考指針所標識的位置相對應的存儲位置。此處描述了示例性比較器和選擇器。輸出單元連接接收設備以輸出歷史搜索輸出流用于輸入數據流的壓縮。
并行處理器連續(xù)生成代表輸入數據流的標簽,每個定義符號序列中k個連續(xù)符號的窗口的標簽,其中k為整數,和輸入數據流的符號序列中的標簽位置。所述標簽位置指的是窗口中k個連續(xù)符號的第一符號。內存設備中k個符號的窗口的第一符號的對應存儲位置的所述標簽位置。
為進行并行排序,所述并行處理器基于k個符號的窗口對標簽進行排序。排序可以基于標簽的k個符號的窗口的字典或文字數字順序,這取決于輸入數據流的符號的類型。
第一標簽和第二標簽可以有兩個連續(xù)的標簽位置,所述第一標簽的窗口的k個符號的一部分和所述第二標簽的窗口的k個符號的另一部分重疊,重疊符號的數量為k-1。
比較器可以對每個標簽和預定數量的鄰近或相鄰標簽進行比較以標識冗余標簽。對于每個冗余標簽,k個符號的窗口等于另一標簽的k個符號的窗口。在一些示例中,為提供高效壓縮,k的范圍在4和7之間。
冗余標簽可以指輸入數據流中先前出現過的相同符號。給定標簽A和B,若:兩個標簽的第一j符號完全相同;4<=j<=k,或者標簽A的位置大于標簽B的位置,則標簽A對于標簽B可能是冗余的。這是一個反向參考的示例。這可能會導致所述電路創(chuàng)建Copy(delta=B.position-A.position,length=j)令牌。如果A對于B不是冗余的,則所述電路可以創(chuàng)建Lit(content=first symbol,length=1)令牌。
針對每個冗余標簽,并行處理器生成歷史搜索輸出數據流的復制令牌中的一個復制令牌,內存選擇器為指向冗余標簽的復制令牌的復制參考指針選擇與其他標簽的標簽位置相對應的存儲位置。
所述并行處理器通過標簽位置對標簽,包括冗余標簽,進行排序以生成文字令牌和復制令牌的輸出數據流,所述復制令牌與輸出數據流中的標簽位置處的冗余標簽相對應。
所述電路可以在圖像處理器或并行中央處理器上實現。所述電路可以耦合到編碼器和輸出生成器。所述編碼器可以通過合并歷史搜索輸出數據流的一部分復制令牌和一部分文字令牌將歷史搜索輸出數據流轉換為壓縮輸出流,其中所述壓縮輸出數據流相對于輸入數據流而被壓縮。所述輸出生成器可用于輸出壓縮輸出數據流。所述編碼器通過編碼器將連續(xù)重疊的復制令牌合并成較長的復制令牌來合并一部分復制令牌。所述編碼器通過將單獨的文字令牌組合成較大的合并文字令牌來合并一部分文字令牌。所述編碼器通過針對每個復制令牌確定被復制的文字符號的長度n,其中n為整數,并且移除輸入數據流的符號序列所定義的n-1個后續(xù)文字令牌來合并一部分復制令牌。在一些示例中,所述編碼器是一種收縮的基于字典的壓縮編碼器,通過并行掃描進行反向計算、清除計算、正向計算、前導計算和布局計算以生成輸出數據流。此處進一步描述了關于編碼過程的細節(jié)。
如圖1所示,壓縮系統(tǒng)也可包括用于傳輸所述壓縮輸出流的網絡接口104,其中所述壓縮系統(tǒng)帶有所述壓縮設備,所述壓縮設備具有所述電路。所述壓縮系統(tǒng)也可包括用于將所述壓縮輸出流存儲在物理非瞬時性計算機可讀介質上的存儲控制器108,其中所述壓縮系統(tǒng)帶有所述壓縮設備,所述壓縮設備具有所述電路。
圖4說明了此處描述的實施例的一方面提供的通過并行歷史搜索壓縮數據的方法400的流程圖。所述方法400可以由電路或者諸如GPU、并行CPU、FPGA或其他并行處理設備等特定硬件設備來執(zhí)行。所述方法可以由硬件壓縮設備或者各種實施例中的壓縮系統(tǒng)來執(zhí)行。
所述方法400可以涉及接收傳入的輸入數據流,所述輸入數據流包括符號序列。所述方法400可以涉及將所述輸入數據流的符號序列存儲在內存設備上的存儲位置。將要描述的是,所述方法400涉及利用并行排序對內存設備中的輸入數據流進行并行處理以生成令牌的歷史搜索輸出數據流,每個令牌定義一種類型,所述類型為文字令牌或復制令牌中的任意一個。每個文字令牌定義輸入數據流的符號序列的文字符號,每個復制令牌具有復制參考指針,用于標識輸入數據流的符號序列中的一個或多個被復制符號的位置。所述位置對應存儲所述輸入數據流的內存設備的存儲位置中的一個存儲位置。所述一個或多個被復制符號與歷史搜索輸出數據流的文字令牌的一個或多個文字符號相對應。
在步驟402,硬件壓縮設備可以在每個位置創(chuàng)建標簽來表示輸入數據流。該標簽位置可視為k個字符或符號滑動窗口,其中k為整數。例如,k可以是4個字符。也就是說,硬件壓縮設備可以連續(xù)生成代表輸入數據流的標簽,每個定義符號序列中k個連續(xù)符號的窗口的標簽,其中k為整數,以及輸入數據流的符號序列中的標簽位置。所述標簽位置可以指窗口中k個連續(xù)符號的第一符號,所述標簽位置代表內存設備中的k個符號的窗口的第一符號的對應存儲位置。
壓縮可以涉及對字符窗口進行散列并將所述散列存儲到表格中以供參考。4個相同字符會向表格中提供相同條目,以便所述設備在表格中檢測到相同的散列時,所述設備執(zhí)行復制操作。通常這是利用CPU來執(zhí)行的順序過程。然而,并行處理硬件可以提高壓縮速度。所述電路可以利用比較器對字符窗口和存儲在存儲器中的其他字符窗口進行比較以查找匹配。此處描述的實施例可以利用并行處理硬件實現并行歷史搜索。由于為了查找復制參考對早期符號序列進行了搜索,順序歷史搜索可能涉及數據依賴性。此處描述的實施例利用標簽和排序操作實現并行歷史搜索。
例如,標簽操作可以對輸入數據流進行處理以創(chuàng)建標簽,其中每個標簽存儲k個符號的字符串和位置。參考圖2作為一個說明性示例,如果k=4,則第一標簽會是(“nort”@0),第二標簽會是(“orth”@1)。
在步驟404,所述壓縮設備可以通過前綴對標簽進行排序,以打破位置關系。對于字母符號,所述排序可以是按照字母順序的。針對不同的字符和符號,可以定義不同的排序順序。所述壓縮設備會對標簽進行排序以標識鄰近或相鄰標簽中的冗余數據,并將冗余文字符號或字符替換為復制參考指針,以便生成壓縮輸出。例如,所述排序的結果可以是(“nort”@0)、(“nort”@9)、(“orth”@1)、(“orth”@10)、(“rth”@2)、(“rthw”@11)等等。例如,所述壓縮設備可以基于k個符號的窗口對標簽進行排序。所述壓縮設備可以將用于標識一個或多個被復制符號的來自內存設備中的存儲位置的符號和對應的用于并行排序的一個或多個文字符號進行比較,并為每個復制參考指針選擇與各自復制參考指針所標識的位置相對應的存儲位置。
在步驟406,所述壓縮設備可以針對排序后的序列中的每個標簽將所述標簽與相鄰或鄰近標簽進行比較。例如,如果一個具有至少4個符號的公共前綴的標簽有早期來源或其他來源,則所述系統(tǒng)或設備可以在數據流中創(chuàng)建復制令牌。否則,所述系統(tǒng)或設備可以在數據流中創(chuàng)建文字令牌。例如,在所述數據流中,所述標簽(“nort”@9)的符號或字符可被替換為復制令牌(copy@0),以便指示應該為位置9從位置0中復制4個文字字符。記號(copy@0)是一個說明性示例,也可以表達為“從9個符號前復制4個符號”、“復制delta 9”等等。所述標簽(“orth”@10)的符號或字符可以被替換為復制令牌(copy@1),“從9個符號前復制4個符號”、“復制delta9”等等。所述過程可以轉換初始輸入數據流以便生成復制令牌和文字令牌的中間數據流,每個都與輸入數據流中他們的原始位置相關聯。
處理器可以將每個標簽和預定數量(例如,3個正向和3個反向,但可以修改和定制)的鄰近或相鄰標簽進行比較以標識冗余標簽。對于每個冗余標簽,k個符號的窗口等于另一標簽的k個符號的窗口。可以利用小于窗口的若干令牌對冗余標簽進行標識。例如,k可以為7,可以由6個重疊符號來標識冗余標簽。用于標識冗余標簽的通用符號的數量可以少于窗口中符號的數量。針對每個冗余標簽,所述過程可以涉及生成歷史搜索輸出數據流的復制令牌中的一個復制令牌,并為指向冗余標簽的復制令牌的復制參考指針選擇與其他標簽的標簽位置相對應的存儲位置。冗余標簽可以被標識為與另一標簽全部相等的多個符號。所述過程通過將冗余標簽的k個符號的窗口替換為復制參考指針來更新每個冗余標簽。
在步驟408,所述系統(tǒng)或設備可以通過令牌在輸入數據流(例如,存儲在標簽)中的原始位置對所產生的令牌進行排序以生成歷史搜索輸出數據流(例如,中間輸出流)。這可以是中間數據結構,該中間數據結構可以作為輸入提供給編碼器以供進一步壓縮處理。所述過程可以涉及通過標簽位置對標簽,包括冗余標簽,進行排序以生成文字令牌和復制令牌的輸出數據流,所述復制令牌與輸出數據流中的標簽位置處的冗余標簽相對應。
例如,圖2所示的輸入序列“North by Northwest”可以通過標簽和排序進行并行處理以生成(中間)歷史搜索輸出數據流:
文字N
文字o
文字r
文字t
文字h
文字SPACE
文字b
文字y
文字SPACE
從(delta)9個符號前復制4個符號。
從(delta)9個符號前復制4個符號。
文字r
文字t
文字h
文字w
文字e
文字s
文字t
所述過程可以涉及連接接收設備以輸出歷史搜索輸出流用于輸入數據流的壓縮。
所述過程可以涉及通過消除一部分復制令牌和一部分文字令牌將歷史搜索輸出數據流的文字令牌和復制令牌編碼成壓縮輸出流,其中所述壓縮輸出數據流相對于輸入數據流而被壓縮。所述過程可以將復制令牌合并成較大的復制令牌,將單獨的文字令牌合并成較大的文字令牌。對于復制令牌,若其長度為n,則可以移除接下來的n-1個令牌。這可以由此處描述的編碼器來執(zhí)行。
相應地,在歷史搜索過程之后,所述壓縮設備可以執(zhí)行編碼過程以進一步壓縮由歷史搜索產生的數據。例如,最終的編碼可能不包括第二復制也不包括“rth”的文字。最終的編碼也可以將長度為4的兩個重疊復制進行合并以生成長度為5的一個復制。但這不是壓縮序列的歷史搜索階段的目的。獨立的編碼過程接下來可以將所述歷史搜索的輸出編碼成類似如下所示的流:(Literal length=9)"North by"(Copy delta=-9length=5)(Literal length=4)"west"。特定控制編碼可用于對(Literal length=9)and(Copy delta=-9length=5)等等進行編碼。這些引號可能不包括在內,只是為清楚起見,用于定義文字字符串。此處結合圖7對示例性編碼過程進行了描述。這是一個說明性示例,其他編碼過程可用于對各種實施例中所述的并行歷史搜索的結果進行編碼。
圖9說明了另一個示例性輸入流。仍參考圖4的搜索歷史過程400,在402,所述壓縮設備為輸入數據創(chuàng)建標簽。所述標簽可以并行生成。例如,標簽的每個成分至少有4個字符。序列越長,排序操作可能會越慢。序列越短,就可能會創(chuàng)建太多標簽,從而可能影響壓縮。示例性標簽可以是(west@0)(este@1)(ster@2)等等。
在404,所述壓縮設備利用字符或符號(例如,令牌)的前綴和位置對標簽執(zhí)行并行排序。這會導致帶有所有公共前綴的排序后的結構成為所述數據結構中的相鄰條目。
在406,所述壓縮設備將相鄰和相近條目與匹配的通用符號字符串進行并行比較。例如,所述壓縮設備可以在向前3個條目和向后3個條目中搜索通用字符串。所述壓縮設備將通用文字字符串替換為復制參考。在一些示例性實施例中,所述壓縮設備使用嚴格定向(例如,純后向、純正向)參考以避免復制參考中的循環(huán)指針。
所述壓縮設備對歷史搜索進行編碼或令牌化,以將文字令牌替換為復制令牌。在編碼后的序列的起始處,所述壓縮設備仍然可以生成很多文字令牌,但是隨著內存大小的增加,會生成更多的復制令牌以參考文字令牌。
對于圖9所示的示例性輸入字符串,中間數據流可以是文字和復制令牌的組合:WESTERN_NORTHWARD_BY[copy,8][copy,9][copy,10]TH[copy,0]EST,其中字母符號指示文字令牌。
歷史搜索輸出的中間數據流也可以表示為:(Lit'W')(Lit'E')(Lit'S')(Lit'T')(Lit'E')(Lit'R')(Lit'N')(Lit'')(Lit'N')(Lit'O')(Lit'R')(Lit'T')(Lit'H')(Lit'W')(Lit'A')(Lit'R')(Lit'D')(Lit'')(Lit'B')(Lit'Y')(Copy delta=-13,len=4)(Copy delta=-13,length=4)(Copy delta=-13,len=4)(Copy delta=-13,len=4)(Lit'T')(Lit'H')(Copy delta=-26,length=4)(Lit'E')(Lit'S')(Lit'T')。參考“Copy delta”可以指示相對于中間字符串中的復制令牌的位置所要復制的字符或符號的位置。參考“l(fā)ength”可以指示要復制的字符的數量。
壓縮中的下一階段是進行編碼,其可以進一步縮減中間數據結構以合并復制并移除冗余文字的。
例如,所述編碼器對WESTERN_NORTHWARD_BY_NORTHWEST的輸出可以是:(Literal length=20)"WESTERN_NORTHWARD_BY"(Copy delta=-13,length=5)(Copy delta=-26,length=4)。所述編碼器的另一示例性輸出可以是:(Literal length=20)"WESTERN_NORTHWARD_BY"(Copy delta=-13,length=6)(Literal length=3)"EST"。第一個例子可能壓縮地更好。
根據另一方面,此處描述的實施例可以為壓縮提供硬件實現的基于內存的歷史搜索。為了在壓縮算法中實現高壓縮速度,提高效率的步驟之一就是歷史搜索。歷史數據大小可能會增長至千字節(jié)、百萬字節(jié)、甚至更高。在壓縮過程中,在歷史數據中搜索匹配會是一個很耗時的任務。為了并行化歷史搜索可以使用的示例性硬件平臺可以是FPGA。也可以使用其他諸如GPU或并行CPU的示例性并行處理設備,且所述設備可能適合此過程。
此處描述的示例性實施例可以基于用于壓縮的快速并行歷史搜索的要求。此處描述的示例性實施例可以使用FPGA作為壓縮設備硬件平臺。此處描述的示例性實施例可以考慮硬件約束,包括:FPGA上可用寄存器的數量;路由能力;以及功耗。
硬件實現
在一些方法中,輸入數據的串行性質和很大的歷史可能會導致冗長的歷史匹配/搜索過程。在一些示例中,可以通過對該過程的一個或多個方面的并行化來提高該過程的速度。
歷史匹配過程的硬件實現可適合于執(zhí)行并行任務。
圖5說明了用于歷史匹配的示例性電路500的各方面。所述電路500可通過離散和/或集成組件的任意組合來實現。在一些實施例中,所述電路500能夠在現場可編程門陣列(Field Programmable Gate Array,簡稱FPGA)上或專用集成電路(Application-Specific Integrated Circuit,簡稱ASIC)上實現。
所述電路500能用于對作為文字序列的輸入數據502進行歷史匹配。在圖5中的示例性電路500中,文字長度為32字節(jié)。然而,在其他實施例中,文字可以是任意長度的數據流的部分,例如,1B、2B、4B、8B、16B、64B、128B、256B等等。在一些示例中,文字長度可以基于硬件要求或限制(例如,FPGA數據總線大小限制),或基于歷史匹配最小標簽大小。
所述電路500可包括第一存儲器504,包括適合存儲輸入數據文字的多個存儲位置。在一些實施例中,第一存儲器可以由一個或多個存儲單元構成。在其他實施例中,第一存儲器可以為單獨的較大的內存單元。例如,圖5中示例性電路500中的第一存儲器504包括16個32B的存儲位置。在一些示例中,這些存儲位置可以分布在多個寄存器或者分散的內存設備中。在另一示例中,這些存儲位置可以是諸如RAM(隨機存取存儲器)模塊的單獨內存設備的一部分。
具有N個存儲位置的第一存儲器504可用于存儲來自輸入數據序列的N個最近引入的文字。在一些實施例中,第一存儲器504可以是移位存儲器或移位寄存器。在一些此類實施例中,最近引入的文字可以存儲在第一內存位置(例如,圖5中存儲l15的內存位置),而第一存儲器中的其他所有文字移位到右邊的內存位置。隨著新文字的引入,第一存儲器504中最先的文字(即圖5中存儲I0的內存位置)被覆蓋,或者不然就是從第一存儲器中被清除。在其他實施例中,移位的順序可以是從左到右,或者按照其他如先入先出類型的順序。
在另一實施例中,第一存儲器504可用于通過用最近引入的文字覆蓋第一存儲器中最早的文字來存儲這N個最近引入的文字。例如,諸如指針、計數器、鏈表或其他元件的選擇器或者過程能夠提供隨每個文字的引入而變化并且在各個內存位置之間循環(huán)的地址或其他存儲位置標識。例如,圖5中的示例性電路可包括4位計數器作為第一存儲器的選擇器。
在一個說明性示例中,序列中的第一文字可以存儲在I15,第二文字在I14,第三文字在I13,等等,第16文字存儲在I0。然后第17文字會通過覆蓋序列中第一文字而存儲在I15。
第一存儲器504可以是寄存器陣列、環(huán)形緩存等,或者是其他任意在考慮到相同時鐘周期內待讀取的所有N個存儲位置時能夠允許存儲最近引入的文字的數據存儲結構。對于一些第一存儲器中的文字被移位的實施例,第一存儲器504可以是任意能夠允許在相同時鐘周期內讀取并寫入所有N個存儲位置的數據存儲結構。
在一些實施例中,第一存儲器504可以是雙端口或二端口存儲器陣列,使得能夠在相同時鐘周期內對第一存儲器504的每個存儲位置進行讀取和寫入。在一些示例中,這樣可以在讀取時考慮到寫入最近引入的文字的存儲器,以便提供數據506供比較器508進行比較。在一些實例中,這樣可以提高所述過程的有效流水線。
所述電路500包括用于存儲歷史輸入數據的第二存儲器510陣列。圖5中的示例性電路500包括一個64個第二存儲器的陣列,其中每個存儲器有16個存儲位置。在其他示例中,可以使用任意M數量的第二存儲器。在一些實施例中,第二存儲器的數量可以基于硬件要求,可用性或限制(例如,FPGA最大塊RAM大小),或者基于有用歷史匹配大小。
在一些實施例中,每個第二存儲器中的存儲位置的數量與第一存儲器504中的存儲位置的數量相對應。
所述第二存儲器510陣列定義了一組用于存儲輸入數據502的歷史的存儲位置。在一些實施例中,該組存儲位置可以在邏輯上劃分成行,每一行包括一個來自各個第二存儲器的存儲位置。例如,行0包括Mem 0中的存儲位置I0、Mem 1中的存儲位置I1、Mem 2中的存儲位置I2、……,以及Mem 63中的存儲位置I63。
在一些實施例中,第二存儲器510可用于存儲NxM個最近引入文字。例如,諸如指針、計數器、鏈表或其他元件的選擇器或者過程能夠提供隨每個文字的引入而變化并且在每個內存位置之間循環(huán)的地址或其他存儲位置標識。例如,在圖5中,10位計數器能夠用作內存選擇器,其中計數器的低6位能夠識別引入文字被寫入了64個第二存儲器中的哪一個,計數器的上4位能夠在那個第二存儲器中識別內存位置。
在一些實施例中,所述選擇器可以以任意順序在內存位置之間循環(huán),其中M個連續(xù)引入文字被各自存儲到所述陣列中不同的第二存儲器中。
在一些實施例中,所述第二存儲器510可以是雙端口或二端口存儲器陣列,使得他們能夠在相同時鐘周期內進行讀取和寫入。在一些示例中,這樣可以在讀取時考慮到寫入最近引入的文字的存儲器,以便提供數據供比較器508進行比較。在一些實例中,這樣可以提高所述過程的有效流水線。
在一些實施例中,所述電路500可能包括用于標識和第一存儲器中的文字進行比較的第二存儲器陣列中內存位置的選擇行的行選擇器。例如,諸如指針、計數器、鏈表或其他元件的選擇器或者過程能夠提供隨每個文字的引入而變化并且在每行之間循環(huán)的地址或其他行標識。例如,在圖5中,4位計數器能夠識別在當前時鐘周期和/或在當前文字被引入并存儲到存儲器中時使用了16行中的哪一行。
在實施例中,所述電路500在FPGA上實現,FPGA的規(guī)格會限制對第一和/或第二存儲器的選擇。例如,不是所有在FPGA上的寄存器都可用作第二存儲器以將歷史存儲在FPGA上。例如,如果有用歷史大小是32KB,則配置會規(guī)定需要用32KB,即256Kb,的寄存器將歷史存儲在FPGA上。這種資源量可能不存在或者對于歷史匹配設備不可用。即使所需的寄存器的數量可用于將歷史存儲在FPGA上,路由也可能成問題。
根據此處描述的實施例,電路和設備可以將歷史存儲在“片上存儲器”上或者作為第二存儲器的BRAM(Block-RAM)上。在一些示例中,這樣可以簡化或有助于組織路由和/或減少寄存器的所需數量和使用。
所述電路500包括多個比較器508,用于對來自第一存儲器504中每個存儲位置的文字和存儲在第二存儲器510的選擇行中的數據進行比較。在一些實施例中,比較器用于對文字和第二存儲器選擇行中的歷史數據的一串數據窗口進行比較。在一些實施例中,數據窗口的數量可以基于在壓縮過程中用于對符號/字符進行編碼的比特數。在一些實施例中,每個數據窗口可以代表在不同數量的符號大小的偏置處找到的字量部分的歷史數據。在其他實施例中,數據窗口可以基于輸入總線寬度或者硬件中的可用資源。
在一個基本示例中,第一存儲器的第一內存位置中的文字長度為一個字節(jié),其取值為0xFF。第二存儲器是一個具有3個存儲器的陣列,選擇行中的存儲位置的取值有0x11、0x22、0x33。如果一個符號是4比特,則所述電路會有足夠的比較器對0xFF和以4比特增量移位的0x112233的數據窗口進行比較。換言之,比較器可用于進行至少五次比較:0xFF和0x11、0xFF和0x12、0xFF和0x22、0xFF和0x23、以及0xFF和0x33。
所述電路也可以具有比較器用以對第一存儲器的其他內存位置中的數據和來自第二存儲器的選擇行的數據進行比較。例如,如果第一存儲器的下一個內存位置包含取值0xEE,則有些比較器會用于比較:0xEF和0x11、0xEF和0x12、0xEF和0x22、0xEF和0x23、以及0xEF和0x33(針對兩個第一內存位置之間的重疊數據窗口);以及0xEE和0x11、0xEE和0x12、0xEE和0x22、0xEE和0x23、以及0xEE和0x33。
比較器可用于對來自所有第一內存位置的數據窗口和第二存儲器的選擇行中的所有數據的數據窗口進行比較。
在一些實施例中,所述電路可以包括存儲單元,以存儲來自第一存儲器中先前數據的數據和/或來自先前選擇行中的數據,以便捕獲跨多行或多第一存儲器文字的任意歷史匹配。在一些實施例中,存儲單元可以是符號/字符大小。
例如,基于上述示例,如果先前選擇行的結尾是0x56(即歷史數據包括…0x56112233…),則所述電路可具有一個存儲取值0x6的存儲單元。除了上述比較之外,比較器還可用于將0x61和第一存儲器的數據(0xFF、0xFE、0xEE等等)進行比較。在一些示例中,對與先前數據行重疊的數據窗口所做的處理同樣可以應用于清除第一存儲器數據的數據窗口。
在一些實施例中,比較器用于在當前對第一存儲器的數據和選擇行中的數據進行所有的數據比較。
比較器可以是任意用于確定兩個文字是否具有相同取值的比較器電路或設備。在一些實施例中,比較器可以是邏輯門、FPGA邏輯塊、查找表、或其他任意合適的比較器電路。
在一些實施例中,電路500可以包括用于存儲比較器的輸出的一個或多個存儲設備。
在一些實施例中,可以整理和/或提供代表歷史匹配結果的比較器輸出給編碼器或其他設備或過程以繼續(xù)對輸入數據的壓縮。
圖5的說明性示例提供了一種歷史匹配網絡,在16個時鐘周期內對16個輸入和存儲在內存中的32KB歷史進行比較。
如圖所示,假設n字節(jié)輸入塊流向輸入隊列以便和歷史進行比較。另外,假設隨著時間推移,整個32千字節(jié)的歷史存儲到了64個存儲器中,其中每一個都是深16寬32字節(jié)(64*16*32字節(jié)=32千字節(jié))。該歷史可被認為是保存過去32KB的輸入數據的滑動窗口。
針對該說明性示例,假設每個存儲器都配置為雙端口??煞峙湟粋€端口用于讀取,以便對歷史內容和輸入進行比較。為了對32字節(jié)輸入數據塊和整個歷史進行比較,可能需要1024x32字節(jié)的比較。這意味著在時鐘周期0中,可以從所有64個存儲器中讀取15個位置中的位置0以進行歷史比較。這樣64x32字節(jié)的比較就完成了。由于所述輸入移位到16深度的輸入隊列中,它可以和所有存儲器的位置1處的接下來的64個條目進行比較,然后是所有存儲器的位置2處的64個條目,等等,直到在位置15處進行最后的比較。然后所述輸入數據塊就可以和整個32KB的歷史進行比較。
仍參考圖5,為了并行化對多個流入的輸入塊的歷史搜索,從歷史中讀取的數據可以和整個輸入隊列進行比較。例如,輸入數據部分I0可以在Q=I0處進入。Q15可以和所有存儲器的loc0進行比較。輸入數據部分I1可以在Q=I1,I0處進入。Q15和Q14可以和所有存儲器的loc1進行比較,這可能意味著I1可能不和所有存儲器的第一行進行比較。因此,可以循環(huán)執(zhí)行從存儲器中進行讀取以確保每個輸入塊都和所有的存儲行進行比較。然后輸入數據部分I2在Q=I2,I1,I0處進入。Q15、Q14和Q13可以和所有存儲器的loc2進行比較,等等。然后輸入數據部分I16可以在I16、I15、I14、I13、……、I1處進入。Q15、Q14、……、和Q0可以和所有存儲器的loc0進行比較。關于處理的附加細節(jié)可以如圖6所示,圖6說明了一些實施例提供的歷史搜索的示例性時序圖。
可以分配另一個內存端口將新的輸入塊寫入歷史。新的輸入可以只被寫入一個存儲器的16個位置中的位置j中。該位置j可以通過一個方式來計算:如果新的輸入沒有32KB大小,則將其寫入歷史中的下一個條目位置;或者可以覆蓋歷史中最先的條目。寫入順序可以在圖6所示的圖中找到。
作為一個說明性示例,如果輸入流入一個16深度的輸入隊列,則每個輸入需要16個時鐘周期直到該輸入和整個歷史都進行了比較。此過程可以以流水線格式進行。比較可以重疊,這意味著只需要16個時鐘周期來初始化流水線,之后通過循環(huán)的方式讀取歷史,則在每個時鐘周期中針對未來輸入的比較的結果都已準備就緒。
此處利用一個說明性示例來解釋該技術。該示例可以泛指為任意數量的輸入大小和歷史大小,并考慮FPGA的資源限制或用于實現的其他硬件。
此處描述的實施例可以涉及包含散列表和正向復制的GPU并行硬件。在選擇用于實現的特定硬件時要考慮硬件限制。例如,對GPU上計算單元之間的通信和同步進行管理以便創(chuàng)建輸出可能是很困難的。
此處描述的實施例可以涉及可跨不同硬件平臺及跨不同供應商硬件(例如,FPGA供應商)進行遷移的代碼實現。此處描述的實施例可以提供涉及FPGA、CPU、和GPU/加速處理器(accelerated processing unit,簡稱APU)實現的異構實現。
在另一方面,此處描述的實施例可以給APU實現提供一種GPU和CPU的并行性合并的異構方法。本實施例可能涉及包括散列表創(chuàng)建(GPU)、并行文字和復制創(chuàng)建(GPU)、以及合并輸出編碼(CPU)的APU并行處理。在選擇特定硬件實現時要考慮硬件限制。例如,GPU上可能沒有足夠的計算單元去實現所述處理。
在更進一步的方面,此處描述的實施例可以給另一APU實現提供一種GPU和CPU的并行性合并的異構方法。本實施例可能涉及包括全局散列表創(chuàng)建(GPU)、并行文字和復制創(chuàng)建(GPU)、以及合并輸出編碼(CPU)的APU并行處理。在選擇特定硬件實現時要考慮硬件限制。例如,全局存儲器可能涉及執(zhí)行內核。
編碼器
在另一方面,此處描述的實施例可以提供收縮的基于字典的壓縮編碼器,例如,用于執(zhí)行編碼以便將一系列令牌轉換為壓縮輸出流的硬件設備。一種示例性應用可以是動態(tài)網絡壓縮。在執(zhí)行歷史搜索之后,所述壓縮設備可以對數據流進行編碼以供進一步壓縮。這可能涉及合并復制令牌的復制以及進一步移除冗余文字令牌。為編碼器提供輸入的預處理中間數據流可能來自此處描述的并行歷史搜索或者其他搜索過程。其他示例性歷史搜索包括使用散列表的傳統(tǒng)“snappy”過程、此處描述的FPGA硬件實現等等。此處以不同的歷史搜索過程考慮輸入數據流“BRANDISH_OATBRAN_BRANDY”作為一個說明性示例。在“BRANDY”的位置,歷史搜索可以從“BRANDISH”中找到“BRAND”或者從“OATBRAN”中找到“BRAN”。二者中任一都可能是來自歷史搜索的正確輸出。不同的搜索可以按優(yōu)先級排序。將該歷史搜索的輸出提供給編碼器以供進一步處理。
通常,編碼器可尋找相鄰復制令牌,其中字符的第一長度或者復制參考的delta(例如,從9個符號前復制4個符號)大于或等于下一個delta。所述編碼器可選擇第一復制令牌,其次考慮相鄰的復制令牌。所述編碼器可以開始增量刪除復制令牌并擴展在第一復制令牌中復制的字符的數量。
如圖2所示,中間數據流可以是文字和復制令牌的組合:NORTH_BY_[copy,0][copy,1]RTHWEST。所述編碼器生成的輸出如圖2所示,所述輸出將兩個各自具有4個符號的復制令牌:[copy,0]for“nort”和[copy,1]for“orth”合并成一個具有5個符號的復制令牌“north”。
如圖9所示,中間數據流可以是文字和復制令牌的組合:WESTERN_NORTHWARD_BY[copy,8][copy,9][copy,10]TH[copy,0]EST。復制令牌參考最初可以參考4個字符,但是在編碼后,可以參考6個字符并移除2個復制令牌。在此示例中,編碼器可以將最初單獨的復制令牌“nort”、“orth”、和“rthw”合并成一個具有較大組合的符號或字符的復制令牌“northw”。
如這些示例所示,在移除相鄰的復制令牌以提供進一步壓縮時,該編碼過程擴大了復制令牌中符號的數量。
例如,編碼器的一個任務可以包括將相鄰文字合并成較大的文字。歷史搜索可指示有(Lit'N')(Lit'O')(Lit"R')(Lit'T')(Lit'H')并將其轉變成(Lit length=5)"North"。編碼器的另一個任務可以包括將相鄰復制合并為重疊來源。例如,(Copy delta=-4len=4)(Copy delta=-4len=4)可以轉變?yōu)?Copy delta=-4len=5),然后從流中移除接下來的復制。編碼器的再一個任務可以包括移除被復制“覆蓋”的文字。來自歷史流的輸出流“AAAAAA”可以是(Lit'A')(Copy delta=-1length=4)(Copy delta=-1length=4)(Lit'A')(Lit'A')(Lit'A'),編碼器會將其轉換為(Lit length=1)'A'(Copy delta=-1length=5)。需要注意的是,末端文字已被所述復制“覆蓋”。
在刪除相鄰復制參考時,所述編碼器可以執(zhí)行貪婪算法過程,此過程可以嘗試獲取最長的復制參考長度。這樣并不總是可以提供最佳壓縮,但是可以提高壓縮速度。例如,一些編碼操作可以選擇重復文字的最佳組合。例如,參考圖9中的示例,其他過程可能更依靠移除盡可能多的重復并標識“north”和“west”而不是使得復制令牌“northw”變得更長。
所述編碼處理也可以減小窗口大小以便創(chuàng)建附加復制令牌并移除冗余文字。例如,文字令牌“est”可以通過減小窗口大小替換為復制令牌。
所述編碼器可以利用掃描操作(也可稱為前綴總和)的并行處理來實現。所述掃描是并行的且用于根據此處描述的一些實施例的壓縮過程。例如,所述編碼器可以對此處描述的并行歷史搜索或其他實施例中的其他歷史搜索技術生成的中間數據執(zhí)行掃描過程。
如上所述,壓縮可以將符號序列作為輸入,并嘗試生成較短的序列作為輸出。例如,基于字典的壓縮方案可以在輸入中查找重復的子字符串并對后續(xù)出現進行編碼作為指向早期出現或者后期出現的復制參考指針。
此處描述的實施例可以提供一種機制以將符號序列轉換成一系列令牌。每個符號都可以是文字令牌(例如,不是輸入流中之前/之后的位置的參考)或者來自歷史中的復制令牌之一,復制令牌規(guī)定了所述流中的位置和被復制字符的數量。復制令牌可以復制不同數量的字符,所述編碼器會對來自歷史搜索輸出的復制令牌進行合并以提供壓縮輸出數據。
此處描述的實施例可以使用數據并行壓縮機制。輸入數據流可能是按順序進行壓縮,這樣會使編碼過程成為瓶頸。在一些示例中,歷史搜索也是并行的,則順序編碼處理會丟失歷史搜索的并行化處理的益處。相應地,此處描述的實施例可以涉及并行執(zhí)行編碼過程的機制。
此處描述的實施例可以為編碼設備806(如圖8所示)提供一種電路以便對輸入數據流進行編碼以生成壓縮輸出流。
所述電路可以有輸入單元,用以接收一系列令牌的傳入的輸入數據流。每個令牌定義輸入數據流中的位置、長度和類型。所述類型可以是文字令牌或復制令牌。每個文字令牌定義文字符號,每個復制令牌具有與所述輸入數據流中一系列令牌中的另一令牌的位置的偏置。內存設備將所述輸入數據流的所述一系列令牌存儲在存儲位置。
在參考所述輸入數據流的一系列令牌中各自令牌的位置之前的其他令牌時,并行處理器利用對內存設備中的所述輸入數據流的并行掃描對所述令牌進行編碼以同時處理所述輸入數據流中的各個令牌。所述并行處理器通過基于所述并行掃描的結果消除所述輸入數據流中的一部分令牌來生成所述壓縮輸出流。
多個比較器對來自并行掃描的存儲器中的存儲位置的一系列令牌進行比較。此處示例結合FPGA內存搜索對比較器進行了描述。內存選擇器為每個復制令牌選擇對應于偏置的位置的存儲位置。此處示例結合FPGA內存搜索對比較器和選擇器進行了描述。所述比較器和選擇器可用于執(zhí)行并行掃描操作。
輸出單元用于連接接收設備以輸出所述壓縮輸出流。壓縮設備可以接收所述電路的輸出,要求提供一個用于傳輸所述壓縮輸出流的網絡接口。一種壓縮系統(tǒng)可以接收所述電路的輸出,以提供一種用于將所述壓縮輸出流存儲在物理非瞬時性計算機可讀介質上的存儲控制器。所述電路可實現于圖形處理器、并行中央處理器或者現場可編程門陣列之上。所述并行處理器可以執(zhí)行并行歷史搜索以生成所述輸入數據流的令牌。所述并行處理器可以利用并行排序來執(zhí)行并行歷史搜索以生成所述輸入數據流的令牌。所述并行處理器可以執(zhí)行順序歷史搜索以生成所述輸入數據流的令牌。相應地,所述用于編碼的并行處理器可以利用不同類型的歷史搜索進行工作以接收輸入令牌。
在輸入令牌和線程一樣多的情況下,可以執(zhí)行編碼過程。即,每個線程負責發(fā)送自身的令牌所生成的字節(jié)。因為每個線程需要寫入的位置取決于所述輸入流中在其之前的所有線程寫入的字節(jié)數量的集合,所以這可能很具有挑戰(zhàn)性。線程之間可能需要一些通信,但是可能要保持在最低限度以有效利用通信資源。
作為說明示例性概述,根據此處描述的實施例的系統(tǒng)、方法和設備可以利用掃描技術進行并行處理。
例如,并行掃描技術可以是前綴總和的泛化。所述技術可以涉及使用關聯運算符和序列exi、其中i∈{1,2,….,n}),并計算:
例如,添加了運算符的序列1;2;3;4;5可以生成:1;3;6;10;15。也就是,第j項是輸入序列的第一j項的總和(使用提供的運算符)。
有一種變形稱為右向掃描或正向掃描,是從序列的結尾計算總和。為了區(qū)別,標準技術可稱為左向掃描或反向掃描。該技術可以并行執(zhí)行。對于具有m個獨立處理器的長度為n的序列,可以在階段對所述技術進行計算。
所述并行掃描技術運作可以如下:可以在log2(n)階段定義輸入數據。在每個階段j,所述技術可以計算yj;i for i in 0;1;2;:::;n-1??梢允褂萌缦露xy0,i=xi for i∈{1,2,...,n}。針對階段k∈{1,2,....,[log2(n)]},也可以使用如下定義Δ=2k-1。針對正向計算,可以使用如下定義針對反向計算,可以使用如下定義
在另一方面,此處描述的實施例提供一種利用并行過程進行壓縮編碼的過程。圖7說明了一些實施例提供的一種用于數據壓縮的示例性方法700。所述方法700可以由電路、編碼器、壓縮設備、壓縮系統(tǒng)等等執(zhí)行。
在一些示例性實施例中,所述編碼過程可結合圖4所描述的并行歷史搜索的輸出進行編碼。如上所述,圖7的獨立編碼過程接下來可以對圖2的示例性輸入流的歷史搜索的輸出進行編碼以生成以下輸出流:(Literal length=9)"North by"(Copy delta=-9length=5)(Literal length=4)"west"。特定控制代碼可用于對(Literal length=9)and(Copy delta=-9length=5)等等進行編碼。這些引號可不包括在內,僅用于說明。
每個令牌可以有長度len(τ)和是文字值或復制參考指針的類型type(τ),是文字值或復制參考。復制令牌也可以定義偏置offset(τ),其可以是在復制后面的字符數量。文字令牌可以定義符號sym(τ)。相應地,所述輸入數據流可以是一系列令牌,其中,每個令牌定義輸入數據流中的位置、長度和類型,所述類型是文字令牌或復制令牌。每個文字令牌可以定義文字符號,每個復制令牌可以有與所述輸入數據流中一系列令牌中的另一令牌的位置的偏置。
在參考所述輸入數據流的一系列令牌中各自令牌的位置之前的其他令牌時,所述過程涉及利用對內存設備中的所述輸入數據流的并行掃描對所述令牌進行編碼以同時處理所述輸入數據流中的各個令牌。所述過程涉及通過基于所述并行掃描的結果消除所述輸入數據流中的一部分令牌來生成壓縮輸出流。所述并行掃描的輸出可以是更新的令牌(例如,更新的復制令牌或文字令牌),連同用于標識前導令牌、非前導令牌、令牌的大小數據和令牌的位置數據以指示所述壓縮輸出流的生成的數據結構。所述壓縮輸出流的生成涉及將令牌寫到所述位置,其中,所述前導令牌、非前導令牌和大小數據指示哪些令牌被寫出。例如,所有前導令牌都被寫出但是大小為0的復制令牌沒有被寫出。所述過程涉及使作為非瞬時性計算機可讀介質或共享內存或傳輸的編碼后的壓縮輸出數據可用。
所述過程涉及采用反向計算、清除計算、正向計算的并行掃描對所述令牌進行編碼以同時處理所述輸入數據流的令牌,以便更新用于生成所述壓縮輸出流的所述輸入數據流。
在步驟702,所述壓縮設備可以執(zhí)行后向計算。
在第一次計算中,文字和復制都存在。文字令牌長度可以為1,復制令牌可以更長。此處的示例為中間數據流提供4個字符的初始復制令牌。對于此次操作,候選令牌可以定義為γ,中心點可以為π。兩個令牌之間的距離為deltaΔ。當不滿足該條件時,所述輸出可以和所述中心點完全相同。
在步驟704,所述壓縮設備可以執(zhí)行清除計算。例如,所述系統(tǒng)或設備可以利用如下所述執(zhí)行后向掃描技術的兩次計算:
在步驟706,所述壓縮設備可以執(zhí)行正向計算。在第三次計算,任一被復制覆蓋的令牌也可以是一個復制。具有相同偏置的復制序列的前導的長度至少可以為4。此次計算的目的可以是將具有相同偏置的重疊復制進行聚合或合并,此外,將緊接著的文字進行合并以生成較長的文字序列。這可以是正向掃描,因為所述技術可以將信息從所述流中的后期條目傳播到早期條目。
所述運算符可以是:
所述過程可以涉及使用前導計算和布局計算標識所述壓縮輸出流中的非前導令牌、前導令牌、令牌的大小、以及令牌的位置以便在生成所述壓縮輸出流時消除所述輸入數據流的一部分令牌。
在步驟708,所述壓縮設備可以執(zhí)行前導計算。初始令牌可以為前導。緊跟在復制之前或之后的文字可以為前導。在文字之前或之后的復制可以為前導。在具有不同偏置的復制之前或之后的復制可以為前導。針對該說明性示例,其他令牌都不是前導。這可以通過觀察令牌和其獨立于所有其他前導校驗的前一個令牌來實現。
在步驟710,所述設備或系統(tǒng)可以執(zhí)行布局計算。作為一個說明性示例,假設一個函數σ用于在恒定時間內將每個令牌映射到編碼大小。在一些示例中,所有非前導復制的大小可以固定為0,所有非前導文字的大小為1,則所述大小的前綴總和可以在令牌被編碼后提供每個令牌的終端。從該位置減去所述大小得到起始位置。每個令牌都可單獨編碼。所述前綴總和可以是后向計算。
最后一次計算可以清除沖突復制以進行前導選擇。正向計算可以將復制合并成較大的復制,將文字合并成文字鏈。所述清除計算可以移除某些短于4個符號長度的短復制,并會導致在比文字可能占用的字節(jié)更多的字節(jié)內進行編碼。所述布局計算可以是所述編碼器。每次計算可以是數據并行的并且都能很好地適合并行架構。
圖10和圖11示出了圖7的編碼過程不同階段的示例。圖10涉及輸入數據流“aaaaabaaaaaa”。圖11涉及輸入數據流“North by Northwest”。所述輸入數據流顯示為令牌,包括文字令牌和復制令牌。文字令牌有文字符號和以格式‘literal symbol’:length所顯示的長度。復制令牌有帶有偏置值和符號長度的復制參考指針,以便按照格式Copy(offset,length)所示進行復制。不同列示出了掃描計算或階段的示例性結果。
并行處理器采用反向計算、清除計算、正向計算的并行掃描以同時處理所述輸入數據流的令牌,以便更新用于生成壓縮輸出流的所述輸入數據流。BW指的是后向計算,CLEAN指的是清除計算,FW指的是正向計算。每個計算都作為具有不同掃描參數的并行掃描進行實現。所述計算更新所述輸入數據流的令牌。
名稱為“BW-1”的列指的是檢查一個位置的后向計算,“BW-2”指的是檢查兩個位置的后向計算,等等。表格強調邊緣情況以強調階段或計算的操作。在圖10所示的第一個示例中,所述突出強調示出了清楚計算的目的。在后向計算的最后有額外的復制令牌,可能會導致小于長度4的復制。
以圖11的輸入數據流“north by northwest”為例,在正向計算中,針對文字,所述編碼器使用長度來表示有多少個文字“緊跟”當前文字。為獲知大小和放進頭部中的內容,所述編碼器使用預定義的長度。所述令牌N:9會使示例顯然突出,其中需要正向計算的所有l(wèi)og(N)階段以得到最后編碼。在圖11的示例性輸入數據流“north by northwest”中,復制令牌很有趣,因為編碼過程需要幾個階段實現穩(wěn)定,但是編碼器到最后才穩(wěn)定。
在生成所述壓縮輸出流時,所述并行處理器采用前導計算和布局計算消除所述輸入數據流的一部分令牌。列“前導”示出了前導計算的示例性結果。列“大小”和“位置”示出了布局計算的示例性結果,這樣就生成了大小和位置數據。
所處并行處理器利用后向計算(稱為BW)更新傳入的輸入數據流以便將文字令牌替換為附加復制令牌,所述被替換的文字令牌是前導復制令牌的末端。將所述附加復制令牌從所述壓縮輸出數據流中消除,所述前導復制令牌覆蓋了所述被替換的文字令牌。
所述并行處理器利用清除計算(稱為CLEAN)更新所述傳入的輸入數據流,以將長度小于4的復制令牌替換為文字令牌。所述并行處理器利用正向計算更新所述傳入的輸入數據流,以合并具有相同偏置的連續(xù)重疊復制令牌和相連的文字符號。
所述并行處理器利用前導計算將每個令牌標記為非前導令牌或前導令牌中的任一個,所述前導令牌為以下令牌中的至少一個:所述輸入數據流中的初始令牌、所述輸入數據流中在復制令牌之前或之后的文字令牌、所述輸入數據流中在文字令牌之前或之后的復制令牌,以及所述輸入數據流中在具有不同偏置的復制令牌之前或之后的復制令牌。
所述并行處理器利用布局計算生成所述令牌的大小,通過將所有非前導令牌的大小固定為0并將所有前導令牌的大小固定為1,并確定所述壓縮輸出數據流中令牌的位置,每個位置由令牌的末端和起點定義,所述末端為所有前述的令牌的大小的前綴總和,所述起點為所述位置和所述前綴總和之差。
通過使用令牌的大小將具有非0大小的所有令牌寫出至所述壓縮輸出數據流中所述令牌的位置,所述并行處理器使用所述布局計算的結果生成所述壓縮輸出數據流。前導令牌(和非前導令牌)、大小和位置的結果用于為所處壓縮輸出數據流生成或寫所述令牌。所述前導令牌和非前導令牌可用于生成大小數據。所有大小為0的令牌沒有被寫出到所述壓縮輸出數據流,這會導致令牌的初始輸入數據流的壓縮。所述布局指示在所述壓縮輸出數據流中令牌應該寫出的位置。
所述并行處理器通過將復制令牌合并成較大的復制令牌,通過將單獨的文字令牌合并成較大的文字令牌,并且,針對長度為n的復制令牌,通過消除所述輸入數據流中的接下來的n-1個令牌來消除所述輸入數據流的一部分令牌。
所述處理器通過增加與消除的部分復制令牌相鄰的復制令牌所要復制的符號的數量來消除一部分復制令牌。
所述編碼器通過將每個長度小于預定義門限的復制令牌替換為文字令牌來消除一部分復制令牌。
相應地,此處描述的實施例可以提供用于并行化順序過程的系統(tǒng)、設備和方法。直觀地,每個編碼的位置可取決于所有之前的令牌的聚合編碼。此處描述的實施例可以提供對輸入流中的令牌進行并行編碼的系統(tǒng)、設備和方法。
所述計算可稱為并行掃描的階段。所述掃描(正向、方向、清除)將令牌作為輸入并輸出具有不同取值的一組令牌。所述前導計算標識哪些令牌在最后輸出中需要頭部。令牌頭部可指示前導或非前導(通過對每個令牌和前一個令牌進行比較)。所述布局計算確定可以消除哪些令牌。例如,前導令牌提供信息以按大小排列所述令牌,前綴總和指示將令牌寫在前綴總和輸出的位置的位置信息。按大小排列指示有些令牌占據0比特,且這些令牌會從所述壓縮輸出數據流中消除。所述前導計算和布局計算用以消除輸入數據流的一系列令牌的一部分復制令牌,編碼,壓縮輸出數據流是相對于輸入數據流被壓縮。所述并行掃描利用稍有不同的參數重復調用不同的計算以生成用于寫所述壓縮輸出數據流的數據。
所述編碼器通過增加與消除的部分復制令牌相鄰的復制令牌所要復制的符號的數量去合并這部分復制令牌。所述編碼器將連續(xù)重疊的復制合并成較長的復制。
在另一方面,此處描述的實施例可以提供實現此處描述的數據轉換技術的壓縮引擎設備。圖8示出了用于將未壓縮輸入數據802轉換為壓縮輸出數據810的示例性壓縮引擎設備800(通常稱為壓縮設備)。所述示例性壓縮引擎設備可以包括搜索處理器804(例如,用于實現基于字典的歷史搜索)、編碼器806和輸出生成器808。
所述壓縮引擎設備800可以利用一些示例中的集成硬件設備或者由具有直接或網絡連接的分布式設備來實現。
作為一個說明性示例,所述壓縮引擎設備800可以利用向量機執(zhí)行并行數據處理。在階段1,所述壓縮設備800可以通過并行數據處理技術使用處理器804來進行基于排序和合并的歷史掃描。在階段2,所述壓縮設備800可以使用編碼器806.作為一個示例,所述壓縮引擎設備可以使用一個邏輯處理器進行對每個字節(jié)的輸入。對于該說明性示例,所述壓縮設備800可以執(zhí)行O(logn)計算,其中n是所述輸入的大小。每個處理器每次計算可以使用一個常數大小輸入。所述收縮通信和同步可以有效利用硬件資源。
此處描述的實施例可以使用此處描述的并行數據處理技術。例如,所述編碼可以高效地轉化為FPGA??梢詾椴煌6攘鲗⑺鲚斎雱澐譃樾畔K。更細粒度的流可能會影響壓縮率。歷史掃描實現可能需要考慮硬件??梢允褂肅PU/GPU架構來實施排序。FPGA架構和線速可能需要大量的多路復用器和優(yōu)先編碼器。這可能是資源密集型。
修改的實施例可以使用布隆過濾器、線性掃描等等。修改的實施例可以將歷史大小視為一個可以隨著FPGA的增大而增大的參數。在一些示例中,根據FPGA的大小,所述歷史大小可能會受到限制。其他參數可以包括輸入信息塊大小,等等。此處描述的實施例可以包括跨窗口的復制或文字的傳播以解除更細粒度流的限制。此處描述的實施例可以提供沒有或有很少流水線泡沫的高效硬件架構。此處描述的實施例可以解釋數據流。此處描述的實施例可以提供用于硬件實現的接口。此處描述的實施例可以包括可重構的組件。此處描述的實施例可以為固態(tài)硬盤、硬盤驅動器、內存、網絡等等實現徑內壓縮。此處描述的實施例可以實現比特流壓縮以加快FPGA部分重新配置。此處描述的實施例可以實現高速壓縮。
本實施例可以提供以軟件產品形式體現的技術方案。所述軟件產品可以存儲在非易失性或非臨時性存儲介質中、其可以是只讀光盤(Compact Disk Read-Only Memory,簡稱CD-ROM)、U盤或可移動硬盤。所述軟件產品可以包括許多指令,旨在使計算機設備(個人電腦、服務器或網絡設備)執(zhí)行本實施例所提供的方法。
程序代碼應用于輸入數據以執(zhí)行此處描述的功能并生成輸出信息。所述輸出信息應用于一個或多個輸出設備。在一些實施例中,通信接口可以是網絡通信接口。在將所述發(fā)明的元件相結合的實施例中,所述通信接口可以是諸如用于進程間通信的軟件通信接口。在其他實施例中,可能存在實現為硬件、軟件和其組合的通信接口的組合。
每個計算機程序都可以存儲在存儲介質或設備(如ROM、磁盤、光盤)上,可被通用或專用可編程計算機讀取,用于當存儲介質或設備被計算機讀取去執(zhí)行此處描述的流程時配置并操作計算機。本實施例中,也可認為系統(tǒng)被實現為非瞬時性計算機可讀存儲介質,被配置了計算機程序,其中如此配置的存儲介質會引導計算機以特定和預定義的方式進行操作以執(zhí)行此處描述的功能。
此外,所描述的實施例的系統(tǒng)和方法能夠分布在計算機程序產品中,該產品包括承載一個或多個處理器的計算機可用指令的物理非瞬時性計算機可讀介質。所述介質可以以各種形式提供,包括一個或多個磁盤、光盤、磁帶、芯片、磁性和電子存儲介質、易失存儲器、非易失存儲器等等。非瞬時性計算機可讀介質可包括所有計算機可讀介質,除了瞬時性傳播信號之外。所述術語非瞬時性并不是排除諸如主存儲器、易失存儲器、RAM等的計算機可讀介質,其中,在其上存儲的數據可能只是暫時存儲。計算機可用指令也可以以各種形式存在,包括編譯和未編譯的代碼。
可大量參考服務器、服務、接口、門戶、平臺或從硬件設備形成的其他系統(tǒng)。應該認識到的是,此類術語的使用被認為是代表一個或多個設備具有至少一個用于執(zhí)行存儲在計算機可讀有形非瞬時性介質上的軟件指令的處理器。應進一步認識到,所揭示的基于計算機的算法、過程、方法、或其他類型的指令集可以體現為包含存儲引導處理器執(zhí)行所揭示步驟的指令的非瞬時性有形計算機可讀介質的計算機程序產品。
此處描述了各種示例性實施例。雖然每個實施例代表發(fā)明要素的單獨組合,但是所揭示元件的所有可能的組合都被認為是本發(fā)明的主題。因此,如果一個實施例包含要素A、B和C,第二實施例包含要素B和D,則本發(fā)明的主題也被認為包括A、B、C或D的其他剩余的組合,即使沒有明確揭示。
除非上下文另有所指,此處使用的術語“耦合至”意在同時包括直接耦合(此時兩個相互耦合的元件相互接觸)和間接耦合(此時至少有一個附加元件位于兩個元件之間)。因此,術語“耦合至”和“與耦合”是同義的。
此處描述的實施例由物理計算機硬件實施例實現。此處描述的實施例提供有用物理機器,尤其是配置好的計算機硬件布置,例如計算設備、服務器、電子游戲終端、處理器、存儲器、網絡。例如,此處描述的實施例針對計算機裝置和計算機通過電子數據信號的處理和轉換所執(zhí)行的方法。
此處描述的實施例可以涉及尤其用于實現各種動作的計算設備、服務器、接收器、發(fā)送器、處理器、存儲器、顯示器、網絡。此處描述的實施例針對適合于處理和轉換表示各種類型信息的電磁信號的電子機器。此處描述的實施例普遍整體地涉及機器和機器的使用;如沒有計算機硬件、機器、各種硬件組件的使用,則此處描述的實施例沒有意義或專利實用性。
雖然已詳細地描述了本發(fā)明及其優(yōu)點,但是應理解,可以在不脫離如所附權利要求書所界定的本發(fā)明的情況下對本發(fā)明做出各種改變、替代和更改。
此外,本發(fā)明的范圍并不局限于說明書中所述的過程、機器、制造、物質組分、構件、方法和步驟的具體實施例。所屬領域的一般技術人員可從本發(fā)明中輕易地了解,可根據本發(fā)明使用現有的或即將開發(fā)出的,具有與本文所描述的相應實施例實質相同的功能,或能夠取得與所述實施例實質相同的結果的過程、機器、制造、物質組分、構件、方法或步驟。相應地,所附權利要求范圍包括這些流程、機器、制造、物質組分、構件、方法或步驟。