JP2024046000A - 圧縮装置及び圧縮方法 - Google Patents
圧縮装置及び圧縮方法 Download PDFInfo
- Publication number
- JP2024046000A JP2024046000A JP2022151121A JP2022151121A JP2024046000A JP 2024046000 A JP2024046000 A JP 2024046000A JP 2022151121 A JP2022151121 A JP 2022151121A JP 2022151121 A JP2022151121 A JP 2022151121A JP 2024046000 A JP2024046000 A JP 2024046000A
- Authority
- JP
- Japan
- Prior art keywords
- match
- substring
- input data
- match information
- substrings
- 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.)
- Pending
Links
- 238000007906 compression Methods 0.000 title claims abstract description 43
- 230000006835 compression Effects 0.000 title claims abstract description 43
- 238000000034 method Methods 0.000 title claims description 23
- 238000010586 diagram Methods 0.000 description 21
- 238000004364 calculation method Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 12
- 238000012545 processing Methods 0.000 description 7
- 238000012937 correction Methods 0.000 description 5
- 230000006837 decompression Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 230000010365 information processing Effects 0.000 description 4
- 241001674048 Phthiraptera Species 0.000 description 3
- 101000662518 Solanum tuberosum Sucrose synthase Proteins 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3066—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction by means of a mask or a bit-map
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6017—Methods or arrangements to increase the throughput
- H03M7/6023—Parallelization
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Memory System (AREA)
Abstract
【課題】短時間でデータを圧縮することができる圧縮装置を提供すること。【解決手段】実施形態に係る圧縮装置は、複数サイクル分の入力データ列から、先頭のバイト位置が異なり、複数バイトである複数のサブストリングを生成するサブストリング生成部と、過去のサイクルで入力された複数の入力データ列を記憶するメモリと、複数の入力データ列の中から複数のサブストリングと少なくとも一部が一致する複数の第1入力データ列を取得するためにメモリを探索し、複数の第1入力データ列が記憶されているメモリの記憶位置と、複数のサブストリングと複数の第1入力データ列との一致長と、を表す複数の探索結果を出力する探索部と、複数の探索結果のビットマップと、複数の探索結果の中の第1の探索結果が選択されたか否かを示すビット列とに基づいて、複数の探索結果の中の第2の探索結果を選択するかしないかを決定する選択部と、を具備する。【選択図】図10
Description
本発明の実施形態は、データを圧縮する圧縮装置及び圧縮方法に関する。
データセンター等では、ユーザが大量のデータを保存する際、元データのままデータを保存すると、記憶媒体の容量が膨大になり、それに係るコストが増大してしまう。
そこで、データを可逆圧縮し、圧縮データを保存することにより、保存するデータ量の削減を図っている。可逆圧縮の一例は、辞書式圧縮とエントロピー符号化を組み合わせた圧縮である。辞書式圧縮の一例は、gzip圧縮である。gzip圧縮の辞書式圧縮は、過去に入力されたデータ列を格納する辞書を備える。圧縮対象データ列と一致するデータ列が辞書から探索される。圧縮対象データ列と一致するデータ列が辞書に格納されている場合、圧縮対象データ列は、圧縮対象データ列が辞書に格納されているデータ列と一致したという情報、一致するデータ列を格納する辞書の記憶位置(一致位置と称される)と、一致するデータ列の長さ(一致長と称される)の組に変換される。圧縮対象データ列と一致するデータ列が辞書に格納されていない場合、圧縮対象データ列は、圧縮対象データ列が辞書に格納されているデータ列と不一致であるという情報に変換される。
この辞書式圧縮の後、一致したという情報と一致位置と一致長の組、又は不一致であるという情報がエントロピー符号化され、データが圧縮されデータ量が削減される。一致したという情報と一致位置と一致長の組、又は不一致であるという情報は、圧縮対象データ列よりサイズが小さい。
データ量が削減されることにより、記憶媒体への物理的な書き込み量が削減され、物理的な読み出し量も削減される。そのため、書き込み速度や読み込み速度の増加が可能となり、より多くのデータを記憶媒体に書き込むことが可能となる。
辞書式圧縮では、圧縮伸長のスループットと圧縮性能を高めるために、圧縮対象データ列の先頭から1データ単位ずつずれた複数のデータ列の辞書探索が同時に行なわれることがある。この場合、圧縮対象データ列と一致する複数のデータ列が検出されることがある。
圧縮対象データ列と一致する複数の文字列が検出された場合、検出された文字列から互いに等しい文字列を含まない複数の文字列を選択しなければならない。この選択は、時間が係る処理である。
本発明の目的は、短時間でデータを圧縮することができる圧縮装置及び圧縮方法を提供することである。
実施形態に係る圧縮装置は、1サイクル当たり複数バイトの入力データ列を入力し、複数サイクル分の入力データ列から、先頭のバイト位置がそれぞれ異なり、それぞれが複数バイトである複数のサブストリングを生成するサブストリング生成部と、過去のサイクルで入力された複数の入力データ列を記憶するメモリと、前記複数の入力データ列の中から前記複数のサブストリングと少なくとも一部が一致する複数の第1入力データ列を取得するために前記メモリを探索し、前記複数の第1入力データ列が記憶されている前記メモリの記憶位置と、前記複数のサブストリングと前記複数の第1入力データ列との一致長と、を表す複数の探索結果を出力する探索部と、前記複数の探索結果のそれぞれのビットマップと、前記複数の探索結果の中の第1の探索結果が選択されたか否かを示すビット列とに基づいて、前記複数の探索結果の中の第2の探索結果を選択するかしないかを決定する選択部と、を具備する。
以下、図面を参照して、実施形態を説明する。以下の説明は、実施形態の技術的思想を具体化するための装置や方法を例示するものであって、実施形態の技術的思想は、以下に説明する構成要素の構造、形状、配置、材質等に限定されるものではない。当業者が容易に想到し得る変形は、当然に開示の範囲に含まれる。説明をより明確にするため、図面において、各要素のサイズ、厚み、平面寸法又は形状等を実際の実施態様に対して変更して模式的に表す場合もある。複数の図面において、互いの寸法の関係や比率が異なる要素が含まれることもある。複数の図面において、対応する要素には同じ参照数字を付して重複する説明を省略する場合もある。いくつかの要素に複数の呼称を付す場合があるが、これら呼称の例はあくまで例示であり、これらの要素に他の呼称を付すことを否定するものではない。また、複数の呼称が付されていない要素についても、他の呼称を付すことを否定するものではない。なお、以下の説明において、「接続」は直接接続のみならず、他の要素を介した接続も含む場合もある。
以下、図面を参照しながら本実施の形態について詳細に説明する。
図1は、第1実施形態に係る情報処理システム1の一例を説明するためのブロック図である。情報処理システム1は、ホスト2と、メモリシステム4とを含む。
ホスト2は、メモリシステム4にアクセスする情報処理装置である。メモリシステム4は、ホスト2のメインストレージとして使用され得る。メモリシステム4は、ホスト2に内蔵されてもよいし、ホスト2の外部に設けられ、ホスト2にケーブルまたはネットワークを介して接続されてもよい。ホスト2は、大量且つ多様なデータをメモリシステム4に保存するサーバ(ストレージサーバ)であってもよい。ホスト2は、パーソナルコンピュータであってもよい。メモリシステム4は、データセンター等のサーバに組み込まれるビジネスユース向けのシステムであってもよい。メモリシステム4はパーソナルコンピュータに組み込まれるパーソナルユース向けのシステムであってもよい。メモリシステム4の例は、SSD(Solid State Drive)、HDD(Hard Disk Drive)である。以下の説明では、メモリシステム4の例は、SSDであるとする。
メモリシステム4は、NAND型フラッシュメモリ12、DRAM(Dynamic Random Access Memory)14、及びコントローラ10を備える。
NAND型フラッシュメモリ12は、不揮発性メモリの一例である。NAND型フラッシュメモリ12の代わりに、NOR型フラッシュメモリ、MRAM(Magneto-resistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)を用いてもよい。NAND型フラッシュメモリ12は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。メモリセルアレイは、2次元構造でもよいし、3次元構造でもよい。
DRAM14は、揮発性メモリの一例である。DRAM14は、例えばDDR3L(Double Data Rate 3 Low voltage)規格のDRAMである。DRAM14はライトバッファ、リードバッファ、管理情報バッファ等を含む。ホストからメモリシステム4に供給され、NAND型フラッシュメモリ12に書き込まれている途中あるいは未書き込みのデータがライトバッファに記憶される。NAND型フラッシュメモリ12から読み出され、ホストに転送中のデータあるいは未転送のデータがリードバッファに記憶される。ルックアップテーブルやメモリシステム4の動作中に用いられる各種のテーブルや各種の値が管理情報バッファに記憶される。DRAM14は、コントローラ10において実行されるソフトウェアの一時的なバッファとしても機能する。DRAM14は、コントローラ10の外部に設けるのだけではなく、コントローラ10の内部に設けてもよい。なお、揮発性メモリとしては、DRAM14の代わりに、より高速アクセスが可能なSRAM(Static Random Access Memory)を用いてもよい。
コントローラ10は、ホストから送信されるコマンドに従って、NAND型フラッシュメモリ12にデータを書き込むよう、又はNAND型フラッシュメモリ12からデータを読み出すように構成されている。コントローラ10は、SoC(System on a Chip)のような回路によって構成され得る。コントローラ10は、メモリシステム4の動作を司る機能を有する。コントローラ10は、ホストインタフェース(ホストI/F回路と称する)22、CPU20、NANDインタフェース(NAND I/F回路と称する)24、DRAMインタフェース(DRAM I/F回路と称する)26、圧縮回路28、及び伸張回路30を備える。
ホストI/F回路22は、ホストとの通信を実行するように構成されている。ホストとの通信は、例えばPCI ExpressTM規格に従う。ホストI/F回路22は、ホストからのコマンドを受信する。
NAND I/F回路24は、CPU20の制御の下、NAND型フラッシュメモリ12を制御するように構成されたメモリ制御回路である。NAND I/F回路24とNAND型フラッシュメモリ12とは、複数のチャネルChで接続される。NAND型フラッシュメモリ12は、多数のメモリチップからなる。複数のメモリチップが各チャネルに接続される。
DRAM I/F回路26は、CPU20の制御の下、DRAM14を制御するように構成されたDRAM制御回路である。
圧縮回路28は、辞書式圧縮器42と符号化器44を備える。辞書式圧縮器42は、非圧縮データに対して辞書式圧縮を行うデータ圧縮部である。符号化器44は、辞書式圧縮器42が出力する圧縮データを符号化する。
コントローラ10は、ホストから送信された非圧縮データを圧縮回路28により圧縮し、圧縮データをNAND型フラッシュメモリ12に書き込む。コントローラ10は、圧縮データに、誤り訂正符号化処理やランダマイズ処理等の所定の処理を実行してからNAND型フラッシュメモリ12に書き込んでもよい。つまり、コントローラ10は、圧縮回路28から出力される圧縮データに基づくデータを、NAND I/F回路24を介してNAND型フラッシュメモリ12に書き込むように構成される。コントローラ10は、NAND型フラッシュメモリ12から読み出した圧縮データを伸張回路30により伸張してホスト2へ送信する。コントローラ10は読み出されたデータに対して誤り訂正処理やランダマイズ解除処理等の所定の処理を実行してから伸張回路30に伸張させてもよい。つまり、コントローラ10は、NAND型フラッシュメモリ12から読み出したデータに基づくデータを伸張回路30により伸張してホスト2へ送信するように構成される。
伸張回路30は、辞書式伸張部220と復号部222を備える。
圧縮回路28と伸張回路30は、コントローラ10に含まれるので、専用の回路(SoC)によって実現される。しかし、圧縮回路28と伸張回路30は、CPU20が圧縮又は伸張プログラム(ファームウェア)を実行することによって実現されてもよい。圧縮回路28及び伸張回路30がメモリシステム4のコントローラ10に組み込まれているものとして説明したが、圧縮回路28及び伸張回路30のうちの一方または両方は、メモリシステム4の外部に設けられていてもよい。メモリシステム4の外部とは、例えば、ホスト又はホストがさらに接続されるサーバである。
図2は、第1実施形態に係る圧縮回路28の一例を説明するためのブロック図である。
辞書式圧縮器42は、サブストリング生成部62、複数のハッシュ計算部64、ハッシュテーブル66、ヒストリバッファ68、複数のマッチ情報生成部70、及びマッチ選択部74を含む。サブストリング生成部62は、バッファメモリ62aを備える。
複数のハッシュ計算部64、ハッシュテーブル66、ヒストリバッファ68、及び複数のマッチ情報生成部70は、非圧縮データ40から取得した複数のサブストリングを並列に処理するように構成される。これにより、スループットが向上する。
以下では、並列に処理する複数のサブストリングが、N個のサブストリングである場合を例示する。Nは、2以上の整数である。
図3は、第1実施形態に係るサブストリングの生成の一例を説明するための図である。サブストリング生成部62は、2サイクルの非圧縮データを記憶するバッファメモリ62aを備える。バッファメモリ62aの1バイトのデータを記憶する領域には、1アドレスが割り当てられる。1サイクルの非圧縮データは、ここでは16バイトとする。非圧縮データの種類は、文字データ、画像データ等何でもよい。以下の説明では、非圧縮データの種類は、文字データであるとする。
データ入力のサイクル(C-1)で入力された16バイトの非圧縮データ列(文字列)“abcdefgkbcdefdef”はバッファメモリ62aのアドレス0からアドレス15に記憶されている。データ入力のサイクルCで入力された16バイトの非圧縮データ列(文字列)“abfjcopegtosidbf”はバッファメモリ62aのアドレス16からアドレス31に記憶されている。
サブストリング生成部62は、バッファメモリ62aのアドレス0からアドレス15に記憶されている16バイトの文字列“abcdefgkbcdefdef”を読み出し、その文字列を第0サブストリング(SS0)とする。SS0は、サイクル(C-1)で入力された文字列からなる。
サブストリング生成部62は、バッファメモリ62aのアドレス1からアドレス16に記憶されている16バイトの文字列“bcdefgkbcdefdefa”を読み出し、その文字列を第1サブストリング(SS1)とする。SS1は、サイクル(C-1)で入力された文字列とサイクルCで入力された文字列とからなる。SS1の先頭の文字“b”は、SS0の先頭の文字“a”とは、非圧縮データの文字列においてバイト位置が1つ異なり、バッファメモリ62a内のアドレスが1つ異なる。サブストリングの先頭の文字の位置は、サブストリングの開始位置とも称される。すなわち、SS1の開始位置のアドレスは、非圧縮データの文字列においてSS0の開始位置のアドレスと1だけずれている。
以下、同様に、サブストリング生成部62は、バッファメモリ62aの1つずつずれたアドレスから16バイトの文字列を読み出し、その文字列をサブストリングとする。最後に、サブストリング生成部62は、バッファメモリ62aのアドレス15からアドレス30に記憶されている16バイトの文字列“fabfjcopegtosidb”を読み出し、その文字列を第15サブストリング(SS15)とする。
図2の説明に戻り、N(図3の例ではN=16)個のサブストリングを並列に処理する場合、辞書式圧縮器42は、例えば、N個のハッシュ計算部64と、N個のマッチ情報生成部70とを備える。N個のハッシュ計算部64の内のi番目のハッシュ計算部64は、第iサブストリングに対応する。i番目のハッシュ計算部64を、ハッシュ計算部64-iと表記する。iは0~(N-1)(図3の例では0~15)である。N個のマッチ情報生成部70の内のi番目のマッチ情報生成部70は、第iサブストリングに対応する。i番目のマッチ情報生成部70を、マッチ情報生成部70-iと表記する。
N個のハッシュ計算部64のそれぞれは、N個のサブストリングのそれぞれのハッシュ値を計算する。ハッシュ値の計算には、予め定められた1つのハッシュ関数と、サブストリングの少なくとも一部とが用いられる。N個のハッシュ計算部64のそれぞれは、計算したハッシュ値をハッシュテーブル66に送出する。
より具体的には、i番目のハッシュ計算部64-iは、第iサブストリングのハッシュ値を計算する。ハッシュ計算部64-iは、計算したハッシュ値をハッシュテーブル66に送出する。
ハッシュテーブル66は、例えば、揮発性のメモリで実現される。ハッシュテーブル66は、複数の記憶領域を備える。複数の記憶領域のそれぞれは、1つのハッシュ値に関連付けられたデータを記憶可能である。1つのハッシュ値に関連付けられたデータは、例えば、過去の入力データが記憶されているヒストリバッファ68内の記憶領域を特定するデータである。ヒストリバッファ68内の記憶領域を特定するデータは、例えば、アドレスである。ヒストリバッファ68の複数の記憶領域のそれぞれに記憶されているデータは、並列に読み出され得る。
サブストリングのハッシュ値は、ハッシュテーブル66内の複数の記憶領域の1つを特定するアドレスとして機能する。ハッシュテーブル66は、N個のハッシュ計算部64のそれぞれによって計算されたN個のサブストリングのハッシュ値をアドレスとして、ハッシュテーブル66内の複数の記憶領域の1つを特定する。
特定したハッシュテーブル66内の記憶領域にヒストリバッファ68のアドレスが記憶されている場合、ハッシュテーブル66からそのアドレスが読み出される。そして、読み出されたアドレスを指定したデータ読み出し要求が、ヒストリバッファ68へ送出される。データ読み出し要求は、ヒストリバッファ68に対して、指定したアドレスで特定される記憶領域からデータを読み出すことを要求する。なお、特定したハッシュテーブル66内の記憶領域にヒストリバッファ68のアドレスが記憶されていない場合、ヒストリバッファ68へのデータ読み出し要求は送出されない。
以下では、N個のハッシュ計算部64のそれぞれによって計算されたN個のサブストリングのハッシュ値を用いて、N個のデータ読み出し要求がヒストリバッファ68へ並列に送出された場合について、主に例示する。
ヒストリバッファ68は、例えば、SRAMとして実現される。ヒストリバッファ68は、フリップフロップ回路を用いて実現されてもよい。ヒストリバッファ68は、辞書バッファとも称される。ヒストリバッファ68は、辞書式圧縮器42に過去に入力された所定個数の文字列を記憶する。
ヒストリバッファ68では、受け付けたデータ読み出し要求で指定されたアドレスで特定される記憶領域から、文字列が読み出される。読み出された文字列は、受け付けたデータ読み出し要求に対応するサブストリングと比較される文字列である。サブストリングと比較される、ヒストリバッファ68から読み出された文字列を、そのサブストリングに対応する辞書一致候補とも称する。あるサブストリングに対応する辞書一致候補は、そのサブストリングに対応するマッチ情報生成部70に送出される。
N個のマッチ情報生成部70のそれぞれは、対応するサブストリングのマッチ情報を生成する。N個のマッチ情報生成部70のそれぞれは、サブストリングと、そのマッチ情報をマッチ選択部74に送出する。
マッチ情報は、サブストリングと少なくとも一部が一致する文字列を取得するためにヒストリバッファ68を探索する探索処理の結果を示す。マッチ情報は、一致フラグ、一致位置、及び一致長を含む。
一致フラグは、対応するサブストリングと少なくとも一部が一致する文字列がヒストリバッファ68に記憶されていると判定されたか否かを示す。サブストリングと先頭から少なくとも一部が一致する文字列を、辞書一致文字列と称する。辞書一致文字列がヒストリバッファ68に記憶されていると判定された場合、すなわち、ヒストリバッファ68に記憶されている文字列とサブストリングとが一致する場合、一致フラグは一致を示す文字列matchである。辞書一致文字列がヒストリバッファ68に記憶されていないと判定された場合、すなわち、ヒストリバッファ68に記憶されている文字列とサブストリングとが一致しない場合、一致フラグは不一致を示す文字列unmatchである。
一致位置は、一致フラグがmatchである場合(すなわち、辞書一致文字列がヒストリバッファ68に記憶されていると判定された場合)、対応するサブストリングが記憶されるヒストリバッファ68内の位置から、辞書一致文字列が記憶されているヒストリバッファ68内の位置までの距離を示す。この距離は、ヒストリバッファ68の記憶位置を示すアドレスの差に対応する。一致フラグがunmatchである場合(すなわち、辞書一致文字列がヒストリバッファ68に記憶されていないと判定された場合)、一致位置には値が設定されない。
一致長は、一致フラグがmatchである場合、対応するサブストリングと辞書一致文字列とで一致した部分の長さを示す。一致フラグがunmatchである場合、一致長には値が設定されない。
なお、一致フラグmatchと、一致位置Dと、一致長Lとを含むマッチ情報を、match(D,L)と表記する。不一致フラグunmatchを含むマッチ情報を、unmatchと表記する。また、第iサブストリングに対応するマッチ情報を、マッチ情報M[i]と表記する。
ここで、i番目のマッチ情報生成部70-iの具体的な動作を、第iサブストリングに対応する辞書一致候補がヒストリバッファ68からマッチ情報生成部70-iに送出された場合と、第iサブストリングに対応する辞書一致候補がヒストリバッファ68からマッチ情報生成部70-iに送出されなかった場合のそれぞれについて説明する。
まず、第iサブストリングに対応する辞書一致候補がヒストリバッファ68からマッチ情報生成部70-iに送出された場合について説明する。この場合、マッチ情報生成部70-iは、第iサブストリングと、送出された辞書一致候補とを比較して、i番目のマッチ情報M[i]を生成する。具体的には、マッチ情報生成部70-iは、第iサブストリングと辞書一致候補とで先頭から少なくとも一部が一致する場合、一致フラグmatchと、一致位置Dと、一致長Lとを含むマッチ情報M[i](すなわち、match(D,L))を生成する。マッチ情報生成部70-iは、第iサブストリングと辞書一致候補とでいずれの一部も一致しない場合、不一致フラグunmatchを含むマッチ情報M[i](すなわち、unmatch)を生成する。そして、マッチ情報生成部70-iは、生成したマッチ情報M[i]をマッチ選択部74に送出する。
次いで、第iサブストリングに対応する辞書一致候補がマッチ情報生成部70-iに送出されなかった場合について説明する。この場合、マッチ情報生成部70-iは、不一致フラグunmatchを含むマッチ情報M[i]を生成する。そして、マッチ情報生成部70-iは、生成したマッチ情報M[i]をマッチ選択部74に送出する。
以上の構成により、N個のマッチ情報生成部70は、N個のサブストリングにそれぞれ対応するN個のマッチ情報M[0]~M[N-1]を、マッチ選択部74に並列に送出する。
図4は、第1実施形態に係るマッチ情報M[i]の一例を説明するための図である。マッチ情報生成部70は、図3に示すように、ヒストリバッファ68を探索し、過去に入力された文字列の中から各サブストリングと先頭から少なくとも一部が一致する文字列を検出する。
SS0“abcdefgkbcdefdef”と先頭から少なくとも一部が一致する文字列として、ヒストリバッファ68のアドレス150に記憶されている文字列“abcdefopegtosidbf”が検出される。両者は、最初の7バイトが一致する。SS0はヒストリバッファ68の基準アドレス、例えばアドレス0に記憶されているとする。SS0のマッチ情報M[0]はmatch(150,7)である。
SS1“bcdefgkbcdefdefa” と先頭から少なくとも一部が一致する文字列として、ヒストリバッファ68のアドレス100に記憶されている文字列“bcdefopegtosidbf”が検出さえる。両者は、最初の5バイトが一致する。SS1もヒストリバッファ68の基準アドレス、例えばアドレス0に記憶されているとする。SS1のマッチ情報M[1]はmatch(100,5)である。
SS2“cdefgkbcdefdefab”と先頭から少なくとも一部が一致する文字列はヒストリバッファ68に記憶されていない。SS2のマッチ情報M[2]はunmatchである。
SS15“fabfjcopegtosidb”と先頭から少なくとも一部が一致する文字列として、ヒストリバッファ68のアドレス250に記憶されている文字列“bcdefopegtosfab”が検出される。両者は、最初の13バイトが一致する。SS15もヒストリバッファ68の基準アドレス、例えばアドレス0に記憶されているとする。SS15のマッチ情報M[15]はmatch(250,13)である。
図2の説明に戻る。マッチ選択部74は、N個のサブストリングSS0~SS(N-1)に関するマッチ情報M[0]~マッチ情報M[N-1]から、非圧縮データ40の各文字に対応する少なくとも1つのマッチ情報を選択する。
マッチ選択部74は、文字列の先頭文字から順に、対応するマッチ情報を選択する。マッチ選択部74は、選択したマッチ情報に基づくデータを、符号化器44に送出する。選択したマッチ情報に基づくデータを、辞書式圧縮データと称する。辞書式圧縮データは、複数のシンボルのデータ(すなわち、シンボル列)を含む。複数のシンボルのそれぞれは、例えば、一致位置シンボル、一致長シンボル、及び一致フラグ/不一致フラグのいずれかである。
符号化器44は、辞書式圧縮データに対する符号化を行って、圧縮データ41を生成する。符号化の一例は、ハフマン符号化等のエントロピー符号化である。エントロピー符号化は、符号化対象のシンボルの出現頻度を用いて動的に符号表(符号化テーブル)を生成する可変長符号化方式である。エントロピー符号化は、例えば、deflateまたはgzipで規定されている。符号表は、N種類のシンボルと、N種類のシンボルにそれぞれ関連付けられたN個の符号語とを示す情報を含む。エントロピー符号化では、出現頻度が大きいシンボルには短い符号語が割り当てられ、出現頻度が小さいシンボルには長い符号語が割り当てられる。符号化器44は、このような割り当てに従い、入力されたシンボルを符号語に変換する。つまり、変換により得られる符号語は、可変長符号である。なお、シンボルは、例えば、固定長のデータである。エントロピー符号化によって生成された圧縮データ41は、辞書式圧縮データに含まれる複数のシンボルのそれぞれを変換した符号語を含む。圧縮データ41は、エントロピー符号化に用いられた符号表のデータをヘッダとしてさらに含み得る。符号表のデータは、圧縮データ41を伸張する場合に、符号表(復号表)を復元するために用いられる。
以上の構成により、圧縮回路28は、非圧縮データ40を圧縮して圧縮データ41を生成できる。例えば、非圧縮データ40がホスト2によってNAND型フラッシュメモリ12に書き込むことを要求されたデータである場合、CPU20は、NAND I/F回路24を介して圧縮データ41をNAND型フラッシュメモリ12に書き込む。
コントローラ10は、ECCエンコーダとECCデコーダをさらに備えてもよい。この場合、ECCエンコーダが、符号化器44から出力される圧縮データ41に対して誤り訂正用のパリティ(ECCパリティ)を生成し、生成したECCパリティと圧縮データ41とを有する符号語を生成する。CPU20が、符号語をNAND I/F回路24経由でNAND型フラッシュメモリ12へ書き込むように構成される。つまり、CPU20は、圧縮回路28から出力される圧縮データ41に基づくデータを、NAND I/F回路24を介してNAND型フラッシュメモリ12に書き込むように構成される。CPU20は、例えばホスト2からホストI/F回路22を介してリードコマンドを受信する場合、当該リードコマンドに基づくデータをNAND I/F回路24を介してNAND型フラッシュメモリ12から読み出す。ECCデコーダは、読み出されたデータに対する誤り訂正処理を実行する。誤り訂正処理が実行された読み出しデータは圧縮データ41としてCPU20により伸張回路30へ入力され、伸張回路30は、入力された圧縮データ41を伸張する。CPU20は、ホスト2からのリードコマンドに対して、伸張されたデータをホスト2へ送信する。つまり、ホスト2からのリードコマンドに対して、CPU20は、NAND型フラッシュメモリ12から読み出したデータに基づくデータを伸張し、伸張したデータをホスト2へ送信するように構成される。
マッチ選択部74の詳細を説明する。1サイクルで16バイト(16文字)の文字列が入力される場合のマッチ選択について説明を行う。図3に示すように、1サイクルの非圧縮データに対して16個のサブストリングが生成される。マッチ選択部74が16個のサブストリングのマッチ情報M[0]~M[15]から、非圧縮データ40である文字列の各文字に対応する少なくとも1つのマッチ情報を選択する。
図5は、第1実施形態に係るサブストリング毎の辞書一致文字列の一例を説明するための図である。サブストリング生成部62は、サイクルCで入力された16バイトの文字列“Alice was beginn”とサイクル(C+1)で入力された16バイトの文字列“ing to get very ”から開始位置が異なる16個のサブストリングSS0~SS15を生成する。サブストリング生成部62は、サブストリングSS0~SS15をマッチ情報生成部70とマッチ選択部74に送出する。
マッチ情報生成部70は、16個のサブストリングを用いてヒストリバッファ68を探索して、16個のサブストリングのそれぞれ毎の探索結果を表す16個のマッチ情報をマッチ選択部74に送出する。ここでは、全てのサブストリングについて先頭から少なくとも一部が一致する辞書一致文字列がヒストリバッファ68に記憶されていたとする。すなわち、全てのマッチ情報M[0]~M[15]はmatch(D,L)であるとする。
マッチ情報生成部70は、SS0“Alice was beginn”と先頭から少なくとも一部が一致する辞書一致文字列“A***************”をヒストリバッファ68内で検出する。“*”は一致しない文字を示す。SS0のマッチ情報M[0]の一致長は1である。
マッチ情報生成部70は、SS1“lice was beginni”と先頭から少なくとも一部が一致する辞書一致文字列“lice************”をヒストリバッファ68内で検出する。SS1のマッチ情報M[1]の一致長は4である。マッチ情報生成部70は、SS2“ice was beginnin”と全てが一致する辞書一致文字列“ice was beginnin“をヒストリバッファ68内で検出する。SS2のマッチ情報M[2]の一致長は16である。
以下、同様に処理して、マッチ情報生成部70は、SS15“ning to get very”と先頭から少なくとも一部が一致する辞書一致文字列“ning t**********”をヒストリバッファ68内で検出する。SS15のマッチ情報M[15]の一致長は6である。
このような16個のサブストリングの中のいくつか、例えばSS0、SS1、SS2のマッチ情報が選ばれたとする。SS1の辞書一致文字列は、“lice was beginni”であり、SS2の辞書一致文字列は、“ice was beginnin”である。文字列“ice”は、SS1の辞書一致文字列とSS2の辞書一致文字列に重複して含まれる。そのため、非圧縮データがSS0、SS1、SS2のマッチ情報に変換されることにより圧縮された場合、圧縮文字列を伸張すると、文字列“Aliceice was beginnin”が得られ、非圧縮データを正しく復元することができない。
マッチ選択部74は、圧縮する文字列が重複しないように、マッチ情報を選択する。文字列が重複することは、文字列の衝突と称される。
図6は、第1実施形態に係るマッチ情報の選択の一例を説明するための図である。図6は、文字列の衝突を回避するマッチ情報の選択の一例を示す。図6の辞書一致文字列の例は、図5の例と同じである。ただし、図5では、サイクルCとサイクル(C+1)で入力された32バイトの文字列から生成された16個のサブストリングがSS0~SS15と称されたが、図6では、サイクルCとサイクル(C+1)で入力された32バイトの文字列から生成された16個のサブストリングがSS1~SS16と称される。図6では、SS0は、サイクル(C-1)で選択されたマッチ情報に対応するサブストリングもマッチ情報の選択に用いられる。
サブストリング生成部62は、サイクルCで入力された16バイトの文字列“Alice was beginn”とサイクル(C+1)で入力された16バイトの文字列“ing to get very ”から開始位置が異なる16個のサブストリングSS1~SS16を生成する。
文字列の衝突は、1つのサイクルで選択するマッチ情報に関してのみ生じるのではなく、あるサイクルと1つ前のサイクルで選択するマッチ情報に関しても生じ得る。マッチ選択部74は、あるサイクルのマッチ選択の際、1つ前のサイクルで選択したマッチ情報に対応するサブストリングの辞書一致文字列も考慮しなければならない。例えば、1つ前のサイクル(C-1)で選択したマッチ情報に対応するサブストリングSS0の辞書一致文字列が“xxxxxxxxxxxxdAli”であったとする。“x”は任意の一致文字である。この文字列の中で、“xxxxxxxxxxxxd”はサイクルC-1で入力された文字であり、“Ali”はサイクルCで入力された文字列であるとする。SS0のマッチ情報は次のサイクルのマッチ情報の選択に影響するので、SS0は持ち越しサブストリングとも称される。SS0の中でサイクルCで入力された文字列に関するマッチ情報M[0]の中の一致長(=3)は持ち越し長とも称される。
この場合、サイクルCでSS1のマッチ情報M[1]が選択されると、SS1の辞書一致文字列“Axxxxxxxxxxxxxxx”とSS0の辞書一致文字列“xxxxxxxxxxxxdAli”において、文字“A”が重複してしまう。
しかし、サイクルCでSS4のマッチ情報M[4]が選択されると、SS4の辞書一致文字列“ce w************”とSS0の辞書一致文字列“xxxxxxxxxxxxdAli”において、重複する文字が存在せず、文字列の衝突が回避される。
このようにマッチ情報の選択では前のサイクルでのマッチ情報の選択結果によって現サイクルで選択するマッチ情報に対応するサブストリングの開始位置が異なる。このサブストリングの開始位置は持ち越し長により決まる。そのため、持ち越し長が定まらないと、マッチ情報の選択を開始することができない。そのためマッチ情報の選択は、ストールを起こさないパイプライン化するためには、1サイクルで処理する必要がある。
上記の基準に従い、持ち越し長を用いてマッチ情報の選択を行うハードウェアの参考例を図7に示す。図7は、参考例に係るマッチ選択回路の一例を説明するための図である。この選択回路は、各マッチ情報M[i]の一致長を足し合わせて、マッチ情報を選択するか否かを決定する。
SS0のマッチ情報M[0]を選択するか否かを決定するために、持ち越し長LとSS0の開始位置が比較される。SS0の開始位置は0である。図7のSS0は現サイクルの入力データから生成されたサブストリングを表す。
両者が一致する場合、M[0]が選択される。両者が一致する場合、セレクタは、持ち越し長LとM[0]の一致長L0の加算結果を次のSS1のマッチ情報M[1]を選択するか否かの判定のための信号S0として出力する。
両者が一致しない場合、M[0]は選択されない。両者が一致しない場合、セレクタは、持ち越し長Lそのままの値を判定のための信号S0として出力する。
SS1のマッチ情報M[1]を選択するか否かを決定するために、信号S0とSS1の開始位置が比較される。SS1の開始位置は1である。
両者が一致する場合、M[1]が選択される。両者が一致する場合、セレクタは、信号s0とM[0]の一致長L1の加算結果を次のSS2のマッチ情報M[2]を選択するか否かの判定のための信号s1として出力する。
両者が一致しない場合、M[1]は選択されない。両者が一致しない場合、セレクタは、信号s0そのままの値を信号s1として出力する。
以降、同様な処理がSS3のマッチ情報M[3]からSS15のマッチ情報M[15]について実行される。信号S15とサブストリングの長さ(16)の加算結果が、次のサイクルへの持ち越し長Lとされる。
しかしながら上記の回路では、加算器がシーケンシャルにつながっているためパスが長くなり、ハードウェア化した場合、動作周波数が低くなる可能性が高い。さらに、1サイクルで持ち越し長を決定しなければならないため、処理を複数ステージに分割することができない。
図8は、第1実施形態に係るマッチ選択部74の一例を説明するためのブロック図である。マッチ選択部74は、入力バッファ302、ビットマップ作成器304、ビットマップメモリ310、選択判定器306、及び出力バッファ308を含む。サブストリング生成部62から出力されるサブストリングとマッチ情報生成部70から出力されるマッチ情報が入力バッファ302に書き込まれる。ビットマップ作成器304は、入力バッファ302に書き込まれているマッチ情報をビットマップ情報に変換し、ビットマップ情報をビットマップメモリ310に書き込む。ビットマップ作成器304は、マッチ情報を選択判定器306に送出する。選択判定器306は、ビットマップメモリ310からビットマップを読み出し、ビットマップに基づいてマッチ情報を選択するか否かを判定する。選択判定器306は、選択したマッチ情報を出力バッファ308に書き込む。出力バッファ308に記憶されているマッチ情報は符号化器44へ送出される。
図9は、第1実施形態に係るビットマップ作成器304により作成されたマッチ情報のビットマップの一例を説明するための図である。ビットマップは、入力文字列のバイト位置毎に、サブストリングとヒストリバッファ68内の文字列が一致したか否かを示す。図9は、図6に示した辞書一致文字列において、一致した文字を1で、それ以外を0で示すことによるビットマップを示す。
第nサブストリングSSnのビットマップBPnは次のように表される。
n=0(持ち越しサブストリングSS0)の場合、
BPn
={{L0{1’b1}},{(2M-L0){1’b0}}} 式1A
L0は持ち越し長である。
n=1からNの場合、
BPn
={{(n-1){1’b0}},{Ln{1’b1}},{(2M-(n-1)-Ln){1’b0}}} 式1B
Lnはサブストリングnのマッチ情報の一致長である。
Mは最大一致長であり、サブストリングの長さ16である。
n=0(持ち越しサブストリングSS0)の場合、
BPn
={{L0{1’b1}},{(2M-L0){1’b0}}} 式1A
L0は持ち越し長である。
n=1からNの場合、
BPn
={{(n-1){1’b0}},{Ln{1’b1}},{(2M-(n-1)-Ln){1’b0}}} 式1B
Lnはサブストリングnのマッチ情報の一致長である。
Mは最大一致長であり、サブストリングの長さ16である。
SS16のビットマップBP16は次のように表される。サブストリング16のマッチ情報の一致長Lnは6である。
BP16={{15{1’b0}},{6{1’b1}},{11{1’b0}}} 式2
ここで、この明細書で使用する記号の表記を説明する。
BP16={{15{1’b0}},{6{1’b1}},{11{1’b0}}} 式2
ここで、この明細書で使用する記号の表記を説明する。
(1)1’b0は、1ビットを示し、その値は0である。
(2)1’b1は、1ビットを示し、その値は1である。
(3){n{1’b0}}は、1’b0をn回繰り返して連接したものである。
例)
{n{1’b0}}={0,0,…,0} 式3
ビット列{b0,b1,b2,…,bN-2,bN-1}に対して、(bn(n=0,1,…,N-1)は1ビットを示し、b0がMSBであり、bN-1がLSBであり、b0,b1,b2,…,bN-2,bN-1は連接されている)
B[n]=bN-1-n 式4
B[n:0]={bN-1-n,bN-1-n+1,bN-1-n+2,…,bN-2,,bN-1} 式5
(式5の表記でn=0の場合、B[0:0]=bN-1である)
B[0:n]={b0,b1,b2,…,bn} 式6
(式6の表記でn=0の場合、B[0:0]=b0である)
と表現される。
例)
{n{1’b0}}={0,0,…,0} 式3
ビット列{b0,b1,b2,…,bN-2,bN-1}に対して、(bn(n=0,1,…,N-1)は1ビットを示し、b0がMSBであり、bN-1がLSBであり、b0,b1,b2,…,bN-2,bN-1は連接されている)
B[n]=bN-1-n 式4
B[n:0]={bN-1-n,bN-1-n+1,bN-1-n+2,…,bN-2,,bN-1} 式5
(式5の表記でn=0の場合、B[0:0]=bN-1である)
B[0:n]={b0,b1,b2,…,bn} 式6
(式6の表記でn=0の場合、B[0:0]=b0である)
と表現される。
(4)ビット列An={a0,a1,a2,…,an-2,an-1}とビット列Bn={b0,b1,b2,…,bn-2,bn-1}に対して、
演算子&(または|)がビット列の間に記載された場合、
An&Bn={b0&a0,b1&a1,b2&a2,…,bn-2&an-2,bn-1&an-1} 式7
An&Bnは、ビット列Anとビット列Bnの各ビット同士のAND(またはOR)をとったnビットである
演算子&(または|)がビット列の先頭に記載された場合、
&An=a0&a1&a2&,…,&an-2&an-1 式8
&Anは、ビット列Anの各ビット同士のAND(またはOR)をとった1ビットである。
演算子&(または|)がビット列の間に記載された場合、
An&Bn={b0&a0,b1&a1,b2&a2,…,bn-2&an-2,bn-1&an-1} 式7
An&Bnは、ビット列Anとビット列Bnの各ビット同士のAND(またはOR)をとったnビットである
演算子&(または|)がビット列の先頭に記載された場合、
&An=a0&a1&a2&,…,&an-2&an-1 式8
&Anは、ビット列Anの各ビット同士のAND(またはOR)をとった1ビットである。
(5)否定の演算子は~で表記する。
例)~(1’b1)=1’b0
図10は、第1実施形態に係るマッチ選択部74の処理の一例を説明するためのフローチャートである。
例)~(1’b1)=1’b0
図10は、第1実施形態に係るマッチ選択部74の処理の一例を説明するためのフローチャートである。
マッチ選択部74は、N個のサブストリングとN個のマッチ情報を入力バッファ302に書き込む(S102)。
ビットマップ作成器304は、N個のサブストリングのマッチ情報をビットマップ化し、ビットマップBP(式1Aまたは式1B)をビットマップメモリ310に書き込む(S104)。
選択判定器306は、変数nを1とする(S106)。
選択判定器306は、ビット列Vを求める(S108)。
ビット列Vは、第nサブストリングのマッチ情報M[n]が選択されたか否かを示す選択/非選択ビットVnの集合である。
V={V0,V1,…,VN} 式9
第nサブストリングのマッチ情報M[n]が選択された場合、Vn=1である。マッチ情報M[n]が選択されない場合、Vn=0である。持ち越しサブストリングSS0のマッチ情報M[0]は必ず選択されるので、持ち越しサブストリングSS0の選択/非選択ビットV0は1である。
第nサブストリングのマッチ情報M[n]が選択された場合、Vn=1である。マッチ情報M[n]が選択されない場合、Vn=0である。持ち越しサブストリングSS0のマッチ情報M[0]は必ず選択されるので、持ち越しサブストリングSS0の選択/非選択ビットV0は1である。
選択判定器306は、ビット列Snを求める(S112)。
Sn={BP0[2M-1-n],BP1[2M-1-n],…,BPN[2M-1-n]} 式10
ビット列Snは、判定対象であるサブストリングの開始位置のビット位置についての判定対象のサブストリングより若い番号のサブストリングのビットの列である。若い番号のサブストリングには、持ち越しサブストリングも含む。
ビット列Snは、判定対象であるサブストリングの開始位置のビット位置についての判定対象のサブストリングより若い番号のサブストリングのビットの列である。若い番号のサブストリングには、持ち越しサブストリングも含む。
選択判定器306は、判定ビット(|Sn[0:n-1]&V[0:n-1])が0であるか否かを判定する(S114)。
判定ビット(|Sn[0:n-1]&V[0:n-1])が0である場合(S114;YES)、選択判定器306は、選択/非選択ビットVnを1とする(SSnのマッチ情報を選択する)(S116)。持ち越しサブストリングSS0のマッチ情報M[0]は必ず選択されるので、持ち越しサブストリングSS0の判定ビットは1である。
判定ビット(|Sn[0:n-1]&V[0:n-1])が1である場合(S114;NO)、選択判定器306は、選択/非選択ビットVnを0とする(SSnのマッチ情報を選択しない)(S118)。
選択判定器306は、変数nを+1する(S122)。
選択判定器306は、変数nがNに達したか否かを判定する(S124)。変数nがNに達していない場合(S124;NO)、選択判定器306は、ビット列Vを求める処理(S108)を再び実行する。
変数nがNに達した(S124;YES)、選択判定器306は、次サイクルへの持ち越し長を決定する(S126)。選択判定器306は、Vn=1で、かつ最もnの大きいサブストリングnの(一致位置-1+一致長)からMを減算した値を持ち越し長とする。例えば、SS6の一致長が最も大きく、その値が14であるとすると、持ち越し長は、6-1+14-16=3である。選択判定器306は、持ち越し長をビットマップメモリ310に書き込む。持ち越し長は、次フレームのビットマップの作成時に、図9に示すように、ビットマップに加えられる。
選択判定器306は、選択したサブストリングのマッチ情報を出力バッファ308に書き込む。出力バッファ308に記憶されているマッチ情報は符号化器44へ送出される。
これにより、第1実施形態に係るマッチ選択部74は、圧縮する文字列が重複しないように、マッチ情報を選択することができる。しかも、選択判定器306は、マッチ情報のビットマップ上の判定対象であるサブストリングの開始位置のビット位置についての判定対象のサブストリングより若い番号のサブストリングのビットの列である特定のビット列及び判定対象のサブストリングより若い番号のサブストリングのマッチ情報が選択されたか否かを示すビット列との1ビットのAND演算とOR演算に基づき、判定対象のサブストリングのマッチ情報を選択するかを決定するので、高速なマッチ情報の選択及び持ち越し長の計算が可能となる。このため、マッチ選択処理をパイプライン化することもできる。
このフローチャートによるマッチ選択の具体例を、図11、図12、図13を参照して説明する。
図11は、第1サブストリングSS1のマッチ情報M[1]を選択するか否かの判断の際(n=1)のビット列V、ビット列Sn、及び判定ビットの状態を示す。ビット列V={V0}={1}である。ビット列Sn={1}であるので、判定ビット(|Sn[0:n-1]&V[0:n-1])=1である。そのため、マッチ情報M[1]は選択されず、V1=0である。
図12は、第2サブストリングSS2のマッチ情報M[2]を選択するか否かの判断の際(n=2)のビット列V、ビット列Sn、及び判定ビットの状態を示す。ビット列V={V0,V1}={1,0}である。ビット列Sn={1,0}であるので、判定ビット(|Sn[-1:n-1]&V[0:n-1])=1である。そのため、マッチ情報M[2]は選択されず、V2=0である。
同様に、マッチ情報M[3]は選択されず、V3=0である。
図13は、第4サブストリングSS4のマッチ情報M[4]を選択するか否かの判断の際(n=4)のビット列V、ビット列Sn、及び判定ビットの状態を示す。ビット列V={V0,V1,V2,V3}={1,0,0,0}である。ビット列Sn={0,0,1,1}であるので、判定ビット(|Sn[0:n-1]&V[0:n-1])=0である。そのため、マッチ情報M[4]は選択され、V4=1である。
図13には示していないが、第4サブストリングSS4のマッチ情報M[4]が選択された次には、第8サブストリングSS8のマッチ情報M[8]が選択されることが予想される。図13には示していないが、n=8の際の選択判定を説明する。V={V0,V1,V2,V3,V4,V5,V6,V7}={1,0,0,0,1,0,0,0}である。Sn={0,0,0,1,0,0,1,1}である。(|Sn[0:n-1]&V[0:n-1])=(|8’b00010011&8’b10001000)=(|8’b00000000)=1’b0である。そのため、マッチ情報M[8]は選択される。
Lazyマッチのようにマッチ情報の選択中に一致長を短くしてマッチ情報の選択の効率を高めるアルゴリズムがある。Lazyマッチの一番簡単な手法の一例は、SSnの一致長とSS(n+1)の一致長とを比べ、SS(n+1)の一致長のほうが長ければ、SSnの一致長を1として、マッチ選択を行うというアルゴリズムである。このようなアルゴルズムを用いるのであれば、ビットマップを生成する際、該当するサブストリングの一致長とそれ以降のサブストリングの一致長とを比較して、それ以降のサブストリングの一致長のほうが長ければ、該当するサブストリングの一致長を1とすればよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
12…NAND型フラッシュメモリ、28…圧縮回路、42…辞書式圧縮器、44…符号化器、62…サブストリング生成部、64…ハッシュ計算部、68…ヒストリバッファ、70…マッチ情報生成部、74…マッチ選択部
Claims (10)
- 1サイクル当たり複数バイトの入力データ列を入力し、複数サイクル分の入力データ列から、先頭のバイト位置がそれぞれ異なり、それぞれが複数バイトである複数のサブストリングを生成するサブストリング生成部と、
過去のサイクルで入力された複数の入力データ列を記憶するメモリと、
前記複数の入力データ列の中から前記複数のサブストリングと少なくとも一部が一致する複数の第1入力データ列を取得するために前記メモリを探索し、前記複数の第1入力データ列が記憶されている前記メモリの記憶位置と、前記複数のサブストリングと前記複数の第1入力データ列との一致長と、を表す複数の探索結果を出力する探索部と、
前記複数の探索結果のそれぞれのビットマップと、前記複数の探索結果の中の第1の探索結果が選択されたか否かを示すビット列とに基づいて、前記複数の探索結果の中の第2の探索結果を選択するかしないかを決定する選択部と、
を具備する圧縮装置。 - 前記選択部は、或るサイクルの直前のサイクルで選択された前記探索結果が含む前記一致長にも基づいて、前記或るサイクルで前記第2の探索結果を選択するかしないかを決定する、請求項1記載の圧縮装置。
- 前記入力データ列のバイト数はMバイトであり、
前記サブストリングの個数はN個であり、
n番目のサブストリングに対応する前記探索結果の前記一致長はLnバイトであり、
前記選択部は、M、N、n、Lnに基づいて前記探索結果のビットマップを生成する、請求項1又は請求項2記載の圧縮装置。 - 前記選択部は、1番目から(n-1)番目のサブストリングのマッチ情報が選択されたか否かに応じて、n番目のサブストリングのマッチ情報を選択するか否かを決定する、請求項3記載の圧縮装置。
- 前記選択部は、
n=0の場合は、
BPn={{L0{1’b1}},{(2M-L0){1’b0}}}により表され、
n=1からNの場合は、
{{(n-1){1’b0}},{Ln{1’b1}},{(2M-(n-1)-Ln){1’b0}}}により表されるn番目のサブストリングのマッチ情報のビットマップBPnを生成し、
前記直前のサイクルのN番目のサブストリングを0番目のサブストリングとし、0番目から(n-1)番目のサブストリングのマッチ情報が選択されたか否かを表す情報Vnに応じて、n番目のサブストリングのマッチ情報を選択するか否かを決定し、
前記情報Vnは、(|Sn[0:n-1]&V[0:n-1])であり、
Vは0番目から(n-1)番目のサブストリングのマッチ情報が選択されたか否かを表し、
V={V0、V1、…VN}であり、
V0は1であり、
Sn={BP0[2M-1-n],BP1[2M-1-n],…,BPN-1[2M-1-n]}である、請求項4記載の圧縮装置。 - 1サイクル当たり複数バイトの入力データ列を入力し、複数サイクル分の入力データ列から、先頭のバイト位置がそれぞれ異なり、それぞれが複数バイトである複数のサブストリングを生成することと、
過去のサイクルで入力された複数の入力データ列を記憶するメモリを探索し、前記複数の入力データ列の中から前記複数のサブストリングと少なくとも一部が一致する複数の第1入力データ列を取得し、前記複数の第1入力データ列が記憶されている前記メモリの記憶位置と、前記複数のサブストリングと前記複数の第1入力データ列との一致長と、を表す複数の探索結果を出力することと、
前記複数の探索結果のそれぞれのビットマップと、前記複数の探索結果の中の第1の探索結果が選択されたか否かを示すビット列とに基づいて、前記複数の探索結果の中の第2の探索結果を選択するかしないかを決定することと、
を具備する圧縮方法。 - 前記決定することは、或るサイクルの直前のサイクルで選択された前記探索結果が含む前記一致長にも基づいて、前記或るサイクルで前記第2の探索結果を選択するかしないかを決定する、請求項6記載の圧縮方法。
- 前記入力データ列のバイト数はMバイトであり、
前記サブストリングの個数はN個であり、
n番目のサブストリングに対応する前記探索結果の前記一致長はLnバイトであり、
前記決定することは、M、N、n、Lnに基づいて前記探索結果のビットマップを生成する、請求項6又は請求項7記載の圧縮方法。 - 前記決定することは、1番目から(n-1)番目のサブストリングのマッチ情報が選択されたか否かに応じて、n番目のサブストリングのマッチ情報を選択するか否かを決定する、請求項8記載の圧縮方法。
- 前記決定することは、
n=0の場合は、
BPn={{L0{1’b1}},{(2M-L0){1’b0}}}により表され、
n=1からNの場合は、
{{(n-1){1’b0}},{Ln{1’b1}},{(2M-(n-1)-Ln){1’b0}}}により表されるn番目のサブストリングのマッチ情報のビットマップBPnを生成し、
前記直前のサイクルのN番目のサブストリングを0番目のサブストリングとし、0番目から(n-1)番目のサブストリングのマッチ情報が選択されたか否かを表す情報Vnに応じて、n番目のサブストリングのマッチ情報を選択するか否かを決定し、
前記情報Vnは、(|Sn[0:n-1]&V[0:n-1])であり、
Vは0番目から(n-1)番目のサブストリングのマッチ情報が選択されたか否かを表し、
V={V0、V1、…VN}であり、
V0は1であり、
Sn={BP0[2M-1-n],BP1[2M-1-n],…,BPN-1[2M-1-n]}である、請求項9記載の圧縮方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022151121A JP2024046000A (ja) | 2022-09-22 | 2022-09-22 | 圧縮装置及び圧縮方法 |
US18/208,745 US20240106459A1 (en) | 2022-09-22 | 2023-06-12 | Compression device and compression method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022151121A JP2024046000A (ja) | 2022-09-22 | 2022-09-22 | 圧縮装置及び圧縮方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2024046000A true JP2024046000A (ja) | 2024-04-03 |
Family
ID=90358747
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022151121A Pending JP2024046000A (ja) | 2022-09-22 | 2022-09-22 | 圧縮装置及び圧縮方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20240106459A1 (ja) |
JP (1) | JP2024046000A (ja) |
-
2022
- 2022-09-22 JP JP2022151121A patent/JP2024046000A/ja active Pending
-
2023
- 2023-06-12 US US18/208,745 patent/US20240106459A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20240106459A1 (en) | 2024-03-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3978195B2 (ja) | 記憶デバイスの欠陥リストの長さを最小にする方法およびシステム | |
US8937564B2 (en) | System, method and non-transitory computer readable medium for compressing genetic information | |
JP6009676B2 (ja) | データ圧縮装置およびデータ伸張装置 | |
US20060106870A1 (en) | Data compression using a nested hierarchy of fixed phrase length dictionaries | |
US11424761B2 (en) | Multiple symbol decoder | |
JP6662169B2 (ja) | 符号化プログラム、符号化方法、符号化装置、検索プログラム、検索方法および検索装置 | |
JP2019036810A (ja) | データ圧縮装置、データ復元装置、データ圧縮プログラム、データ復元プログラム、データ圧縮方法、およびデータ復元方法 | |
JP2022188911A (ja) | 圧縮装置、圧縮伸張装置及びメモリシステム | |
JP2022094108A (ja) | 圧縮装置および制御方法 | |
US20240204796A1 (en) | Code table generation device, memory system, and code table generation method | |
JP2016052046A (ja) | 圧縮装置、伸長装置およびストレージ装置 | |
US11909423B2 (en) | Compression circuit, storage system, and compression method | |
JP2024046000A (ja) | 圧縮装置及び圧縮方法 | |
US11588498B2 (en) | Character string search device and memory system | |
US12001339B2 (en) | Dictionary compression device and memory system | |
KR20210113297A (ko) | 컴퓨터 메모리 내의 복제 및 밸류 중복성을 제거하기 위한 시스템, 방법, 및 장치 | |
KR20230124941A (ko) | 컴퓨터 메모리에서 밸류 유사성을 활용하는 시스템,방법, 및 장치 | |
JP7584579B2 (ja) | 受信したデータを処理する装置 | |
US20230403027A1 (en) | Dictionary compressor, data compression device, and memory system | |
JP7305609B2 (ja) | 受信したデータを処理する装置 | |
US12108064B2 (en) | Memory system | |
US11748307B2 (en) | Selective data compression based on data similarity | |
JP2023132713A (ja) | データ伸張装置、メモリシステム、およびデータ伸張方法 | |
JP2023128936A (ja) | 情報処理装置及び初期辞書作成方法 | |
JP2023127253A (ja) | 符号表生成装置、メモリシステム、および符号表生成方法 |