TW201626730A - 用於有效以lz77爲基礎的資料解壓縮之技術 - Google Patents

用於有效以lz77爲基礎的資料解壓縮之技術 Download PDF

Info

Publication number
TW201626730A
TW201626730A TW104125964A TW104125964A TW201626730A TW 201626730 A TW201626730 A TW 201626730A TW 104125964 A TW104125964 A TW 104125964A TW 104125964 A TW104125964 A TW 104125964A TW 201626730 A TW201626730 A TW 201626730A
Authority
TW
Taiwan
Prior art keywords
value
symbol
tag
indicator
computing device
Prior art date
Application number
TW104125964A
Other languages
English (en)
Other versions
TWI559688B (zh
Inventor
維諾德 歌波
西恩M 格利
詹姆斯D 古爾福德
Original Assignee
英特爾公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 英特爾公司 filed Critical 英特爾公司
Publication of TW201626730A publication Critical patent/TW201626730A/zh
Application granted granted Critical
Publication of TWI559688B publication Critical patent/TWI559688B/zh

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3091Data deduplication
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6005Decoder aspects
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

用於資料解壓縮之技術包括計算裝置,該計算裝置自輸入串流讀取符號標籤位元組。該計算裝置判定該符號是否可使用快速路徑常式加以解碼,且若否,則執行慢速路徑常式來解壓縮該符號。該慢速路徑常式可包括資料相依分支指令,該等資料相依分支指令可為使用分支預測硬體不可預測的。對於該快速路徑常式,該計算裝置在不執行不可預測分支指令的情況下,基於該標籤位元組來判定下一符號增量值、文字增量值、資料長度及偏移。該計算裝置在不執行不可預測分支指令的情況下,根據該標籤位元組將源指標設定為文字資料或參考資料。該計算裝置可使用條件移動指令來設定該源指標。該計算裝置複製該資料且處理剩餘符號。本發明描述且主張其他實施例。

Description

用於有效以LZ77為基礎的資料解壓縮之技術
本發明係有關於用於有效以LZ77為基礎的資料解壓縮之技術。
發明背景
軟體資料解壓縮為許多計算應用中使用的重要軟體操作,該等計算應用包括伺服器應用及客戶端應用兩者。許多常見無損壓縮格式基於LZ77壓縮演算法。使用以LZ77為基礎的演算法壓縮的資料通常包括符號之串流。每一符號可包括將要複製至輸出的文字資料或對已經解壓縮的重複資料之參考。與諸如DEFLATE的其他無損壓縮演算法相比,以LZ77為基礎的演算法通常達成較低壓縮等級但提供較高效能,尤其對於解壓縮而言。一典型以LZ77為基礎的格式為由Google公司開發且由Apache HadoopTM計劃等使用的「Snappy」。其他以LZ77為基礎的格式包括LZO及LZF。
解壓縮演算法之典型實行方案包括用來分類輸入符號的許多條件分支。該等條件分支之結果取決於輸入資料。用於典型處理器之分支預測硬體可具有正確地預測 該等條件分支之結果的困難性。分支誤預測損失可降低可達成的解壓縮效能。
依據本發明之一實施例,係特地提出一種用於資料解壓縮之計算裝置,該計算裝置包含:一輸入模組,其用以自藉由一輸入指標識別的一記憶體位置讀取一符號標籤值;一符號標籤解碼模組,其用以根據該符號標籤值來判定一下一符號增量值、一文字增量值、一資料長度及一偏移值;一資料源模組,其用以(i)回應於該符號標籤值包括一文字類值之一判定而將一源指標有條件地設定為該輸入指標加該文字增量值,及(ii)回應於該符號標籤值不包括該文字類值之一判定而將該源指標有條件地設定為一輸出指標減該偏移值;以及一輸出模組,其用以將該資料長度之資料自藉由該源指標識別的一記憶體位置複製至藉由該輸出指標識別的一記憶體位置;其中該輸入模組進一步用以回應於該資料之複製而使該輸入指標增量該下一符號增量值。
100‧‧‧計算裝置
120‧‧‧處理器
122‧‧‧I/O子系統
124‧‧‧記憶體
126‧‧‧資料儲存裝置
128‧‧‧通訊子系統
200‧‧‧環境/實施例
202‧‧‧輸入模組
204‧‧‧符號標籤解碼模組
206‧‧‧資料源模組
208‧‧‧輸出模組
210‧‧‧慢速路徑模組
212‧‧‧輸入串流
214‧‧‧輸出串流
216‧‧‧下一符號增量表
218‧‧‧文字增量表
220‧‧‧長度表
300‧‧‧方法
302~342‧‧‧方塊
400‧‧‧圖解
402~410‧‧‧符號
500、600‧‧‧假碼
306'~340'、326"、328"‧‧‧操作
本文所描述之概念以實例之方式而非以限制之方式例示於附圖中。出於例示的簡單性及清晰性,諸圖中所例示的元件未必按比例繪製。在認為適當的情況下,已在諸圖間重複參考標號來指示對應或類似元件。
圖1為用於有效資料解壓縮之計算裝置之至少一實施例的簡化方塊圖; 圖2為圖1之計算裝置之環境之至少一實施例的簡化方塊圖;圖3A及圖3B為用於有效資料解壓縮之方法之至少一實施例的簡化流程圖,該方法可由圖1及圖2之計算裝置執行;圖4為可藉由圖3A及圖3B之方法解壓縮的壓縮資料符號的示意圖;圖5為圖3A及圖3B之方法之至少一實施例的假碼列表;以及圖6為圖3A及圖3B之方法之部分之另一實施例的假碼目錄。
較佳實施例之詳細說明
雖然本揭示內容之概念容許各種修改及替代形式,但本揭示內容之特定實施例已藉由實例之方式展示於圖式中且將在文中詳細描述。然而,應理解,不意欲將本揭示內容之概念限制於所揭示之特定形式,相反,意欲涵蓋與本揭示內容及附加申請專利範圍一致的所有修改、等效物及替代物。
說明書中所參考之「一個實施例」、「一實施例」、「一例示性實施例」等指示所描述之實施例可能包括特定特徵、結構或特性,但每一實施例可包括或可不必包括該特定特徵、結構或特性。此外,該等詞語不必代表相同實施例。此外,當描述與實施例相聯繫的特定特徵、 結構或特性時,提出,無論是否明確描述與其他實施例相聯繫的此特徵、結構或特性,實現與其他實施例相聯繫的此特徵、結構或特性係在熟習此項技術者之知識內。另外,應暸解,以「至少一A、B及C」之形式包括於列表中的項目可意味(A);(B);(C);(A及B);(A及C);(B及C);或(A、B及C)。類似地,以「A、B或C中至少一者」之形式表列的項目可意味(A);(B);(C);(A及B);(A及C);(B及C);或(A、B及C)。
所揭示的實施例在一些狀況下可以硬體、韌體、軟體或上述各者之任何組合來實行。所揭示的實施例亦可實行為由暫時性或非暫時性機器可讀(例如,電腦可讀)儲存媒體攜帶或儲存於暫時性或非暫時性機器可讀(例如,電腦可讀)儲存媒體上的指令,該等指令可由一或多個處理器讀取且執行。機器可讀儲存媒體可體現為任何儲存裝置、機構或用於儲存或傳輸以可由機器讀取之形式的資訊的其他實體結構(例如,依電性或非依電性記憶體、媒體碟片或其他媒體裝置)。
在圖式中,一些結構或方法特徵可以特定佈置及/或定序展示。然而,應暸解,可不需要此類特定佈置及/或定序。實情為,在一些實施例中,此類特徵可以相較於例示性圖中所示的不同方式及/或順序佈置。另外,特定圖中的結構或方法特徵之包括並非意味隱含此特徵在所有實施例中皆需要,且在一些實施例中,可不包括或可與其他特徵組合。
現參考圖1,用於有效資料解壓縮之例示性計算裝置100包括處理器120、I/O子系統122、記憶體124及資料儲存裝置126。在使用中,如以下所描述,計算裝置100經組配來自壓縮輸入資料讀取符號,解碼符號且輸出解壓縮資料。計算裝置100判定每一輸入符號是否可使用快速路徑解壓縮常式或使用傳統慢速路徑解壓縮常式加以解壓縮。大多數符號可使用快速路徑常式加以解壓縮,且因此是否應用快速路徑常式之判定可由處理器120之分支預測硬體以高精確度預測。在快速路徑常式之執行期間,計算裝置100在不執行資料相依分支指令的情況下判定資料之起始位址及長度,該等資料相依分支指令可為使用分支預測硬體不可預測的。計算裝置100可再次在不執行資料相依分支指令的情況下使用小資料表或其他快速技術來判定輸入串流中的下一符號之位置。藉由避免不可預測分支指令,計算裝置100可避免分支誤預測損失。藉由減少用以判定下一符號位置的關鍵指令路徑之執行時間,計算裝置100可改良吞吐量,尤其在使用能夠進行亂序執行的處理器120時。例示性地,如本文所描述之計算裝置100可達成比先前已知最佳化軟體解壓縮技術快高達50%-100%的解壓縮速度。
計算裝置100可體現為能夠進行有效資料解壓縮及以其他方式執行本文所描述之功能的任何類型之裝置。例如,計算裝置100可無限制地體現為膝上型電腦、筆記型電腦、平板電腦、智慧型電話、行動計算裝置、可穿戴 式計算裝置、電腦、桌上型電腦、工作站、伺服器電腦、分散式計算系統、多處理器系統、消費者電子裝置、智慧型設備及/或能夠進行有效資料解壓縮的任何其他計算裝置。如圖1中所示,例示性計算裝置100包括處理器120、I/O子系統122、記憶體124及資料儲存裝置126。當然,在其他實施例中,計算裝置100可包括其他或額外組件,諸如通常見於電腦中的該等組件(例如,各種輸入/輸出裝置)。另外,在一些實施例中,例示性組件中之一或多個可併入另一組件中,或以其他方式形成另一組件之一部分。例如,在一些實施例中,記憶體124或該記憶體之部分可併入處理器120中。
處理器120可體現為能夠執行本文所描述之功能的任何類型之處理器。例如,處理器120可體現為單核心或多核心處理器、數位信號處理器、微控制器或其他處理器或處理/控制電路。類似地,記憶體124可體現為能夠執行本文所描述之功能之任何類型之依電性或非依電性記憶體或資料儲存器。在操作中,記憶體124可儲存在計算裝置100之操作期間使用的各種資料及軟體,諸如作業系統、應用程式、程式、程式館及驅動器。記憶體124經由I/O子系統122通訊地耦接至處理器120,該I/O子系統可體現為用以促進以處理器120、記憶體124及計算裝置100之其他組件的輸入/輸出操作的電路及/或組件。例如,I/O子系統122可體現為或以其他方式包括記憶體控制器集線器、輸入/輸出控制集線器、韌體裝置、通訊鏈路(亦即, 點對點鏈路、匯流排鏈路、電線、電纜、光導、印刷電路板跡線等)及/或用以促進輸入/輸出操作的其他組件及子系統。在一些實施例中,I/O子系統122可形成系統單晶片(SoC)之一部分且連同處理器120、記憶體124及計算裝置100之其他組件一起併入單個積體電路晶片上。
資料儲存裝置126可體現為組配用於短期或長期資料儲存的任何類型之裝置,諸如,例如記憶裝置及電路、記憶卡、硬碟片驅動機、固態驅動機或其他資料儲存裝置。資料儲存裝置126可儲存由計算裝置100處理的壓縮及/或解壓縮資料。
計算裝置100亦可包括通訊子系統128,該通訊子系統可體現為能夠允許計算裝置100與其他遠端裝置之間經由電腦網路(未示出)的通訊的任何通訊電路、裝置或上述各者之集合。通訊子系統128可經組配來使用任何一或多種通訊技術(例如,有線通訊或無線通訊)及相關聯協定(例如,乙太網路、Bluetooth®、Wi-Fi®、WiMAX等)以實現此通訊。
現參考圖2,在例示性實施例中,計算裝置100在操作期間建立環境200。例示性實施例200包括輸入模組202、符號標籤解碼模組204、資料源模組206、輸出模組208及慢速路徑模組210。在使用中,計算裝置100經組配來自輸入串流212讀取壓縮資料,解碼壓縮資料且將解壓縮資料寫入至輸出串流214。環境200之各種模組可體現為硬體、韌體、軟體或上述各者之組合。例如,環境200之 各種模組、邏輯及其他組件可形成處理器120或計算裝置100之其他硬體組件之一部分,或以其他方式由處理器120或計算裝置100之其他硬體組件建立。
輸入模組202經組配來管理對輸入串流212之存取。輸入模組202經組配來打開輸入串流212且自輸入串流212讀取符號及其他資料。輸入模組202可維持輸入串流指標,該輸入串流指標可用來自輸入串流212存取壓縮資料。輸入串流212可體現為包括壓縮資料的任何記憶體中資料結構。輸入串流212可由檔案、網路連接、記憶體緩衝器或壓縮資料之任何其他源支持,或以其他方式與檔案、網路連接、記憶體緩衝器或壓縮資料之任何其他源相關聯。
符號標籤解碼模組204經組配來基於由輸入模組202讀取的符號標籤值判定下一符號增量值、文字增量值、資料長度及偏移值。如以上所描述,壓縮資料包括一系列符號。每一符號可為文字符號或參考符號,且每一符號可佔據輸入串流212中可變數目之位元組。文字符號包括將要在解壓縮期間複製至輸出串流214的文字資料。參考符號代表將要例如藉由複製先前複製至輸出串流214的資料來在解壓縮期間複製至輸出串流214的先前解壓縮資料。下一符號增量值可用來識別下一符號之開始在輸入串流212中的位置。資料長度指示對於文字符號及參考符號兩者將要複製資料之多少個位元組。文字增量值可用來定位文字資料在輸入串流212中的起點,且偏移值可用來定 位參考資料在輸出串流214中的起點。在一些實施例中,符號標籤解碼模組204可經組配來藉由索引下一符號增量表216、文字增量表218及長度表220分別判定下一符號增量值、文字增量及資料長度。另外或替代地,在一些實施例中,符號標籤解碼模組204可經組配來以程式設計方式判定該等值。
資料源模組206經組配來維持源指標,該源指標用來存取將要複製至解壓縮輸出的資料。資料源模組206經組配來基於當前符號之類型(亦即,文字符號或參考符號)來設定源指標以指向來自輸入串流212的文字資料或參考來自輸出串流214的先前解壓縮資料。資料源模組206經組配來例如藉由使用條件移動指令在不執行任何不可預測分支指令的情況下設定源指標。
輸出模組208經組配來管理對輸出串流214之存取。輸出模組208經組配來打開輸出串流214且將解壓縮資料寫入至輸出串流214。輸出模組208亦經組配來允許自輸出串流214複製已寫入資料,該已寫入資料用來解壓縮參考符號。輸出模組208可維持輸出串流指標,該輸出串流指標可用來讀取及/或寫入來自輸出串流214的解壓縮資料。輸出串流214可體現為能夠儲存及參考解壓縮資料的任何記憶體中資料結構。輸出串流214可由檔案、網路連接、記憶體緩衝器或用於解壓縮資料之任何其他目的地支持,或以其他方式與檔案、網路連接、記憶體緩衝器或用於解壓縮資料之任何其他目的地相關聯。
慢速路徑模組210經組配來執行慢速路徑解壓縮常式以解碼不可由快速路徑(亦即,由輸入模組202、符號標籤解碼模組204、資料源模組206及輸出模組208)解碼的符號。慢速路徑解壓縮常式可體現為能夠解碼不可由諸如例如由Google公司開發的Snappy解壓縮程式館的快速路徑解碼的符號的任何最佳化或未最佳化解壓縮演算法。慢速路徑解壓縮常式可包括例如基於當前符號之類的不可預測分支指令。
現參考圖3A,在使用中,計算裝置100可執行用於有效資料解壓縮之方法300。方法300在方塊302中開始,在該方塊中,計算裝置100打開輸入串流212且將輸入串流指標設定為串流中所包括的第一符號。計算裝置100可使用任何技術來打開輸入串流212,諸如將檔案之內容複製至記憶體緩衝器或記憶體映對檔案。對於許多檔案格式,輸入串流212可包括標頭或在第一符號之前的其他資料。例如,Snappy壓縮檔案格式包括將檔案之未壓縮長度儲存為小端varint的前文。計算裝置100可執行任何適當操作來處理標頭且使輸入串流指標增量至第一符號。
在方塊304中,計算裝置100打開輸出串流214且初始化輸出串流指標。計算裝置100可使用任何技術來打開輸出串流214,諸如創建記憶體中寫入緩衝器或記憶體映對檔案。在打開之後,計算裝置100能夠將資料寫入至在輸出串流指標處起始的輸出串流214。計算裝置100亦能夠自輸出串流214讀取及/或複製資料,該資料用來解壓縮 參考符號。
在方塊306中,計算裝置100自輸入串流指標讀取用於當前輸入符號之標籤值。在解壓縮以Snappy格式儲存的檔案的例示性實施例中,計算裝置100自輸入串流212讀取單個標籤位元組。然而,在其他實施例中,計算裝置100可讀取額外標籤資料。如以上所描述,輸入串流212包括符號序列,該等符號包括文字符號及參考符號。標籤值可由計算裝置100用來判定當前符號之類型,且亦可用來判定諸如偏移及資料長度的符號參數。
現參考圖4,圖解400例示以Snappy格式使用的各種符號。每一符號始於標籤位元組,且在標籤位元組中可用來分類符號的最低有效的兩個位元中包括二位元類值。符號402、404為文字符號,其中類值等於二進制值「00」。符號402包括標繼之以文字資料位元組之序列的簽位元組。標籤位元組之最高有效的六個位元表示文字之長度減一。符號402可表示包括1個位元組及60個位元組在內的自1個位元組至60個位元組之長度的文字。因此,符號402可用於相對短的文字。
符號404可用於較長文字。符號404包括繼之以長度值,且隨後繼之以文字資料位元組之序列的標籤位元組。標籤位元組之最高有效的六個位元經編碼以指示多少個位元組用來儲存長度值。對應於60、61、62或63的二進制值分別對應於1個位元組至4個位元組之長度。長度值等於以小端格式儲存的文字之長度減一。
符號406、408、410為參考符號。符號406為一位元組偏移參考符號,其中類值等於二進制值「01」。符號406包括11位元偏移值。偏移之三個最高有效位元(o 10o 8)儲存於標籤位元組之三個最高有效位元中,且偏移之剩餘部分(位元o 7o 0)儲存於標籤位元組之後的下一位元組中。標籤位元組亦包括定位在偏移位元與類位元之間的三位元長度值(標籤位元組之編號為4至2的位元,標記為l 2l 0)。長度值表示資料長度減四;因此,符號406可儲存包括四及11在內的自四至11之長度,及包括零及2047在內的自零至2047的偏移。
符號408為二位元組偏移參考符號,其中類值等於二進制值「10」。符號408包括在標籤位元組之後的二位元組偏移值,該二位元組偏移值儲存為小端16位元整數。換言之,偏移之第一位元組儲存八個最低有效位元,且偏移之第二位元組儲存八個最高有效位元。長度值儲存於標籤位元組之最高有效的六個位元中,且表示將要複製的資料之長度減一。符號408可儲存包括一及64在內的自一至64之長度,及包括零及65,535在內的自零至65,535的偏移。
符號408為四位元組偏移參考符號,其中類值等於二進制值「11」。符號408包括在標籤位元組之後的四位元組偏移值,該四位元組偏移值儲存為小端32位元整數。長度值儲存於標籤位元組之最高有效的六個位元中,且等於將要複製的資料之長度減一。在使用中,四位元組偏移 參考符號在壓縮資料中可為極罕見的,因為此類符號之產生將需要壓縮器維持大量歷史。
參考回圖3A,在讀取標籤值之後,在方塊308中,計算裝置100判定標籤值是否大於最大資料長度。若標籤值大於最大資料長度,則計算裝置100可不能夠進行符號之快速路徑解壓縮。在許多實施例中,最大資料長度可為60個位元組,因為如以上所描述,若標籤值之較高六個位元大於或等於60(因為較高六個位元包括長度減一),則符號可為大文字符號,諸如圖4之符號404。在該等實施例中,計算裝置100可判定標籤位元組之較高六個位元是否大於或等於60,此可等效於判定標籤值是否大於或等於60乘以四。若計算裝置100判定標籤值大於最大資料長度,則方法300分支至方塊310。若否,則計算裝置100前進至方塊312,以下所描述。
在方塊310中,計算裝置100使用慢速路徑常式解壓縮當前輸入符號。慢速路徑常式可執行普通的、最佳化或未最佳化的解壓縮演算法。特定而言,當執行慢速路徑常式時,計算裝置100可執行不可預測分支指令或其他潛在慢速指令以執行輸入符號之正確解壓縮。因為極少採用慢速路徑,所以方法300之整體效能可並未不利地受分支誤預測損失或慢速路徑中的其他效能問題影響。當執行慢速路徑常式時,計算裝置100可不做出關於當前輸入符號之類型之假定,且因此可檢查所有潛在格式。例如,雖然標籤位元組可使該標籤位元組之較高六個位元大於或等 於60,但當前輸入符號未必為長文字符號。例如,當前符號可為具有大於60之長度的二位元組或四位元組參考符號。在解壓縮當前符號及因此更新輸入串流指標及輸出串流指標之後,方法300循環回至方塊306,以繼續解壓縮下一符號。
參考回至方塊308,若標籤值不大於或等於60乘以四,則方法300前進至方塊312。因為標籤值將僅極少大於或等於60乘以四,所以在大多數迭代中,方法300前進至方塊312。因此,處理器120之分支預測硬體可能夠以高精確度預測方法300是否前進至方塊312。在方塊312中,計算裝置100將類值設定為等於標籤位元組之較低兩個位元。計算裝置100可例如使用一或多個逐位元操作遮蔽較低兩個位元。如圖4中所示,二位元類值識別四個不同類型之符號:文字、一位元組偏移參考、二位元組偏移參考及四位元組偏移參考。
在方塊314中,計算裝置100判定當前符號之類是否為四位元組偏移參考符號。例如,計算裝置100可判定類值是否等於二進制值「11」。計算裝置100可不能夠進行四位元組偏移參考符號之快速路徑解壓縮。若符號為四位元組偏移參考符號,則方法300分支至方塊310以執行慢速路徑解壓縮常式,如以上所描述。若符號並非四位元組偏移參考符號,則方法300前進至方塊316。如以上所描述,四位元組偏移參考符號為罕見的。因此,在大多數迭代中,方法300前進至方塊316,且處理器120之分支預測 硬體可能夠以高精確度預測方法300是否前進至方塊316。
在方塊316中,計算裝置100藉由使用標籤位元組索引下一符號增量表216來查找至下一符號的增量值。下一符號增量表216為小的(例如,不超過256個位元組),且可能夠儲存於處理器120之快取記憶體中。因此,下一符號增量值之判定可極快地(亦即,在L1快取命中所需要的時間例如四個時鐘週期內)完成。如以下所描述,下一符號增量值可經增添至輸入串流指標以判定下一符號在輸入串流212中之位置。因此,下一符號增量值之判定可在方法300之關鍵路徑上。藉由迅速地計算下一符號增量值及在不取決於任何不可預測分支的情況下,計算裝置100可減少關鍵路徑之長度及/或潛時。特定而言,在具有能夠進行亂序指令執行的處理器120的實施例中,計算裝置100可能夠繼續亂序執行以用於額外輸入符號之解壓縮。此外,雖然例示為自下一符號增量表216查找下一符號增量值,但應理解,在一些實施例中,計算裝置100可以程式設計方式計算下一符號增量值。
在方塊318中,計算裝置100藉由使用標籤位元組索引文字增量表218來查找至文字符號之起點的增量值。如由圖4之符號402、404所例示,對於文字符號,自標籤位元組之位址至文字資料之起點的增量可在1個位元組至5個位元組之間變化,取決於文字資料之長度。另外,文字增量表218可包括用於與參考符號相關聯的標籤位元組之任何值,因為文字增量值將不用於該等符號。類 似於下一符號增量表216,文字增量表218為小的(例如,不超過256個位元組),且可能夠儲存於處理器120之快取記憶體中。此外,雖然例示為自文字增量表218查找文字增量值,但應理解,在一些實施例中,計算裝置100可以程式設計方式計算文字增量值。另外或替代地,在一些實施例中,快速路徑解壓縮常式可僅解壓縮具有一位元組之偏移的相對短的文字。在該等實施例中,文字增量表218可包括所有「一」,或至文字資料之起點的增量可為恆定值一,且可省略文字增量表218。
在方塊320中,計算裝置100藉由使用標籤位元組索引長度表220來查找將要複製的資料之長度。可由快速路徑解壓縮過程處理的所有符號包括標籤位元組自身中的資料長度之表示。例如,圖4之符號402、406、408全部包括標籤位元組中的長度。長度表220可包括用於將不由快速路徑常式處理的標籤位元組之任何值,或不包括用於將不由快速路徑常式處理的標籤位元組之值。類似於表216、218,長度表220為小的(例如,不超過256個位元組),且可能夠儲存於處理器120之快取記憶體中。此外,雖然例示為自長度表220查找資料長度值,但應理解、在一些實施例中,計算裝置100可以程式設計方式計算資料長度值。
在方塊322中,計算裝置100使標籤值右移五個位元,從而保持原始較高三個位元。右移標籤值允許計算裝置100擷取用於一位元組參考符號之移位之較高位元。 如由圖4之符號406所例示,使標籤位元組右移五個位元將偏移之較高三個位元(o 10o 8)移動至標籤位元組之三個最低有效位元。
在方塊324中,計算裝置100設定文字指標以指向輸入串流指標加如以上在方塊318中所判定的文字增量值。計算裝置100可在不判定當前符號是否為文字符號或參考符號的情況下設定文字指標。如以下所描述,計算裝置100將不考慮用於參考符號之文字指標。
現參考圖3B,方法300繼續進行方塊326,在該方塊中,計算裝置100在符號為二位元組偏移參考符號的情況下將偏移值之第二位元組有條件地移動至標籤值,在符號並非二位元組偏移參考符號的情況下,保留標籤值。如由圖4之符號408所例示,對於二位元組偏移符號,偏移值之第二位元組包括偏移之八個最高有效位元(位元15至8)。計算裝置100可使用任何技術來在不執行條件轉移指令的情況下有條件地設定標籤值。例如,計算裝置100可使用三次式運算子、預測指令、條件移動指令或其他處理器指令來執行條件移動。在例示性實施例中,計算裝置100測試類值是否匹配二進制值「10」,且隨後基於測試之結果來執行條件移動(CMOV)指令。執行條件移動指令允許計算裝置100在不執行任何不可預測分支指令及引起相關聯分支誤預測損失的情況下選擇適當值。
在方塊328中,計算裝置100將偏移值設定為標籤值及偏移之第一位元組之序連連接。如以上所描述,標 籤值包括偏移值之三個最高有效位元,如以上與方塊322相聯繫所描述,或偏移值之八個最高有效位元,如以上與方塊326相聯繫所描述。因此,在序連連接之後,針對一位元組及二位元組偏移符號兩者校正偏移值。另外,如以上所描述,偏移值可已在不執行任何不可預測分支指令的情況下經計算。
在方塊330中,計算裝置100在符號具有文字類的情況下將源指標有條件地設定為文字指標,且在符號不具有文字類值的情況下將源指標有條件地設定為輸出串流指標與偏移值之間的差異。計算裝置100可使用任何技術來有條件地設定源指標。例如,計算裝置100可使用三次式運算子、預測指令、條件移動指令或其他處理器指令來執行條件移動。在例示性實施例中,計算裝置100測試類值是否為二進制值「00」,且隨後執行條件移動(CMOV)指令以基於測試之結果來移動文字指標或輸出串流指標與偏移值之間的差異。執行條件移動指令允許計算裝置100在不執行任何不可預測分支指令及引起相關聯分支誤預測損失的情況下設定源指標之適當值。在判定源指標之後,計算裝置100可將資料長度量之位元組自源指標複製至輸出串流指標,如以下進一步描述。實際資料因此係自輸入串流212之文字資料或自先前輸出至輸出串流214的資料複製。
在方塊332中,計算裝置100判定偏移值是否小於16及符號之類是否並非文字。在一些實施例中,計算裝 置100可執行該測試之縮短邏輯評估。亦即,若偏移值大於或等於16,則計算裝置100可不測試符號之類。在許多實施例中,偏移值通常大於或等於16。因此,方塊332之判定可為使用計算裝置100之分支預測硬體高度可預測的。若偏移值小於16且類並非文字,則方法332分支至方塊336,如下所描述。若否,則方法300分支至方塊334。
在方塊334中,計算裝置100執行起始於源指標的資料長度數目個位元組至輸出串流指標的16位元組塊記憶體複製。在許多實施例中,計算裝置100之處理器120可能夠例如使用特別向量指令或向量暫存器來進行快速16位元組非對準記憶體複製。因為計算裝置100每次複製資料之16個位元組,所以可將相較於所請求資料長度的較多資料複製至輸出串流214。然而,如以下所描述,在完成複製之後,該不正確地複製的資料將超過輸出串流指標而定位,且因此將在額外符號經解碼時以正確資料覆寫。在複製資料之後,方法300前進至方塊338,以下所描述。
參考回至方塊332,若偏移值小於16且類並非文字,則方法332分支至方塊336。在方塊336中,計算裝置100執行資料長度位元組自源指標至輸出串流指標的逐位元組記憶體複製。執行逐位元組複製可通常比塊複製較緩慢,但可需要逐位元組複製以用於正確性且/或以避免頁故障或其他錯誤。在複製資料之後,方法300前進至方塊338。
在方塊338中,計算裝置100使輸出串流指標增 量複製至輸出串流214的資料之長度。因此,準備輸出串流指標以在輸出串流214中的正確位置處寫入用於下一符號之解壓縮資料。在方塊340中,計算裝置100使輸入串流指標增量下一符號增量值。因此,準備輸入串流指標以在輸入串流212中的正確位置處讀取用於下一輸入符號之資料。
在方塊342中,計算裝置100判定額外符號是否仍然要解碼。計算裝置100可使用任何技術來判定額外符號是否剩餘,諸如將輸出串流指標或輸入串流指標與先前基於壓縮檔案之標頭判定的最大大小進行比較、測試在輸入串流212中是否已達到檔案之終點,或任何其他測試。若額外符號剩餘,則方法300循環回至方塊306以讀取下一標籤位元組,如圖3A中所示。若無額外符號剩餘,則完成方法300。計算裝置100可關閉輸入串流212及/或輸出串流214,輸出解壓縮內容,或執行任何其他所需要的處理來產生解壓縮輸出。方法300可在方塊302處重新開始以執行額外解壓縮。
現參考圖5,假碼500例示方法300之一潛在實施例。如所示,假碼500操作306'至340',該等操作各自分別對應於圖3A及圖3B之方塊306至340之一例示性實施例。特定而言,假碼500藉由執行若真則可跳轉至慢速路徑常式的高度可預測「條件(if)」語句來在操作308'至314'中判定是否應用慢速路徑常式,該等操作對應於方塊308至314之一例示性實施例。另外,假碼500在操作330'中有條件地 指派源指標之值,該操作包括三次式運算子且對應於方塊330之一例示性實施例。如以上所描述,在許多實施例中,該三次式運算子可經編譯為包括諸如CMOV的條件移動指令的可執行碼。假碼500亦使用包括三次式運算子的類似操作326'來有條件地移動偏移值之第二位元組,該類似操作對應於方塊326之一例示性實施例。現參考圖6,假碼600例示操作326"、328",該等操作各自分別對應於方法300之方塊326、328之另一例示性實施例。如所示,假碼600亦使用三次式運算子來計算偏移值,此可編譯為包括諸如CMOV的條件移動指令的可執行碼。
實例
以下提供本文所揭示的技術之例示性實例。技術之一實施例可包括以下所描述之實例中任何一或多個及該等實例之任何組合。
實例1包括用於資料解壓縮之計算裝置,該計算裝置包含:輸入模組,其用以自藉由輸入指標識別的記憶體位置讀取符號標籤值;符號標籤解碼模組,其用以根據符號標籤值來判定下一符號增量值、文字增量值、資料長度及偏移值;資料源模組,其用以(i)回應於符號標籤值包括文字類值之判定而將源指標有條件地設定為輸入指標加文字增量值,及(ii)回應於符號標籤值不包括文字類值之判定而將該源指標有條件地設定為輸出指標減偏移值;以及輸出模組,其用以將資料長度之資料自藉由源指標識別的記憶體位置複製至藉由輸出指標識別的記憶體位置;其 中輸入模組進一步用以回應於該資料之複製而使輸入指標增量下一符號增量值。
實例2包括實例1之主題,且其中用以有條件地設定源指標包含用以在無分支指令之執行的情況下有條件地設定源指標。
實例3包括實例1及實例2中任何實例之主題,且其中用以有條件地設定源指標包含使用條件移動指令來有條件地設定源指標。
實例4包括實例1至實例3中任何實例之主題,且進一步包括慢速路徑模組,其用以回應於當前符號不可經快速路徑解碼之判定而執行慢速路徑解壓縮常式;其中符號標籤解碼模組進一步用以根據符號標籤值且在下一符號增量值之判定之前判定當前符號是否可經快速路徑解碼。
實例5包括實例1至實例4中任何實例之主題,且其中用以判定當前符號是否可經快速路徑解碼包含用以根據符號標籤判定資料長度是否與最大資料長度具有預定關係。
實例6包括實例1至實例5中任何實例之主題,且其中用以判定資料長度是否與最大資料長度具有預定關係包含用以判定資料長度是否大於六十個位元組。
實例7包括實例1至實例6中任何實例之主題,且其中用以判定當前符號是否可經快速路徑解碼包含用以判定符號標籤是否包括四位元組偏移類值。
實例8包括實例1至實例7中任何實例之主題,且 其中用以判定下一符號增量值包含用以使用符號標籤值來索引下一符號增量表。
實例9包括實例1至實例8中任何實例之主題,且其中用以索引下一符號增量表包含用以在下一符號增量表中查找下一符號增量值,該下一符號增量表儲存於計算裝置之處理器之快取記憶體中。
實例10包括實例1至實例9中任何實例之主題,且其中用以判定文字增量值包含用以使用符號標籤值來索引文字增量表。
實例11包括實例1至實例10中任何實例之主題,且其中用以索引文字增量表包含用以在文字增量表中查找文字增量值,該文字增量表儲存於計算裝置之處理器之快取記憶體中。
實例12包括實例1至實例11中任何實例之主題,且其中用以判定資料長度包含用以使用符號標籤值來索引長度表。
實例13包括實例1至實例12中任何實例之主題,且其中用以索引長度表包含用以在長度表中查找資料長度,該長度表儲存於計算裝置之處理器之快取記憶體中。
實例14包括實例1至實例13中任何實例之主題,且其中用以讀取符號標籤值包含用以自藉由輸入指標識別的記憶體位置讀取標籤位元組。
實例15包括實例1至實例14中任何實例之主題,且其中用以根據符號標籤值判定偏移值包含用以:使標籤 位元組右移五個位元;若符號標籤值包括二位元組偏移類值,則將標籤位元組有條件地設定為自藉由輸入指標識別的記憶體位置讀取的第二偏移位元組,且若符號標籤值不包括二位元組偏移類值,則將標籤位元組有條件地設定為標籤位元組;以及序連連接標籤位元組及自藉由輸入指標識別的記憶體位置讀取的第一偏移位元組,以產生偏移值。
實例16包括實例1至實例15中任何實例之主題,且其中用以有條件地設定標籤位元組包含用以使用條件移動指令來有條件地設定標籤位元組。
實例17包括實例1至實例16中任何實例之主題,且其中用以將資料長度之資料自藉由源指標識別的記憶體位置複製至藉由輸出指標識別的記憶體位置包含用以:判定偏移值是否小於預定塊大小;回應於偏移值小於預定塊大小之判定而判定符號標籤值是否不包括文字類值;回應於符號標籤值不包括文字類值之判定而執行資料長度自藉由源指標識別的記憶體位置至藉由輸出指標識別的記憶體位置之逐位元組記憶體複製;以及回應於偏移值不小於預定塊大小之判定或回應於符號標籤值包括文字類值之判定而執行使用預定塊大小之塊的資料長度自藉由源指標識別的記憶體位置至藉由輸出指標識別的記憶體位置之塊記憶體複製。
實例18包括實例1至實例17中任何實例之主題,且其中預定塊大小包含十六個位元組、三十二個位元組或 六十四個位元組。
實例19包括實例1至實例18中任何實例之主題,且其中輸出模組進一步用以回應於資料之複製而使輸出指標增量資料長度。
實例20包括實例1至實例19中任何實例之主題,且其中輸入模組進一步用以回應於輸入指標之增量而判定額外符號是否剩餘;以及回應於額外符號剩餘之判定而自藉由輸入指標識別的記憶體位置讀取下一符號標籤值。
實例21包括用於資料解壓縮之方法,該方法包含:由計算裝置自藉由輸入指標識別的記憶體位置讀取符號標籤值;由計算裝置根據符號標籤值判定下一符號增量值、文字增量值、資料長度及偏移值;由計算裝置(i)回應於判定符號標籤值包括文字類值而將源指標有條件地設定為輸入指標加文字增量值,且(ii)回應於判定符號標籤值不包括文字類值而將源指標有條件地設定為輸出指標減偏移值;由計算裝置將資料長度之資料自藉由源指標識別的記憶體位置複製至藉由輸出指標識別的記憶體位置;以及由計算裝置回應於複製資料而使輸入指標增量下一符號增量值。
實例22包括實例21之主題,且其中有條件地設定源指標包含在不執行分支指令的情況下有條件地設定源指標。
實例23包括實例21及實例22中任何實例之主題,且其中有條件地設定源指標包含使用條件移動指令來 有條件地設定源指標。
實例24包括實例21至實例23中任何實例之主題,且進一步包括:由計算裝置根據符號標籤值且在判定下一符號增量值之前判定當前符號是否可經快速路徑解碼;以及由計算裝置回應於判定當前符號不可經快速路徑解碼而執行慢速路徑解壓縮常式。
實例25包括實例21至實例24中任何實例之主題,且其中判定當前符號是否可經快速路徑解碼包含根據符號標籤判定資料長度是否與最大資料長度具有預定關係。
實例26包括實例21至實例25中任何實例之主題,且其中判定資料長度是否與最大資料長度具有預定關係包含判定資料長度是否大於六十個位元組。
實例27包括實例21至實例26中任何實例之主題,且其中判定當前符號是否可經快速路徑解碼包含判定符號標籤是否包括四位元組偏移類值。
實例28包括實例21至實例27中任何實例之主題,且其中判定下一符號增量值包含使用符號標籤值來索引下一符號增量表。
實例29包括實例21至實例28中任何實例之主題,且其中索引下一符號增量表包含在下一符號增量表中查找下一符號增量值,該下一符號增量表儲存於計算裝置之處理器之快取記憶體中。
實例30包括實例21至實例29中任何實例之主 題,且其中判定文字增量值包含使用符號標籤值來索引文字增量表。
實例31包括實例21至實例30中任何實例之主題,且其中索引文字增量表包含在文字增量表中查找文字增量值,該文字增量表儲存於計算裝置之處理器之快取記憶體中。
實例32包括實例21至實例31中任何實例之主題,且其中判定資料長度包含使用符號標籤值來索引長度表。
實例33包括實例21至實例32中任何實例之主題,且其中索引長度表包含在長度表中查找資料長度,該長度表儲存於計算裝置之處理器之快取記憶體中。
實例34包括實例21至實例33中任何實例之主題,且其中讀取符號標籤值包含自藉由輸入指標識別的記憶體位置讀取標籤位元組。
實例35包括實例21至實例34中任何實例之主題,且其中根據符號標籤值判定偏移值包含:使標籤位元組右移五個位元;若符號標籤值包括二位元組偏移類值,則將標籤位元組有條件地設定為自藉由輸入指標識別的記憶體位置讀取的第二偏移位元組,且若符號標籤值不包括二位元組偏移類值,則將標籤位元組有條件地設定為標籤位元組;以及序連連接標籤位元組及自藉由輸入指標識別的記憶體位置讀取的第一偏移位元組,以產生偏移值。
實例36包括實例21至實例35中任何實例之主 題,且其中有條件地設定標籤位元組包含使用條件移動指令來有條件地設定標籤位元組。
實例37包括實例21至實例36中任何實例之主題,且其中將資料長度之資料自藉由源指標識別的記憶體位置複製至藉由輸出指標識別的記憶體位置包含:判定偏移值是否小於預定塊大小;回應於判定偏移值小於預定塊大小而判定符號標籤值是否不包括文字類值;回應於判定符號標籤值不包括文字類值而執行資料長度自藉由源指標識別的記憶體位置至藉由輸出指標識別的記憶體位置之逐位元組記憶體複製;以及回應於判定偏移值不小於預定塊大小或回應於判定符號標籤值包括文字類值而執行使用預定塊大小之塊的資料長度自藉由源指標識別的記憶體位置至藉由輸出指標識別的記憶體位置之塊記憶體複製。
實例38包括實例21至實例37中任何實例之主題,且其中預定塊大小包含十六個位元組、三十二個位元組或六十四個位元組。
實例39包括實例21至實例38中任何實例之主題,且進一步包括由計算裝置回應於複製資料而使輸出指標增量資料長度。
實例40包括實例21至實例39中任何實例之主題,且進一步包括:由計算裝置回應於使輸入指標增量而判定額外符號是否剩餘;以及由計算裝置回應於判定額外符號剩餘而自藉由輸入指標識別的記憶體位置讀取下一符號標籤值。
實例41包括計算裝置,該計算裝置包含處理器;以及記憶體,該記憶體中儲存有多個指令,該等多個指令在由處理器執行時使計算裝置執行實例21至實例40中任何實例之方法。
實例42包括一或多個機器可讀儲存媒體,該一或多個機器可讀儲存媒體包含多個指令,該等多個指令儲存於該一或多個機器可讀儲存媒體上,該等多個指令回應於被執行而導致計算裝置執行實例21至實例40中任何實例之方法。
實例43包括計算裝置,該計算裝置包含用於執行實例21至實例40中任何實例之方法。
實例44包括用於資料解壓縮之計算裝置,該計算裝置包含:讀取構件,其用於自藉由輸入指標識別的記憶體位置讀取符號標籤值;判定構件,其用於根據符號標籤值判定下一符號增量值、文字增量值、資料長度及偏移值;設定構件,其用於(i)回應於判定符號標籤值包括文字類值而將源指標有條件地設定為輸入指標加文字增量值,且(ii)回應於判定符號標籤值不包括文字類值而將源指標有條件地設定為輸出指標減偏移值;複製構件,其用於將資料長度之資料自藉由源指標識別的記憶體位置複製至藉由輸出指標識別的記憶體位置;以及增量構件,其用於回應於複製資料而使輸入指標增量下一符號增量值。
實例45包括實例44之主題,且其中用於有條件地設定源指標之構件包含用於在不執行分支指令的情況下 有條件地設定源指標之構件。
實例46包括實例44及實例45中任何實例之主題,且其中用於有條件地設定源指標之構件包含用於使用條件移動指令來有條件地設定源指標之構件。
實例47包括實例44至實例46中任何實例之主題,且進一步包括:判定構件,其用於根據符號標籤值且在判定下一符號增量值之前判定當前符號是否可經快速路徑解碼;以及執行構件,其用於回應於判定當前符號不可經快速路徑解碼而執行慢速路徑解壓縮常式。
實例48包括實例44至實例47中任何實例之主題,且其中用於判定當前符號是否可經快速路徑解碼之構件包含用於根據符號標籤判定資料長度是否與最大資料長度具有預定關係之構件。
實例49包括實例44至實例48中任何實例之主題,且其中用於判定資料長度是否與最大資料長度具有預定關係之構件包含用於判定資料長度是否大於六十個位元組之構件。
實例50包括實例44至實例49中任何實例之主題,且其中用於判定當前符號是否可經快速路徑解碼之構件包含用於判定符號標籤是否包括四位元組偏移類值之構件。
實例51包括實例44至實例50中任何實例之主題,且其中用於判定下一符號增量值之構件包含用於使用符號標籤值來索引下一符號增量表之構件。
實例52包括實例44至實例51中任何實例之主題,且其中用於索引下一符號增量表之構件包含用於在下一符號增量表中查找下一符號增量值之構件,該下一符號增量表儲存於計算裝置之處理器之快取記憶體中。
實例53包括實例44至實例52中任何實例之主題,且其中用於判定文字增量值之構件包含用於使用符號標籤值來索引文字增量表之構件。
實例54包括實例44至實例53中任何實例之主題,且其中用於索引文字增量表之構件包含用於在文字增量表中查找文字增量值之構件,該文字增量表儲存於計算裝置之處理器之快取記憶體中。
實例55包括實例44至實例54中任何實例之主題,且其中用於判定資料長度之構件包含用於使用符號標籤值來索引長度表之構件。
實例56包括實例44至實例55中任何實例之主題,且其中用於索引長度表之構件包含用於在長度表中查找資料長度之構件,該長度表儲存於計算裝置之處理器之快取記憶體中。
實例57包括實例44至實例56中任何實例之主題,且其中用於讀取符號標籤值之構件包含用於自藉由輸入指標識別的記憶體位置讀取標籤位元組之構件。
實例58包括實例44至實例57中任何實例之主題,且其中用於根據符號標籤值判定偏移值之構件包含:右移構件,其用於使標籤位元組右移五個位元;設定構 件,其用於若符號標籤值包括二位元組偏移類值,則將標籤位元組有條件地設定為自藉由輸入指標識別的記憶體位置讀取的第二偏移位元組,且若符號標籤值不包括二位元組偏移類值,則將標籤位元組有條件地設定為標籤位元組;以及序連連接構件,其用於序連連接標籤位元組及自藉由輸入指標識別的記憶體位置讀取的第一偏移位元組,以產生偏移值。
實例59包括實例44至實例58中任何實例之主題,且其中用於有條件地設定標籤位元組之構件包含用於使用條件移動指令來有條件地設定標籤位元組之構件。
實例60包括實例44至實例59中任何實例之主題,且其中用於將資料長度之資料自藉由源指標識別的記憶體位置複製至藉由輸出指標識別的記憶體位置之構件包含:判定構件,其用於判定偏移值是否小於預定塊大小;判定構件,其用於回應於判定偏移值小於預定塊大小而判定符號標籤值是否不包括文字類值;執行構件,其用於回應於判定符號標籤值不包括文字類值而執行資料長度自藉由源指標識別的記憶體位置至藉由輸出指標識別的記憶體位置之逐位元組記憶體複製;以及執行構件,其用於回應於判定偏移值不小於預定塊大小或回應於判定符號標籤值包括文字類值而執行使用預定塊大小之塊的資料長度自藉由源指標識別的記憶體位置至藉由輸出指標識別的記憶體位置之塊記憶體複製。
實例61包括實例44至實例60中任何實例之主 題,且其中預定塊大小包含十六個位元組、三十二個位元組或六十四個位元組。
實例62包括實例44至實例61中任何實例之主題,且進一步包括增量構件,該增量構件用於回應於複製資料而使輸出指標增量資料長度。
實例63包括實例44至實例62中任何實例之主題,且進一步包括:判定構件,其用於回應於使輸入指標增量而判定額外符號是否剩餘;以及讀取構件,其用於回應於判定額外符號剩餘而自藉由輸入指標識別的記憶體位置讀取下一符號標籤值。
100‧‧‧計算裝置
200‧‧‧環境/實施例
202‧‧‧輸入模組
204‧‧‧符號標籤解碼模組
206‧‧‧資料源模組
208‧‧‧輸出模組
210‧‧‧慢速路徑模組
212‧‧‧輸入串流
214‧‧‧輸出串流
216‧‧‧下一符號增量表
218‧‧‧文字增量表
220‧‧‧長度表

Claims (25)

  1. 一種用於資料解壓縮之計算裝置,該計算裝置包含:一輸入模組,其用以自藉由一輸入指標識別的一記憶體位置讀取一符號標籤值;一符號標籤解碼模組,其用以根據該符號標籤值來判定一下一符號增量值、一文字增量值、一資料長度及一偏移值;一資料源模組,其用以(i)回應於該符號標籤值包括一文字類值之一判定而將一源指標有條件地設定為該輸入指標加該文字增量值,及(ii)回應於該符號標籤值不包括該文字類值之一判定而將該源指標有條件地設定為一輸出指標減該偏移值;以及一輸出模組,其用以將該資料長度之資料自藉由該源指標識別的一記憶體位置複製至藉由該輸出指標識別的一記憶體位置;其中該輸入模組進一步用以回應於該資料之複製而使該輸入指標增量該下一符號增量值。
  2. 如請求項1之計算裝置,其中用以有條件地設定該源指標包含用以在無一分支指令之執行的情況下有條件地設定該源指標。
  3. 如請求項2之計算裝置,其中用以有條件地設定該源指標包含用以使用一條件移動指令來有條件地設定該源指標。
  4. 如請求項1之計算裝置,其進一步包含:一慢速路徑模組,其用以回應於一當前符號不可經快速路徑解碼之一判定而執行一慢速路徑解壓縮常式;其中該符號標籤解碼模組進一步用以根據該符號標籤值且在該下一符號增量值之一判定之前判定該當前符號是否可經快速路徑解碼。
  5. 如請求項4之計算裝置,其中用以判定該當前符號是否可經快速路徑解碼包含用以:根據該符號標籤判定該資料長度是否與一最大資料長度具有一預定關係,其中用以判定該資料長度是否與該最大資料長度具有該預定關係包含用以決定該資料長度是否大於六十個位元組;以及判定該符號標籤是否包括一四位元組偏移類值。
  6. 如請求項1之計算裝置,其中用以判定該下一符號增量值包含用以使用該符號標籤值來索引一下一符號增量表,其中用以索引該下一符號增量表包含用以在該下一符號增量表中查找該下一符號增量值,該下一符號增量表儲存於該計算裝置之一處理器之一快取記憶體中。
  7. 如請求項1之計算裝置,其中用以判定該文字增量值包含用以使用該符號標籤值來索引一文字增量表,其中用以索引該文字增量表包含用以在該文字增量表中查找該文字增量值,該文字增量表儲存於該計算裝置之一處理器之一快取記憶體中。
  8. 如請求項1之計算裝置,其中用以判定該資料長度包含 用以使用該符號標籤值來索引一長度表,其中用以索引該長度表包含用以在該長度表中查找該資料長度,該長度表儲存於該計算裝置之一處理器之一快取記憶體中。
  9. 如請求項1之計算裝置,其中:用以讀取該符號標籤值包含用以自藉由該輸入指標識別的該記憶體位置讀取一標籤位元組;且用以根據該符號標籤值判定該偏移值包含用以:使該標籤位元組右移五個位元;若該符號標籤值包括一二位元組偏移類值,則將該標籤位元組有條件地設定為自藉由該輸入指標識別的該記憶體位置讀取的一第二偏移位元組,且若該符號標籤值不包括該二位元組偏移類值,則將該標籤位元組有條件地設定為該標籤位元組;以及序連連接該標籤位元組及自藉由該輸入指標識別的該記憶體位置讀取的一第一偏移位元組,以產生該偏移值。
  10. 如請求項9之計算裝置,其中用以有條件地設定該標籤位元組包含用以使用一條件移動指令來有條件地設定該標籤位元組。
  11. 如請求項1之計算裝置,其中用以將該資料長度之資料自藉由該源指標識別的該記憶體位置複製至藉由該輸出指標識別的該記憶體位置包含用以:判定該偏移值是否小於十六; 回應於該偏移值小於十六之一判定而判定該符號標籤值是否不包括一文字類值;回應於該符號標籤值不包括該文字類值之一判定而執行該資料長度自藉由該源指標識別的該記憶體位置至藉由該輸出指標識別的該記憶體位置之一逐位元組記憶體複製;以及回應於該偏移值不小於十六之一判定或回應於該符號標籤值包括該文字類值之一判定而執行該資料長度自藉由該源指標識別的該記憶體位置至藉由該輸出指標識別的該記憶體位置之一十六位元組塊記憶體複製。
  12. 一種用於資料解壓縮之方法,該方法包含:由一計算裝置自藉由一輸入指標識別的一記憶體位置讀取一符號標籤值;由該計算裝置根據該符號標籤值判定一下一符號增量值、一文字增量值、一資料長度及一偏移值;由該計算裝置(i)回應於判定該符號標籤值包括一文字類值而將一源指標有條件地設定為該輸入指標加該文字增量值,且(ii)回應於判定該符號標籤值不包括該文字類值而將該源指標有條件地設定為一輸出指標減該偏移值;由該計算裝置將該資料長度之資料自藉由該源指標識別的一記憶體位置複製至藉由該輸出指標識別的一記憶體位置;以及 由該計算裝置回應於複製該資料而使該輸入指標增量該下一符號增量值。
  13. 如請求項12之方法,其中有條件地設定該源指標包含在不執行一分支指令的情況下有條件地設定該源指標。
  14. 如請求項13之方法,其中有條件地設定該源指標包含使用一條件移動指令來有條件地設定該源指標。
  15. 如請求項12之方法,其進一步包含:由該計算裝置根據該符號標籤值且在判定該下一符號增量值之前判定一當前符號是否可經快速路徑解碼;以及由該計算裝置回應於判定該當前符號不可經快速路徑解碼而執行一慢速路徑解壓縮常式。
  16. 如請求項12之方法,其中讀取該符號標籤值包含自藉由該輸入指標識別的該記憶體位置讀取一標籤位元組;以及根據該符號標籤值判定該偏移值包含:使該標籤位元組右移五個位元;若該符號標籤值包括一二位元組偏移類值,則將該標籤位元組有條件地設定為自藉由該輸入指標識別的該記憶體位置讀取的一第二偏移位元組,且若該符號標籤值不包括該二位元組偏移類值,則將該標籤位元組有條件地設定為該標籤位元組;以及序連連接該標籤位元組及自藉由該輸入指標 識別的該記憶體位置讀取的一第一偏移位元組,以產生該偏移值。
  17. 如請求項16之方法,其中有條件地設定該標籤位元組包含使用一條件移動指令來有條件地設定該標籤位元組。
  18. 如請求項12之方法,其中將該資料長度之資料自藉由該源指標識別的該記憶體位置複製至藉由該輸出指標識別的該記憶體位置包含:判定該偏移值是否小於十六;回應於判定該偏移值小於十六而判定該符號標籤值是否不包括一文字類值;回應於判定該符號標籤值不包括該文字類值而執行該資料長度自藉由該源指標識別的該記憶體位置至藉由該輸出指標識別的該記憶體位置之一逐位元組記憶體複製;以及回應於判定該偏移值不小於十六或回應於判定該符號標籤值包括該文字類值而執行該資料長度自藉由該源指標識別的該記憶體位置至藉由該輸出指標識別的該記憶體位置之一十六位元組塊記憶體複製。
  19. 一或多種電腦可讀儲存媒體,其包含多個指令,該等多個指令回應於被執行而使一計算裝置用以:自藉由一輸入指標識別的一記憶體位置讀取一符號標籤值;根據該符號標籤值判定一下一符號增量值、一文字增量值、一資料長度及一偏移值; (i)回應於判定該符號標籤值包括一文字類值而將一源指標有條件地設定為該輸入指標加該文字增量值,且(ii)回應於判定該符號標籤值不包括該文字類值而將該源指標有條件地設定為一輸出指標減該偏移值;將該資料長度之資料自藉由該源指標識別的一記憶體位置複製至藉由該輸出指標識別的一記憶體位置;以及回應於複製該資料而使該輸入指標增量該下一符號增量值。
  20. 如請求項19之一或多種電腦可讀儲存媒體,其中用以有條件地設定該源指標包含用以在不執行一分支指令的情況下有條件地設定該源指標。
  21. 如請求項20之一或多種電腦可讀儲存媒體,其中用以有條件地設定該源指標包含用以使用一條件移動指令來有條件地設定該源指標。
  22. 如請求項19之一或多種電腦可讀儲存媒體,其進一步包含多個指令,該等多個指令回應於被執行而使該計算裝置用以:根據該符號標籤值且在判定該下一符號增量值之前判定一當前符號是否可經快速路徑解碼;以及回應於判定該當前符號不可經快速路徑解碼而執行一慢速路徑解壓縮常式。
  23. 如請求項19之一或多種電腦可讀儲存媒體,其中:用以讀取該符號標籤值包含用以自藉由該輸入指 標識別的該記憶體位置讀取一標籤位元組;且用以根據該符號標籤值判定該偏移值包含用以:使該標籤位元組右移五個位元;若該符號標籤值包括一二位元組偏移類值,則將該標籤位元組有條件地設定為自藉由該輸入指標識別的該記憶體位置讀取的一第二偏移位元組,且若該符號標籤值不包括該二位元組偏移類值,則將該標籤位元組有條件地設定為該標籤位元組;以及序連連接該標籤位元組及自藉由該輸入指標識別的該記憶體位置讀取的一第一偏移位元組,以產生該偏移值。
  24. 如請求項23之一或多種電腦可讀儲存媒體,其中用以有條件地設定該標籤位元組包含用以使用一條件移動指令來有條件地設定該標籤位元組。
  25. 如請求項19之一或多種電腦可讀儲存媒體,其中用以將該資料長度之資料自藉由該源指標識別的該記憶體位置複製至藉由該輸出指標識別的該記憶體位置包含用以:判定該偏移值是否小於十六;回應於判定該偏移值小於十六而判定該符號標籤值是否不包括一文字類值;回應於判定該符號標籤值不包括該文字類值而執行該資料長度自藉由該源指標識別的該記憶體位置至 藉由該輸出指標識別的該記憶體位置之一逐位元組記憶體複製;以及回應於判定該偏移值不小於十六或回應於判定該符號標籤值包括該文字類值而執行該資料長度自藉由該源指標識別的該記憶體位置至藉由該輸出指標識別的該記憶體位置之一十六位元組塊記憶體複製。
TW104125964A 2014-09-24 2015-08-10 用於有效以lz77爲基礎的資料解壓縮之技術 TWI559688B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US14/494,766 US9524169B2 (en) 2014-09-24 2014-09-24 Technologies for efficient LZ77-based data decompression

Publications (2)

Publication Number Publication Date
TW201626730A true TW201626730A (zh) 2016-07-16
TWI559688B TWI559688B (zh) 2016-11-21

Family

ID=55525809

Family Applications (1)

Application Number Title Priority Date Filing Date
TW104125964A TWI559688B (zh) 2014-09-24 2015-08-10 用於有效以lz77爲基礎的資料解壓縮之技術

Country Status (5)

Country Link
US (2) US9524169B2 (zh)
EP (1) EP3198729A4 (zh)
CN (1) CN106664100B (zh)
TW (1) TWI559688B (zh)
WO (1) WO2016048516A1 (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9524169B2 (en) * 2014-09-24 2016-12-20 Intel Corporation Technologies for efficient LZ77-based data decompression
US10657053B2 (en) * 2017-03-31 2020-05-19 Kyocera Document Solutions Inc. Memory allocation techniques for filtering software
JP2019036810A (ja) * 2017-08-14 2019-03-07 富士通株式会社 データ圧縮装置、データ復元装置、データ圧縮プログラム、データ復元プログラム、データ圧縮方法、およびデータ復元方法
US11509328B2 (en) * 2018-05-31 2022-11-22 Microsoft Technology Licensing, Llc Computer data compression utilizing multiple symbol alphabets and dynamic binding of symbol alphabets
US11387844B2 (en) * 2019-04-19 2022-07-12 Preferred Networks, Inc. Data compression method, data compression apparatus, data decompression method, data decompression apparatus and data storage system
US11108406B2 (en) 2019-06-19 2021-08-31 Intel Corporation System, apparatus and method for dynamic priority-aware compression for interconnect fabrics
CN110545108B (zh) * 2019-09-09 2022-12-20 飞天诚信科技股份有限公司 数据处理方法、装置、电子设备及计算机可读存储介质
CN117097442B (zh) * 2023-10-19 2024-01-16 深圳大普微电子股份有限公司 一种数据解码方法、系统、设备及计算机可读存储介质

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6226680B1 (en) * 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
GB2346470B (en) * 1999-02-05 2003-10-29 Advanced Risc Mach Ltd Bitmap font data storage within data processing systems
US6883037B2 (en) * 2001-03-21 2005-04-19 Microsoft Corporation Fast data decoder that operates with reduced output buffer bounds checking
GB0210604D0 (en) * 2002-05-09 2002-06-19 Ibm Method and arrangement for data compression
GB0513433D0 (en) * 2005-06-30 2005-08-10 Nokia Corp Signal message compressor
US7538696B2 (en) * 2007-08-31 2009-05-26 Rmi Corporation System and method for Huffman decoding within a compression engine
CN101730994A (zh) * 2007-11-16 2010-06-09 美国博通公司 低密度奇偶校验(ldpc)编码的高阶调制
CN101616320B (zh) * 2008-06-26 2011-05-04 展讯通信(上海)有限公司 图像压缩、解压缩方法及设备
US7872598B2 (en) * 2008-12-10 2011-01-18 Intel Corporation Accelerated decompression
US8325069B2 (en) * 2009-12-22 2012-12-04 Intel Corporation System, method, and apparatus for a scalable processor architecture for a variety of string processing applications
CN102841907A (zh) * 2011-06-24 2012-12-26 环达电脑(上海)有限公司 数据压缩和解压缩的处理方法
US8824569B2 (en) * 2011-12-07 2014-09-02 International Business Machines Corporation High bandwidth decompression of variable length encoded data streams
US8766827B1 (en) * 2013-03-15 2014-07-01 Intel Corporation Parallel apparatus for high-speed, highly compressed LZ77 tokenization and Huffman encoding for deflate compression
US9252807B2 (en) * 2013-10-21 2016-02-02 Globalfoundries Inc. Efficient one-pass cache-aware compression
US9524169B2 (en) * 2014-09-24 2016-12-20 Intel Corporation Technologies for efficient LZ77-based data decompression
US9515678B1 (en) * 2015-05-11 2016-12-06 Via Alliance Semiconductor Co., Ltd. Hardware data compressor that directly huffman encodes output tokens from LZ77 engine

Also Published As

Publication number Publication date
WO2016048516A1 (en) 2016-03-31
CN106664100A (zh) 2017-05-10
CN106664100B (zh) 2020-10-09
US9917596B2 (en) 2018-03-13
TWI559688B (zh) 2016-11-21
US20170250706A1 (en) 2017-08-31
US20160085555A1 (en) 2016-03-24
US9524169B2 (en) 2016-12-20
EP3198729A1 (en) 2017-08-02
EP3198729A4 (en) 2018-06-13

Similar Documents

Publication Publication Date Title
TWI559688B (zh) 用於有效以lz77爲基礎的資料解壓縮之技術
RU2629440C2 (ru) Устройство и способ для ускорения операций сжатия и распаковки
US20170038978A1 (en) Delta Compression Engine for Similarity Based Data Deduplication
US11243836B2 (en) Supporting random access of compressed data
Plaisance et al. Vectorized vbyte decoding
CN112514270B (zh) 数据压缩
US9929748B1 (en) Techniques for data compression verification
US10666288B2 (en) Systems, methods, and apparatuses for decompression using hardware and software
US10694217B2 (en) Efficient length limiting of compression codes
US10230392B2 (en) Techniques for parallel data decompression
CN105844210B (zh) 硬件有效的指纹识别
US9100042B2 (en) High throughput decoding of variable length data symbols
US9137336B1 (en) Data compression techniques
JP2016052046A (ja) 圧縮装置、伸長装置およびストレージ装置
US9348535B1 (en) Compression format designed for a very fast decompressor
US10707897B1 (en) Command processor with multiple string copy engines for a decompression system
US20190361909A1 (en) Optimizing data conversion using pattern frequency
CN105843837B (zh) 硬件有效的拉宾指纹识别
US11593311B2 (en) Compression system with longest match processing for generating compressed data
US10579375B2 (en) Method to build reconfigurable variable length comparators
CN113454593A (zh) 保持多个机器生成上的复杂功能的兼容性
CN115344826A (zh) 计算装置、操作方法和机器可读存储介质

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees