JP2022520158A - 動的ハフマン表生成のためのハードウェア領域を節約するためのラッチカウントの削減 - Google Patents

動的ハフマン表生成のためのハードウェア領域を節約するためのラッチカウントの削減 Download PDF

Info

Publication number
JP2022520158A
JP2022520158A JP2021539586A JP2021539586A JP2022520158A JP 2022520158 A JP2022520158 A JP 2022520158A JP 2021539586 A JP2021539586 A JP 2021539586A JP 2021539586 A JP2021539586 A JP 2021539586A JP 2022520158 A JP2022520158 A JP 2022520158A
Authority
JP
Japan
Prior art keywords
bit
symbol
counts
count
generating
Prior art date
Legal status (The legal status 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 status listed.)
Granted
Application number
JP2021539586A
Other languages
English (en)
Other versions
JP7425526B2 (ja
Inventor
アバリ、ビュレント
ミシュラ、アシュトッシュ
プサルラ、スニール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2022520158A publication Critical patent/JP2022520158A/ja
Application granted granted Critical
Publication of JP7425526B2 publication Critical patent/JP7425526B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4043Adaptive prefix coding
    • H03M7/405Tree adaptation
    • 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
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • G06F5/012Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising in floating-point computations
    • 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/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • 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/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4043Adaptive prefix coding
    • H03M7/4062Coding table adaptation
    • 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/6011Encoder 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/6058Saving memory space in the encoder or decoder

Landscapes

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

Abstract

本発明の実施形態は、DEFLATE圧縮アクセラレータと、動的ハフマン表を生成するときに記号をソートするために必要とされるラッチカウントを削減するための方法とに向けられる。アクセラレータは、入力バッファと、入力バッファの出力に通信可能に結合したLempel-Ziv77(LZ77)圧縮器とを含む。アクセラレータは、LZ77圧縮器に通信可能に結合したハフマン符号化器をさらに含む。ハフマン符号化器は、ビット・トランスレータを含む。アクセラレータは、ハフマン符号化器に通信可能に結合した出力バッファをさらに含む。

Description

本発明は、デジタルコンピュータ・システムに関し、より具体的には、デジタルコンピュータ・システムにおいて使用されるデジタルデータ圧縮及び復元スキームに関する。
デジタルコンピュータ・システムは、データ圧縮を行って、有限のストレージ空間のより効率的な使用を実現する。コンピュータ・システムは、一般に圧縮アクセラレータと呼ばれるハードウェア・コンポーネントを含み、これは、ホストシステムから作業要求又はデータ要求を受け取り、要求されたデータの1つ又は複数のブロックを圧縮又は復元する。圧縮を行うためのアクセラレータを設計する場合、可能な圧縮率と比べて圧縮される入力データのサイズと、データを圧縮することに起因する待ち時間との間に、トレードオフが存在する。
圧縮アクセラレータは、「DEFLATE」アルゴリズムを利用することが多く、これは、Lempel-Ziv(例えばLZ77)圧縮アルゴリズムとハフマン(Huffman)符号化アルゴリズムとを組み合わせて圧縮を行う、損失のない圧縮スキームである。ハフマン・アルゴリズムから計算される出力は、ソース記号(ファイル内の文字など)を符号化するための可変長符号表として捉えることができる。ハフマン・アルゴリズムは、この表を、ソース記号の可能な値の各々についての出現の推定確率又は頻度(重み)から導出する。
DEFLATEアルゴリズムを用いて達成される圧縮率を最大化するために、記号をその出現頻度に従って符号化して可変長符号表にする。換言すれば、最も頻度の高い記号は最も少ないビットで符号化される一方、相対的に少ない記号は相対的に多いビットで符号化される。この結果、圧縮されたデータストリームに必要とされるストレージ空間が直接的に削減される。記号がその相対頻度に基づいて符号化されるので、各記号の出現カウントをソートしなければならない。このプロセス中に記号カウント(頻度)をソートすることは、領域(必要なラッチ及び幅コンパレータの数)、電力、及びタイミング/配線の検討事項の点で費用がかかる。
本発明の実施形態は、動的ハフマン表の生成中に必要なラッチカウントを削減するように構成された、DEFLATE圧縮アクセラレータなどのアクセラレータに向けられる。アクセラレータの非限定的な例は、入力バッファと、入力バッファの出力に通信可能に結合したLempel-Ziv77(LZ77)圧縮器とを含む。アクセラレータは、LZ77圧縮器に通信可能に結合したハフマン符号化器をさらに含む。ハフマン符号化器は、ビット・トランスレータを含む。アクセラレータは、ハフマン符号化器に通信可能に結合した出力バッファをさらに含む。
本発明の幾つかの実施形態において、ビット・トランスレータは、24ビットから10ビットへのトランスレータである。
本発明の幾つかの実施形態において、ビット・トランスレータは、第1の記号カウントに基づいて5ビット・シフトフィールド及び5ビット仮数部を生成するように構成される。
本発明の幾つかの実施形態において、ビット・トランスレータは、5ビット・シフトフィールドと5ビット仮数部とを連結して第2の記号カウントを生成するようにさらに構成される。
本発明の実施形態は、動的ハフマン表を生成するときに記号ソートに必要なラッチカウントを削減するための方法に向けられる。本方法の非限定的な例は、複数の第1の記号カウントを定めることを含む。第1の記号カウントの各々は、第1のビット幅を含む。本方法は、複数の第2の記号カウントを生成することをさらに含む。第2の記号カウントは、第1の記号カウントの削減されたビットのマッピングに基づく。複数の第2の記号カウントは、頻度によってソートされ、動的ハフマン木を生成するために用いられる。
本発明の幾つかの実施形態において、複数の第1の記号カウントの第1の記号に基づいて、5ビット・シフトフィールド及び5ビット仮数部が生成される。
本発明の幾つかの実施形態において、5ビット・シフトフィールドは、第1の記号の最上位非ゼロビットの位置を符号化する。
本発明の幾つかの実施形態において、5ビット仮数部は、最上位非ゼロビットと、第1の記号の次の4つのビットとを符号化する。
本発明の幾つかの実施形態において、最上位非ゼロビットの後に続く第1の記号の次の5つのビットを符号化する。
本発明の実施形態は、動的ハフマン表を生成するときに記号ソートに必要なラッチカウントを削減するためのコンピュータプログラム製品に向けられる。コンピュータプログラム製品の非限定的な例は、電子的コンピュータプロセッサによって実行可能であって、コンピュータ・システムを制御して動作を行わせる、プログラム命令を含む。動作は、複数の第1の記号カウントを定めることを含むことができる。第1の記号カウントの各々は、第1のビット幅を含む。動作は、複数の第2の記号カウントを生成することをさらに含むことができる。第2の記号カウントは、第1の記号カウントの削減されたビットのマッピングに基づく。複数の第2の記号カウントは、頻度によってソートされ、動的ハフマン木を生成するために用いられる。
本発明の実施形態は、動的ハフマン表を生成するときに記号ソートに必要なラッチカウントを削減するためのシステムに向けられる。システムの非限定的な例は、アクセラレータと、コンピュータ可読命令を有するメモリと、コンピュータ可読命令を実行するように構成されたプロセッサとを含む。コンピュータ可読命令は、プロセッサによって実行されたとき、アクセラレータに方法を行わせる。この方法は、複数の第1の記号カウントを定めることを含むことができ、第1の記号カウントの各々は、第1のビット幅を含む。複数の第2の記号カウントを生成することができる。第2の記号カウントの各々は、複数の第1の記号カウントの記号カウントのマッピングに基づくものとすることができる。第2の記号カウントは、第1のビット幅より小さい第2のビット幅を含むことができる。この方法は、複数の第2の記号カウントを頻度によってソートすることと、ソートされた複数の第2の記号カウントに基づいて動的ハフマン木を生成することと、をさらに含むことができる。
本発明の実施形態は、方法に向けられる。本方法の非限定的な例は、入力バッファから第1の記号を含むデータストリームを受け取ることを含む。第1の記号に基づいて第1のビット幅を有する第1の記号カウントを定めることができる。本方法は、第1の記号カウントに基づいて5ビット・シフトフィールド及び5ビット仮数部を生成することを含むことができる。5ビット・シフトフィールドと5ビット仮数部とを連結することによって第2のビット幅を有する第2の記号カウントを生成することができる。本方法は、第2の記号カウントの頻度をソートすることを含むことができる。
さらなる技術的特徴及び利益が本発明の技術を通じて実現される。本発明の実施形態及び態様は、本明細書において詳細に説明され、特許請求される主題の一部とみなされる。より良い理解のために、詳細な説明及び図面を参照されたい。
本明細書に記載される排他的権利の詳細は、本明細書の結論部の特許請求の範囲において具体的に指摘されるともに明確に権利請求される。本発明の実施形態の上記及びその他の特徴及び利点は、添付の図面と共に解釈される以下の詳細な説明から明らかである。
本発明の種々の実施形態によって生成されるハフマン木を示す。 本発明の種々の実施形態によって生成されるハフマン木を示す。 本発明の種々の実施形態による、データを圧縮及び復元することが可能なコンピュータ・システムのブロック図を示す。 1つ又は複数の実施形態による、アクセラレータのブロック図を示す。 図3に示すアクセラレータのハフマン符号化器の部分を示す。 図4に示すハフマン符号化器のDHT生成器のソート・モジュールの部分を示す。 非限定的な実施形態による方法を示すフロー図である。 別の非限定的な実施形態による方法を示すフロー図である。
ここで示す図は例証的なものである。これらの図又はそこに記載された操作に対する多くの変形が、本発明の思想から逸脱することなく存在し得る。例えば、動作は異なる順序で実行することができ、又は動作を追加、削除若しくは修正することができる。また、「結合する」という用語及びその変形は、2つの要素間に通信経路を有する状態を説明するものであり、要素間に介在する要素/接続が存在しない状態の要素間の直接接続を含意するものではない。これらの変形のすべては、本明細書の一部とみなされる。
添付の図面及び以下の開示される実施形態の詳細な説明において、図中に描かれた種々の要素に2桁又は3桁の参照数字が付されている。わずかな例外を除いて、各参照数字の左側の桁は、その要素が最初に描かれた図面に対応する。
本発明の種々の実施形態をここで関連する図を参照して説明する。本発明の代替的な実施形態は、本発明の範囲から逸脱することなく考案することができる。要素間の種々の接続及び位置的関係(例えば、上、下、隣接、等)が以下の説明及び図中で記述されている。これらの接続もしくは位置的関係又はその両方は、特段の断りがない限り、直接であっても間接であってもよく、本発明は、この点に関して限定することを意図していない。したがって、実体の結合は、直接結合又は間接結合のいずれをも意味し得るものであり、実体間の関係は、直接的又は間接的な位置関係とすることができる。さらに、本明細書に記載された種々のタスク及びプロセスは、本明細書に記載されていない付加的なステップ又は機能を有する、より包括的な手順又はプロセスに組み入れることができる。
以下の定義及び略語は、特許請求の範囲及び明細書を解釈するために用いるものである。ここで用いる場合、「備える」、「備えている」、「含む」、「含んでいる」、「有する」、「有している」、「含有する」又は「含有している」又は任意のその他の変形は、非排他的な包含をカバーすることが意図される。例えば、要素のリストを含む、組成物、混合物、プロセス、方法、物品、又は装置は、必ずしもそれらの要素に限定されるものではなく、明示的にリストに挙げられていない他の要素、又はそうした組成物、混合物、プロセス、方法、物品、もしくは装置に固有の他の要素を含むことができる。
さらに、「例示的」という用語は、本明細書において「例、事例、例証として役立つ」を意味するものとして用いられている。ここで「例示的」として記載されるいずれの実施形態又は設計も、必ずしも他の実施形態又は設計と比べて好ましい又は有利であると解釈されるべきではない。「少なくとも1つの」及び「1つ又は複数の」という用語は、1以上の任意の整数、すなわち、1、2、3、4等を含むと理解することができる。「複数の」という用語は、2以上の任意の整数、すなわち、2、3、4、5等を含むと理解することができる。「接続」という用語は、間接「接続」及び直接「接続」の両方を含むことができる。
「約」、「実質的に」、「およそ」という用語及びそれらの変形は、出願時に利用可能な装置に基づく特定の量の測定に付随する誤差の程度を含むことを意図する。例えば、「約」は、所与の値の±8%又は5%、又は2%の範囲を含むことができる。
簡潔にするために、本発明の態様の作成及び仕様に関連した従来技術は、本明細書では詳細に説明している場合もしていない場合もある。特に、本明細書で説明する種々の技術的特徴を実装するコンピューティング・システム及び特定のコンピュータプログラムの種々の態様は、周知である。したがって、簡潔さのために、多くの従来の実装の詳細は、周知のシステムもしくはプロセス又はその両方の詳細を提示することなく、本明細書では簡単に触れるにとどめるか又は完全に省略される。
ここで、より具体的に本発明の態様に関連する技術の概要に目を向けると、適用されるデータ圧縮アルゴリズムによって生じるデータ表現のサイズの削減は、一般に圧縮率(C/R)と呼ばれる。圧縮率は、圧縮前のサイズと圧縮後のサイズとの間の比として定義することができる。それゆえ、圧縮率が大きくなるほど、より効率的なコンピュータ・システムのストレージ空間の使用が達成され、それによりコンピュータ・システムの全体としての性能が改善される。
DEFLATEデータ圧縮アルゴリズムは、データを圧縮するために通常用いられている方法である。データを圧縮するとき、DEFLATEアルゴリズムには、(1)重複する文字列を識別するLZ77圧縮と、(2)この情報のホフマン符号化という、2つの主要部がある。
LZ77圧縮段階は、予め符号化されたソースオペランド内の重複する文字列を見つけ出そうとする。一致が見つかると、重複する文字列のリテラル文字(literal character)を出力する代わりに、LZ77圧縮段階は、重複する文字列からその前のデータセット履歴内の元の(一致した)文字列までの「距離」を、一致したデータの「長さ」と共に出力する。例えば、入力オペランドが、以下の記号ABBACBABBAABBABBAを含むものとする。このオペランドは、以下のように符号化することができる。リテラルバイトA;リテラルバイトB;リテラルバイトB;リテラルバイトA;リテラルバイトC;リテラルバイトB;距離6,長さ4(これは「ABBA」を符号化する);距離4,長さ8(これは「ABBAABBA」を符号化する)
このことから分かるように、入力オペランドデータ内で見つけ出すことができる重複する文字列が多いほど、出力を圧縮することができる。一致する文字列に関して入力オペランド履歴をチェックすることができる方式として、インライン履歴と、環状履歴バッファによるものと、2つの方式がある。インライン履歴の場合、LZ77圧縮器は、単にソースオペランドから前の入力を調べる。環状バッファの場合、入力データは、環状履歴バッファにコピーされ(実際にコピーされるか又は概念的にコピーされるかのいずれか)、次いでこのバッファ内のデータが一致に関して検索される。いずれの場合でも、DEFLATE規格は、一致する文字列に関して32KBまでさかのぼって調べることを許容する。
ハフマン符号化段階は、LZ77圧縮器によって生成された記号の確率及び分布に基づくものである。ハフマン符号化の背後にある思想は、頻出する記号が少ないビットで符号化され、稀な記号が多くのビットで符号化されるようにして、記号を可変ビット長で符号化することができるというものである。このようにすることで、LZ77圧縮器から得られたデータの更なる圧縮が可能である。
この符号化プロセスのために、DEFLATE規格は、リテラルコピーブロック、固定ハフマン表(FHT:Fixed Huffman Table)、及び動的ハフマン表(DHT:Dynamic Huffman Table)という3種類の圧縮データブロックをサポートする。FHTブロックは静的であるのに対し、DHTブロックは、ハフマン木の高度に圧縮されたバージョンと、それに続く、その木を用いて符号化された、圧縮データを表す記号とからなる。
ハフマン木の例を図1A及び図1Bに示す。図1Aに示すように、ハフマン木は、ノード(葉とも呼ばれる)の大部分が木の単一の枝に沿って出現する、極めて非対称なものとすることができる。あるいは、ハフマン木は、図1Bに関して示すように圧縮された、葉が使用可能な枝の全体にわたって分布するものであってもよい。いずれの場合でも、ハフマン木は、葉(ノード)の深さが各々の葉に対応する記号の頻度によって定められるように構築される。換言すれば、葉の深さは、その記号頻度によって定められる。
表1は、図1Aに描かれたハフマン木に対応する例示的なDHTを示す。表1に示すDHTは、相対的に高いカウント/頻度を有する記号が相対的に短い符号長を用いて符号化されるように構築されている。
Figure 2022520158000002
表1に示すように、記号「A」及び「E」は、最低頻度を有し、各々100回しか出現しない。記号「D」は、次に高い頻度を有し、データセット内で200回出現する。記号「C」は、データセット内で400回出現し、記号「B」は、最も高頻度で出現し、800回出現する。さらに表1に示すように、記号「A」は二進数「1110」として符号化され、記号「B」は「0」として、記号「C」は「10」として、記号「D」は「110」として、記号「E」は「1111」として符号化される。
最も頻度の高い記号(例えば上記の例では「B」)を最も少ないビットで符号化することで、圧縮されたデータストリームに必要とされるストレージ空間が直接的に削減されることになる。例えば、800回出現する記号「B」は、出現ごとに単一の「0」ビットで表すことができる。結果として、記号「B」のあらゆる出現を格納するのに必要なのは800ビット(100バイト)だけである。頻度が高くない記号である「E」は、より長い「1111」のような二進符号で表すことができる。結果として、記号「E」の100回の出現は、400ビット(50バイト)のストレージを必要とする。この例で続けると、表1に示された記号は、合計375バイトを用いて符号化することができる。この同じデータは、DHTを使用しないと1600バイトのストレージを必要とする。
DEFLATE圧縮の速度を高めるために、このハフマン木生成プロセスをハードウェアに実装することができる。DEFLATEにおけるLZ77アルゴリズムは、圧縮用に、256リテラル(ASCII値0x00-xFF)、29の長さ記号、及び30の距離記号を使用する。長さ記号及び距離記号は、データストリーム(データ履歴)内の一致する文字列の距離及び長さを表す。長さの後には常に距離が続くので、1つのDHTを構築して、リテラル、エンド・オブ・ブロック(End-of-Block)記号、及び長さ記号を符号化することができる。これは、合計で286個のアルファベットの記号を必要とする。距離記号用に第2のDHTを構築することができる。これは合計で30個のアルファベットの記号を必要とする。
ハフマン木生成プロセスに関連した1つの難点は、実際に各DHT葉に正しい記号をポピュレートすることの難しさである。各葉に対して、次に頻度が高い記号が必要である。換言すれば、各記号の頻度を判定し、格納し、ソートしなければならない。このソートプロセスは、領域(必要なラッチ及び幅コンパレータの数)、電力、及びタイミング/配線の検討事項の点で費用がかかる場合がある。
この点を例証するために、2バイトのデータに対するLZ77圧縮を考える。全部で286個のアルファベット記号を完全に(一意に)符号化してハフマン符号化器の第1のDHT(すなわち、リテラル、エンド・オブ・ブロック、及び長さ記号を符号化するDHT)にするためには、Nビットカウンタを必要とする。例えば、全286記号を用いた16MBのデータに対するLZ77圧縮は、24ビットカウンタを必要とする。別の例において、全286記号を用いた32MBのデータに対するLZ77圧縮は、25ビットカウンタを必要とする。
これらの286記号の各々に関連付けられるカウントを格納するために、ソート・ブロックを用いて、286個の「記号,カウント」ペアを格納することができる。ハードウェア実装において、これらのペアはラッチに格納される。前述の例で続けると、24ビットカウンタを有する286記号を格納するには、6,864個のラッチ(フリップフロップとも呼ばれる)が必要である。このラッチ要件だけでも既に領域集約的であるが、必要なラッチの数は、カウンタが必要とするビットが追加されるごとにNだけ増大する。例えば、25ビットカウンタを用いて286記号を格納するには(32MBデータストリームの場合)、7,150ラッチを必要とする。同様に、26ビットカウンタを用いて286記号を格納するには(64MBデータストリームの場合)、7,436ラッチを必要とする。
ここで、本発明の教示の態様の概要に目を向けると、1つ又は複数の実施形態は、上記の従来技術の短所に対して、動的ハフマン表を生成するときの記号ソートに必要とされるラッチカウントを削減するために新たなアクセラレータ・ハードウェア及びソフトウェア実装を提供することによって対処する。LZ77圧縮器から受け取ったXビットの記号頻度(「LZカウント」とも呼ばれる)を、ソートの前に、必要とするビットがXビットより少ないYビットの(すなわちXはYより大きい)浮動様表現にマッピングすることによって、ラッチカウントが削減される。以下のプロセスは、24ビットカウンタに関して明示的に例証するが、低カウントのマッピングを任意のNビットカウンタに対する作業に適合させることができることが理解される。24ビットカウンタは、単に議論を容易にするために選択されたに過ぎない。
本発明の幾つかの実施形態において、24ビットカウンタ(16MBのデータの場合)を10ビット値にマッピングすることができる。これを達成するために、24ビット値が5ビット指数部(シフトフィールドとも呼ばれる)及び5ビット仮数部(最上位桁とも呼ばれる)にマッピングされる。
5ビット指数部は、24ビットカウンタ内の最初の「1」の位置を表す(このビットはシフトビットと呼ばれる)。数学的には、5ビット指数部は、元の値を得るために必要なシフトの量である。例えば、24ビット値「00000000110111100010101」における最初(最上位)の「1」は、(右から読んで)17番目の桁に表れる。17番目の桁を5ビット二進数「10001」として符号化することができる。
いったんこのシフトが既知になると、シフトビットの左側の「0」ビットを、まったく情報を失うことなく捨てることができる。24ビットカウンタ内のシフトビットのあらゆる可能な位置を格納するには、5ビット指数部が必要であることに留意されたい(24個のシフトの可能性を一意に符号化するには5桁の二進数が必要である)。5ビット指数部として示されているが、ビットの数は、根底にあるマッピングされるカウンタに応じて、より多く又は少なくすることができる。例えば、32ビットカウンタは、シフトビットの網羅的なマッピングのために6ビット指数部を必要とする。
5ビット仮数部は、24ビットカウンタ内に存在する非ゼロデータの最上位の5ビットを収容する。本発明の幾つかの実施形態において、5ビット仮数部は、シフトビットを含み、一方、他の実施形態において、シフトビットはスキップされる。例えば、前の例「00000000110111100010101」から生成される5ビット仮数部は、「10110」(シフトビットと次の4桁を含む場合)及び「01101」(シフトビットをスキップし、次の5桁を含む場合)である。
いずれの場合でも、次にこれらの5ビット値を組み合わせて、24ビットカウンタの、10ビットの多対一マッピングが与えられる。「多対一」マッピングは、2以上の入力値が同じ出力値にマッピングされる任意のマッピングのことを指す。前の例で続けると、複数の24ビットカウンタが同じ10ビット値にマッピングされる。
どちらの手法も可能であり、本発明の企図する範囲内に入るが、第2の手法は、データの追加の1ビットを活用する(シフトビットを再使用しない)。その結果として、第2の手法は、第1の手法を用いた場合に生成される多対一マッピングの数を削減することができる。前の24ビットの例で続けると、第1の手法(シフトビットが仮数部の最初の桁)は、32-1マッピングとなるのに対し、第2の手法(シフトビットを無視する)は、16-1マッピングになる。例証のために、「1_ _ _ _XXXXX」という値を有するLZカウント(「_」は、すべてのLZカウントにおいて同じビット値を表し、「X」は、異なるビット値を示す)の場合、これらの数の32個すべてが1つの数にマッピングされることになる(すなわち32:1マッピング)。一方、「1_ _ _ _ _XXXX」という値を有するLZカウントの場合、16個のこれらの数が1つの数にマッピングされるに過ぎない(すなわち16:1マッピング)。
この点をさらに例証するために、数929及び959のそれぞれの24ビット表現「110100000」及び「110111111」の10ビットマッピングを考える(先行ゼロは既に捨てられている)。シフトビット(ここでは右から10番目の桁であり、二進値「01010」を有する)を再使用すると、同じ10ビット数「01010,11101」及び「01010,11101」になる。しかしながら、仮数部においてシフトビットを無視すると、一意の10ビット数「01010,11010」及び「01010,11011」となる。
この方式(シフト,仮数部)で多対一マッピングを構築すると、各記号についての正確なカウント(又は頻度)は失われるが、記号の相対頻度分布は保存される。例えば、16MBのデータストリームにおいてそれぞれ頻度カウント11、104、418、1117を有する記号「A」、「B」、「C」及び「D」を考える。24ビットカウンタは、ソート・ブロックにおいて全286記号について正確な「記号,カウント」ペアを完全に符号化することができる。10ビットマッピング(5ビットシフト,5ビット仮数部)は、これらの記号についての正確なカウント値を失うことになるが、相対頻度(すなわち、Dカウント>=Cカウント>=Bカウント>=Aカウント)は保存する。
相対記号頻度が保存されるので、DHT木の品質に影響を与えることなくラッチカウントを削減することができる。換言すれば、本開示は、記号の正確な頻度を知ることなくハフマン木をポピュレートすることを可能にする。さらに、deflateアルゴリズムは、DHT木が15階層より深くなることを許容しないので(すなわち、符号化長は15ビット以下にすべき)、高頻度記号の多対一マッピングを許容することでDHT木に誤りが導入されることはない。
所与のソート・ブロックのためのラッチの数を削減することは、貴重なウェハ領域を解放し、電力消費を削減し、アクセラレータ・ハードウェアのタイミング/配線を簡素化する。前の例で続けると、ソーティング・ブロックの前に、24ビットカウンタを10ビット値にマッピングすることで、必要なラッチの数が6,864ラッチ(24*286)から2,860ラッチ(10*286)に削減される。さらに、10ビット値の使用は、従来の24ビット比較器を10ビット比較器で置き換えることができるので、後のソートするステップを簡素化する。この結果、さらに領域が節約される。
本発明の幾つかの実施形態において、指数部(シフト)及び仮数部の幅は固定されている(例えば、前に論じたように各々5ビット)。本発明の幾つかの実施形態において、指数部(シフト)及び仮数部の幅を動的に調整することができる。幅は、例えば、LZカウント範囲に応じて調整することができる。
例証のために、LZカウントを「シフト,仮数部」形式で表すために実装される「K」ビットを考える(すなわち、5ビット指数部及び5ビット仮数部を用いた前の例において「K」は10である)。LZカウントの上限に応じて、「i」ビットをシフトビットに割り当てることができ、「K-i」ビットを仮数部に割り当てることができる。この結果、同じ固定ハードウェアコストに対して、ソート精度の有限の改善がもたらされる。
表2は、種々のLZカウント範囲に基づく例示的な動的幅を示す。表2に示すように、余剰ビットを仮数部に動的に割り当てることによって、LZカウント範囲が増大するにつれて多対一マッピングを減少させることができる。表2は、単一のビットをシフトフィールドから仮数部にシフトすることを示しているが、その他の動的調整が可能である。
Figure 2022520158000003
本発明の幾つかの実施形態において、シフトフィールドの幅をLZカウント範囲に基づいて可能な限り小さくして、仮数部のために余剰ビットを解放する。シフトフィールドの幅は、あと1ビット減らすと幾つかのシフトビット位置をもはや一意に割り当てることができなくなる点まで小さくすることができる。
ここで図2を参照すると、本開示の非限定的な実施形態によるコンピュータ・システム10が示されている。コンピュータ・システム10は、インターナショナル・ビジネス・マシーンズ・コーポレーション(IBM)によって提供されるz/Architectureに基づくものとすることができる。しかしながらこのアーキテクチャは、コンピュータ・システム10の一例であり、本明細書に記載の実施形態の使用又は機能の範囲に関してなんらかの制限を示唆することを意図したものではない。他のシステム構成が可能である。いずれにせよ、コンピュータ・システム10は、上述の機能のいずれかを実装することもしくは行うこと又はその両方が可能である。
コンピュータ・システム10は、その他の多くの汎用又は専用コンピューティング・システム環境又は構成と共に動作可能である。コンピュータ・システム10と共に使用するのに好適であり得る周知のコンピューティング・システム、環境、もしくは構成又はそれらの組合せの例には、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、携帯電話、手持ち式又はラップトップ型デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セットトップボックス、プログラム可能民生電子機器、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、及び、上述のシステム又はデバイスのいずれかを含む分散型クラウド・コンピューティング環境などが含まれるが、これらに限定されない。
コンピュータ・システム10は、コンピュータ・システム10によって実行される、プログラムモジュール等のコンピュータ・システム実行可能命令の一般的な文脈で説明することができる。一般に、プログラムモジュールは、特定のタスクを実行する又は特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、論理、データ構造などを含むことができる。コンピュータ・システム10は、通信ネットワークを通じてリンクされた遠隔処理デバイスによってタスクが行われる分散型クラウド・コンピューティング環境において実行することができる。分散型クラウド・コンピューティング環境において、プログラムモジュールは、メモリ・ストレージ・デバイスを含むローカル及び遠隔両方のコンピュータ・システム・ストレージ媒体内に配置することができる。
図2に示されるように、コンピュータ・システム10は、処理デバイスとも呼ばれる汎用コンピューティング・デバイスの形態で描かれている。コンピュータ・システム10のコンポーネントは、1つ又は複数のプロセッサ又は処理ユニット16、deflateアクセラレータ17、システム・メモリ28、及びシステム・メモリ28を含む種々のシステム・コンポーネントをプロセッサ16に結合するバス18を含むことができるが、これらに限定されない。
deflateアクセラレータ17は、ハードウェアとして又はハードウェアとソフトウェアの両方として実装することができ、1つ又は複数の実施形態に従って、DEFLATEデータ圧縮アルゴリズムを用いてデータを圧縮するための機能及びモジュールを含むことができる。本発明の幾つかの実施形態において、deflateアクセラレータ17は、入力バッファ上でデータを受け取り、LZ77圧縮器を用いてデータを処理し、ハフマン符号化器を用いてデータを符号化し、出力バッファにデータを出力することができる。deflateアクセラレータ17の実施形態を図3に示す。
本発明の幾つかの実施形態において、deflateアクセラレータ17を(図示されているように)バス18に直接接続することができる。本発明の幾つかの実施形態において、deflateアクセラレータ17は、RAM30/キャッシュ32と処理ユニット16との間でバス18に接続される。本発明の幾つかの実施形態において、deflateアクセラレータ17は、バス18ではなくキャッシュ32に(例えばL3キャッシュに)直接接続される。本発明の幾つかの実施形態において、deflateアクセラレータ17は、処理ユニット16に直接接続される。
バス18は、メモリ・バス又はメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、及び種々のバス・アーキテクチャのいずれかを用いるプロセッサ又はローカル・バスを含む幾つかのタイプのバス構造のうちのいずれかの1つ又は複数を表す。限定ではなく例として、このようなアーキテクチャは、Industry Standard Architecture(ISA)バス、Micro Channel Architecture(MCA)バス、Enhanced ISA(EISA)バス、Video Electronics Standards Association(VESA)ローカル・バス、及びPeripheral Component Interconnect(PCI)バスを含む。
コンピュータ・システム10は、種々のコンピュータ・システム可読媒体を含むことができる。このような媒体は、コンピュータ・システム/サーバ10によってアクセス可能なあらゆる利用可能媒体とすることができ、揮発性媒体及び不揮発性媒体の両方、並びに取外し可能媒体及び取外し不能媒体の両方を含む。
システム・メモリ28は、オペレーティング・システム(OS)50を、ランダム・アクセス・メモリ(RAM)30もしくはキャッシュ・メモリ32又はその両方等の揮発性メモリの形態のコンピュータ・システム可読媒体とともに含むことができる。コンピュータ・システム10は、その他の取外し可能/取外し不能な揮発性/不揮発性コンピュータ・システム・ストレージ媒体をさらに含むことができる。単なる例として、取外し不能の不揮発性磁気媒体(図示されておらず、典型的には「ハード・ドライブ」と呼ばれる)との間の読出し及び書込みのために、ストレージ・システム34を設けることができる。図示されていないが、取外し可能な不揮発性磁気ディスク(例えば、「フロッピー・ディスク」)との間の読出し及び書込みのための磁気ディスク・ドライブ、並びに、CD-ROM、DVD-ROM又はその他の光媒体等の取外し可能な不揮発性光ディスクとの間の読出し及び書込みのための光ディスク・ドライブを設けることができる。このような例において、各々を1つ又は複数のデータ媒体インタフェースによってバス18に接続することができる。以下でさらに示され、説明されるように、メモリ28は、本発明の実施形態の機能を実行するように構成されたプログラムモジュールの組(例えば、少なくとも1つ)を有する少なくとも1つのプログラム製品を含むことができる。
OS50は、他のコンピュータプログラムの実行を制御し、スケジューリング、入出力制御、ファイル及びデータ管理、メモリ管理、並びに通信制御及び関連のサービスを提供する。OS50は、ライブラリAPI(図2に図示せず)を含むこともできる。ライブラリAPIは、例えばアクセラレータ(図2に図示せず)などの専用ハードウェアデバイスによって提供されるデータ操作機能を行うためのAPIを含む、ソフトウェア・ライブラリである。
ストレージ・システム34は、基本入出力システム(BIOS)を格納することができる。BIOSは、スタートアップ時にハードウェアを初期化及びテストし、OS50の実行を開始し、ハードウェアデバイス間のデータの転送をサポートする、必須のルーチンの組である。コンピュータ・システム10の作動時、1つ又は複数の処理ユニット16は、ストレージ・システム34内に格納された命令を実行する、データをメモリ28との間で送受信する、及び、命令に従ってコンピュータ・システム10の動作を全般的に制御するように構成される。
1つ又は複数の処理ユニット16は、内部ミリコード(図示せず)及びその中に格納されたデータにアクセスすることもできる。内部ミリコード(ファームウェアと呼ばれることもある)は、主メモリ28とは別の異なるデータストレージ領域として捉えることができ、OSに依存せずにアクセスされ又は制御されることができる。内部ミリコードは、コンピュータ・システム10の複雑なアーキテクト化された命令の一部を含むことができる。複雑命令は、プログラマに対する単一命令として定義することができる。しかしながら、1つの複雑命令を多数のそれほど複雑でない命令に分割する、内部ライセンス・コード(internally licensed code)を含むこともある。ミリコードは、特にコンピュータ・システム10用に設計されテストされたアルゴリズムを含み、ハードウェアに対して完全な制御を提供することができる。少なくとも1つの実施形態において、ミリコードを利用して1つ又は複数の圧縮辞書を格納することもでき、より詳細に後述するように、この圧縮辞書をハードウェアに送ってデータ復元を促進することができる。
プログラムモジュール42の組(少なくとも1つ)を有するプログラム/ユーティリティ40を、限定ではなく例として、OS50、1つ又は複数のアプリケーション・プログラム、他のプログラムモジュール、及びプログラムデータと共に、メモリ28内に格納することができる。オペレーティング・システム、1つ又は複数のアプリケーション・プログラム、他のプログラムモジュール、及びプログラムデータ、又はそれらの幾つかの組合せの各々が、ネットワーキング環境の実装を含むことができる。プログラムモジュール42は、一般に、本明細書に記載の本発明の実施形態の機能もしくは方法又はその両方を実行する。
コンピュータ・システム10は、キーボード、ポインティング・デバイス、ディスプレイ24等の1つ又は複数の外部デバイス14、ユーザがコンピュータ・システム/サーバ10と対話することを可能にする1つ又は複数のデバイス、もしくは、コンピュータ・システム/サーバ10が1つ又は複数の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス(例えば、ネットワークカード、モデム等)又はそれらの組合せと通信することもできる。このような通信は、入力/出力(I/O)インタフェース22を経由して行うことができる。さらにまた、コンピュータ・システム10は、ローカル・エリア・ネットワーク(LAN)、汎用広域ネットワーク(WAN)、もしくはパブリック・ネットワーク(例えば、インターネット)またはそれらの組合せ等の1つ又は複数のネットワークと、ネットワーク・アダプタ20を介して通信することができる。図示されるように、ネットワーク・アダプタ20は、バス18を介してコンピュータ・システム10の他のコンポーネントと通信する。図示されないが、コンピュータ・システム10と共に他のハードウェアもしくはソフトウェア・コンポーネント又はその両方を使用することができることを理解されたい。例として、これらに限定されるものではないが、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、データ・アーカイブ・ストレージ・システムなどが挙げられる。
種々のタイプの圧縮アルゴリズム、例えば、Lempel-Ziv符号化の派生型を利用してデータを圧縮する適応無損失データ圧縮(ALDC:adaptive lossless data compression)製品ファミリーなどをコンピュータ・システム10において利用することができる。一般的な圧縮技術として、Lempel-Ziv77(LZ77)アルゴリズムは、多くの異なるデータ型を扱うことが必要とされるシステムに首尾よく組み込まれる。このアルゴリズムは、バイトのシーケンスを、処理されたバイトの最近の履歴を保持すること及びその履歴内で一致するシーケンスを指し示すことによって、処理する。圧縮は、一致したバイト・シーケンスをコピーポインタと長さ符号とで置き換えることによって達成され、コピーポインタと長さ符号は両方合わせても、置き換えられるバイト・シーケンスよりサイズが小さい。
圧縮アルゴリズムは、LZ77アルゴリズム(データから繰り返しを削除する)とハフマン符号化との組み合わせを用いる、「DEFLATE」圧縮形式を含むこともできる。ハフマン符号化は、「ハフマン木」に基づくエントロピ符号化である。データをハフマン符号化し及び復号するためには、システムは、前もってハフマン木が用いられていることを知らなければならない。復元(例えば、「Inflate」動作)に適応するために、ハフマン木は、圧縮ブロックごとのヘッダに書き込まれる。1つの実施形態において、Deflate規格においてハフマン木に対して2つの選択肢が提供される。1つの選択肢は「静的」木であり、これはすべての圧縮器及び復元器にとって既知の、ハードコード化された単一のハフマン木である。この静的木を用いる利点は、その記述を圧縮ブロックのヘッダに書き込む必要がなく、即時復元の準備ができていることである。他方、「動的」木は、当面のデータブロックに合わせて調整され、したがって動的木の正確な記述が出力に書き込まれる必要がある。
ハフマン符号化は、エントロピに基づいた可変長符号表を用いてソース記号を符号化することもでき、前述のように静的又は動的のいずれかとして定義することができる。静的ハフマン符号化において、各リテラル又は距離は、RFCにおいて定義される固定表(FHT)を用いて符号化される。しかしながら、動的ハフマン符号化においては、圧縮されるデータの統計量により良く適合するように、特別な符号化表(DHT)が構築される。多くの場合、DHTを用いるとFHTと比べてより良い圧縮率(例えば品質)を達成するが、その代わり、圧縮速度(例えば性能)の低下及び設計の複雑度が増すという代償を払う。固定ハフマン符号化法及び動的ハフマン符号化法は、圧縮速度と圧縮率との間の固有のトレードオフを最も良く反映する。静的ハフマン法が達成することができる圧縮率は、動的ハフマン符号化を用いて可能な圧縮率よりも低い。このことは入力データブロックの内容にかかわらず固定の符号化表を用いることに起因する。例えば、ランダムなデータも4文字のDNA配列も同じハフマン表を用いて符号化することになる。
本発明の幾つかの実施形態において、コンピュータ・システム10は、圧縮ライブラリを含み、これは、収縮(deflation)/膨張(inflation)のために用いられるソフトウェア・ライブラリとして実装することができ、また、圧縮アルゴリズムを抽象化したものとすることができる。少なくとも1つの実施形態において、圧縮ライブラリは、コンピュータ・システム10もしくはdeflateアクセラレータ17又はその両方が、収縮/膨張される入力データを複数の要求に対して任意の方式で分割することを可能にし、また、収縮/膨張動作の結果を保持するための任意のサイズの出力バッファを提供する。
図3は、1つ又は複数の実施形態による、図2に示されたdeflateアクセラレータ17のブロック図を示す。deflateアクセラレータ17は、例えば、入力バッファ302、LZ77圧縮器304、ハフマン符号化器306(DEFLATEハフマン符号化器とも呼ばれる)、及び出力バッファ308を含むことができる。図3に示すように、入力バッファ302は、LZ77圧縮器304に通信可能に接続することができ、LZ77圧縮器304からの出力は、ハフマン符号化器306の入力に直接接続することができる。このようにして、DEFLATEアクセラレータ17は、DEFLATEアルゴリズムを用いてデータ圧縮を促進するように構成される。
本発明の幾つかの実施形態において、圧縮前のデータは、deflateアクセラレータ17によって入力バッファ302(入力データバッファとも呼ばれる)上に取得される。幾つかの実施形態において、deflateアクセラレータ17は、入力バッファ302に提供されたデータに対してLZ77圧縮を行う。幾つかの実施形態において、圧縮データは、ハフマン符号化器306によって受け取られ、符号化される。幾つかの実施形態において、圧縮され符号化されたデータは、出力バッファ308(出力データバッファとも呼ばれる)に格納することができる。
データ圧縮を開始するために、deflateアクセラレータ17は、入力バッファ302内の標的データ又は標的データストリームを圧縮することを求める1つ又は複数の要求を受け取ることができる。本発明の幾つかの実施形態において、要求ブロック(図示せず)を用いて、要求を容易にすることができる。本発明の幾つかの実施形態において、要求ブロックは、OS50の圧縮インタフェースに送られる。各要求に対して、コンピュータ・システム10は、処理されるデータを有する入力バッファ(例えば、入力バッファ302)と、処理されたデータの結果が格納される出力バッファ(例えば、出力バッファ308)とを供給することができる。
本発明の幾つかの実施形態において、圧縮要求の処理を開始するために、deflateアクセラレータ17は、要求ブロックを読み、入力バッファ302内のデータを処理して、圧縮データもしくは復元データ又はその両方を生成する。本明細書に記載のように、DEFLATE圧縮アルゴリズム及びALDCアルゴリズムを含むがそれらに限定されない種々の圧縮アルゴリズムを利用することができる。結果として得られた圧縮データを出力バッファ308内に保存することができる。
図4は、1つ又は複数の実施形態による図3に示すハフマン符号化器306のDHT生成器400のブロック図を示す。図4に示すように、DHT生成器400は、ソート・モジュール402、ハフマン木モジュール404、木静的ランダム・アクセス・メモリ(SRAM)406、木ウォーク(walk)モジュール408、符号長SRAM410、及び符号化長モジュール412を含むことができる。本発明の幾つかの実施形態において、DHT生成器400は、ハフマン符号化器(例えば、図3に示すハフマン符号化器306)の第1の段階である。
ソート・モジュール402は、LZ77圧縮器304によって圧縮された各記号についての記号頻度カウンタ(「LZカウント」、Xビットカウンタ)を受け取る。ソート・モジュール402は次いで、1つ又は複数の実施形態により、Xビットカウンタを、圧縮された多対一Yビット値にマッピングする。本発明の幾つかの実施形態において、Yビット値がソートされる(本明細書において先に論じたように、記号の相対頻度分布を生成する)。
本発明の幾つかの実施形態において、ソート後であるがハフマン木モジュール404の前に、Yビットマッピングを復元してXビット値に戻すことができる。このようにすると、ハフマン木モジュール404は、完全なXビット値を受け取ることができ、修正される必要がない。同様に、ハフマン木モジュール404、木SRAM406、木ウォーク・モジュール408、符号長SRAM410、及び符号化長モジュール412を含む残りの下流モジュールのいずれも、修正される必要がない。換言すれば、ハフマン木モジュール404、木SRAM406、木ウォーク・モジュール408、符号長SRAM410、及び符号化長モジュール412を既知のDEFLATE圧縮実装を用いて実装することができるが、限定されることを意図しない。議論を簡単にするために別個のモジュールを有するように描かれているが、DHT生成器400は、より多くのモジュール又はより少ないモジュールを含むことができることが理解される。例えば、ソート・モジュール402の出力を単一のハフマン木モジュールが受け取って、DHTに符号化することができ、別個の木SRAMもしくは符号長SRAM又はその両方を含んでもよく、含まなくてもよい。
図5は、1つ又は複数の実施形態による図4に示すソート・モジュール402のブロック図を示す。図5に示すように、ソート・モジュール402(ソートブロックとも呼ばれる)は、ビット・トランスレータを含むことができる。議論を簡単にするために24ビットから10ビットへのトランスレータ502が描かれているが、本明細書で先に論じたように、その他のXビットからYビットへのトランスレータが可能である。
本発明の幾つかの実施形態において、24ビットから10ビットへのトランスレータ502は、LZ77圧縮器(例えば、図3に示すLZ77圧縮器304)から24ビットカウンタを受け取る。本発明の幾つかの実施形態において、24ビットから10ビットへのトランスレータ502は、以下のアルゴリズムに従って、24ビットカウンタに基づいて5ビット指数部及び5ビット仮数部を生成する。
ステップ1:24ビットカウンタに対して先行ゼロビット(LZB)のインデックスを定め、ここでインデックスは、最下位ビットから最上位ビットまで1から24である(25ビットの場合は1から25、等)。
ステップ2:24ビットカウンタと「00000」とを連結することによって29ビットベクトルを生成する。例えば、24ビット値「000000010110111100010101」を「00000」と連結して、「000000010110111100010101.00000」を形成することができる。
ステップ3:29ビットベクトルをLZBインデックスによってシフトさせる。
ステップ4:シフト量(すなわち、シフトビット位置)を5ビット指数部として格納する。例えば、24ビット値「00000000110111100010101」の17番目の桁(右から読む。強調のために下線を付した)を、5ビット二進数「10001」として格納することができる。
ステップ5:最上位の5桁を5ビット仮数部として格納する。本発明の幾つかの実施形態において、最上位の5桁は、シフトビットと次の4つの桁とを含む。例えば、24ビット値「00000000110111100010101」から得られる5ビット仮数部は、「10110」とすることができる。本発明の幾つかの実施形態において、最上位の5桁は、シフトビットのすぐ後に続く5桁を含む。例えば、24ビット値「00000000110111100010101」から生成される5ビット仮数部を「01101」とすることができる。
ステップ6:5ビット指数部と5ビット仮数部とを連結して10ビット値を生成する。前の例から続けると、仮数部の中でシフトビットを無視する場合、10ビット値は、「10001,01101」(シフト,仮数部)となる。
本発明の幾つかの実施形態において、24ビットから10ビットへのトランスレータ502は、データストリーム内の各記号についてLZ77圧縮器から24ビットカウンタ(例えば、DHT内の286個の記号の各々について286個の24ビットカウンタ)を受け取る。本発明の幾つかの実施形態において、24ビットカウンタの各々に対して10ビット値が生成される。これらの10ビット値をソーティング・モジュール504に渡すことができる。
本発明の幾つかの実施形態において、ソーティング・モジュール504は、286個の10ビット値の値ソートを完了する。10ビット値のソートは、DEFLATEアクセラレータについて既知のいずれかの適切な方法を用いて達成することができる。本発明の幾つかの実施形態において、ソーティング・モジュール504は、286個の「記号,カウント」ペアを2,860個のラッチに格納し、第1の実行のために2Dシェアソート(shear sort)を使用する。2Dシェアソートの場合、286個の「記号,カウント」ペアを、143個の比較器がポピュレートされた18×16行列に配置することができる。比較器は、2つの比較器が水平又は垂直に(直接、左、右、上又は下に)隣接しないように、離間配置される。代わりに、比較器の各々は、1つ又は複数の他の比較器と対角線上で隣接している。有利なことに、10ビット比較器を24ビット比較器の代わりに使用することができ、10ビットマッピングによってもたらされる領域の節約がさらに向上する。本発明の幾つかの実施形態において、ソートされた10ビット値を次に用いて、動的ハフマン木を生成することができる。
本発明の幾つかの実施形態において、(ソート後の)下流プロセスは、24ビット値に戻す変換を必要とする。これにより、例えば、2つの昇順記号からのLZカウントを容易に追加したり、次の記号のLZカウントを比較したりすることが可能になる。本発明の幾つかの実施形態において、10ビットから24ビットへの復元器506は、ソーティング・モジュール504から各々の10ビット数を受け取り、各々を24ビット数に戻す。10ビットから24ビットへの復元器は、議論を容易にするために描かれたものであり、本明細書で先に論じたとおり、その他のYビットからXビットへの復元器も可能である。
下記のアルゴリズムに従って、10ビット数から24ビット数を構築することができる。ステップ1.すべての桁を「0」に設定して29ビットフィールドを生成する。ステップ2.10ビット数から仮数部を24ビット数の最小桁にコピーする。ステップ3.シフトビットの値(又は、仮数部においてシフトビットが無視される場合、シフトビットより1小さい値)だけシフトし、シフトビットが仮数部に含まれない場合にはシフトビットを挿入する。ステップ4.先頭の5つのビット(構造により、常に「0」)を捨てて、29ビットフィールドを24ビットフィールドに変換する。
例証のために、例えば、本明細書において前に論じたように、数928の圧縮から生成される10ビット数「01010,11010」を考える(仮数部はシフトビットを無視)。ステップ2において、29ビットフィールドを「00....0011010」に設定する(先行するゼロは省略されている)。ステップ3において、29ビットフィールドを10桁シフトし(10は、シフトビット「01010」の10進値である)、シフトビットを挿入して「00...001110100000.00000」を得る。ステップ4において、先頭の5つの「0」(左側の桁)を削除して、24ビット数「00000000011010000000000」を得る。前の例は、10ビットから24ビットへの復元器の文脈で提示したが、同じスキームを用いて、任意の初期ビット幅(例えば、11ビット、12ビット、20ビット等)を有するLZカウントを復元することができる。
図6は、非限定的な実施形態による、動的ハフマン表を生成するときに記号ソートに必要なラッチカウントを削減するための方法を示すフロー図600を示す。ブロック602に示すように、複数の第1の記号カウントが定められる。第1の記号カウントの各々は、第1のビット幅を含むことができる。本発明の幾つかの実施形態において、第1の記号カウントの各々は、24ビット数として符号化される。
ブロック604において、複数の第1の記号カウントのマッピングに基づいて複数の第2の記号カウントが生成される。第2の記号カウントは、第1のビット幅より小さい第2のビット幅を含むことができる。本発明の幾つかの実施形態において、第2の記号カウントの各々は、10ビット数として符号化される。
本発明の幾つかの実施形態において、第2の記号カウントの各々を生成することは、1つ又は複数の実施形態により、5ビット・シフトフィールド及び5ビット仮数部を生成することを含む。本発明の幾つかの実施形態において、5ビット・シフトフィールドは、第1の記号の最上位非ゼロビット(すなわち、本明細書において前に論じたように、シフトビット)の位置を符号化する。本発明の幾つかの実施形態において、5ビット仮数部は、最上位非ゼロビットと、第1の記号の次の4つのビットとを符号化する(すなわち、シフトビットは仮数部の最初の桁として再使用される)。本発明の幾つかの実施形態において、5ビット仮数部は、最上位の非ゼロビットの後に続く第1の記号の次の5つのビットを符号化する(すなわち、シフトビットは仮数部において再使用されない)。本発明の幾つかの実施形態において、5ビット・シフトフィールドと5ビット仮数部とが連結されて10ビット数を形成する。
ブロック606において、複数の第2の記号カウントが頻度によってソートされる。ブロック608において、ソートされた複数の第2の記号カウントに基づいて、1つ又は複数の実施形態により、動的ハフマン木が生成される。本発明の幾つかの実施形態において、本明細書において前に論じたように、10ビットマッピングは、動的ハフマン木を生成する前に復元されて24ビット数に戻される。
図7は、非限定的な実施形態による方法を示すフロー図700を示す。ブロック702に示すように、第1の記号を含むデータストリームを入力バッファから受け取ることができる。
ブロック704において、第1の記号に基づいて、第1のビット幅を有する第1の記号カウントを定めることができる。本発明の幾つかの実施形態において、第1のビット幅は24ビットである。
ブロック706において、第1の記号カウントに基づいて5ビット・シフトフィールドが生成される。本発明の幾つかの実施形態において、5ビット・シフトフィールドは、第1の記号の最上位非ゼロビットの位置を符号化する。
第1の記号カウントに基づいて5ビット仮数部が生成される。本発明の幾つかの実施形態において、5ビット仮数部は、最上位非ゼロビットの後に続く第1の記号の次の5つのビットを符号化する。
ブロック710において、5ビット・シフトフィールドと5ビット仮数部とを連結することによって、第2のビット幅を有する第2の記号カウントが生成される。ブロック712において、第2の記号カウントの頻度がソートされる。
本発明は、実装の任意の可能な技術的詳細レベルの、システム、方法、もしくはコンピュータプログラム製品又はそれらの組合せとすることができる。コンピュータプログラム製品は、本発明の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令を有する1つ又は複数のコンピュータ可読ストレージ媒体を含むことができる。
コンピュータ可読ストレージ媒体は、命令実行デバイスによる使用のために命令を保持及び格納することができる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、電子ストレージデバイス、磁気ストレージデバイス、光ストレージデバイス、電磁気ストレージデバイス、半導体ストレージデバイス、又は上記のものの任意の適切な組合せとすることができるがこれらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストは、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラム可能読み出し専用メモリ(EPROM又はフラッシュメモリ)、静的ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクトディスク読み出し専用メモリ(CD-ROM)、デジタル多目的ディスク(DVD)、メモリスティック、フロッピーディスク、記録された命令を有するパンチカード若しくは溝内に隆起した構造等の機械式コード化デバイス、及び上記のものの任意の適切な組合せを含む。コンピュータ可読ストレージ媒体は、本明細書で用いられる場合、無線波若しくは他の自由に伝搬する電磁波、導波路若しくは他の伝送媒体を通って伝搬する電磁波(例えば光ファイバケーブルを通る光パルス)、又は電線を通って伝送される電気信号のような一時的な信号自体と解釈すべきではない。
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスにダウンロードすることも、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワークもしくは無線ネットワーク又はそれらの組合せを経由して、外部コンピュータ若しくは外部ストレージデバイスにダウンロードすることもできる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータもしくはエッジサーバ又はそれらの組合せを含むことができる。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カード又はネットワーク・インタフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、そのコンピュータ可読プログラム命令をそれぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体にストレージのために転送する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用の構成データ、又は、Smalltalk、若しくはC++などのオブジェクト指向プログラミング言語及び「C」プログラミング言語若しくは類似のプログラミング言語のような従来の手続き型プログラミング言語を含む1つ若しくは複数のプログラミング言語の任意の組合せで記述されたソースコード若しくはオブジェクトコードのいずれかとすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。後者のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続が行われる場合もある(例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて)。幾つかの実施形態において、例えばプログラム可能論理回路、フィールドプログラム可能ゲートアレイ(FPGA)、又はプログラム可能論理アレイ(PLA)を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個別化することにより、コンピュータ可読プログラム命令を実行することができる。
本発明の態様は、本明細書において、本発明の実施形態による方法、装置(システム)、及びコンピュータプログラム製品のフローチャート図もしくはブロック図またはその両方を参照して説明される。フローチャート図もしくはブロック図又はその両方の各ブロック、並びにフローチャート図もしくはブロック図又はその両方のブロックの組合せは、コンピュータ可読プログラム命令によって実装することができることが理解されるであろう。
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャートもしくはブロック図又はその両方の1つ又は複数のブロック内で指定された機能/動作を実装するための手段を作り出すようにすることができる。これらのコンピュータ可読プログラム命令を、コンピュータ、プログラム可能データ処理装置、もしくは他のデバイス又はそれらの組合せを特定の方式で機能させるように指示することができるコンピュータ可読ストレージ媒体内に格納し、それにより、その中に格納された命令を有するコンピュータ可読媒体が、フローチャートもしくはブロック図又はその両方の1つ又は複数のブロックにおいて指定された機能/動作の態様を実装する命令を含む製品を含むようにすることもできる。
コンピュータ可読プログラム命令を、コンピュータ、他のプログラム可能データ処理装置又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置又は他のデバイス上で行わせてコンピュータ実装のプロセスを生成し、それにより、コンピュータ、他のプログラム可能装置又は他のデバイス上で実行される命令が、フローチャートもしくはブロック図又はその両方の1つ又は複数のブロックにおいて指定された機能/動作を実装するようにすることもできる。
図面内のフローチャート及びブロック図は、本開示の種々の実施形態による、システム、方法、及びコンピュータプログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含む、モジュール、セグメント、又は命令の一部を表すことができる。幾つかの代替的な実装において、ブロック内に記された機能は、図中に記された順序とは異なる順序で行われることがある。例えば、連続して示された2つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図もしくはフローチャート図又はその両方の各ブロック、及びブロック図もしくはフローチャート図又はその両方の中のブロックの組合せは、指定された機能又は動作を実行する専用ハードウェア・ベースのシステムによって実装することもでき、又は専用ハードウェアとコンピュータ命令との組合せを実行することもできることにも留意されたい。
本発明の種々の実施形態の説明は、例証の目的で提示したものであるが、網羅的であることも、又は開示された実施形態に限定することも意図しない。説明した実施形態の範囲から逸脱することなく、多くの修正及び変形が当業者には明らかであろう。本明細書で用いる用語は、実施形態の原理、実際的な用途、若しくは市場において見いだされる技術に優る技術的改善を最も良く説明するように、又は当業者が本明細書で開示される実施形態を理解することを可能にするように、選択されたものである。

これらの286記号の各々に関連付けられるカウントを格納するために、ソート・ブロックを用いて、286個の「記号,カウント」ペアを格納することができる。ハードウェア実装において、これらのペアはラッチに格納される。前述の例で続けると、24ビットカウンタを有する286記号を格納するには、6,864個のラッチ(フリップフロップとも呼ばれる)が必要である。このラッチ要件だけでも既に領域集約的であるが、必要なラッチの数は、カウンタが必要とするビットが追加されるごとに286だけ増大する。例えば、25ビットカウンタを用いて286記号を格納するには(32MBデータストリームの場合)、7,150ラッチを必要とする。同様に、26ビットカウンタを用いて286記号を格納するには(64MBデータストリームの場合)、7,436ラッチを必要とする。

Claims (25)

  1. 入力バッファと、
    前記入力バッファの出力に通信可能に結合したLempel-Ziv77(LZ77)圧縮器と、
    前記LZ77圧縮器に通信可能に結合し、ビット・トランスレータを含む、ハフマン符号化器と、
    前記ハフマン符号化器に通信可能に結合した出力バッファと、
    を含む、アクセラレータ。
  2. 前記ビット・トランスレータが、第1のビット幅を含む第1の記号カウントを第2のビット幅を含む第2の記号カウントにマッピングするように構成された、請求項1に記載のアクセラレータ。
  3. 前記第2のビット幅が前記第1のビット幅より小さい、請求項2に記載のアクセラレータ。
  4. 前記ビット・トランスレータは、24ビットから10ビットへのトランスレータを含み、前記第1のビット幅は24ビットを含み、前記第2のビット幅は10ビットを含む、請求項3に記載のアクセラレータ。
  5. 前記ビット・トランスレータは、前記第1の記号カウントに基づいて5ビット・シフトフィールド及び5ビット仮数部を生成するように構成された、請求項4に記載のアクセラレータ。
  6. 前記ビット・トランスレータは、前記5ビット・シフトフィールドと前記5ビット仮数部とを連結して前記第2の記号カウントを生成するようにさらに構成された、請求項5に記載のアクセラレータ。
  7. 前記アクセラレータは、DEFLATEハードウェア・アクセラレータを含む、請求項1に記載のアクセラレータ。
  8. 動的ハフマン表を生成するときに記号ソートに必要なラッチカウントを削減するための方法であって、
    複数の第1の記号カウントを定めることであって、前記第1の記号カウントの各々は第1のビット幅を含む、複数の第1の記号カウントを定めることと、
    複数の第2の記号カウントを生成することであって、前記第2の記号カウントの各々は前記複数の第1の記号カウントの記号カウントのマッピングに基づくものであり、前記第2の記号カウントは、前記第1のビット幅より小さい第2のビット幅を含む、複数の第2の記号カウントを生成することと、
    前記複数の第2の記号カウントを頻度によってソートすることと、
    ソートされた前記複数の第2の記号カウントに基づいて動的ハフマン木を生成することと、
    を含む方法。
  9. 前記第1のビット幅は24ビットを含み、前記第2のビット幅は10ビットを含む、請求項8に記載の方法。
  10. 前記複数の第2の記号カウントの各々の第2の記号カウントを生成することは、前記複数の第1の記号カウントの第1の記号に基づいて5ビット・シフトフィールド及び5ビット仮数部を生成することを含む、請求項9に記載の方法。
  11. 前記5ビット・シフトフィールドと前記5ビット仮数部とを連結することをさらに含む、請求項10に記載の方法。
  12. 前記5ビット・シフトフィールドは、前記第1の記号の最上位非ゼロビットの位置を符号化する、請求項10に記載の方法。
  13. 前記5ビット仮数部は、前記最上位非ゼロビットと、前記第1の記号の次の4つのビットとを符号化する、請求項12に記載の方法。
  14. 前記5ビット仮数部は、前記最上位非ゼロビットの後に続く前記第1の記号の次の5つのビットを符号化する、請求項12に記載の方法。
  15. 動的ハフマン表を生成するときに記号ソートに必要なラッチカウントを削減するためのコンピュータプログラム製品であって、具体化されたプログラム命令を有するコンピュータ可読ストレージ媒体を含み、前記プログラム命令は、電子的コンピュータプロセッサによって実行可能であって、コンピュータ・システムを制御して動作を行わせ、前記動作は、
    複数の第1の記号カウントを定めることであって、前記第1の記号カウントの各々は第1のビット幅を含む、複数の第1の記号カウントを定めることと、
    複数の第2の記号カウントを生成することであって、前記第2の記号カウントの各々は前記複数の第1の記号カウントの記号カウントのマッピングに基づくものであり、前記第2の記号カウントは、前記第1のビット幅より小さい第2のビット幅を含む、複数の第2の記号カウントを生成することと、
    前記複数の第2の記号カウントを頻度によってソートすることと、
    ソートされた前記複数の第2の記号カウントに基づいて動的ハフマン木を生成することと、
    を含む、コンピュータプログラム製品。
  16. 前記複数の第2の記号カウントの各々の第2の記号カウントを生成することは、前記複数の第1の記号カウントの第1の記号に基づいて5ビット・シフトフィールド及び5ビット仮数部を生成することを含む、請求項15に記載のコンピュータプログラム製品。
  17. 前記5ビット・シフトフィールドと前記5ビット仮数部とを連結することをさらに含む、請求項16に記載のコンピュータプログラム製品。
  18. 前記5ビット・シフトフィールドは、前記第1の記号の最上位非ゼロビットの位置を符号化する、請求項17に記載のコンピュータプログラム製品。
  19. 前記5ビット仮数部は、前記最上位非ゼロビットの後に続く前記第1の記号の次の5つのビットを符号化する、請求項18に記載のコンピュータプログラム製品。
  20. 前記複数の第1の記号カウントの第1のカウントと5ビットフィールドとを連結することによって29ビットフィールドを生成することをさらに含む、請求項9に記載の方法。
  21. 動的ハフマン表を生成するときに記号ソートに必要なラッチカウントを削減するためのシステムであって、
    アクセラレータと、
    コンピュータ可読命令を有するメモリと、
    前記コンピュータ可読命令を実行するように構成されたプロセッサと、
    を含み、前記コンピュータ可読命令は、前記プロセッサによって実行されたとき、前記アクセラレータに、
    複数の第1の記号カウントを定めることであって、前記第1の記号カウントの各々は第1のビット幅を含む、複数の第1の記号カウントを定めることと、
    複数の第2の記号カウントを生成することであって、前記第2の記号カウントの各々は前記複数の第1の記号カウントの記号カウントのマッピングに基づくものであり、前記第2の記号カウントは、前記第1のビット幅より小さい第2のビット幅を含む、複数の第2の記号カウントを生成することと、
    前記複数の第2の記号カウントを頻度によってソートすることと、
    ソートされた前記複数の第2の記号カウントに基づいて動的ハフマン木を生成することと、
    を含む方法を行わせる、システム。
  22. 前記複数の第2の記号カウントの各々の第2の記号カウントを生成することは、前記複数の第1の記号カウントの第1の記号に基づいて5ビット・シフトフィールド及び5ビット仮数部を生成することを含む、請求項21に記載のシステム。
  23. 前記5ビット・シフトフィールドは、前記第1の記号の最上位非ゼロビットの位置を符号化する、請求項22に記載のシステム。
  24. 前記5ビット仮数部は、前記最上位非ゼロビットの後に続く前記第1の記号の次の5つのビットを符号化する、請求項22に記載のシステム。
  25. 入力バッファから第1の記号を含むデータストリームを受け取ることと、
    前記第1の記号に基づいて、第1のビット幅を有する第1の記号カウントを定めることと、
    前記第1の記号カウントに基づいて5ビット・シフトフィールドを生成することと、
    前記第1の記号カウントに基づいて5ビット仮数部を生成することと、
    前記5ビット・シフトフィールドと前記5ビット仮数部とを連結することによって、第2のビット幅を有する第2の記号カウントを定めることと、
    前記第2の記号カウントの頻度をソートすることと、
    を含む方法。
JP2021539586A 2019-02-14 2020-02-11 動的ハフマン表生成のためのハードウェア領域を節約するためのラッチカウントの削減 Active JP7425526B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/275,608 US10693493B1 (en) 2019-02-14 2019-02-14 Reducing latch count to save hardware area for dynamic Huffman table generation
US16/275,608 2019-02-14
PCT/EP2020/053409 WO2020165133A1 (en) 2019-02-14 2020-02-11 Reducing latch count to save hardware area for dynamic huffman table generation

Publications (2)

Publication Number Publication Date
JP2022520158A true JP2022520158A (ja) 2022-03-29
JP7425526B2 JP7425526B2 (ja) 2024-01-31

Family

ID=69593650

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021539586A Active JP7425526B2 (ja) 2019-02-14 2020-02-11 動的ハフマン表生成のためのハードウェア領域を節約するためのラッチカウントの削減

Country Status (5)

Country Link
US (2) US10693493B1 (ja)
EP (1) EP3925074A1 (ja)
JP (1) JP7425526B2 (ja)
CN (1) CN113366765A (ja)
WO (1) WO2020165133A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112737596A (zh) * 2021-01-07 2021-04-30 苏州浪潮智能科技有限公司 一种基于排序网络的动态霍夫曼编码方法、装置及设备
US11791838B2 (en) 2021-01-15 2023-10-17 Samsung Electronics Co., Ltd. Near-storage acceleration of dictionary decoding
CN113824449A (zh) * 2021-09-18 2021-12-21 山东云海国创云计算装备产业创新中心有限公司 一种静态霍夫曼并行编码方法、系统、存储介质及设备
CN113965207B (zh) * 2021-12-17 2022-03-15 苏州浪潮智能科技有限公司 一种基于deflate霍夫曼编码的动态码表生成装置和方法
CN114401013B (zh) * 2022-03-25 2022-06-21 苏州浪潮智能科技有限公司 一种适用于deflate格式的Huffman压缩编码字符频率统计装置
CN114640357B (zh) * 2022-05-19 2022-09-27 深圳元象信息科技有限公司 数据编码方法、设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012124878A (ja) * 2010-11-17 2012-06-28 Sony Corp 画像処理装置及び画像処理方法
JP2017098946A (ja) * 2015-11-17 2017-06-01 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation データを符号化するための方法、コンピュータ・プログラムおよびシステム

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5748121A (en) 1995-12-06 1998-05-05 Intel Corporation Generation of huffman tables for signal encoding
US6040790A (en) 1998-05-29 2000-03-21 Xerox Corporation Method of building an adaptive huffman codeword tree
CN100546201C (zh) 2003-09-02 2009-09-30 诺基亚公司 基于对霍夫曼编码树分段的霍夫曼编码和解码方法和设备
US7826670B2 (en) 2005-06-15 2010-11-02 Fujifilm Corporation Data compression apparatus and data compression program storage medium
US7307552B2 (en) 2005-11-16 2007-12-11 Cisco Technology, Inc. Method and apparatus for efficient hardware based deflate
US7538696B2 (en) * 2007-08-31 2009-05-26 Rmi Corporation System and method for Huffman decoding within a compression engine
US9362948B2 (en) * 2008-02-14 2016-06-07 Broadcom Corporation System, method, and computer program product for saving and restoring a compression/decompression state
US8106797B2 (en) 2007-11-30 2012-01-31 Comtech Ef Data Corporation Assigning codes to and repairing Huffman trees
US20110307748A1 (en) 2010-06-15 2011-12-15 Qualcomm Incorporated Techniques for error diagnosis in vlsi systems
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
US9171007B2 (en) 2013-03-15 2015-10-27 International Business Machines Corporation Compression/decompression accelerator protocol for software/hardware integration
US9030771B2 (en) 2013-04-26 2015-05-12 Oracle International Corporation Compressed data verification
US9832287B2 (en) 2014-03-28 2017-11-28 Comtech Ef Data Corp. System and method for dynamic Huffman decoding
US9264068B2 (en) 2014-05-09 2016-02-16 Micron Technology, Inc. Deflate compression algorithm
US9337862B2 (en) 2014-06-09 2016-05-10 Tidal Systems, Inc. VLSI efficient Huffman encoding apparatus and method
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
US9509335B1 (en) 2015-05-11 2016-11-29 Via Alliance Semiconductor Co., Ltd. Hardware data compressor that constructs and uses dynamic-prime huffman code tables
US9929748B1 (en) 2017-03-31 2018-03-27 Intel Corporation Techniques for data compression verification
US10135463B1 (en) 2017-09-29 2018-11-20 Intel Corporation Method and apparatus for accelerating canonical huffman encoding

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012124878A (ja) * 2010-11-17 2012-06-28 Sony Corp 画像処理装置及び画像処理方法
JP2017098946A (ja) * 2015-11-17 2017-06-01 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation データを符号化するための方法、コンピュータ・プログラムおよびシステム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"Application Note // Hardware GZIP Decompression", AN GZIP V1.0, JPN7023002629, 1 January 2003 (2003-01-01), pages 1 - 11, ISSN: 0005104880 *

Also Published As

Publication number Publication date
US10693493B1 (en) 2020-06-23
EP3925074A1 (en) 2021-12-22
WO2020165133A1 (en) 2020-08-20
JP7425526B2 (ja) 2024-01-31
CN113366765A (zh) 2021-09-07
US10715174B1 (en) 2020-07-14

Similar Documents

Publication Publication Date Title
JP2022520158A (ja) 動的ハフマン表生成のためのハードウェア領域を節約するためのラッチカウントの削減
US8704686B1 (en) High bandwidth compression to encoded data streams
JP5878644B2 (ja) データ処理システムにおいて、可変長符号化データ・ストリームを復号するための方法、コンピュータ・プログラム、および、装置
US8090027B2 (en) Data compression using an arbitrary-sized dictionary
US10187081B1 (en) Dictionary preload for data compression
JP7031828B2 (ja) 意味論的値のデータ圧縮及び解凍のための方法、装置、及びシステム
US8456332B2 (en) Systems and methods for compression of logical data objects for storage
CN112514270B (zh) 数据压缩
US8806292B2 (en) Method of hybrid compression acceleration utilizing special and general purpose processors
US11031951B2 (en) Verifying the correctness of a deflate compression accelerator
US20200067523A1 (en) Multi-mode compression acceleration
Funasaka et al. Adaptive loss‐less data compression method optimized for GPU decompression
Lenhardt et al. Gipfeli-high speed compression algorithm
US11606103B2 (en) Data compression method, data compression device, data decompression method, and data decompression device
US10374629B1 (en) Compression hardware including active compression parameters
JP4758494B2 (ja) ビット長を符号に変換する回路及び方法
US10720941B2 (en) Computer system supporting migration between hardware accelerators through software interfaces
JP2016052046A (ja) 圧縮装置、伸長装置およびストレージ装置
US10623016B2 (en) Accelerated compression/decompression including predefined dictionary
Philip et al. LiBek II: A novel compression architecture using adaptive dictionary

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210817

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20220512

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220725

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230630

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230711

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231003

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20231226

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20231226

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240116

R150 Certificate of patent or registration of utility model

Ref document number: 7425526

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150