本領(lǐng)域一般涉及對諸如地震數(shù)據(jù)的數(shù)據(jù)進(jìn)行的無損數(shù)據(jù)壓縮。
背景技術(shù):
數(shù)據(jù)壓縮技術(shù)通常用于實現(xiàn)在信號的數(shù)字表示中的降低的比特率,以用于高效處理、傳輸和存儲。在文件的總存儲大小能夠被減小時文件的內(nèi)容被稱為被動壓縮。然而,取決于內(nèi)容,存在對該減小的限制,其對壓縮施加限制。壓縮算法一般搜索內(nèi)容的不同表示,以便減少存儲內(nèi)容所需要的空間。對于無損壓縮的情況,結(jié)果是具有被恢復(fù)到確切原始未壓縮文件的潛力的壓縮文件,或者對于有損壓縮的情況,結(jié)果是原始未壓縮文件的近似或相似版本。用于恢復(fù)原始文件的算法被稱為解壓縮算法并且通常包括壓縮算法的反向步驟。
例如,地震數(shù)據(jù)集的大小由于從更復(fù)雜的地質(zhì)情況提取石油的需求而繼續(xù)增大。因此,在地球物理應(yīng)用中,地震數(shù)據(jù)壓縮已經(jīng)變得重要,以用于對地震數(shù)據(jù)的高效處理、存儲和傳輸。因此,存在對用于壓縮諸如地震數(shù)據(jù)的原數(shù)據(jù)和經(jīng)處理的數(shù)據(jù)兩者的改進(jìn)的技術(shù)的需求。存在對使用關(guān)于數(shù)據(jù)的先驗知識的無損壓縮算法(例如,專用于數(shù)字的壓縮算法)的進(jìn)一步的需求。
技術(shù)實現(xiàn)要素:
本發(fā)明的說明性實施例提供了用于對數(shù)進(jìn)行有理壓縮的方法和裝置,所述數(shù)諸如地震數(shù)據(jù)。在一個示范性實施例中,通過獲得多個數(shù)(例如,整數(shù)和/或浮點數(shù))來對一個或多個數(shù)進(jìn)行壓縮,其中所述多個數(shù)中的每個數(shù)使用零個或更多個位來表示以指示具有所述 給定數(shù)的給定底數(shù)的指數(shù),并且具有表示具有所述給定數(shù)的有效位的數(shù)量的長度;針對所述多個數(shù)中的每個數(shù),計算所述長度和所述長度與所述指數(shù)之間的差,并且在出現(xiàn)所述差時對所述長度的出現(xiàn)進(jìn)行計數(shù);基于在出現(xiàn)所述差時對所述長度的所述出現(xiàn)的所述計數(shù)來生成包括至少一個霍夫曼樹的霍夫曼編碼;生成一個或多個編碼映射,所述一個或多個編碼映射包括將所述差和所述長度中的每一個映射到對應(yīng)霍夫曼前綴碼的數(shù)組;以及使用所述一個或多個編碼映射來對所述多個數(shù)中的至少一個數(shù)進(jìn)行編碼。在整數(shù)的情況下,所述指數(shù)包括零位并且針對浮點數(shù),有效數(shù)字具有長度。
在至少一個示范性實施例中,在出現(xiàn)所述差時對所述長度的所述出現(xiàn)的所述計數(shù)包括遞增與所述差相關(guān)聯(lián)的直方圖組。所述霍夫曼編碼可選地包括針對所述差的直方圖的一個霍夫曼樹,其中每個葉子具有針對所述長度的直方圖的下級霍夫曼樹。
在至少一個示范性實施例中,所述編碼映射通過遍歷多個所述霍夫曼樹內(nèi)的路徑來生成,其中每個路徑是一個前綴碼并且通向存儲所述差和所述長度中的一個或多個的一個葉節(jié)點。
根據(jù)本發(fā)明的一個方面,針對壓縮浮點數(shù),對所述多個浮點數(shù)中的至少一個浮點數(shù)進(jìn)行編碼的所述步驟還包括計算針對所述多個浮點數(shù)中的所述至少一個浮點數(shù)中的每個浮點數(shù)計算所述長度和所述差以及從所述一個或多個編碼映射檢索針對所述差的對應(yīng)霍夫曼前綴碼和針對所述長度的對應(yīng)霍夫曼前綴碼。
根據(jù)本發(fā)明的一個方面,多核計算機(jī)和/或多節(jié)點服務(wù)器被采用并且系統(tǒng)的多個實例并行操作以獨(dú)立地對劃分的輸入的對應(yīng)部分進(jìn)行壓縮。
有利地,本發(fā)明的說明性實施例提供對地震數(shù)據(jù)和其他數(shù)據(jù)的改進(jìn)的無損壓縮和解壓縮。本發(fā)明的這些和其他特征以及優(yōu)點將從附圖和下面的詳細(xì)描述變得更顯而易見。
附圖說明
圖1圖示了根據(jù)示范性IEEE 754浮點標(biāo)準(zhǔn)的示范性單精度浮點數(shù);
圖2圖示了由有理壓縮算法的示范性實施例使用的數(shù)個示范性數(shù)據(jù)結(jié)構(gòu)和算法;
圖3是圖示了根據(jù)本發(fā)明的一個實施例的有理壓縮算法的示范性實施方式的流程圖;
圖4A圖示了由圖3的示范性有理壓縮算法生成的直方圖的示范性直方圖;
圖4B圖示了由圖3的示范性有理壓縮算法生成的示范性霍夫曼森林;
圖5是圖示了根據(jù)本發(fā)明的一個實施例的有理解壓縮算法的示范性實施方式的流程圖;以及
圖6是本發(fā)明的至少一個實施例能夠被實施在其上的示范性計算機(jī)系統(tǒng)的系統(tǒng)圖。
具體實施方式
本文中將參考示范性通信、存儲和處理設(shè)備來描述本發(fā)明的說明性實施例。然而,應(yīng)認(rèn)識到,本發(fā)明不限于與示出的特定說明性配置一起使用。本發(fā)明的方面提供用于對諸如整數(shù)和浮點數(shù)據(jù)的數(shù)進(jìn)行有理壓縮和解壓縮的方法和裝置。
根據(jù)本發(fā)明的一個方面,提供了用于基于數(shù)的有理表示來對整數(shù)和浮點數(shù)進(jìn)行壓縮和解壓縮的算法。在至少一個實施例中,該算法提供索引結(jié)構(gòu)以用于使用數(shù)本身的特性來編碼和解碼,避免對附加的數(shù)據(jù)結(jié)構(gòu)的需要,并且因此改進(jìn)壓縮效率。更具體地,示范性算法將數(shù)轉(zhuǎn)換成其有理表示以從該表示提取可壓縮的模式。有理表示揭示能夠被利用于壓縮的編碼和解碼流程。
所公開的算法特別適合于來源于地震采集或科學(xué)實驗的數(shù)據(jù),因為算法的至少一個實施例專門針對數(shù)的集合。如基于本公開將對于本領(lǐng)域技術(shù)人員而言顯而易見的,盡管本文中使用地震數(shù)據(jù)來描述 示范性實施例,但是本發(fā)明的方面能夠被應(yīng)用到其他形式的數(shù)據(jù)。
根據(jù)本發(fā)明的另一方面,使用并行運(yùn)行在多核計算機(jī)和/或多節(jié)點服務(wù)器上的所公開的算法的多個實例來實現(xiàn)分布式壓縮和解壓縮。示范性算法作用于數(shù)的集合,即,沒有順序的數(shù)的序列,使其可擴(kuò)展用于多個并行運(yùn)行。
地震數(shù)據(jù)
石油和天然氣公司通常在對給定勘探區(qū)進(jìn)行鉆井之前采集并處理來自該區(qū)域的地震數(shù)據(jù)。地震采集包括使用諸如振動器單元、炸藥或氣槍的源來生成聲波,并且然后收集與反射波有關(guān)的數(shù)據(jù)。借助于被稱為地震檢波器(當(dāng)采集發(fā)生在陸上時)或水下檢波器(當(dāng)采集發(fā)生在海上時)的接收器來收集信號。接收器將聲振動轉(zhuǎn)換成一般具有從8到32位的數(shù)個位的數(shù)字樣本流。繼續(xù)以具有恒定持續(xù)時間(通常在2與8毫秒之間)的間隔來收集樣本,并且通常通過許多接收器同時收集數(shù)據(jù)。地震數(shù)據(jù)集能夠具有許多兆兆字節(jié)(terabyte)的原數(shù)據(jù)并且它們的處理在地震處理步驟中的各個點處生成其他附加的數(shù)據(jù)集。
盡管有損壓縮算法能夠達(dá)到高得多的壓縮比的事實,但是在地震處理的各個步驟中無損壓縮是令人期望的。原始數(shù)據(jù)必須以原始精度被保存以便避免丟失相關(guān)信息。具體地,諸如在鹽下區(qū)中的復(fù)雜地質(zhì)情況具有非常低的信噪比,其使得具有高數(shù)據(jù)頻率的保存甚至更重要(在有損壓縮方法中,高頻率通常被衰減,使得能夠獲得更高的壓縮比)。因此,確保采用的壓縮方法是無損的常常是重要的。
地質(zhì)處理工作流程通常與修改原數(shù)據(jù)的各個步驟相對應(yīng),并且在每個步驟處創(chuàng)建新地震數(shù)據(jù)文件。取決于階段和利用的處理技術(shù),產(chǎn)生的文件的大小能夠與原始文件一樣大。發(fā)現(xiàn)減少由這些大的數(shù)據(jù)文件占據(jù)的大小并高效地將其存儲的方式是需要被解決的問題。
因此,對地震數(shù)據(jù)的存儲和傳輸要求無損壓縮。對實現(xiàn)高壓縮比的算法的創(chuàng)建對于節(jié)省存儲和傳輸時間是重要的。
因為地震數(shù)據(jù)文件可以是非常大的,所以對它們進(jìn)行壓縮的時間 可以是非常長的,有時花費(fèi)許多天來獲得好的壓縮比。以這種方式,將用于獲得良好壓縮比的時間減少一定數(shù)量級可以是與工業(yè)非常相關(guān)的。
石油和天然氣公司常常是全球公司并且對地震數(shù)據(jù)的解讀是其中地球物理學(xué)家和地理學(xué)家常常必須跨距離合作的過程。對這些數(shù)據(jù)的高效傳輸對于使該過程有成效是必要的。好的壓縮比對于在傳輸期間節(jié)省時間是重要的,尤其是在有必要利用有限帶寬并且沒有任何信息損失的情況下發(fā)送數(shù)據(jù)時。
在計算機(jī)系統(tǒng)上,數(shù)據(jù)通常是位(二進(jìn)制數(shù))序列,其中,每個位是2為底的數(shù)(即,二進(jìn)制0或二進(jìn)制1)。位序列可以表示例如數(shù)、文本、圖像、聲音或任何種類的信息。信息通過諸如磁帶、硬盤和固態(tài)驅(qū)動器的數(shù)據(jù)存儲設(shè)備的使用保持在計算機(jī)系統(tǒng)上。
在石油和天然氣工業(yè)中,地震數(shù)據(jù)常常通過使用由勘探地球物理學(xué)家協(xié)會(SEG)開發(fā)的用于存儲地震數(shù)據(jù)的若干標(biāo)準(zhǔn)之一而被存儲為地震道。最常用的格式是SEG Y。在最常見類型的SEG Y文件內(nèi),地震道由32位浮點數(shù)的序列表示。為了利用該類型的數(shù)據(jù)在不丟失任何信息的情況下工作,特別注意是必要的。
因此,地震樣本數(shù)據(jù)常常被表示為浮點數(shù)。典型格式是IBM和IEEE 754單精度浮點表示,其指定如何將實數(shù)存儲在32位中。這些表示保留一個位來指示該數(shù)的符號,而其他31位被拆分成以特定底數(shù)的指數(shù)和有效數(shù)字,使得實數(shù)R被計算為:
R=(-1)符號x有效數(shù)字x b指數(shù)
IBM浮點數(shù)格式與IEEE 754格式之間的主要差別是為每個部分保留的位數(shù)和指數(shù)的底數(shù)b。本文提出的示范性算法已經(jīng)針對IEEE 754格式被設(shè)計,因為其常常在現(xiàn)代計算中被采用,但是如對于本領(lǐng)域技術(shù)人員而言將顯而易見的,這些算法能夠被推廣到其他格式。
圖1圖示了根據(jù)IEEE 754浮點標(biāo)準(zhǔn)的示范性單精度浮點數(shù)100。如圖1所示,示范性單精度浮點數(shù)100使用一位用于符號110,八位用于底數(shù)為2的指數(shù)120,以及23位用于歸一化的有效數(shù)字130, 意味著實數(shù)R被計算為:
R=(-1)符號x 1.有效數(shù)字x 2指數(shù)。
當(dāng)整數(shù)類型表示整數(shù)時,浮點數(shù)類型表示具有小數(shù)部分的數(shù)。地震數(shù)據(jù)采集和科學(xué)數(shù)據(jù)勘探通常具有這兩種類型的數(shù)作為它們的核心二進(jìn)制數(shù)據(jù)。附加地,主要來自調(diào)查、仿真和實驗的數(shù)據(jù)消耗大量存儲空間。
在地震數(shù)據(jù)采集或科學(xué)仿真的領(lǐng)域中,無損壓縮的選項可能是更有吸引力的或由于產(chǎn)生數(shù)據(jù)的成本甚至是要求。一個策略是丟棄位序列的意義,即,無論它們是數(shù)還是不是數(shù),并且實現(xiàn)通用無損壓縮算法。在該策略中存在兩個主要缺點。首先,對給定文件進(jìn)行壓縮和解壓縮的時間性能可能受到影響,因為通用算法必須在沒有關(guān)于數(shù)據(jù)的任何先驗知識的情況下花費(fèi)時間來搜索可壓縮模式。第二,精簡效率或壓縮比也可能由于未找到文件中的最好可壓縮模式而受到影響。這些缺點對將通用無損壓縮算法用于地震或科學(xué)數(shù)據(jù)帶來挑戰(zhàn)。
為了克服具有固定長度的位的數(shù)的集合內(nèi)的存儲空間的浪費(fèi),并且不損失關(guān)于每個數(shù)的信息,本發(fā)明的方面定義一種利用減小的長度對每個數(shù)進(jìn)行編碼和解碼的算法。結(jié)果是包括具有可變長度的數(shù)的壓縮集合,其能夠被解壓縮成原始長度。
下面的討論被劃分成三個部分:對在計算機(jī)系統(tǒng)上對數(shù)的表示的解釋;對有理數(shù)和其表示以及與其他數(shù)的相互作用的描述;以及對本文中使用的基本數(shù)據(jù)結(jié)構(gòu)和算法的討論。
數(shù)的表示
整數(shù)通常由32位的序列表示,其中在有符號整數(shù)的情況下,第一位是符號位,指示其是正整數(shù)還是負(fù)整數(shù),并且剩余位是底數(shù)為2的整數(shù)本身。無符號整數(shù)沒有符號位,使用第一位作為用于數(shù)本身的多一位。除了符號位,出現(xiàn)在序列的左邊的任何前導(dǎo)零不是有效位,因為它們能夠由于相同數(shù)值而被省略。浮點數(shù)類型100允許通過將指數(shù)120插入到通常具有相同的32位長度的序列中來表達(dá)數(shù)的 小數(shù)部分。第二位到第九位通常將該指數(shù)120表示為底數(shù)為2的最小指數(shù)和最大指數(shù)之間的整數(shù)。指數(shù)120可以在如下的意義上被偏置,指數(shù)120減去固定數(shù)以表示負(fù)指數(shù)和正指數(shù)。127的偏置意味著指數(shù)從-127到128變化。第十位到該序列的末尾通常表示小數(shù),還稱為尾數(shù)或有效數(shù)字130,為浮點數(shù)100的部分。小數(shù)130可以是以歸一化形式的,在這種情況下,最大有效位被隱藏在序列中,因為它總是二進(jìn)制1。出現(xiàn)在序列的右邊的任何尾隨零不是有效位,因為它們能夠由于相同數(shù)值而被省略。
整數(shù)和浮點數(shù)可以通過不同規(guī)格來表示并且可以具有不同長度的位。存在指導(dǎo)對計算機(jī)上的數(shù)進(jìn)行定義的若干國際標(biāo)準(zhǔn),并且計算機(jī)系統(tǒng)可以甚至使用除了二進(jìn)制(底數(shù)為2)以外的底數(shù)。如對于本領(lǐng)域技術(shù)人員而言將顯而易見的,盡管針對整數(shù)和浮點數(shù)給出的解釋用作本文中使用的概念的基線,但是所公開的有理壓縮算法獨(dú)立于數(shù)的規(guī)格、長度和底數(shù)而作用。
有理數(shù)及其表示
示范性有理壓縮算法通過由原始數(shù)的有理表示改變其表示來作用,以更高效地對該數(shù)進(jìn)行壓縮。有理數(shù)由涉及整數(shù)分子p和整數(shù)分母q的比值表征如下:
p/q。
其中q≠0。當(dāng)q=1時,有理數(shù)是整數(shù)。浮點數(shù)f由不包括尾隨零的有效數(shù)字s 130、底數(shù)b和指數(shù)e定義如下:
f=s·be。
其中,在二進(jìn)制計算機(jī)系統(tǒng)中,b=2,并且有效數(shù)字130和指數(shù)120兩者都是位序列。如果s是整數(shù),則f的有理表示被表達(dá)如下:
其中,分母2-e在2的負(fù)冪的情況下上升為乘以分子。f的該有理表示暗示小數(shù)為零,即,有效數(shù)字s 130在其(有效數(shù)字位序列的)長度l為零時僅僅是整數(shù),并且因此分子變成隱藏的歸一化位:1。通過定義,針對歸一化浮點數(shù),作為數(shù)的小數(shù)部分的有效數(shù)字s 130是 在二進(jìn)制點的右邊的沒有尾隨零的位序列。
具有零小數(shù)部分的浮點數(shù)的有理表示排除大多數(shù)數(shù),致使其無用。示范性有理壓縮算法針對易受到壓縮的浮點數(shù)定義分子和分母兩者。分子通過將有效數(shù)字s 130乘以2的有效數(shù)字序列的長度l的冪的結(jié)果來定義如下:
p=s·2l。
換言之,將s改寫為整數(shù)并將小數(shù)l位移動到右邊等價于將其乘以2l。除了小數(shù)部分,符號位110被連接到有效數(shù)字序列的開頭以使s為有符號整數(shù)。分母通過將2-e乘以2l來定義以補(bǔ)償插入在分子上的乘法,即:
q=2l-e。
q和p的這些定義用于指導(dǎo)在示范性有理壓縮算法的步驟內(nèi)對浮點數(shù)的編碼和解碼。以其有理表示的最終浮點數(shù)被表達(dá)如下:
注意該表示的對于對數(shù)進(jìn)行編碼和解碼有用的兩個屬性。第一,冪總是以二為底數(shù)的(或以數(shù)為底數(shù)的),并且因此,數(shù)二(或底數(shù))能夠被忽略。第二,變量l攜帶必須讀取多少位以獲得s的信息。該信息對于恢復(fù)具有可變長度的s值的序列有用。這些屬性導(dǎo)致有理壓縮算法的示范性實施例集中于在任何浮點數(shù)中呈現(xiàn)的(l-e)和l值。
數(shù)據(jù)結(jié)構(gòu)和算法
圖2圖示了由有理壓縮算法的示范性實施例使用的數(shù)個示范性數(shù)據(jù)結(jié)構(gòu)和算法。如圖2所示,有理壓縮算法的示范性實施例采用一個或多個數(shù)組210和直方圖220。數(shù)組210是利用數(shù)組內(nèi)部的對應(yīng)位置來存儲值的數(shù)據(jù)結(jié)構(gòu)。直方圖220是其中值是頻率的數(shù)組,對于對每個元素在集合中的出現(xiàn)進(jìn)行計數(shù)有用。在圖2的示范性實施例中,數(shù)組210具有8個位置并且用于通過直方圖220存儲8個元素在集合中的出現(xiàn),其中,數(shù)組內(nèi)的條的大小表示出現(xiàn)的次數(shù)。
圖2還圖示了二叉樹230,其是具有兩個內(nèi)部節(jié)點(白色開放圓 圈)和三個葉節(jié)點(黑色閉合圓圈)的霍夫曼(Huffman)樹。二叉樹230是用于進(jìn)行映射的數(shù)據(jù)結(jié)構(gòu),其對于將鍵映射到值有用?;舴蚵鼧涫嵌鏄洌滏I是集合中的每個值或元素的最小前綴碼。碼是表示特定值的位序列,一般具有比值本身更少的位。前綴碼是特定類型的碼,其前綴、即初始序列不在任何其他碼中重復(fù)?;舴蚵幋a算法接收要編碼的元素的頻率的直方圖220作為輸入,并且返回與在直方圖220中呈現(xiàn)的分布相對應(yīng)的霍夫曼樹作為輸出?;舴蚵幋a和樹一般用于無損壓縮。
示范性二叉樹230利用代碼0對數(shù)-31進(jìn)行編碼,利用代碼10對數(shù)12進(jìn)行編碼并且利用代碼11對數(shù)7進(jìn)行編碼。代碼序列由以已知方式從樹中的一個節(jié)點到另一節(jié)點的路徑表示。
對于圖2中示出的示范性數(shù)據(jù)結(jié)構(gòu)和算法的更詳細(xì)討論參見例如T.H.Cormen等人的由MIT出版社出版的“Introduction to Algorithms”(ISBN 978-0262033848),通過引用將其并入本文中。
有理壓縮算法
在至少一個實施例中,示范性有理壓縮算法包括壓縮模式和解壓縮模式。
圖3是圖示根據(jù)本發(fā)明的一個實施例的有理壓縮算法300的示范性實施方式的流程圖。示范性有理壓縮算法300接收存儲浮點數(shù)的集合的文件作為輸入并且返回以壓縮格式存儲相同集合的壓縮文件作為輸出。
如圖3所示,示范性讀取閾值電壓調(diào)節(jié)過程300首先在步驟310期間計算直方圖的直方圖(hh),其是(l-e)出現(xiàn)的一個直方圖,其中每個元素是l出現(xiàn)的另一直方圖。下面結(jié)合圖4A進(jìn)一步討論示范性直方圖的直方圖(hh)400。
在步驟320期間,示范性讀取閾值電壓調(diào)節(jié)過程300構(gòu)建hh的霍夫曼森林(hf),其是針對(l-e)的直方圖的一個霍夫曼樹,其中每個葉子具有針對l的直方圖的下級霍夫曼樹。下面結(jié)合圖4B進(jìn)一步討論hh的示范性霍夫曼森林(hf)450。
在步驟330期間,示范性讀取閾值電壓調(diào)節(jié)過程300構(gòu)建編碼映射(em),其是將每個(l-e)和l映射到其對應(yīng)的霍夫曼前綴碼中的一個數(shù)組。編碼映射em是針對具有針對每個l值的前綴碼的另一下級數(shù)組的每個(l-e)值的前綴碼的數(shù)組。這些數(shù)組通過遍歷在(在步驟320期間生成的并且如下面結(jié)合圖4B進(jìn)一步討論的)hf中的所有霍夫曼樹內(nèi)的所有可能路徑來構(gòu)建,其中每個路徑是一個前綴碼并且在主霍夫曼樹的情況下(460)通向存儲(l-e)的一個葉節(jié)點或者在下級霍夫曼樹的情況下(470)通向存儲l的一個葉節(jié)點。編碼映射em包含在浮點數(shù)的輸入集合中出現(xiàn)的所有可能的(l-e)和l值的碼序列。
在步驟340期間,示范性讀取閾值電壓調(diào)節(jié)過程300使用編碼映射(em)對每個浮點數(shù)進(jìn)行編碼,如下面結(jié)合標(biāo)題為“將浮點數(shù)編碼成壓縮位”的章節(jié)進(jìn)一步討論的。
圖4A圖示了在步驟310期間由示范性有理壓縮算法300生成的示范性直方圖的直方圖(hh)400。如圖4A所示,示范性直方圖的直方圖(hh)400是(l-e)出現(xiàn)的一個直方圖410,其中每個元素是l出現(xiàn)的另一直方圖420-i。主直方圖410利用對l的出現(xiàn)進(jìn)行計數(shù)的另一直方圖420對(l-e)的出現(xiàn)進(jìn)行計數(shù)。更具體地,針對輸入集合中的每個唯一的浮點數(shù)f,從f計算l和(l-e)并遞增hh[l-e][l],hh[l-e][l]是l在(l-e)的直方圖410內(nèi)部的其對應(yīng)的直方圖420中的出現(xiàn)。該遞增僅僅影響一個直方圖420,在出現(xiàn)(l-e)時對l的出現(xiàn)進(jìn)行計數(shù)。另一方面,(l-e)的出現(xiàn)通過對在其內(nèi)部直方圖中l(wèi)的所有出現(xiàn)的求加和來計數(shù)。
主直方圖410的范圍是(l-e)值加兩個特殊位置的可能范圍。一個特殊位置針對無效數(shù),例如無窮大和NaN(非數(shù)字),其具有必須被保留的特殊位序列,而另一特殊位置針對數(shù)零,其小數(shù)未被歸一化并且具有長度零,即l=0。包含在主直方圖410的每個位置內(nèi)部的每個內(nèi)部直方圖420的范圍是l的可能范圍。針對具有1個符號位、用于指數(shù)的8位和用于小數(shù)部分的23位的32位浮點數(shù),主直 方圖410的范圍是281并且每個直方圖420的范圍是23。
圖4B圖示了在步驟320期間由示范性有理壓縮算法300生成的hh的示范性霍夫曼森林(hf)450。如圖4B所示,針對(l-e)出現(xiàn)的主直方圖410構(gòu)建一個霍夫曼樹460,并且針對l出現(xiàn)的每個內(nèi)部直方圖構(gòu)建一個下級霍夫曼樹470-i。這些霍夫曼樹460、470形成霍夫曼森林hf 450,其對于壓縮和解壓縮兩者有用?;舴蚵?50被存儲在壓縮輸出文件的開頭?;舴蚵?hf)450還在本文中被稱為霍夫曼編碼。
將浮點數(shù)編碼成壓縮位
如以上指示的,在步驟340期間,示范性有理壓縮算法300使用在步驟330期間生成的編碼映射將每個浮點數(shù)f編碼成壓縮位序列。更具體地,針對輸入中的每個f,從f計算l和(l-e)并從em檢索針對(l-e)的前綴碼和針對l的前綴碼。針對f產(chǎn)生的位序列包括:第一,(l-e)前綴碼;第二,l前綴碼;以及第三,從f提取的有效數(shù)字序列s。歸一化位不存在并且序列s的最后一位從產(chǎn)生的序列被排除,因為其總是1。通過定義,序列s包括在二進(jìn)制點的右邊的沒有尾隨零的所有有效數(shù)字位。該產(chǎn)生的序列在其長度小于用于表示浮點數(shù)f的原始位序列時被認(rèn)為被壓縮。輸入集合被完全編碼并被存儲在壓縮輸出文件中的霍夫曼森林hf之后。
解壓縮
圖5是根據(jù)本發(fā)明的一個實施例的有理解壓縮算法500的示范性實施方式的流程圖。一般地,示范性有理解壓縮算法接收以壓縮格式存儲霍夫曼森林450和浮點數(shù)的集合的壓縮文件作為輸入,并且返回與在壓縮之前的原始文件完全相同的未壓縮文件作為輸出。
如圖5所示,示范性有理解壓縮算法500首先在步驟510期間從壓縮輸入文件讀取并重新構(gòu)建霍夫曼森林hf 450。霍夫曼森林450包含用于對針對在壓縮集合中出現(xiàn)的(l-e)和l值的所有可能的前綴碼進(jìn)行解碼的必要信息。hf中的第一霍夫曼樹460是(l-e)出現(xiàn)的直方圖的主樹,而hf中的所有其他霍夫曼樹470是l出現(xiàn)的直方 圖的下級樹。每個下級霍夫曼樹470的次序與(l-e)的主直方圖410的次序相匹配,即是l的內(nèi)部直方圖的相同次序。在步驟510期間,僅僅霍夫曼森林hf 450被重新構(gòu)建,解壓縮不需要編碼映射或直方圖400。
此后,示范性有理解壓縮算法500在步驟520期間使用霍夫曼森林hf 450將每個壓縮位序列解碼成浮點數(shù)。更具體地,壓縮輸入文件在霍夫曼森林450之后被讀取作為位序列,并且針對每個位,對主霍夫曼樹進(jìn)行遍歷直到到達(dá)葉節(jié)點。葉節(jié)點包含與當(dāng)前浮點數(shù)f相對應(yīng)的(l-e)值。針對對應(yīng)的下級霍夫曼樹重復(fù)該過程,對對應(yīng)的下級霍夫曼樹進(jìn)行遍歷直到到達(dá)葉節(jié)點。該第二葉節(jié)點包含當(dāng)前數(shù)f的l值,其允許讀取下個l位以構(gòu)建浮點數(shù)f的有效數(shù)字序列s。利用s、l和(l-e),浮點數(shù)f使用其有理表示被恢復(fù):f=s·2l/2l-e。輸入壓縮集合被完全解碼并被寫入未壓縮輸出文件中。
變型
在一個變型中,算法被定制用于整數(shù),其中有理表示具有等于整數(shù)本身的分子并且分母等于1。整數(shù)的輸入集合僅僅使用每個整數(shù)的位的長度來被壓縮。該長度可以與浮點數(shù)的長度l類似地被使用,以使得整數(shù)能夠在沒有前導(dǎo)零并且排除第一位1的情況下被恢復(fù)。然而,整數(shù)的長度不會對恢復(fù)原始整數(shù)做出貢獻(xiàn),因為其沒有小數(shù)部分?;舴蚵?50減少為僅僅對整數(shù)的長度進(jìn)行編碼的一個霍夫曼樹460,并且算法的其他部分保持相同。在整數(shù)的情況下,長度具有整數(shù)的有效位的意義,而在浮點數(shù)的情況下,長度具有有效數(shù)字的意義。
在另一變型中,有理壓縮算法300適合于對整數(shù)和浮點數(shù)的混合集合起作用,或者對不同規(guī)格的數(shù)起作用。策略是增加或減少主直方圖410或內(nèi)部直方圖420中的位置以支持這些不同的數(shù)。例如,在固定集合的情況下,除了在浮點數(shù)的(l-e)值的直方圖410中的兩個特殊位置,多一個特殊位置可以用于整數(shù)值。還增加l的內(nèi)部直方圖420的范圍以支持浮點數(shù)的有效數(shù)字的長度和整數(shù)的長度兩者。 另一示例是考慮具有表示算數(shù)的除以零的結(jié)果的特殊序列的浮點數(shù)。這還可以向主直方圖添加位置,類似于無窮大和NaN(非數(shù)字)表示?;舴蚵?50使用這些調(diào)整的直方圖來構(gòu)建,并且算法的其他部分保持相同。
第三變型利用直方圖的不同組合或利用僅僅一個直方圖來代替直方圖400。例如,主直方圖410可以對僅僅從每個浮點數(shù)f提取的指數(shù)e而非(l-e)值的出現(xiàn)進(jìn)行計數(shù),并且內(nèi)部直方圖可以繼續(xù)對l的出現(xiàn)進(jìn)行計數(shù)。霍夫曼森林450使用這些直方圖400來構(gòu)建,并且編碼可以繼續(xù)保留有效數(shù)字序列s。解碼仍然起作用,因為數(shù)f可以仍然從s、l和e被恢復(fù)。該策略還可以被顛倒,其中主直方圖410對l的出現(xiàn)進(jìn)行計數(shù),而內(nèi)部直方圖420對e的出現(xiàn)進(jìn)行計數(shù)。另一示例是利用對l和e的對的出現(xiàn)進(jìn)行計數(shù)的僅僅一個直方圖來代替直方圖的直方圖400。這將霍夫曼森林450減少為對l和e的對進(jìn)行編碼的僅僅一個霍夫曼樹,并且算法300的其他部分保持相同。
在又一變型中,另一無損壓縮策略被添加到有效數(shù)字序列s,而非將序列保留在壓縮文件中。一個策略可以搜索原始有效數(shù)字位序列中的可重復(fù)子序列并且可以創(chuàng)建這些子序列的詞典。重復(fù)子序列由詞典的索引碼來代替,其包含每個子序列的僅僅一個實例。在索引碼和詞典減少編碼子序列的長度的情況下壓縮是高效的。詞典可以在霍夫曼森林之后被存儲并且索引碼可以代替對應(yīng)的子序列。
另一變型通過不同的編碼策略來代替霍夫曼森林450。例如,可以針對l和e值兩者來構(gòu)建詞典。該字典可以是使用要壓縮的數(shù)的集合的先前知識的靜態(tài)詞典,或者隨著集合被壓縮而調(diào)整的動態(tài)詞典,或者兩者的組合。數(shù)的編碼和解碼與使用霍夫曼森林類似。
附加的變型使有理壓縮算法300適合于多核計算機(jī)或多節(jié)點服務(wù)器。多核計算機(jī)系統(tǒng)包括能夠并行執(zhí)行計算的數(shù)個處理單元,每個處理單元如同可分離的計算機(jī)系統(tǒng)。多節(jié)點服務(wù)器是具有數(shù)個相互連接的計算機(jī)系統(tǒng)的分布式環(huán)境。使算法并行化的一個策略是將輸入集合劃分成針對每個計算機(jī)系統(tǒng)一個的具有相似大小的集合, 并運(yùn)行算法的若干實例。
結(jié)論
本文中參考根據(jù)本發(fā)明的實施例的方法、裝置(系統(tǒng))和計算機(jī)程序產(chǎn)品的流程圖圖示和/或方框圖來描述本發(fā)明的方面。將會認(rèn)識到,流程圖圖示和/或方框圖的每個框以及流程圖圖示和/或方框圖中的框的組合能夠通過計算機(jī)程序指令來實施。這些計算機(jī)程序指令可以被提供給通用計算機(jī)、專用計算機(jī)或其他可編程數(shù)據(jù)處理裝置的處理器以產(chǎn)生一種機(jī)器,使得經(jīng)由計算機(jī)或其他可編程數(shù)據(jù)處理裝置的處理器運(yùn)行的指令創(chuàng)建用于實施流程圖和/或一個或多個方框圖框中指定的功能/動作的部件。
如在本文中進(jìn)一步描述的,這樣的計算機(jī)程序指令還可以被存儲在計算機(jī)可讀介質(zhì)中,其能夠引導(dǎo)計算機(jī)、其他可編程數(shù)據(jù)處理裝置或其他設(shè)備以特定方式工作,使得存儲在計算機(jī)可讀介質(zhì)中的指令產(chǎn)生包括實施在流程圖和/或一個或多個方框圖框中指定的功能/動作的指令的一款制品。因此,如下面進(jìn)一步詳細(xì)描述的,本發(fā)明的至少一個實施例包括有形地體現(xiàn)計算機(jī)可讀指令的一款制品,所述計算機(jī)可讀指令當(dāng)被實施時使得計算機(jī)執(zhí)行本文中描述的技術(shù)。如本文中使用的,一款制品、計算機(jī)程序產(chǎn)品或計算機(jī)可讀存儲介質(zhì)不應(yīng)被解釋為瞬態(tài)信號,諸如電磁波。
計算機(jī)程序指令還可以被加載到計算機(jī)或其他設(shè)備上以使一系列操作步驟被執(zhí)行在計算機(jī)、其他可編程裝置或其他設(shè)備上,以產(chǎn)生計算機(jī)實施的過程,使得運(yùn)行在計算機(jī)或其他可編程裝置上的指令提供用于實施在流程圖和/或一個或多個方框圖框中指定的功能/動作的過程。
在附圖中的流程圖和方框圖圖示了根據(jù)本發(fā)明的各種實施例的系統(tǒng)、方法和計算機(jī)程序產(chǎn)品的可能實施方式的體系結(jié)構(gòu)、功能和操作。就這點而言,流程圖或方框圖中的每個框可以表示代碼的模塊、組件、片段或部分,其包括用于實施指定的邏輯功能的至少一個可執(zhí)行指令。應(yīng)當(dāng)指出,框中指出的功能可以以附圖中指出的順 序以外的順序出現(xiàn)。
因此,本文中描述的技術(shù)能夠包括提供一種系統(tǒng),其中所述系統(tǒng)包括不同的軟件模塊,每個軟件模塊被體現(xiàn)在有形計算機(jī)可讀可記錄存儲介質(zhì)上(例如,所有模塊被體現(xiàn)在相同的介質(zhì)上,或者每個模塊被體現(xiàn)在不同的介質(zhì)上)。例如,模塊能夠運(yùn)行在硬件處理器上,并且本文中詳細(xì)描述的技術(shù)能夠使用運(yùn)行在硬件處理器上的系統(tǒng)的不同軟件模塊來執(zhí)行。
附加地,本文中詳細(xì)描述的技術(shù)還能夠經(jīng)由計算機(jī)程序產(chǎn)品來實施,所述計算機(jī)程序產(chǎn)品包括存儲在數(shù)據(jù)處理系統(tǒng)中的計算機(jī)可讀存儲介質(zhì)中的計算機(jī)可用程序代碼,其中計算機(jī)可用程序代碼通過網(wǎng)絡(luò)從遠(yuǎn)程數(shù)據(jù)處理系統(tǒng)被下載。計算機(jī)程序產(chǎn)品還可以包括,例如,存儲在服務(wù)器數(shù)據(jù)處理系統(tǒng)中的計算機(jī)可讀存儲介質(zhì)中的計算機(jī)可用程序代碼,其中計算機(jī)可用程序代碼通過網(wǎng)絡(luò)被下載到遠(yuǎn)程數(shù)據(jù)處理系統(tǒng)以用于與遠(yuǎn)程系統(tǒng)一起在計算機(jī)可讀存儲介質(zhì)中使用。
如本領(lǐng)域技術(shù)人員將認(rèn)識到的,本發(fā)明的方面可以采取完全硬件實施例、完全軟件實施例(包括固件、常駐軟件、微代碼等)或?qū)④浖陀布矫孢M(jìn)行組合的實施例的形式,其全部可以在本文中被一般地稱為“模塊”和“系統(tǒng)”。
本發(fā)明的方面或其元件能夠以包括存儲器和至少一個處理器的裝置的形式來實施,所述至少一個處理器被耦合到所述存儲器并且可操作為執(zhí)行本文中描述的技術(shù)。此外,如本文中描述的,本發(fā)明的方面可以采取計算機(jī)程序產(chǎn)品的形式,所述計算機(jī)程序產(chǎn)品被體現(xiàn)在具有計算機(jī)可讀程序代碼體現(xiàn)在其上的計算機(jī)可讀介質(zhì)中。
通過舉例的方式,本發(fā)明的方面可以利用運(yùn)行在通用計算機(jī)上的軟件。圖6是本發(fā)明的至少一個實施例能夠被實施在其上的示范性計算機(jī)系統(tǒng)的系統(tǒng)圖。如圖6中描繪的,示例實施方式采用例如處理器602、存儲器604以及例如由顯示器606和鍵盤608形成的輸入/輸出接口。如本文中使用的術(shù)語“處理器”包括任何處理設(shè)備,諸 如舉例而言,包括中央處理單元(CPU)和/或處理電路的其他形式的處理設(shè)備。術(shù)語“存儲器”包括與處理器或CPU相關(guān)聯(lián)的存儲器,諸如舉例而言,隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、固定存儲器設(shè)備(例如,硬盤驅(qū)動器)、可拆卸存儲設(shè)備(例如,磁盤)、快閃存儲器等等。另外,如本文中使用的短語“輸入/輸出接口”包括用于向處理單元輸入數(shù)據(jù)的機(jī)構(gòu)(例如,鼠標(biāo))和用于提供與處理單元相關(guān)聯(lián)的結(jié)果的機(jī)構(gòu)(例如,打印機(jī))。
處理器602、存儲器604以及諸如顯示器606和鍵盤608的輸入/輸出接口能夠例如經(jīng)由作為數(shù)據(jù)處理單元612的部分的總線610相互連接。經(jīng)由總線610的適當(dāng)?shù)南嗷ミB接還能夠被提供給網(wǎng)絡(luò)接口614(例如網(wǎng)絡(luò)卡)和介質(zhì)接口616(諸如磁盤或緊湊盤只讀存儲器(CD-ROM)驅(qū)動器),所述網(wǎng)絡(luò)接口614能夠被提供以與計算機(jī)網(wǎng)絡(luò)接口,所述介質(zhì)接口能夠被提供以與介質(zhì)618接口。
因此,包括用于執(zhí)行本文中詳細(xì)描述的技術(shù)的指令或代碼的計算機(jī)軟件能夠被存儲在相關(guān)聯(lián)的存儲設(shè)備(例如,ROM、固定存儲器或可拆卸存儲器)中并且當(dāng)準(zhǔn)備好被利用時部分地或整體地被下載(例如,到RAM中)并且由CPU來實施。這樣的軟件能夠包括固件、常駐軟件、微代碼等等。
如以上指出的,適合于存儲和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)包括通過系統(tǒng)總線610直接或間接耦合到存儲器元件604的至少一個處理器602。存儲器元件能夠包括在程序代碼的實際實施期間采用的本地存儲器、大容量存儲器以及高速緩存存儲器,高速緩存存儲器提供對至少一些程序代碼的臨時存儲以便減少在實施期間必須從大容量存儲器檢索代碼的次數(shù)。同樣,諸如鍵盤608、顯示器606和定點設(shè)備的輸入/輸出(I/O)設(shè)備能夠(例如經(jīng)由總線610)直接地或通過中介I/O控制器被耦合到系統(tǒng)。
諸如網(wǎng)絡(luò)接口614的網(wǎng)絡(luò)適配器(例如,調(diào)制解調(diào)器、線纜調(diào)制解調(diào)器或以太網(wǎng)卡)還能夠被耦合到系統(tǒng)以使得數(shù)據(jù)處理系統(tǒng)能夠通過中介私有網(wǎng)絡(luò)或公共網(wǎng)絡(luò)被耦合到其他數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)程 打印機(jī)或存儲設(shè)備。
如本文中使用的,“服務(wù)器”包括運(yùn)行服務(wù)器程序的物理數(shù)據(jù)處理系統(tǒng)(諸如如圖6中描繪的系統(tǒng)612)。將理解,這樣的物理服務(wù)器可以包括或可以不包括顯示器和鍵盤。
如指出的,本發(fā)明的至少一個實施例能夠采取計算機(jī)程序產(chǎn)品的形式,所述計算機(jī)程序產(chǎn)品被體現(xiàn)在具有計算機(jī)可讀程序代碼體現(xiàn)在其上的計算機(jī)可讀介質(zhì)中。如將認(rèn)識到的,計算機(jī)可讀介質(zhì)的任何組合可以被利用。計算機(jī)可讀介質(zhì)能夠包括計算機(jī)可讀信號介質(zhì)或計算機(jī)可讀存儲介質(zhì)。計算機(jī)可讀存儲介質(zhì)可以是,例如但不限于,電子的、磁的、光的、電磁的、紅外的或半導(dǎo)體系統(tǒng)、裝置或設(shè)備或者前面的任何適當(dāng)?shù)慕M合。示例包括具有一條或多條線的電連接、便攜式計算機(jī)磁盤、硬盤、RAM、ROM、可擦可編程只讀存儲器(EPROM)、快閃存儲器、光纖、便攜式CD-ROM、光存儲設(shè)備、磁存儲設(shè)備和/或前面的任何適當(dāng)?shù)慕M合。更一般地,計算機(jī)可讀存儲介質(zhì)可以是能夠包含或存儲用于由指令執(zhí)行系統(tǒng)、裝置或設(shè)備或結(jié)合指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用的程序的任何有形介質(zhì)。
附加地,計算機(jī)可讀信號介質(zhì)可以包括具有計算機(jī)可讀程序代碼體現(xiàn)在其中的傳播的數(shù)據(jù)信號,例如在基帶中或作為載波的一部分。這樣的傳播信號可以采取諸如舉例而言電磁、光學(xué)或其適當(dāng)?shù)慕M合的各種形式中的任何形式。更一般地,計算機(jī)可讀信號介質(zhì)可以是任何計算機(jī)可讀介質(zhì),其不是計算機(jī)可讀存儲介質(zhì)并且其能夠通信、傳播或傳輸用于由指令執(zhí)行系統(tǒng)、裝置或設(shè)備或結(jié)合指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用的程序。
體現(xiàn)在計算機(jī)可讀介質(zhì)上的程序代碼能夠使用諸如舉例而言無線、有線、光纖線纜、射頻(RF)和/或前面的適當(dāng)?shù)慕M合的合適的介質(zhì)來傳輸。用于執(zhí)行根據(jù)本發(fā)明的一個或多個實施例的操作的計算機(jī)程序代碼能夠以包括面向?qū)ο缶幊陶Z言和傳統(tǒng)過程式編程語言的至少一個編程語言來編寫。程序代碼可以完全在用戶的計算機(jī)上、部分在用戶的計算機(jī)上、作為獨(dú)立軟件包、部分在用戶的計算機(jī)上 并且部分在遠(yuǎn)程計算機(jī)上、或者完全在遠(yuǎn)程計算機(jī)或服務(wù)器上來運(yùn)行。在后一情形下,遠(yuǎn)程計算機(jī)可以通過包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)的任何類型的網(wǎng)絡(luò)被連接到用戶的計算機(jī),或者可以(例如,通過使用互聯(lián)網(wǎng)服務(wù)提供商的互聯(lián)網(wǎng))進(jìn)行與外部計算機(jī)的連接。
鑒于以上描述,應(yīng)當(dāng)理解本文中圖示的部件能夠被實施在各種形式的硬件、軟件或其組合中,例如專用集成電路(ASIC)、功能電路、具有相關(guān)聯(lián)的存儲器的合適地編程的通用數(shù)字計算機(jī)等等。
本文中使用的術(shù)語僅僅出于描述特定實施例的目的并且不旨在為對本發(fā)明的限制。例如,單數(shù)形式的“一”、“一個”和“所述”旨在也包括復(fù)數(shù)形式,除非另行清楚指示。還將理解,如本文中使用的術(shù)語“包括”和/或“包含”指定陳述的特征、整數(shù)、步驟、操作、元件和/或部件的存在,但不排除另一特征、整數(shù)、步驟、操作、元件、部件和/或它們的組的存在或添加。附加地,對應(yīng)的結(jié)構(gòu)、材料、動作和權(quán)利要求書中的所有部件或步驟加功能元件的等價物旨在包括用于與如特別要求保護(hù)的其他要求保護(hù)的元件相結(jié)合來執(zhí)行功能的任何結(jié)構(gòu)、材料或動作。
此外,應(yīng)當(dāng)再次強(qiáng)調(diào),本發(fā)明的上述實施例僅僅出于說明的目的而被呈現(xiàn)??梢允褂迷S多變型和其他備選實施例。例如,該技術(shù)適用于能夠從對數(shù)據(jù)的改進(jìn)的有理壓縮獲益的各種其他類型的通信系統(tǒng)、存儲系統(tǒng)和處理設(shè)備。因此,本文中詳細(xì)描述的系統(tǒng)和設(shè)備元件的特定說明性配置能夠在其他實施例中被改變。所附權(quán)利要求書的范圍內(nèi)的這些實施例和許多其他備選實施例對于本領(lǐng)域技術(shù)人員而言將是顯而易見的。