IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

<>
  • 特許-文字列検索装置及びメモリシステム 図1
  • 特許-文字列検索装置及びメモリシステム 図2
  • 特許-文字列検索装置及びメモリシステム 図3
  • 特許-文字列検索装置及びメモリシステム 図4
  • 特許-文字列検索装置及びメモリシステム 図5
  • 特許-文字列検索装置及びメモリシステム 図6
  • 特許-文字列検索装置及びメモリシステム 図7
  • 特許-文字列検索装置及びメモリシステム 図8
  • 特許-文字列検索装置及びメモリシステム 図9
  • 特許-文字列検索装置及びメモリシステム 図10
  • 特許-文字列検索装置及びメモリシステム 図11
  • 特許-文字列検索装置及びメモリシステム 図12
  • 特許-文字列検索装置及びメモリシステム 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-27
(45)【発行日】2024-10-07
(54)【発明の名称】文字列検索装置及びメモリシステム
(51)【国際特許分類】
   H03M 7/42 20060101AFI20240930BHJP
   G06F 12/04 20060101ALI20240930BHJP
   G06F 12/00 20060101ALI20240930BHJP
   G06F 16/30 20190101ALI20240930BHJP
【FI】
H03M7/42
G06F12/04 530
G06F12/00 597U
G06F16/30
【請求項の数】 11
(21)【出願番号】P 2021019009
(22)【出願日】2021-02-09
(65)【公開番号】P2022121983
(43)【公開日】2022-08-22
【審査請求日】2023-09-11
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】八島 大亮
(72)【発明者】
【氏名】及川 恒平
(72)【発明者】
【氏名】小玉 翔
(72)【発明者】
【氏名】中西 圭里
(72)【発明者】
【氏名】住吉 正人
(72)【発明者】
【氏名】深澤 洋平
(72)【発明者】
【氏名】王 哲也
(72)【発明者】
【氏名】三浦 貴
【審査官】鉢呂 健
(56)【参考文献】
【文献】特開2005-165598(JP,A)
【文献】米国特許出願公開第2005/0120017(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H03M 3/00-9/00
G06F 12/00
G06F 12/04
G06F 16/30
(57)【特許請求の範囲】
【請求項1】
過去に入力された第1文字列に含まれる連続する複数の文字の各々に対応する第1ハッシュ値及び前記第1ハッシュ値を前記文字に変換するための前記第1ハッシュ値に対応する第1補完データを、前記文字毎に格納する格納部と、
入力された第2文字列に含まれる連続する複数の文字の各々を、前記文字に対応する第2ハッシュ値及び前記第2ハッシュ値を前記文字に変換するための前記第2ハッシュ値に対応する第2補完データに変換する第1変換部と、
前記変換された連続する第2ハッシュ値の少なくとも一部と一致する連続する第1ハッシュ値を前記格納部から検索し、前記連続する第1ハッシュ値が格納されている前記格納部内の位置を示すポインタを出力する検索部と、
前記ポインタに基づいて、連続する第1ハッシュ値及び前記連続する第1ハッシュ値の各々に対応する複数の第1補完データを前記格納部から選択する選択部と、
前記選択された複数の第1補完データを用いて、前記選択された連続する第1ハッシュ値を連続する文字を含む第3文字列に変換する第2変換部と、
前記第2文字列及び前記第3文字列を比較し、一致する文字の長さを示す一致長を取得する比較部と、
前記一致長を前記ポインタとともに出力する出力部と
を具備する文字列検索装置。
【請求項2】
過去に入力された第1文字列に含まれる連続する複数の文字の各々に対応する第1ハッシュ値及び前記第1ハッシュ値を前記文字に変換するための前記第1ハッシュ値に対応する第1補完データを、前記文字毎に格納する格納部と、
入力された第2文字列に含まれる連続する複数の文字の各々を、前記文字に対応する第2ハッシュ値及び前記第2ハッシュ値を前記文字に変換するための前記第2ハッシュ値に対応する第2補完データに変換する第1変換部と、
前記変換された連続する第2ハッシュ値の少なくとも一部と一致する連続する第1ハッシュ値を前記格納部から検索し、前記連続する第1ハッシュ値が格納されている前記格納部内の位置を示すポインタを出力する検索部と、
前記ポインタに基づいて、連続する第1ハッシュ値及び前記連続する第1ハッシュ値の各々に対応する複数の第1補完データを前記格納部から選択する選択部と、
前記変換された連続する第2ハッシュ値及び前記連続する第2ハッシュ値の各々に対応する複数の第2補完データと、前記選択された連続する第1ハッシュ値及び前記連続する第1ハッシュ値の各々に対応する複数の第1補完データとを比較し、一致する文字の長さを示す一致長を取得する比較部と、
前記一致長を前記ポインタとともに出力する出力部と
を具備する文字列検索装置。
【請求項3】
第3変換部を更に具備し、
前記変換された連続する第2ハッシュ値及び前記連続する第2ハッシュ値の各々に対応する複数の第2補完データは、前記格納部に格納され、
前記第3変換部は、前記格納部に格納された複数の第2補完データを用いて、前記連続する第2ハッシュ値を前記第2文字列に変換して出力する
請求項1または2記載の文字列検索装置。
【請求項4】
前記入力された第2文字列を、前記一致長及び前記ポインタが出力されるまで保持して出力するデータ遅延部を更に具備する請求項2記載の文字列検索装置。
【請求項5】
前記選択部は、
前記ポインタに基づいて選択される連続する第1ハッシュ値のうち、前記変換された連続する第2ハッシュ値の少なくとも一部と一致する連続する第1ハッシュ値については前記連続する第1ハッシュ値に対応する複数の第1補完データを選択し、
前記ポインタに基づいて選択される連続する第1ハッシュ値のうち、前記変換された連続する第2ハッシュ値の少なくとも一部と一致する連続する第1ハッシュ値以外の第1ハッシュ値については前記第1ハッシュ値及び前記第1ハッシュ値に対応する第1補完データを選択し、
前記比較部は、前記選択された複数の第1補完データと、前記選択された第1ハッシュ値及び第1補完データとを用いて、前記一致長を取得する
請求項2または4記載の文字列検索装置。
【請求項6】
前記第1ハッシュ値及び前記第2ハッシュ値の各々のビット数は、前記文字のビット数よりも小さい請求項1~5のいずれか一項に記載の文字列検索装置。
【請求項7】
前記第1ハッシュ値及び前記第1ハッシュ値に対応する第1補完データの合計ビット数と、前記第2ハッシュ値及び前記第2ハッシュ値に対応する第2補完データの合計ビット数とは、それぞれ前記文字のビット数と同一である請求項6記載の文字列検索装置。
【請求項8】
前記比較部は、前記連続する第2ハッシュ値の少なくとも一部と一致する複数の連続する第1ハッシュ値が検索された場合、前記連続する第1ハッシュ値毎に一致長を取得し、
前記出力部は、前記取得された一致長のうちの最大の一致長を、当該一致長が最大である連続する第1ハッシュ値が格納されている前記格納部内の位置を示すポインタとともに出力する
請求項1~7のいずれか一項に記載の文字列検索装置。
【請求項9】
前記格納部は、フリップフロップ回路及びメモリを含み、
前記第1ハッシュ値は、前記フリップフロップ回路に格納され、
前記第1補完データは、前記メモリに格納される
請求項1~8のいずれか一項に記載の文字列検索装置。
【請求項10】
不揮発性メモリと、
前記不揮発性メモリと接続される文字列検索装置と
を具備し、
前記文字列検索装置は、
過去に入力された第1文字列に含まれる連続する複数の文字の各々に対応する第1ハッシュ値及び前記第1ハッシュ値を前記文字に変換するための前記第1ハッシュ値に対応する第1補完データを、前記文字毎に格納する格納部と、
入力された第2文字列に含まれる連続する複数の文字の各々を、前記文字に対応する第2ハッシュ値及び前記第2ハッシュ値を前記文字に変換するための前記第2ハッシュ値に対応する第2補完データに変換する第1変換部と、
前記変換された連続する第2ハッシュ値の少なくとも一部と一致する連続する第1ハッシュ値を前記格納部から検索し、前記連続する第1ハッシュ値が格納されている前記格納部内の位置を示すポインタを出力する検索部と、
前記ポインタに基づいて、連続する第1ハッシュ値及び前記連続する第1ハッシュ値の各々に対応する複数の第1補完データを前記格納部から選択する選択部と、
前記選択された複数の第1補完データを用いて、前記選択された連続する第1ハッシュ値を連続する文字を含む第3文字列に変換する第2変換部と、
前記第2文字列及び前記第3文字列を比較し、一致する文字の長さを示す一致長を取得する比較部と、
前記一致長を前記ポインタとともに第1データとして出力する出力部と
を含み、
前記出力部から出力された前記第1データに基づく第2データが前記不揮発性メモリに書き込まれる
メモリシステム。
【請求項11】
不揮発性メモリと、
前記不揮発性メモリと接続される文字列検出装置と
を備え、
前記文字列検出装置は、
過去に入力された第1文字列に含まれる連続する複数の文字の各々に対応する第1ハッシュ値及び前記第1ハッシュ値を前記文字に変換するための前記第1ハッシュ値に対応する第1補完データを、前記文字毎に格納する格納部と、
入力された第2文字列に含まれる連続する複数の文字の各々を、前記文字に対応する第2ハッシュ値及び前記第2ハッシュ値を前記文字に変換するための前記第2ハッシュ値に対応する第2補完データに変換する第1変換部と、
前記変換された連続する第2ハッシュ値の少なくとも一部と一致する連続する第1ハッシュ値を前記格納部から検索し、前記連続する第1ハッシュ値が格納されている前記格納部内の位置を示すポインタを出力する検索部と、
前記ポインタに基づいて、連続する第1ハッシュ値及び前記連続する第1ハッシュ値の各々に対応する複数の第1補完データを前記格納部から選択する選択部と、
前記変換された連続する第2ハッシュ値及び前記連続する第2ハッシュ値の各々に対応する複数の第2補完データと、前記選択された連続する第1ハッシュ値及び前記連続する第1ハッシュ値の各々に対応する複数の第1補完データとを比較し、一致する文字の長さを示す一致長を取得する比較部と、
前記一致長を前記ポインタとともに第1データとして出力する出力部と
を含み、
前記出力部から出力された前記第1データに基づく第2データが前記不揮発性メモリに書き込まれる
メモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、文字列検索装置及びメモリシステムに関する。
【背景技術】
【0002】
近年では、記憶領域を有効に活用するために、データを圧縮する機能を有するメモリシステムが知られている。このようなメモリシステムにおいて、当該メモリシステムと接続されるホストから書き込みコマンドが発行された場合には、当該書き込みコマンドにおいて指定されているデータを圧縮して不揮発性メモリに書き込むことができる。
【0003】
データの圧縮に用いられる符号化手法として、辞書式符号化が知られている。この辞書式符号化においては、辞書と称される過去のデータ(文字列)が一定期間格納されるバッファを用い、入力データ(文字列)の少なくとも一部と一致する過去のデータがバッファから検索される。入力データの少なくとも一部と一致する過去のデータがバッファ内に存在する場合、当該バッファ内における当該過去のデータの位置(以下、ポインタと表記)及び当該入力データと過去のデータとの一致した長さ(以下、一致長と表記)が出力される。辞書式符号化は、入力データを、このようにポインタ及び一致長に置き換えることで符号量を削減する手法である。
【先行技術文献】
【特許文献】
【0004】
【文献】米国特許第7233265号明細書
【文献】米国特許第5140321号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
そこで、本発明が解決しようとする課題は、高い検索性能を小さな回路規模で実現することが可能な文字列検索装置及びメモリシステムを提供することにある。
【課題を解決するための手段】
【0006】
実施形態に係る文字列検索装置は、格納部と、第1変換部と、検索部と、選択部と、第2変換部と、比較部と、出力部とを具備する。前記格納部は、過去に入力された第1文字列に含まれる連続する複数の文字の各々に対応する第1ハッシュ値及び前記第1ハッシュ値を前記文字に変換するための前記第1ハッシュ値に対応する第1補完データを、前記文字毎に格納する。前記第1変換部は、入力された第2文字列に含まれる連続する複数の文字の各々を、前記文字に対応する第2ハッシュ値及び前記第2ハッシュ値を前記文字に変換するための前記第2ハッシュ値に対応する第2補完データに変換する。前記検索部は、前記変換された連続する第2ハッシュ値の少なくとも一部と一致する連続する第1ハッシュ値を前記格納部から検索し、前記連続する第1ハッシュ値が格納されている前記格納部内の位置を示すポインタを出力する。前記選択部は、前記ポインタに基づいて、連続する第1ハッシュ値及び前記連続する第1ハッシュ値の各々に対応する複数の第1補完データを前記格納部から選択する。前記第2変換部は、前記選択された複数の第1補完データを用いて、前記選択された連続する第1ハッシュ値を連続する文字を含む第3文字列に変換する。前記比較部は、前記第2文字列及び前記第3文字列を比較し、一致する文字の長さを示す一致長を取得する。前記出力部は、前記一致長を前記ポインタとともに出力する。
【図面の簡単な説明】
【0007】
図1】第1実施形態におけるメモリシステムのハードウェア構成の一例を概略的に示すブロック図。
図2】比較例のメモリシステムにおける圧縮方式で用いられる辞書式符号化の概略について説明するための図。
図3】第1実施形態に係る文字列検索装置の構成の一例を示すブロック図。
図4】第1実施形態におけるハッシュ変換及び補完データ変換の概要を示す図。
図5】第1実施形態におけるハッシュ変換の一例を示す図。
図6】第1実施形態における補完データ変換の一例を示す図。
図7】第1実施形態における逆ハッシュ変換の概要を示す図。
図8】第1実施形態における逆ハッシュ変換の一例を示す図。
図9】第1実施形態の第1比較例について説明するための図。
図10】第1実施形態の第2比較例について説明するための図。
図11】第1実施形態と第2比較例との回路規模について説明するための図。
図12】第2実施形態に係る文字列検索装置の構成の一例を示すブロック図。
図13】第3実施形態に係る文字列検索装置の構成の一例を示すブロック図。
【発明を実施するための形態】
【0008】
以下、図面を参照して、各実施形態について説明する。
(第1実施形態)
まず、第1実施形態について説明する。図1は、第1実施形態におけるメモリシステムのハードウェア構成の一例を概略的に示すブロック図である。
【0009】
図1に示すメモリシステム1は、不揮発性メモリにデータ(ユーザデータ)を書き込み、当該不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステム1は、例えばソリッドステートドライブ(SSD:Solid State Drive)として実現されることができる。
【0010】
メモリシステム1は、例えばPCI Expressバスのようなシステムバスを介してホストに接続可能に構成されている。図1に示すように、メモリシステム1は、コントローラ2、NAND型フラッシュメモリ3及びDRAM(Dynamic Random Access Memory)4を備える。
【0011】
コントローラ2は、メモリシステム1の動作を司る機能を有する。コントローラ2は、ホストインタフェース(I/F)2a、CPU2b、NANDインタフェース(I/F)2c及びDRAMインタフェース(I/F)2d等を含む。なお、ホストインタフェース2a、CPU2b、NANDインタフェース2c及びDRAMインタフェース2dは、例えばバスを介して互いに接続されている。
【0012】
ホストインタフェース2aは、メモリシステム1の外部に配置されるホストとの通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース2aは、例えばPCI Expressコントローラ等であってもよい。ホストインタフェース2aは、ホストから様々なコマンド(要求)を受信する。
【0013】
CPU2bは、ホストインタフェース2a、NANDインタフェース2c及びDRAMインタフェース2dを制御するように構成されたプロセッサである。CPU2bは、メモリシステム1の電源オンに応答してNAND型フラッシュメモリ3または図示しないROM(Read Only Memory)から制御プログラム(ファームウェア)をDRAM4にロードし、当該制御プログラムを実行することによって様々な処理を行う。具体的には、CPU2bは、ホストから発行される様々なコマンドに対する処理を実行する。なお、ホストから発行されるコマンドに対する処理の一部または全部は、コントローラ2内の専用ハードウェアによって実行されてもよい。
【0014】
NANDインタフェース2cは、CPU2bの制御の下、NAND型フラッシュメモリ3を制御するように構成されたメモリ制御回路である。
【0015】
更に、コントローラ2は、圧縮装置(圧縮器)2e及び伸張装置(伸張器)2fを備える。
【0016】
圧縮装置2eは、例えばホストから書き込みコマンドが発行された場合に、当該書き込みコマンドにおいて指定されているデータを入力し、当該データを圧縮するために用いられる。なお、圧縮装置2eは、例えば辞書式符号化とエントロピー符号化とを組み合わせた圧縮方式でデータを圧縮する。圧縮装置2eにおいて圧縮されたデータ(以下、圧縮データと表記)は、圧縮装置2eから出力された後、誤り訂正処理やランダマイズ処理等の所定の処理が実行される。CPU2bは、圧縮データに対して当該所定の処理が実行されたデータをNANDインタフェース2c経由でNAND型フラッシュメモリ3に書き込む。すなわち、CPU2bは、圧縮装置2eから出力された圧縮データに基づくデータをNAND型フラッシュメモリ3に書き込む。
【0017】
CPU2bは、例えばホストからホストインタフェース2a経由で受信した読み出しコマンドに基づいてNAND型フラッシュメモリ3から圧縮データを読み出す際に、当該読み出しコマンドに基づくデータをNANDインタフェース2c経由でNAND型フラッシュメモリ3から読み出す。読み出されたデータは、読み出されたデータに対する誤り訂正処理、ランダマイズの解除処理等の所定の処理が実行された後、圧縮データとしてCPU2bにより伸張装置2fへ入力され、伸張装置2fは入力された圧縮データを伸張する。すなわち、伸張装置2fは、NAND型フラッシュメモリ3から読み出されたデータに基づく圧縮データを伸張する。
【0018】
NAND型フラッシュメモリ3は、不揮発性メモリであり、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを有する。NAND型フラッシュメモリ3は、2次元構造のNAND型フラッシュメモリであってもよいし、3次元構造のNAND型フラッシュメモリであってもよい。
【0019】
NAND型フラッシュメモリ3のメモリセルアレイは、複数のブロックBLK0~BLKm-1を含む。ブロックBLK0~BLKm-1の各々は多数のページ(ここでは、ページP0~Pn-1)によって編成される。ブロックBLK0~BLKm-1は、消去単位として機能する。ページP0~Pn-1の各々は、同一ワード線に接続された複数のメモリセルを含む。ページP0~Pn-1は、データ書き込み動作及びデータ読み出し動作の単位である。
【0020】
ここでは、メモリシステム1がNAND型フラッシュメモリ3を備えるものとして説明したが、当該メモリシステム1は、不揮発性メモリとして例えばPCM(Phase Change Memory)またはMRAM(Magnetoresistive random Access Memory)等を備える構成であってもよい。
【0021】
DRAM4は、揮発性メモリであり、例えばコントローラ2(CPU2b)において実行されるソフトウェアの一時的なバッファまたはNAND型フラッシュメモリ3に対する一時的なバッファ等として機能する。
【0022】
ここでは、メモリシステム1がDRAM4を備えるものとして説明したが、当該メモリシステム1は、揮発性メモリとして例えばSRAM(Static Random Access Memory)等を備える構成であってもよい。
【0023】
なお、図1においては圧縮装置2e及び伸張装置2fがコントローラ2に組み込まれているものとして説明したが、当該圧縮装置2e及び伸張装置2fのうちの一方または両方はメモリシステム1またはコントローラ2の外部に設けられていてもよい。
【0024】
以下、図2を参照して、比較例のメモリシステムにおける圧縮方式で用いられる辞書式符号化の概略について説明する。ここでは、辞書式符号化の対象として入力されるデータを入力データと称し、当該入力データが複数の連続する文字を含む文字列(テキストデータ)であるものとして説明する。
【0025】
ここで、辞書式符号化は、入力データを、当該入力データよりも前に辞書式符号化の対象として入力されたデータ(つまり、過去に入力されたデータ)の相対参照に変換する符号化手法である。
【0026】
このため、辞書式符号化においては、過去に入力されたデータ(文字列)が辞書と称される格納部(以下、辞書バッファと表記)に格納されており、入力データの全部または一部と一致するデータ(前方データ)が当該辞書バッファ中に存在するか否かを探索(検索)する。入力データと全部または一部と一致するデータが辞書バッファ中に存在する場合、辞書バッファ内の当該データの位置を示すポインタ及び入力データと辞書バッファから探索されたデータとにおいて一致する文字の長さを示す一致長が出力される。
【0027】
ここで、図2においては、入力データ(文字列)が「caba」であり、辞書バッファには過去に入力されたデータ(文字列)として「…cacabe…」が格納されていることが示されている。この図2に示す例によれば、入力データ「caba」(の一部)はヒストリバッファ内の「ca」の2文字及び「cab」の3文字と一致する。入力データのうちのより長い部分を相対参照に置き換えることができれば符号化効率が高くなるため、ここでは辞書バッファ内の「cab」が入力データの一部と一致するデータ(以下、辞書データと表記)として選択される。
【0028】
このように選択された辞書データ(「cab」)の辞書バッファ内の位置を示すポインタ(アドレス)が「100」であるものとする。また、入力データと辞書データとは「cab」が一致しているため、上記した一致長は「3(文字)」となる。
【0029】
この場合、入力データ「caba」に対する辞書式符号化の結果としては、一致長及びポインタの組(3,100)が後段に出力される。
【0030】
なお、上記した入力データは例えばホストから発行される書き込みコマンドにおいて指定されているデータ(以下、書き込みデータと表記)を構成する一部のデータ(所定のサイズのデータ)に相当し、辞書式符号化においては、当該書き込みデータを構成するデータの各々が当該書き込みデータの先頭から連続的に入力され、当該入力されたデータが順次符号化されるような処理が実行される。
【0031】
上記した図2に示す例において、入力データ「caba」のうちの辞書データと一致していない末尾の「a」については、後続のデータとともに次の入力データとして扱われ、処理が繰り返される。
【0032】
図2においては入力データの全部または一部(つまり、少なくとも一部)と一致する辞書データが辞書バッファ内に存在する場合について説明したが、当該辞書データが存在しない場合には、当該入力データ(ローデータ)が辞書式符号化の結果として後段に出力される。
【0033】
以下の説明においては、辞書式符号化の結果として出力される一致長及びポインタの組を一致文字データ、当該辞書式符号化の結果として出力されるローデータを不一致文字データと称する。
【0034】
ところで、上記した辞書式符号化は、新たに入力されたデータ(文字列)を辞書バッファに格納されている過去のデータ(文字列)から検索し、当該検索されたデータの位置(ポインタ)及び当該入力されたデータと過去のデータとにおいて一致する文字の長さ(一致長)に置き換えることで符号量を削減する符号化手法である。このため、辞書式符号化においては、辞書バッファに格納されているデータの中から入力データの少なくとも一部と一致する過去のデータを効率的に検索する技術が重要である。
【0035】
しかしながら、例えばメモリシステム1を備える情報処理システム(ホスト)から高いスループットが要求される場合において、上記した検索性能を向上させるためには、並列に動作する回路を用意する必要があるため、回路規模が大きくなる。一方、回路規模を抑制しようとすると検索性能(及びスループット)が低下する。すなわち、検索性能と回路規模とはトレードオフの関係にあり、高い検索性能を小さな回路規模で実現することが困難である。
【0036】
そこで、本実施形態においては、辞書式符号化を行うための高い検索性能を小さな回路規模で実現するための構成を採用する。
【0037】
なお、上記したように本実施形態における圧縮装置2eにおいては例えば辞書式符号化とエントロピー符号化とを組み合わせた圧縮方式によりデータが圧縮されるが、当該圧縮装置2eは、辞書バッファから文字列を検索して辞書式符号化を行う装置(以下、文字列検索装置と表記)及び等が辞書式符号化の結果に対してエントロピー符号化を行う装置(以下、エントロピー符号化装置と表記)を備えているものとする。
【0038】
エントロピー符号化は、データの出現頻度の違いを利用して異なる符号長の符号を当該データに割り当てることで全体として符号量を削減する(つまり、圧縮する)符号化手法であり、当該辞書式符号化の後段として実行される。この場合、例えば出現頻度の高い一致文字データ及び不一致文字データに対して短い符号を割り当て、当該出現頻度の低い一致文字データ及び不一致文字データに対して長い符号を割り当てるような処理が実行される。
【0039】
なお、エントロピー符号化としては例えばハフマン符号化が用いられる。エントロピー符号化としてハフマン符号化が用いられる場合、当該ハフマン符号化は、予め構築された符号木を用いて符号化を行う静的ハフマン符号化であってもよいし、ハフマン符号化の対象として入力される一致文字データ及び不一致文字データにより符号木を変更する動的ハフマン符号化であってもよい。エントロピー符号化としては、例えば算術符号化等が用いられても構わない。
【0040】
以下、本実施形態に係る文字列検索装置について詳細に説明する。図3は、本実施形態に係る文字列検索装置の構成の一例を示すブロック図である。
【0041】
図3に示すように、文字列検索装置10は、辞書バッファ(辞書部)11、ハッシュ変換部12、ハッシュ全探索部13、辞書データ選択部14、第1逆ハッシュ変換部15、辞書比較部16、最大一致長判定部17及び第2逆ハッシュ変換部18を含む。
【0042】
辞書バッファ11は、過去に文字列検索装置10(圧縮装置2e)に入力された文字列(過去の文字列データ)に含まれる連続する複数の文字の各々に対応するハッシュ値及び当該ハッシュ値に対応する補完データを、当該文字毎に格納する。本実施形態において、補完データは、対応するハッシュ値を文字に逆変換する(つまり、当該ハッシュ値から当該文字を復元する)ために用いられる逆ハッシュ変換用データに相当する。
【0043】
なお、以下の説明において、所定の文字に対応するハッシュ値及び当該ハッシュ値に対応する補完データの組を便宜的に変換文字データと称する。すなわち、辞書バッファ11には、過去の変換文字データ(過去に入力された文字列に含まれる文字に対応する変換文字データ)が格納されている。また、各文字に対応する変換文字データは、当該文字が文字列検索装置10に入力された順に辞書バッファ11に格納されているものとする。
【0044】
ハッシュ変換部12は、文字列検索装置10に新たに入力された文字列(以下、入力文字列と表記)を入力データとして受け取る。なお、入力文字列は連続する複数の文字から構成されるが、当該文字の各々は、例えば8ビット(1バイト)で表現されるものとする。また、入力文字列を構成する文字の数は、例えば8、16または32等であるが、他の数であってもよい。
【0045】
ハッシュ変換部12は、入力文字列に含まれる文字単位でハッシュ変換を適用する(つまり、ハッシュ変換処理を実行する)。これにより、ハッシュ変換部12は、入力文字列に含まれる連続する複数の文字の各々を、当該文字に対応するハッシュ値に変換する(つまり、当該文字からハッシュ値を生成する)。
【0046】
なお、ハッシュ変換部12によって変換されるハッシュ値は、当該ハッシュ値に変換される文字のビット幅(ビット数)よりも小さいビット幅であるものとする。また、ハッシュ変換は一定の演算によって行われ、ハッシュ値(を構成する各ビットの値)には、当該ハッシュ値に変換される文字の全ビットの値が反映されているものとする。
【0047】
同時に、ハッシュ変換部12は、入力文字列に含まれる文字単位で補完データ変換を適用する(つまり、補完データ変換処理を実行する)。これにより、ハッシュ変換部12は、入力文字列に含まれる連続する複数の文字の各々を、補完データに変換する(つまり、文字から補完データを生成する)。
【0048】
なお、補完データは当該補完データに変換される文字のビット幅(ビット数)よりも小さいビット幅として定義可能であり、例えば1つの文字からハッシュ変換部12によって変換されるハッシュ値及び補完データの合計ビット幅を当該文字のビット幅と同じとすることが好ましい。
【0049】
ここで、図4は、上記したハッシュ変換及び補完データ変換の概要を示している。図4に示す例では、文字(データ)が8ビット(1バイト)で表現される場合を想定しており、当該8ビットの文字(データ)が3ビットのハッシュ値に変換されるとともに、当該8ビットの文字が5ビットの補完データに変換されることが示されている。
【0050】
なお、図5は、ハッシュ変換の一例を示している。ここで、ハッシュ値に変換される文字が「D0 D1 D2 D3 D4 D5 D6 D7」の8ビットで表現される場合を想定する。なお、D0~D7の各々は、文字を構成する8ビットのうちの1つ(0または1)に相当する。
【0051】
このような文字にハッシュ変換が適用された場合、図5に示す「H0 H1 H2」の3ビットのハッシュ値が生成されるものとする。なお、H0~H2の各々は、ハッシュ値を構成する3ビットのうちの1つに相当する。
【0052】
具体的には、「H0(ハッシュ値の先頭の1ビット)」は、文字を構成する「D1」と「D2」と「D3」との排他的論理和によって算出(決定)される。また、「H1(ハッシュ値の2番目の1ビット)」は、文字を構成する「D4」と「D5」と「D6」との排他的論理和によって算出(決定)される。同様に、「H2(ハッシュ値の最後の1ビット)」は、文字を構成する「D0」と「D4」と「D7」との排他的論理和によって算出(決定)される。
【0053】
これによれば、「D0 D1 D2 D3 D4 D5 D6 D7」の8ビットで表現される文字を3ビットのハッシュ値「H0 H1 H2」に変換することができる。なお、このハッシュ値には、文字を構成する全ビット(D0~D7)の値が反映されている。
【0054】
一方、図6は、補完データ変換の一例を示している。上記したように文字が「D0 D1 D2 D3 D4 D5 D6 D7」の8ビットで表現され、このような文字に補完データ変換が適用された場合、図6に示す「I0 I1 I2 I3 I4」の5ビットのハッシュ値が生成されるものとする。なお、I0~I4各々は、補完データを構成する5ビットのうちの1つに相当する。
【0055】
具体的には、「I0(補完データの先頭の1ビット)」は、文字を構成する「D4」と「D7」との排他的論理和によって算出(決定)される。また、「I1(補完データの2番目の1ビット)」は、文字を構成する「D2」と同一とする。更に、「I2(補完データの3番目の1ビット)」は、文字を構成する「D3」と同一とする。また、「I3(補完データの4番目の1ビット)」は、文字を構成する「D6」と同一する。同様に、「I4(補完データの最後の1ビット)」は、文字を構成する「D7」と同一とする。
【0056】
これによれば、「D0 D1 D2 D3 D4 D5 D6 D7」の8ビットで表現される文字を5ビットの補完データ「I0 I1 I2 I3 I4」に変換することができる。
【0057】
ここでは文字から変換(生成)されるハッシュ値及び補完データの合計ビット幅(つまり、変換文字データのビット幅)が文字のビット幅と一致する場合について説明したが、ハッシュ値及び補完データの各々が当該文字よりも小さいビット幅で生成されるのであれば、当該ハッシュ値及び補完データの合計ビット幅は、文字のビット幅よりも大きくても構わない。
【0058】
再び図3に戻ると、ハッシュ変換部12は、入力文字列に含まれる文字の各々から変換されたハッシュ値及び補完データ(変換文字データ)を辞書バッファ11に出力する。この変換文字データは、過去の変換文字データとして辞書バッファ11に格納される。また、このように辞書バッファ11に格納された変換文字データは第2逆ハッシュ変換部18に出力される。
【0059】
なお、辞書バッファ11には入力文字列に含まれる文字毎に変換文字データが格納されるが、当該辞書バッファ11に格納される変換文字データの数は、辞書バッファ11に割り当てられている領域のサイズに応じて一定の値に制限されている。換言すれば、辞書バッファ11は、一定の数の変換文字データが格納されるように構成されている。このため、既に一定の数の変換文字データが格納されている状態で、新たな変換文字データが辞書バッファ11に格納される場合には、古い変換文字データが破棄または上書きされるものとする。
【0060】
また、ハッシュ変換部12は、入力文字列に含まれる文字の各々から変換された連続するハッシュ値(3ビット)をハッシュ全探索部13に出力する。
【0061】
ここで、辞書バッファ11に格納されている全てのハッシュ値が当該辞書バッファ11からハッシュ全探索部13に出力され、ハッシュ全探索部13は、ハッシュ変換部12から出力された連続するハッシュ値の各々と、辞書バッファ11から出力されたハッシュ値の各々とが一致するか否かを判定する。この場合、ハッシュ全探索部13は、辞書バッファ11から出力されたハッシュ値の中から、ハッシュ変換部12から出力されたハッシュ値の各々と一致するハッシュ値を全て探索する総当たりの一致判定(比較)を行う。
【0062】
上記したように辞書バッファ11には過去に入力された文字列に含まれる文字が変換された変換文字データ(ハッシュ値及び補完データ)が当該入力された順に格納されている(つまり、辞書バッファ11から連続するハッシュ値が出力される)ところ、ハッシュ全探索部13は、上記した一致判定の結果に基づいて、ハッシュ変換部12から出力された連続するハッシュ値の少なくとも一部と一致する辞書バッファ11から出力された連続するハッシュ値(つまり、辞書バッファ11から出力された連続するハッシュ値のうち、ハッシュ変換部12から出力された連続するハッシュ値の少なくとも一部と一致する部分)を検索することができる。なお、「ハッシュ変換部12から出力された連続するハッシュ値の少なくとも一部と一致する」とは、ハッシュ変換部12から出力された連続するハッシュ値と同一の並び順で、当該連続するハッシュ値のうちの予め定められた数以上のハッシュ値(文字)が一致していることをいう。
【0063】
このように検索された連続するハッシュ値は、入力文字列と一致する可能性が高い文字列(つまり、一致候補)に対応するハッシュ値であると考えられる。このため、ハッシュ全探索部13は、検索された連続するハッシュ値の辞書バッファ11内の位置を示すポインタを辞書データ選択部14に出力する。
【0064】
なお、ハッシュ全探索部13によって検出された連続するハッシュ値の辞書バッファ11内の位置を示すポインタは、当該ハッシュ値が辞書バッファ11から出力された順番等によって判別可能である。また、連続するハッシュ値の辞書バッファ11内の位置を示すポインタとは、例えば連続するハッシュ値のうちの先頭のハッシュ値が格納されている辞書バッファ11のアドレスである。
【0065】
また、ハッシュ全探索部13によって連続するハッシュ値(予め定められた数以上のハッシュ値が一致する部分)が複数検索された場合には、当該連続するハッシュ値毎のポインタ(つまり、複数のポインタ)がハッシュ全探索部13から辞書データ選択部14に出力される。
【0066】
ここで、辞書バッファ11に格納されている全ての変換文字データ(ハッシュ値及び補完データ)が当該辞書バッファ11から辞書データ選択部14に出力され、辞書データ選択部14は、当該辞書バッファ11から出力された変換文字データの中から、ハッシュ全探索部13から出力されたポインタに基づいて連続する変換文字データ(連続するハッシュ値及び当該連続するハッシュ値の各々対応する複数の補完データ)を選択する。
【0067】
なお、ハッシュ全探索部13から出力されたポインタは例えば上記したようにハッシュ全探索部13によって検出された連続するハッシュ値のうちの先頭のハッシュ値が格納されている辞書バッファ11内の位置(アドレス)を示すが、辞書データ選択部14は、当該ポインタによって示される位置から最大一致長に相当する数の連続する変換文字データを選択する。なお、最大一致長(に相当する数)とは、例えば入力文字列に含まれる文字の数であるが、当該入力文字列に含まれる文字の数以外であってもよい。また、ここではポインタによって示される位置から最大一致長に相当する数の連続する変換文字データが選択されるものとして説明したが、例えばハッシュ全探索部13によって検索された連続するハッシュ値を含む変換文字データ(つまり、ハッシュ変換部12によって変換された連続するハッシュ値と一致する部分)のみが選択されてもよい。
【0068】
辞書データ選択部14は、選択された連続する変換文字データ(変換文字データ列)を、ハッシュ全探索部13から出力されたポインタとともに第1逆ハッシュ変換部15に出力する。
【0069】
なお、ここでは辞書バッファ11から辞書データ選択部14に全ての変換文字データが出力され、辞書データ選択部14がハッシュ全探索部13から出力されたポインタに基づいて変換文字データを選択するものとして説明したが、当該ポインタがハッシュ全探索部13から辞書バッファ11に出力され、辞書バッファ11から第1逆ハッシュ変換部15に当該ポインタに基づく変換文字データが出力されるような構成であってもよい。このような構成の場合には辞書データ選択部14は省略されても構わない。
【0070】
第1逆ハッシュ変換部15は、辞書データ選択部14から出力された連続する変換文字データの各々に対して逆ハッシュ変換を適用する(つまり、逆ハッシュ変換処理を実行する)。逆ハッシュ変換においては、上記したように変換文字データに含まれるハッシュ値が、当該変換文字データに含まれる補完データを用いて文字に変換される。これにより、第1逆ハッシュ変換部15は、辞書データ選択部14から出力された連続する変換文字データを、連続する文字を含む文字列(以下、変換文字列と表記)に変換する。
【0071】
ここで、図7は、逆ハッシュ変換の概要を示している。図7に示す例では、上記した図4等において説明した5ビットの補完データを用いて3ビットのハッシュ値を8ビットの文字(データ)に変換することが示されている。
【0072】
なお、図8は、逆ハッシュ変換の一例を示している。図8においては、図6において説明した補完データを用いて図5において説明したハッシュ値を文字に変換する例が示されている。
【0073】
具体的には、上記したように文字が「D0 D1 D2 D3 D4 D5 D6 D7」の8ビットで表現される場合、「D0」は、ハッシュ値を構成する「H2」と補完データを構成する「I0」との排他的論理和によって算出される。また、「D1」は、ハッシュ値を構成する「H0」と補完データを構成する「I1」と「I2」との排他的論理和によって算出される。更に、「D2」は、補完データを構成する「I1」と同一とする。また、「D3」は、補完データを構成する「I2」と同一とする。また、「D4」は、補完データを構成する「I0」と「I4」との排他的論理和によって算出される。更に、「D5」は、ハッシュ値を構成する「H1」と補完データを構成する「I0」と「I3」と「I4」との排他的論理和によって算出される。また、「D6」は、補完データを構成する「I3」と同一とする。更に、「D7」は、補完データを構成する「I4」と同一とする。
【0074】
これによれば、5ビットの補完データ「I0 I1 I2 I3 I4」を用いて、3ビットのハッシュ値「H0 H1 H2」を8ビットの文字「D0 D1 D2 D3 D4 D5 D6 D7」に変換することができる。
【0075】
再び図3に戻ると、第1逆ハッシュ変換部15は、連続する変換文字データから変換された変換文字列を、辞書データ選択部14から当該変換文字データとともに出力されたポインタとともに辞書比較部16に出力する。
【0076】
なお、上記したようにハッシュ全探索部13から複数のポインタが出力されている場合には、辞書データ選択部14からは当該ポインタ毎の連続する変換文字データが出力され、第1逆ハッシュ変換部15は、当該連続する変換文字データ毎の複数の変換文字列を出力する。この場合、第1逆ハッシュ変換部15は、辞書データ選択部14から出力された変換文字データ列の数(つまり、一致候補の数)×最大一致長(つまり、当該変換文字データ列における変換文字データの数)に準じた変換スループットで動作する。
【0077】
辞書比較部16は、入力文字列を取得(入力)し、第1逆ハッシュ変換部15から出力された変換文字列を当該入力文字列と比較する。これにより、辞書比較部16は、入力文字列と変換文字列とにおいて一致する文字を判定し、当該一致する文字の長さを示す一致長を取得する。
【0078】
辞書比較部16は、取得された一致長を、変換文字列とともに第1逆ハッシュ変換部15から出力されたポインタとともに最大一致長判定部17に出力する。なお、第1逆ハッシュ変換部15から複数の変換文字列が出力されている場合には、当該変換文字列毎に一致長及びポインタが出力される。
【0079】
最大一致長判定部17は、上記したように変換文字列毎に出力された一致長の中から最大の一致長を判定する。最大一致長判定部17は、最大の一致長として判定された一致長及び当該一致長とともに辞書比較部16から出力されたポインタを選択し、当該選択された一致長及びポインタを一致文字データとして出力する。
【0080】
また、上記したように辞書バッファ11に格納された変換文字データは第2逆ハッシュ変換部18に出力されるが、第2逆ハッシュ変換部18は、当該変換文字データに対して逆ハッシュ変換を適用する。なお、第2逆ハッシュ変換部18によって変換文字データに適用される逆ハッシュ変換は、上記した第1逆ハッシュ変換部15における逆ハッシュ変換と同様であるため、ここではその詳しい説明を省略する。
【0081】
なお、辞書バッファ11は入力文字列に含まれる複数の文字の各々に対応する変換文字データ(つまり、連続する変換文字データ)を第2逆ハッシュ変換部18に出力するため、第2逆ハッシュ変換部18は、当該連続する変換文字データの各々に対して逆ハッシュ変換を適用することにより、入力文字列(に相当する文字列)を不一致文字データとして出力する。
【0082】
上記したように本実施形態に係る文字列検索装置10からは一致文字データ及び不一致文字データが出力されるが、当該一致文字データ及び不一致文字データは、文字列検索装置10(圧縮装置2e)に対して要求されるスループットに準じて出力される。
【0083】
また、図3に示す構成によれば、入力文字列の全てが不一致文字データとして出力されるが、文字列検索装置10の後段には、例えば上記した一致文字データ(一致長及びポインタ)及び不一致文字データ(入力文字列)の一方を選択するセレクタ等が設けられているものとする。
【0084】
これによれば、例えば最大一致長判定部17から一致文字データが出力された(つまり、入力文字列が一致文字データに置き換えられた)場合には、当該一致文字データがセレクタによって選択され、当該一致文字データが上記したエントロピー符号化装置に渡される。一方、例えばハッシュ変換部12から出力された連続するハッシュ値の少なくとも一部と一致する連続するハッシュ値が辞書バッファ11内に存在しない場合には、入力文字列を一致文字データに置き換えることができないが、この場合には不一致文字データがセレクタによって選択され、当該不一致文字データがエントロピー符号化装置に渡される。
【0085】
なお、上記したセレクタは、文字列検索装置10外に設けられている場合を想定しているが、文字列検索装置10内に設けられていてもよい。すなわち、本実施形態に係る文字列検索装置10は、入力文字列が一致文字データに置き換えられたか否かに応じて一致文字データ及び一致文字データの一方を出力するように構成されていてもよい。更に、例えば最大一致長判定部17から一致文字データが出力される(つまり、入力文字列が一致文字データに置き換えられる)場合には、第2逆ハッシュ変換部18の処理が省略されるような構成であってもよい。
【0086】
文字列検索装置10とともに圧縮装置2eに備えられるエントロピー符号化装置は、上記した一致文字データ及び不一致文字データに対してエントロピー符号化を行う。エントロピー符号化が行われた結果(つまり、一致文字データ及び不一致文字データに基づく圧縮データ)は、NAND型フラッシュメモリ3に書き込まれる。なお、NAND型フラッシュメモリ3に書き込まれる圧縮データには、例えば誤り訂正用のパリティ(ECCパリティ)が付与されていてもよい。
【0087】
ここでは圧縮装置2e(文字列検索装置10及びエントロピー符号化装置)について説明した。一方で、読み出しコマンドがホストから発行された場合には、伸張装置2fが圧縮データに対して処理を実行する。読み出しコマンドがホストから発行された場合には、当該読み出しコマンドに基づいてNAND型フラッシュメモリ3から読み出されたデータが、当該読み出されたデータに対する誤り訂正処理、ランダマイズの解除処理等の所定の処理が実行された後に、圧縮データとしてCPU2bにより伸張装置2fへ入力される。そして、伸張装置2fは、入力された圧縮データに対して、エントロピー復号及び辞書式復号を実行する。
【0088】
上記したように本実施形態においては、過去に入力された文字列(第1文字列)に含まれる連続する複数の文字の各々に対応するハッシュ値(第1ハッシュ値)及び当該ハッシュ値を文字に変換するための補完データ(第1補完データ)が辞書バッファ11(格納部)に格納されており、入力文字列(第2文字列)に含まれる連続する複数の文字の各々を、当該文字に対応するハッシュ値(第2ハッシュ値)及び当該ハッシュ値を文字に変換するための補完データ(第2補完データ)に変換し、当該変換された連続するハッシュ値の少なくとも一部と一致する連続するハッシュ値を辞書バッファ11から検索し、当該連続するハッシュ値が格納されている当該辞書バッファ11内の位置を示すポインタを出力する。また、本実施形態においては、ポインタに基づいて連続するハッシュ値及び当該連続するハッシュ値の各々に対応する複数の補完データを辞書バッファ11から選択し、当該選択された複数の補完データを用いて当該選択された連続するハッシュ値を変換文字列(第3文字列)に変換する。更に、本実施形態においては、入力文字列及び変換文字列を比較することによって一致する文字の長さを示す一致長を取得し、当該一致長を上記したポインタとともに出力する。
【0089】
本実施形態においては、このような構成により、高い検索性能を小さい回路規模で実現することができる。
【0090】
ここで、本実施形態に係る文字列検索装置10の回路規模及び検索性能について本実施形態に係る文字列検索装置に対する比較例を用いて説明する。
【0091】
まず、第1比較例の文字列検索装置の概要を説明する。図9は、「全探索」と称される方式(以下、「全探索」方式と表記)で文字列検索(辞書式符号化)を行う装置(以下、第1比較例の文字列検索装置と表記)の構成の一例を示している。
【0092】
図9に示すように、第1比較例の文字列検索装置100は、辞書バッファ101、文字列全探索部102及び最大一致長判定部103を含む。
【0093】
第1比較例の文字列検索装置100における辞書バッファ101には、本実施形態における辞書バッファ11とは異なり、過去に入力された文字列(に含まれる連続する複数の文字の各々)が格納される。
【0094】
文字列全探索部102は、辞書バッファ101から出力された文字列に含まれる文字の中から、入力文字列に含まれる文字の各々と一致する文字を全て探索する総当たりの一致判定(比較)を行う。
【0095】
最大一致長判定部103は、入力文字列に含まれる連続する文字と同一の並び順で、予め定められた数以上の文字が一致している部分のうち、一致長が最大となる部分(連続する文字を含む文字列)を特定し、当該一致長及び当該文字列が格納されている辞書バッファ101内の位置を示すポインタを一致文字データとして出力する。
【0096】
なお、入力文字列は、辞書バッファ101に格納されるとともに、当該辞書バッファ101から不一致文字データとして出力される。
【0097】
ここで、本実施形態において説明したように入力文字列(及び辞書バッファ101に格納されている文字列)に含まれる複数の文字の各々が8ビット(1バイト)で表現されるものとすると、上記した文字列全探索部102は、入力文字列に含まれる文字と辞書バッファ101に格納されている文字列に含まれる文字とを比較するために、「入力データサイズ(つまり、入力文字列に含まれる文字数)×辞書データサイズ(つまり、辞書バッファ101に格納されている文字列に含まれる文字数)」の数の8ビット比較器を備えている。このような構成の場合、第1比較例の文字列検索装置100の回路規模は、入力データサイズ(入力スループット)と辞書データサイズとの両方に比例して増大する。
【0098】
なお、一般に辞書バッファ11に割り当てられている領域のサイズが大きい方がより多くの文字が一致する(つまり、一致長の長い)文字列を検索することができるため、符号化性能が高くなる。しかしながら、辞書バッファ11に割り当てられている領域のサイズを大きくすることは回路規模の増大の要因となる。
【0099】
これに対して、本実施形態においては、入力文字列に含まれる文字に対応するハッシュ値と辞書バッファ11に格納されているハッシュ値とを比較する構成であり、当該ハッシュ値のビット数は、例えば文字のビット数(例えば、8ビット)よりも小さい3ビットである。これによれば、本実施形態においてはハッシュ値を比較するために3ビット比較器を用いることができるため、本実施形態に係る文字列検索装置10に含まれるハッシュ全探索部13の回路規模は、上記した第1比較例の文字列検索装置100に含まれる文字列全探索部102よりも小さくなる。上記した比較器が回路規模に与える影響は大きいため、結果として、本実施形態に係る文字列検索装置10の回路規模も同様に、第1比較例の文字列検索装置100よりも小さくなる。
【0100】
また、上記した第1比較例の文字列検索装置100のように回路規模が増大することを回避するために、ハッシュテーブルを使用する方式(以下、「ハッシュテーブル」方式と表記)で文字列検索(辞書式符号化)を行う装置(以下、第2比較例の文字列検索装置と表記)が知られている。
【0101】
図10は、第2比較例の文字列検索装置110の構成の一例を示している。図10に示すように、第2比較例の文字列検索装置110は、辞書バッファ111、ハッシュテーブル部112、ハッシュ変換部113、ハッシュ読み出し部114、辞書データ選択部115、辞書比較部116及び最大一致長判定部117を含む。
【0102】
第2比較例の文字列検索装置110における辞書バッファ111には、上記した第1比較例と同様に、過去に入力された文字列(に含まれる連続する複数の文字列の各々)が格納される。なお、入力文字列は、辞書バッファ11に格納されるとともに、当該辞書バッファ111から不一致文字データとして出力される。
【0103】
ハッシュテーブル部112には、過去に入力された文字列(予め定められた数の文字)に対応するハッシュ値をインデックスとして、当該文字列が格納されている辞書バッファ111内の位置を示すポインタが書き込まれている。
【0104】
ハッシュ変換部113は、数バイトの入力文字列(入力データ)をハッシュ値に変換し、当該ハッシュ値をハッシュテーブル部112及びハッシュ読み出し部114に出力する。
【0105】
ハッシュ変換部113からハッシュテーブル部112に出力されたハッシュ値に変換された数バイトの入力文字列が格納されている辞書バッファ111内の位置を示すポインタは、当該ハッシュ値によって指定されるインデックスによって参照される当該ハッシュテーブル部112のテーブルエントリに書き込まれる。なお、このハッシュテーブル部112においてハッシュ変換部113から出力されたハッシュ値をインデックスとするテーブルエントリにポインタが既に保持されている場合、当該テーブルエントリには、最新のポインタが保持される。また、ハッシュテーブル部112においては、1つのハッシュ値をインデックスとする複数のポインタが保持されていてもよい。
【0106】
ハッシュ読み出し部114は、ハッシュ変換部113から出力されたハッシュ値をインデックスとしてハッシュテーブル部112に書き込まれているポインタ(つまり、テーブルエントリ内のポインタ)を全て読み出す。
【0107】
辞書データ選択部115は、ハッシュ読み出し部114によってハッシュテーブル部112から読み出されたポインタに従って、辞書バッファ111に格納されている文字列(辞書データ)を選択する。
【0108】
辞書比較部116は、入力文字列を入力し、辞書データ選択部115によって選択された文字列を当該入力文字列と比較する。これにより、辞書比較部116は、入力文字列と辞書データ選択部115によって選択された文字列とにおいて一致する文字の長さを示す一致長を取得する。
【0109】
最大一致長判定部117は、辞書データ選択部115によって選択された文字列毎に辞書比較部116によって取得された一致長の中から最大の一致長を判定し、当該最大の一致長と判定された一致長及び当該一致長に対応するポインタ(一致長が最大の文字列の辞書バッファ111内の位置を示すポインタ)を一致文字データとして出力する。
【0110】
ここで、上記した第1比較例(「全探索」方式)の文字列検索装置100と、第2比較例(「ハッシュテーブル」方式)の文字列検索装置110とを比べた場合、入力文字列と辞書バッファ内の文字列との一致長を生成するという観点によれば、第1比較例の文字列全探索部102と第2比較例の辞書比較部116とが対応する構成であるといえる。
【0111】
しかしながら、第1比較例の文字列全探索部102においては辞書バッファ101に格納されている文字列に含まれる全ての文字に対して探索(比較)処理を実行する必要があるのに対して、第2比較例の辞書比較部116においてはハッシュテーブル部112に書き込まれているポインタの中でハッシュ値が示したポインタについてのみ読み出し処理(探索処理)が実行される。すなわち、第2比較例の文字列検索装置110においては探索処理の対象(候補)が絞られているため、第1比較例の文字列全探索部102に備えられる比較器の数よりも第2比較例の辞書比較部116に備えられる比較器の数は少なくてよい。よって、第2比較例の文字列検索装置110は、第1比較例の文字列検索装置100と比較して、回路規模(比較器の数)を低減し、かつ、効率的な動作を実現することができる。
【0112】
なお、第2比較例の文字列検索装置110は、第1比較例の文字列検索装置100の構成と比較して、例えばハッシュテーブル部112を更に備える必要があるが、当該ハッシュテーブル部112自体のサイズは、辞書データサイズのlog(底が2の対数)に比例する程度の回路規模となる。具体的には、ハッシュテーブル部112は、辞書データサイズの対数であるポインタビット幅とポインタ数を掛けたものに対応する回路規模となる。この場合、ポインタ数を制限することで、第2比較例の文字列検索装置110は、第1比較例の文字列検索装置100よりも回路規模を小さくし得る。
【0113】
一方、上記した第1比較例(「全探索」方式)の文字列検索装置100は、データ履歴(過去に入力された文字列)を漏れなく検索(探索)する構成であるため、検索性能は高い。これに対して、第2比較例(「ハッシュテーブル」方式)の文字列検索装置110は、ハッシュ値を用いて辞書バッファ111内の候補を絞り込む構成であるため、「全探索」方式と比較すると検索性能は低下する。具体的には、「ハッシュテーブル」方式においてはハッシュ衝突が生じる可能性があるが、当該ハッシュ衝突が生じると辞書バッファ111から適切な文字列を選択することができず、「全探索」方式と比べると検索性能を妥協しているといえる。
【0114】
なお、このような「ハッシュテーブル」方式における検索性能の低下の原因であるハッシュ衝突はハッシュ値のビット幅を大きくすることで緩和することが可能であるが、当該ビット幅を大きくした(増加させた)場合には、ハッシュテーブル部112のテーブルエントリ数は当該ビット幅の増分の2のべき乗倍で増加するため、当該ハッシュテーブル部112の回路規模が飛躍的に大きくなる。
【0115】
更に、ハッシュ衝突に対応するためにハッシュテーブル部112において1つのインデックス(ハッシュ値)に対応づけて複数のポインタを書き込むことが考えられるが、このような場合においてもハッシュテーブル112のサイズが増加するため、回路規模の増大の要因となる。
【0116】
これに対して、本実施形態においては、過去に入力された文字列に含まれる連続する複数の文字の各々に対応するハッシュ値及び補完データを辞書バッファ11に格納しておき、このような辞書バッファ11の中から入力文字列に含まれる文字の各々に対応するハッシュ値と一致するハッシュ値を探索(検索)する構成であるため、ハッシュ値をインデックスとして用いる第2比較例(「ハッシュテーブル」方式)の文字列検索装置110と比較して、ハッシュ衝突の影響を緩和することができる。これにより、本実施形態に係る文字列検索装置10は、第2比較例の文字列検索装置110よりも高い検索性能を実現することができる。
【0117】
すなわち、本実施形態によれば、「ハッシュテーブル」方式を超える高い検索性能を、「全探索」方式よりも小さい回路規模で実現することができる。
【0118】
なお、本実施形態に係る文字列検索装置10と第2比較例の文字列検索装置110との回路規模についても簡単に説明する。まず、辞書バッファ11と辞書バッファ111とでは格納されるデータの形式は異なるものの、当該データのサイズは同じであるため、辞書バッファ11の回路規模と辞書バッファ111の回路規模とは同等である。また、辞書データ選択部14及び辞書データ選択部115において選択される一致候補(辞書データ選択部14によって選択される変換文字データ及び辞書データ選択部115によって選択される文字列)の数が同一であれば、本実施形態に係る文字列検索装置10の辞書データ選択部14、辞書比較部16及び最大一致長判定部17の回路規模と、第2比較例の文字列検索装置110の辞書データ選択部115、辞書比較部116及び最大一致長判定部117の回路規模とは同等である。また、本実施形態に係る文字列検索装置10のハッシュ変換部12、第1逆ハッシュ変換部15及び第2逆ハッシュ変換部18は、他部(他の回路)に比べて極めて小さい規模の回路で構成することができる。
【0119】
このため、本実施形態に係る文字列検索装置10と第2比較例の文字列検索装置110との回路規模の大小は、図3に示すハッシュ全探索部13の回路規模と、図10に示すハッシュテーブル部112及びハッシュ読み出し部114の回路規模との比較結果に依存する。
【0120】
ここで、本実施形態においては3ビットのハッシュ値を用いるものとして説明したが、この場合において、例えば4文字以上一致した部分(4文字分以上の連続するハッシュ値)が一致候補としてハッシュ全探索部13によって検索されるものとすると、当該一致候補は3ビット×4文字分=12ビットのハッシュ値で検出(選択)されることになる。検索性能を揃える簡易的な指標として第2比較例におけるハッシュテーブル部112に書き込まれるハッシュ値のビット幅を用いるものとすると、当該ハッシュテーブル部112においては、4文字を含む入力文字列から変換される12ビットのハッシュ値をインデックスとすることが考えられる。
【0121】
以下、このときのハッシュ全探索部13とハッシュテーブル部112及びハッシュ読み出し部114との回路規模の比較を行うが、ここでは図11のように入力文字列の各文字を先頭とする文字列探索を並列に行う構成を想定する。この場合、(スループット文字数(例えば、8)+一致判定文字数(例えば、4)-1)の文字数で構成される文字列の各文字のハッシュ値と辞書バッファ11内のハッシュ値とを総当たりで一致判定する。これにより、例えば入力文字列が8文字から構成されている場合、図11に示すように、8種の4文字の文字列が並列に探索される。なお、探索される文字列間で重複している文字については、当該文字のハッシュ値を共有してもよい。
【0122】
この構成はハッシュ全探索方式(本実施形態に係る文字列検索装置10において採用される方式)にとって好適なものであるが、2文字以上の入力スループットに対応したハッシュテーブル方式においても使用されるものである。
【0123】
なお、以下の説明においては、辞書サイズが4096バイトであり、入力文字列のスループット(スループット文字数)が8文字(8バイト)であるものとする。また、上記したように一致判定文字列文字数(つまり、一致候補として探索される最小の文字数)は4であるものとする。
【0124】
まず、ハッシュ全探索部13の回路規模について説明する。ここでは、ハッシュ全探索部13の主要な構成要素についてのみ考慮する。ハッシュ全探索部13の主要な構成要素としては、入力文字列をハッシュ変換部12でハッシュ変換したハッシュ値と辞書バッファ11のハッシュ値の一致を判定する比較器、文字単位のハッシュ一致結果を文字列単位のハッシュ一致フラグに統合するAND素子、文字列単位のハッシュ一致フラグをポインタに変換する回路(以下、ポインタ変換回路と表記)である。
【0125】
比較器は排他的論理和(XOR)素子で構成され、当該比較器の個数は「辞書サイズ*(スループット文字数+一致判定文字列文字数-1)*文字単位ハッシュビット幅」により算出される。なお、本実施形態における文字単位ハッシュビット幅は、3ビットである。上記したように辞書サイズが4096バイトであり、スループット文字数が8(文字)であるものとすると、比較器の個数として135168が算出される。また、1つの比較器(1ビット当たり)のゲート数が例えば4ゲートであるものとすると、全ての比較器における合計ゲート数は、4×135168=540672となる。
【0126】
文字列統合用AND素子の個数は、「辞書サイズ*スループット文字数*(一致判定文字列文字数-1)」により算出される。ここでは、文字列統合用AND素子の個数として98304が算出される。なお、1つの文字列統合用AND素子(1ビット当たり)のゲート数が例えば1ゲートであるものとすると、全ての文字列統合用AND素子における合計ゲート数は、1×98304=98304となる。
【0127】
ポインタ変換回路はOR素子とMUX素子で構成され、当該ポインタ変換回路の個数は、「辞書サイズ*スループット文字数」により算出される。ここでは、ポインタ変換回路の個数として32768が算出される。なお、1つのポインタ変換回路(1ビット当たり)のゲート数が例えば4ゲートであるものとすると、全てのポインタ変換回路における合計ゲート数は、4×32768=131072となる。
【0128】
ハッシュ全探索部13の回路規模を当該ハッシュ全探索部13の主要な構成要素(比較器、文字列統合用AND素子及びポインタ変換回路)の総ゲート数で表すものとすると、当該ハッシュ全探索部13の回路規模は、540672(比較器の合計ゲート数)+98304(文字列統合用AND素子の合計ゲート数)+131072(ポインタ変換回路の合計ゲート数)=770048と表現できる。
【0129】
次に、ハッシュテーブル部112及びハッシュ読み出し部114の回路規模について説明する。ここでは、ハッシュテーブル部112及びハッシュ読み出し部114の主要な構成要素についてのみ考慮する。
【0130】
ハッシュテーブル部112においてはテーブルを構成するフリップフロップが必要であり、ハッシュテーブル部112のエントリ(ハッシュテーブルエントリ)毎に1つのポインタを格納する場合、ハッシュテーブルエントリ数と格納する辞書ポインタサイズで総ビット数が決まる。すなわち、フリップフロップ(テーブルF/F)の個数は、「ハッシュテーブルエントリ数*辞書ポインタサイズ」により算出される。ハッシュテーブルエントリ数が4096であり、辞書ポインタサイズが12ビットであるものとすると、フリップフロップの個数として49152が算出される。また、1つのフリップフロップ(1ビット当たり)のゲート数が例えば8ゲートであるものとすると、全てのフリップフロップにおける合計ゲート数は、8×49152=393216となる。
【0131】
ハッシュテーブルエントリの各々には書き込み制御(テーブルライト制御)の回路が付随し、ハッシュ値に対する固定値(ハッシュテーブルエントリのインデックス)との一致判定として処理されるので、当該書き込み制御の回路の個数は、「ハッシュテーブルエントリ数*ハッシュビット幅」により算出される。ここでは上記したように4文字を含む入力文字列から変換される12ビットのハッシュ値をインデックスとする(つまり、ハッシュビット幅が12である)場合を想定しているため、書き込み制御の回路の個数としては49152が算出される。なお、1つの書き込み制御の回路(1ビット当たり)のゲート数が例えば1ゲートであるものとすると、全ての書き込み制御の回路における合計ゲート数は、1×49152=49152となる。
【0132】
ハッシュ読み出し部114はハッシュ値に応じたポインタ値を読み出すためにMUX回路(テーブルリードMUX)で構成され、当該MUX回路の個数は、「ハッシュテーブルエントリ数*スループット文字数*辞書ポインタサイズ」により算出される。ここでは、MUX回路の個数として393216が算出される。なお、1つのMUX回路(1ビット当たり)のゲート数が例えば3ゲートであるものとすると、全てのMUX回路における合計ゲート数は、3×393216=1179648となる。
【0133】
ハッシュテーブル部112及びハッシュ読み出し部114の回路規模を当該ハッシュテーブル部112及びハッシュ読み出し部114の主要な構成要素(フリップフロップ、書き込み制御の回路及びMUX回路)の総ゲート数で表すものとすると、ハッシュテーブル部112及びハッシュ読み出し部114の回路規模は、393216(フリップフロップの合計ゲート数)+49152(書き込み制御の回路の合計ゲート数)+1179648(MUX回路の合計ゲート数)=1622016と表現できる。
【0134】
このようなハッシュテーブル部112及びハッシュ読み出し部114の回路規模(総ゲート数)を上記したハッシュ全探索部13の回路規模(総ゲート数)と比較すると、ハッシュ全探索部13の回路規模がハッシュテーブル部112及びハッシュ読み出し部114の回路規模よりも小さくなることがわかる。すなわち、例えば同程度の検索性能を有するように構成した場合、第2比較例に対して本実施形態の方が回路規模に関して優位性があるといえる。
【0135】
なお、本実施形態に係る文字列検索装置10と第2比較例の文字列検索装置110との回路規模の大小関係は、ハッシュ値のビット幅や一致候補として検索されるための最小の一致文字数等によって変動するが、第2比較例の文字列検索装置110の検索性能を本実施形態に係る文字列検索装置10よりも向上させる(例えば、ハッシュ値のビット幅を大きくする等)場合には、更に本実施形態に係る文字列検索装置10における回路規模に関する優位性が向上すると考えられる。詳細な説明については省略するが、例えばハッシュビット幅を16ビット(文字単位のハッシュ値のビット幅を4ビット)、ハッシュテーブルエントリ数を65536とした場合には、ハッシュ全探索部13の回路規模(総ゲート数)は950272、ハッシュテーブル部112及びハッシュ読み出し部114の回路規模(総ゲート数)は26214400となり、回路規模に関する本実施形態の優位性が向上する。
【0136】
更に、本実施形態においては、ハッシュ変換部12によって入力文字列から変換された連続するハッシュ値及び当該連続するハッシュ値の各々に対応する複数の補完データが辞書バッファ11に格納され、当該辞書バッファ11に格納されたハッシュ値が当該補完データを用いて入力文字列に変換されて出力される。このような構成によれば、上記したように辞書バッファ11に入力文字列が格納されない構成であっても、辞書式符号化の結果として用いられる不一致文字データ(入力文字列)を後段に出力することが可能となる。
【0137】
また、本実施形態においては、辞書バッファ11に格納されるハッシュ値及びハッシュ変換部12によって変換されるハッシュ値の各々のビット数(例えば、3ビット)が文字のビット数(例えば、8ビット)よりも小さいものとして説明したが、当該ハッシュ値と当該ハッシュ値に対応する補完データの合計ビット数を、文字のビット数と同一としてもよい。このような構成によれば、ハッシュ値に補完データを加えた変換文字データを辞書バッファ11に格納したとしても、例えば第1比較例における辞書バッファ101及び第2比較例における辞書バッファ111と比較して辞書バッファ11のサイズを大きくする必要がないため、本実施形態に係る文字列検索装置10における回路規模の抑制に寄与することができる。
【0138】
また、本実施形態においては、ハッシュ変換部12によって変換された連続するハッシュ値の少なくとも一部と一致する複数の連続するハッシュ値(つまり、複数の一致候補)が検索された場合には、当該連続するハッシュ値毎の一致長のうちの最大の一致長を、当該一致長が最大である連続するハッシュ値が格納されている辞書バッファ11内の位置を示すポインタとともに出力する。本実施形態においては、このような構成により、入力文字列のより一致長が大きい部分を一致文字データ(相対参照)に置き換えることができるため、符号化効率を向上させることが可能となる。
【0139】
なお、本実施形態においては、過去に入力された文字列に含まれる複数の文字の各々に対応するハッシュ値及び当該ハッシュ値に対応する補完データが辞書バッファ11(に割り当てられている領域)に格納されるものとして説明したが、当該ハッシュ値及び補完データには異なる領域が割り当てられていてもよい。
【0140】
具体的には、本実施形態において辞書バッファ11に格納されているハッシュ値は、ハッシュ全探索部13、辞書データ選択部14及び逆ハッシュ変換部18に出力される(つまり、ハッシュ全探索部13、辞書データ選択部14及び逆ハッシュ変換部18によって頻繁に読み出される)ため、高速に読み出すことが可能な領域に格納されることが好ましい。この場合、ハッシュ値は、例えばフリップフロップ回路等に格納される(つまり、ハッシュ値にはフリップフロップ回路の領域が割り当てられる)ようにしてもよい。一方、補完データはハッシュ値よりも読み出される頻度が少ないため、当該補完データは、例えばSRAM等のメモリに格納される(つまり、メモリの領域が割り当てられる)ようにしてもよい。すなわち、本実施形態における辞書バッファ11は、ハッシュ値を格納するためのフリップフロップ回路の領域及び補完データを格納するためのメモリの領域から構成されていてもよい。
【0141】
(第2実施形態)
次に、第2実施形態について説明する。なお、本実施形態においては、前述した第1実施形態と同様の部分についての詳しい説明を省略し、当該第1実施形態とは異なる部分について主に説明する。また、本実施形態におけるメモリシステムのハードウェア構成については前述した第1実施形態と同様であるため、適宜、図1を用いて説明する。
【0142】
本実施形態におけるメモリシステム1が備える圧縮装置2eは前述した第1実施形態と同様に文字列検索装置及びエントロピー符号化装置を備えるが、以下、本実施形態に係る文字列検索装置について説明する。
【0143】
図12は、本実施形態に係る文字列検索装置の構成の一例を示すブロック図である。なお、図12においては、前述した図3と同一の部分には同一参照符号を付してその詳しい説明を省略し、当該図3と異なる部分について説明する。
【0144】
図12に示すように、文字列検索装置10は、辞書バッファ11、ハッシュ変換部12、ハッシュ全探索部13、辞書データ選択部14、辞書比較部16、最大一致長判定部17及び逆ハッシュ変換部18を含む。
【0145】
すなわち、本実施形態は、前述した第1実施形態における第1逆ハッシュ変換部15が省略されている点で、当該第1実施形態とは異なる。なお、図12に示す逆ハッシュ変換部18は、前述した第1実施形態における第2逆ハッシュ変換部18に相当する。
【0146】
本実施形態において、辞書比較部16は、前述した第1実施形態とは異なり、ハッシュ変換部12から出力された連続する変換文字データ(以下、第1変換文字データと表記)を入力し、辞書データ選択部14から出力された連続する変換文字データ(以下、第2変換文字データと表記)を当該連続する第1変換文字データと比較する。これにより、辞書比較部16は、連続する第1変換文字データと連続する第2変換文字データとにおいて一致する変換文字データを判定し、当該一致する変換文字データの数を一致長として取得する。
【0147】
なお、図12に示す辞書比較部16以外の辞書バッファ11、ハッシュ変換部12、ハッシュ全探索部13、辞書データ選択部14、最大一致長判定部17及び逆ハッシュ変換部18は、前述した第1実施形態において説明した通りであるため、ここではその詳しい説明を省略する。
【0148】
上記したように本実施形態においては、入力文字列に含まれる複数の連続する文字から変換された連続するハッシュ値(第2ハッシュ値)及び当該連続するハッシュ値の各々に対応する複数の補完データ(第1補完データ)と、辞書データ選択部14から出力される連続するハッシュ値(第1ハッシュ値)及び当該連続するハッシュ値の各々に対応する複数の補完データ(第2補完データ)とを比較し、一致長を取得する構成により、前述した第1と同様に高い検索性能を小さい回路規模で実現することができる。
【0149】
なお、本実施形態においては、ハッシュ変換及び逆ハッシュ変換が1対1の可逆変換となるように変換文字データが生成されるものとする。具体的には、例えば入力文字列に含まれる複数の文字の各々から変換された変換文字データのビット幅(ハッシュ値及び補完データの合計ビット幅)が、当該変換文字データに変換された文字のビット幅(入力ビット幅)よりも小さい場合には、文字と変換文字データとが多対1となり、文字と変換文字データとが1対1の可逆変換となる関係(つまり、当該変換文字データに変換された文字と、当該変換文字データから逆変換される文字とが同一となる関係)を担保することができない。このため、本実施形態においては、変換文字データのビット幅と文字のビット幅とが一致するように、変換文字データが生成される。このような変換文字データによれば、文字と変換文字データとが1対1の可逆変換となる関係を担保することができる。なお、入力文字列に含まれる複数の文字の各々から変換された変換文字データのビット幅が文字のビット幅よりも大きい場合であっても可逆変換となる関係を担保することはできるが、この場合には辞書比較部16で用いる比較器のサイズが大きくなる(つまり、回路規模が大きく)なるため、変換文字データのビット幅と文字のビット幅とを一致させることが好ましい。
【0150】
このように文字と変換文字データとが1対1の可逆変換となる関係である場合には、前述した第1実施形態において説明したように逆ハッシュ変換を行う(つまり、変換文字列を入力文字列と比較する)ことなく、変換文字データの形式での比較で正確な一致長を取得することが可能となる。
【0151】
また、本実施形態においては、第1実施形態と比較して第1逆ハッシュ変換部15が省略された構成であるが、当該第1逆ハッシュ変換部15の省略による回路規模の縮小率(縮小幅)は大きくはない。しかしながら、本実施形態においては、第1逆ハッシュ変換部15による逆ハッシュ変換処理が実行されないことにより、辞書比較処理(つまり、辞書バッファ11から辞書比較部16へのクリティカルパス)が短縮され、当該逆ハッシュ変換処理による遅延(ハードウェア実装のゲート遅延)が軽減されるという副次的な効果が期待できる。
【0152】
なお、辞書データ選択部14はハッシュ全探索部13から出力されたポインタによって示される位置から最大一致長に相当する数の連続する変換文字データを選択し、当該選択された変換文字データを出力するが、本実施形態においては、当該変換文字データのうちハッシュ全探索部13によってハッシュ変換部12から出力されたハッシュ値(つまり、入力文字列に含まれる文字に対応するハッシュ値)と一致すると判定された変換文字データに代えて補完データを選択及び出力する(つまり、ハッシュ値を選択及び出力しない)構成としてもよい。このような構成の場合、ハッシュ値の一致についてはハッシュ全探索部13で既に判定されているとみなし、辞書比較部16においては、辞書データ選択部14から出力された補完データとハッシュ変換部12から出力された補完データとを比較するのみで一致長を取得することができる。
【0153】
一方、変換文字データのうちハッシュ変換部12から出力されたハッシュ値と一致するとハッシュ全探索部13によって判定されていない変換文字データについては、当該変換文字データが辞書データ選択部14において選択及び出力され、辞書比較部16においては当該辞書データ選択部14から出力された変換文字データとハッシュ変換部12から出力された変換文字データを比較すればよい。
【0154】
すなわち、本実施形態においては、ハッシュ全探索部13において一致を確認した文字数分はハッシュ値を選択せず、補完データのみの比較を行い、ハッシュ全探索部13において一致を確認していない文字数分はハッシュ値及び補完データを選択し、ハッシュ値及び補完データの比較を行う(つまり、一致が確認された文字に応じて選択された補完データと、一致が確認されていない文字に応じて選択されたハッシュ値及び補完データとを用いて一致長を取得する)構成としてもよい。
【0155】
このような構成によれば、辞書比較部16に備えられる比較器の数を低減し、回路規模を小さくすることができる。
【0156】
ここでは本実施形態に係る文字列検索装置10においては辞書データ選択部14が変換文字データに代えて補完データを選択及び出力するように構成されていてもよいことについて説明したが、前述した第1実施形態においては、逆ハッシュ変換処理を実行する必要があるため、辞書データ選択部14は変換文字データを選択及び出力する必要がある。
【0157】
(第3実施形態)
次に、第3実施形態について説明する。なお、本実施形態においては、前述した第1及び第2実施形態と同様の部分についての詳しい説明を省略し、当該第1及び第2実施形態とは異なる部分について主に説明する。また、本実施形態におけるメモリシステムのハードウェア構成については前述した第1実施形態と同様であるため、適宜、図1を用いて説明する。
【0158】
本実施形態におけるメモリシステム1が備える圧縮装置2eは前述した第1及び第2実施形態と同様に文字列検索装置及びエントロピー符号化装置を備えるが、以下、本実施形態に係る文字列検索装置について説明する。
【0159】
図13は、本実施形態に係る文字列検索装置の構成の一例を示すブロック図である。なお、図13においては、前述した図3及び図12と同一の部分は同一参照符号を付してその詳しい説明を省略し、当該図3及び図12と異なる部分について説明する。
【0160】
図13に示すように、文字列検索装置10は、辞書バッファ11、ハッシュ変換部12、ハッシュ全探索部13、辞書データ選択部14、辞書比較部16、最大一致長判定部17及びデータ遅延部19を含む。
【0161】
すなわち、本実施形態は、前述した第2実施形態における第2逆ハッシュ変換部18が省略され、データ遅延部19が追加されている点で、当該第2実施形態とは異なる。
【0162】
データ遅延部19は、入力文字列を受け取り、当該入力文字列を文字列検索装置10に対して要求されるスループットに応じて保持する。換言すれば、データ遅延部19は、最大一致長判定部17から一致文字データが出力されるまでのレイテンシに相当するデータ遅延を行う。データ遅延部19は、このようなデータ遅延の後に入力文字列を不一致文字データとして出力する。
【0163】
なお、図13に示すデータ遅延部19以外の辞書バッファ11、ハッシュ変換部12、ハッシュ全探索部13、辞書データ選択部14、辞書比較部16及び最大一致長判定部17は、前述した第2実施形態において説明した通りであるため、ここではその詳しい説明を省略する。
【0164】
本実施形態においては、上記したように入力文字列(第2文字列)を、最大一致長判定部17から一致文字データ(一致長及びポインタ)が出力されるまで保持して出力する構成により、文字列検索装置10の回路規模を更に抑制することができる可能性がある。
【0165】
具体的には、文字列検索装置10の処理レイテンシが大きい場合、データ遅延部19が備える遅延用回路は前述した第2実施形態における逆ハッシュ変換部18(第1実施形態における第2逆ハッシュ変換部18)と比べて小さい回路規模とはならない。しかしながら、例えば辞書バッファ11の構成としてアクセスデータ数に制約が生じるSRAM等を実装するような場合、前述した第1及び第2実施形態のように辞書バッファ11が不一致文字データを出力する構成が回路規模の増加につながる可能性がある。このような場合には、辞書バッファ11に不一致文字データを出力させることなく、レイテンシ相当のデータ遅延部19を備える構成とすることにより、文字列検索装置10の回路規模を抑制することが期待できる。
【0166】
また、前述した第1及び第2実施形態においては変換文字データに基づいて逆ハッシュ変換処理を実行する必要があるため、ハッシュ変換部12が逆ハッシュ変換処理の複雑さまたは処理遅延(ゲート遅延段数)等を考慮した変換文字データを生成する必要がある。しかしながら、本実施形態においては逆ハッシュ変換処理を実行する必要がないため、当該変換文字データに関してより自由度の高い設計を行う(つまり、ハッシュ変換部12による演算をより単純化する)ことができる。
【0167】
なお、詳しい説明を省略するが、前述した第2実施形態において説明した辞書データ選択部14が変換文字データに代えて補完データを選択及び出力する構成は、本実施形態に適用されても構わない。
【0168】
以上述べた少なくとも1つの実施形態によれば、高い検索性能を小さな回路規模で実現することが可能な文字列検索装置及びメモリシステムを提供することができる。
【0169】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0170】
1…メモリシステム、2…コントローラ、2a…ホストインタフェース、2b…CPU、2c…NANDインタフェース、2d…DRAMインタフェース、2e…圧縮装置、2f…伸張装置、3…NAND型フラッシュメモリ、4…DRAM、10…文字列検索装置、11…辞書バッファ、12…ハッシュ変換部(第1変換部)、13…ハッシュ全探索部(検索部)、14…辞書データ選択部、15…第1逆ハッシュ変換部(第2変換部)、16…辞書比較部、17…最大一致長判定部(出力部)、18…第2逆ハッシュ変換部(第3変換部)、19…データ遅延部。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13