(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-11-30
(54)【発明の名称】圧縮データを生成するための最長一致処理を伴う圧縮システム
(51)【国際特許分類】
H03M 7/40 20060101AFI20221122BHJP
【FI】
H03M7/40
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022518896
(86)(22)【出願日】2020-09-22
(85)【翻訳文提出日】2022-05-16
(86)【国際出願番号】 US2020051933
(87)【国際公開番号】W WO2021061608
(87)【国際公開日】2021-04-01
(32)【優先日】2019-09-24
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ビナイ パテル
【テーマコード(参考)】
5J064
【Fターム(参考)】
5J064BA09
5J064BC14
5J064BC24
(57)【要約】
比較器と、履歴バッファと、一致検出器と、コマンド生成器と、を備えた圧縮サブシステムを含む電子デバイスが、オリジナルデータから圧縮データを生成するための操作を実行する。圧縮サブシステムは、クロックの各サイクルで開始し、オリジナルデータからコピーされた検索文字列を処理して、圧縮データ用のコマンドを生成する。各検索文字列を処理するために、比較器は、検索文字列からのN個の部分文字列の各々を履歴バッファからの格納データと比較して、部分文字列と格納データとの一致を見つける。次に、一致検出器は、部分文字列の各々について最長一致を判定する。次に、コマンド生成器は、部分文字列の最長一致に基づいて、圧縮データ用のコマンドを選択的に出力する。
【選択図】
図6
【特許請求の範囲】
【請求項1】
オリジナルデータから圧縮データを生成するための電子デバイスであって、
前記電子デバイスは、
比較器と、履歴バッファと、一致検出器と、コマンド生成器と、を含む圧縮サブシステムを備え、
前記圧縮サブシステムは、クロックの各サイクルで開始して、検索文字列を処理して前記圧縮データ用のコマンドを生成するように構成されており、前記検索文字列は、前記オリジナルデータからのバイト数を含み、
前記圧縮サブシステムは、前記検索文字列を処理する場合に、
前記比較器が、前記検索文字列からのN個の部分文字列の各々を前記履歴バッファからの格納データと比較して、前記部分文字列と前記格納データとの一致を見つけるように構成されており、各部分文字列は、バイト単位で指定された長さであり、前記検索文字列からの異なる順序のバイトシーケンスを含み、
前記一致検出器が、前記部分文字列の各々の最長一致を判定するように構成されており、
前記コマンド生成器が、前記部分文字列の前記最長一致に基づいて、前記圧縮データ用のコマンドを選択的に出力するように構成されている、
電子デバイス。
【請求項2】
前記比較器は、比較要素を含み、
前記比較器は、前記部分文字列の各々を前記履歴バッファからの前記格納データと比較して、前記一致を見つける場合に、
前記格納データからの前記部分文字列及び比較文字列を、前記比較要素の対応する要素への入力として提供することであって、各比較文字列は、バイト単位で指定された長さであり、前記格納データからの異なる順序のバイトシーケンスを含む、ことと、
前記対応する要素の出力として、一致毎に前記一致の長さを示す識別子を受信することと、
を行うように構成されている、
請求項1の電子デバイス。
【請求項3】
前記識別子は、前記部分文字列のバイト毎に個別のビットを含むビットシーケンスを含み、
前記対応する要素は、前記部分文字列の各々のバイトと前記比較文字列とが一致する場合に各ビットに対して第1の値を出力し、前記部分文字列の各々のバイトと前記比較文字列とが一致しない場合に各ビットに対して第2の値を出力するように構成されている、
請求項2の電子デバイス。
【請求項4】
前記一致検出器は、N個の一致パイプラインを含み、各一致パイプラインは、順番に配置されたK個の最長一致セレクタのステージを含み、
前記一致検出器は、前記部分文字列の各々の前記最長一致を判定する場合に、
前記一致パイプラインのうち対応する一致パイプラインにおいて、前記比較器から前記部分文字列の一致を受信することと、
前記一致パイプラインのうち前記対応する一致パイプラインの各ステージにおいて、個別の一致のグループの中からローカルな最長一致を選択し、前記ローカルな最長一致を、前記一致パイプラインの次のステージの一致として提供することであって、前記各ステージのうち最終ステージは、最終的な最小の個別の一致のグループの中から前記最長一致を選択する、ことと、
を行うように構成されている、
請求項1の電子デバイス。
【請求項5】
前記コマンド生成器は、前記部分文字列の前記最長一致に基づいて、前記圧縮データ用の前記コマンドを選択的に出力する場合に、前記クロックのサイクルにおいて、
第1の一致パイプラインから開始して、ラウンドロビンの順序で、以前の最長一致により前記クロックの前記サイクルで処理されない一致パイプラインをスキップすることと、
全ての前記一致パイプラインがスキップされた場合に、コマンドを出力せずに、前記クロックの前記サイクルでの一致パイプラインの処理を終了することと、
1つ以上の一致パイプラインがスキップされずに処理される場合に、指定された順序で次の一致パイプラインに対して、前記次の一致パイプラインの前記最長一致の長さに基づくコマンドを出力することと、
前記次の一致パイプラインの前記最長一致の長さに基づいて、前記クロックの前記サイクルで残りの一致パイプラインを処理し又はスキップすることと、
を行うように構成されている、
請求項4の電子デバイス。
【請求項6】
前記指定された順序は、
ラウンドロビンの順序、又は、処理される前記一致パイプラインの各々の前記最長一致に基づいて判定される順序のうち何れかである、
請求項5の電子デバイス。
【請求項7】
前記コマンド生成器は、前記コマンドを出力する場合に、
一致が見つけられなかったか、又は、前記最長一致が閾値の長さよりも短い場合に、リテラル書き込みコマンドを出力することと、
前記最長一致が前記閾値の長さよりも長い場合に、文字列コピーコマンドを出力することと、
を行うように構成されている、
請求項5の電子デバイス。
【請求項8】
前記コマンド生成器は、前記部分文字列の前記最長一致に基づいて、前記圧縮データ用の前記コマンドを選択的に出力する場合に、前記クロックのサイクルにおいて、
前記クロックの以前のサイクルから、カウント値がある場合にそれを取得し、又は、前記カウント値をゼロに設定することと、
前記カウント値がゼロに等しくなるまで、又は、スキップされる一致パイプラインが残らなくなるまで、第1の一致パイプラインから開始して、ラウンドロビンの順序で次の各パイプラインをスキップし、前記カウント値をデクリメントすることと、
スキップされる一致パイプラインが残っていない場合に、前記クロックの前記サイクルに対するコマンドの出力を終了し、前記クロックの後続サイクルの前記カウント値の現在の値を保持することと、
前記カウント値がゼロであり、1つ以上の一致パイプラインがスキップされていない場合に、
指定された順序での前記次の一致パイプラインの最長一致の長さが閾値よりも短い、又は、一致が見つけられなかった場合に、前記次の一致パイプラインに対するリテラル書き込みコマンドを出力し、前記カウント値をゼロに設定することと、
前記指定された順序での前記次の一致パイプラインの前記最長一致の長さが前記閾値よりも長い場合に、前記最長一致に関連する文字列コピーコマンドを出力し、前記カウント値を、前記最長一致のバイト単位の長さから1を引いたものに設定することと、
前記スキップ操作に戻ることと、
を行うように構成されている、
請求項4の電子デバイス。
【請求項9】
前記検索文字列は、前記部分文字列のバイト単位の前記指定された長さよりもN-1バイト長いバイト数を含み、
前記部分文字列は、前記検索文字列からの異なる連続した各部分文字列を含み、前記部分文字列の第1の部分文字列は、前記検索文字列の第1のバイトから始まり、前記部分文字列の次の各部分文字列は、前記第1のバイトからバイト単位でインクリメンタルに大きくなるオフセットから始まる、
請求項1の電子デバイス。
【請求項10】
前記圧縮サブシステムは、
文字列ハンドラをさらに含み、
前記文字列ハンドラは、前記クロックの各サイクルにおいて、
前記オリジナルデータから前記検索文字列を取得することと、
前記検索文字列を前記比較器に提供することと、
を行うように構成されている、
請求項1の電子デバイス。
【請求項11】
前記文字列ハンドラは、前記クロックの各サイクルにおいて前記比較器に前記検索文字列を提供した後に、
前記オリジナルデータからNバイトのデータをシフトさせることと、
前記Nバイトの前記データを、前記履歴バッファ内の前記格納データに追加することと、
を行うように構成されている、
請求項10の電子デバイス。
【請求項12】
前記検索文字列は、前記オリジナルデータの開始バイトから始まる前記オリジナルデータからのバイト数を含み、
前記文字列ハンドラは、前記クロックの各サイクルにおいて前記比較器に前記検索文字列を提供した後に、
前記開始バイトをNバイトだけインクリメントし、それによって、前記圧縮サブシステムを、前記クロックの次のサイクルにおいて次の検索文字列を処理するように構成することを行うように構成されている、
請求項10の電子デバイス。
【請求項13】
前記圧縮サブシステムから前記コマンドを受信し、1つ以上の後続の操作に前記コマンドを使用するように構成された受信エンティティをさらに備える、
請求項1の電子デバイス。
【請求項14】
比較器と、履歴バッファと、一致検出器と、コマンド生成器と、を含む圧縮サブシステムを備える電子デバイスにおいて、オリジナルデータから圧縮データを生成する方法であって、
前記方法は、
前記圧縮サブシステムが、クロックの各サイクルで開始して、検索文字列を処理して前記圧縮データ用のコマンドを生成することであって、前記検索文字列は、前記オリジナルデータからのバイト数を含む、ことを含み、
前記検索文字列を前記処理することは、
前記比較器が、前記検索文字列からのN個の部分文字列の各々を前記履歴バッファからの格納データと比較して、前記部分文字列と前記格納データとの一致を見つけることであって、各部分文字列は、バイト単位で指定された長さであり、前記検索文字列からの異なる順序のバイトシーケンスを含む、ことと、
前記一致検出器が、前記部分文字列の各々の最長一致を判定することと、
前記コマンド生成器が、前記部分文字列の前記最長一致に基づいて、前記圧縮データ用のコマンドを選択的に出力することと、を含む、
方法。
【請求項15】
前記比較器は、比較要素を含み、
前記部分文字列の各々を前記履歴バッファからの前記格納データと比較して、前記一致を見つけることは、前記部分文字列の各々に対して、
前記格納データからの前記部分文字列及び比較文字列を、前記比較要素の対応する要素への入力として提供することであって、各比較文字列は、バイト単位で指定された長さであり、前記格納データからの異なる順序のバイトシーケンスを含む、ことと、
前記対応する要素の出力として、一致毎に前記一致の長さを示す識別子を受信することと、を含む、
請求項14の方法。
【請求項16】
前記識別子は、前記部分文字列のバイト毎に個別のビットを含むビットシーケンスを含み、
前記対応する要素は、前記部分文字列の各々のバイトと前記比較文字列とが一致する場合に各ビットに対して第1の値を出力し、前記部分文字列の各々のバイトと前記比較文字列とが一致しない場合に各ビットに対して第2の値を出力する、
請求項15の方法。
【請求項17】
前記一致検出器は、N個の一致パイプラインを含み、各一致パイプラインは、順番に配置されたK個の最長一致セレクタのステージを含み、
前記部分文字列の各々の前記最長一致を判定することは、
前記一致パイプラインのうち対応する一致パイプラインにおいて、前記比較器から前記部分文字列の一致を受信することと、
前記一致パイプラインのうち前記対応する一致パイプラインの各ステージにおいて、個別の一致のグループの中からローカルな最長一致を選択し、前記ローカルな最長一致を、前記一致パイプラインの次のステージの一致として提供することであって、前記各ステージのうち最終ステージは、最終的な最小の個別の一致のグループの中から前記最長一致を選択する、ことと、を含む、
請求項14の方法。
【請求項18】
前記部分文字列の前記最長一致に基づいて、前記圧縮データ用の前記コマンドを選択的に出力することは、前記クロックのサイクルにおいて、
第1の一致パイプラインから開始して、ラウンドロビンの順序で、以前の最長一致により前記クロックの前記サイクルで処理されない一致パイプラインをスキップすることと、
全ての前記一致パイプラインがスキップされた場合に、コマンドを出力せずに、前記クロックの前記サイクルでの一致パイプラインの処理を終了することと、
1つ以上の一致パイプラインがスキップされずに処理される場合に、指定された順序で次の一致パイプラインに対して、前記次の一致パイプラインの前記最長一致の長さに基づくコマンドを出力することと、
前記次の一致パイプラインの前記最長一致の長さに基づいて、前記クロックの前記サイクルで残りの一致パイプラインを処理し又はスキップすることと、を含む、
請求項17の方法。
【請求項19】
前記コマンドを出力することは、
一致が見つけられなかったか、又は、前記最長一致が閾値の長さよりも短い場合に、リテラル書き込みコマンドを出力することと、
前記最長一致が前記閾値の長さよりも長い場合に、文字列コピーコマンドを出力することと、を含む、
請求項18の方法。
【請求項20】
前記部分文字列の前記最長一致に基づいて、前記圧縮データ用の前記コマンドを選択的に出力することは、前記クロックのサイクルにおいて、
前記クロックの以前のサイクルから、カウント値がある場合にそれを取得し、又は、前記カウント値をゼロに設定することと、
前記カウント値がゼロに等しくなるまで、又は、スキップされる一致パイプラインが残らなくなるまで、第1の一致パイプラインから開始して、ラウンドロビンの順序で次の各パイプラインをスキップし、前記カウント値をデクリメントすることと、
スキップされる一致パイプラインが残っていない場合に、前記クロックの前記サイクルに対するコマンドの出力を終了し、前記クロックの後続サイクルの前記カウント値の現在の値を保持することと、
前記カウント値がゼロであり、1つ以上の一致パイプラインがスキップされていない場合に、
指定された順序での前記次の一致パイプラインの最長一致の長さが閾値よりも短い、又は、一致が見つけられなかった場合に、前記次の一致パイプラインに対するリテラル書き込みコマンドを出力し、前記カウント値をゼロに設定することと、
前記指定された順序での前記次の一致パイプラインの前記最長一致の長さが前記閾値よりも長い場合に、前記最長一致に関連する文字列コピーコマンドを出力し、前記カウント値を、前記最長一致のバイト単位の長さから1を引いたものに設定することと、
前記スキップ操作に戻ることと、を含む、
請求項17の方法。
【請求項21】
前記検索文字列は、前記部分文字列のバイト単位の前記指定された長さよりもN-1バイト長いバイト数を含み、
前記部分文字列は、前記検索文字列からの異なる連続した各部分文字列を含み、前記部分文字列の第1の部分文字列は、前記検索文字列の第1のバイトから始まり、前記部分文字列の次の各部分文字列は、前記第1のバイトからのバイト単位でインクリメンタルに大きくなるオフセットから始まる、
請求項14の方法。
【請求項22】
前記圧縮サブシステムは、
文字列ハンドラをさらに含み、
前記文字列ハンドラは、前記クロックの各サイクルにおいて、
前記オリジナルデータから前記検索文字列を取得することと、
前記検索文字列を前記比較器に提供することと、を行う、
請求項14の方法。
【請求項23】
前記文字列ハンドラは、前記クロックの各サイクルにおいて前記比較器に前記検索文字列を提供した後に、
前記オリジナルデータからNバイトのデータをシフトさせることと、
前記Nバイトの前記データを、前記履歴バッファ内の前記格納データに追加することと、を行う、
請求項22の方法。
【請求項24】
前記検索文字列は、前記オリジナルデータの開始バイトから始まる前記オリジナルデータからのバイト数を含み、
前記文字列ハンドラは、前記クロックの各サイクルにおいて前記比較器に前記検索文字列を提供した後に、
前記開始バイトをNバイトだけインクリメントし、それによって、前記圧縮サブシステムを、前記クロックの次のサイクルにおいて次の検索文字列を処理するように構成することを行う、
請求項22の方法。
【発明の詳細な説明】
【背景技術】
【0001】
(従来の技術)
一部の電子デバイスは、ユーザファイル又はシステムファイル、データフロー又はデータ列等のデータを圧縮するための操作を行う。この電子デバイスは、データを圧縮してデータのサイズを縮小し、それによってメモリへのデータの格納、ネットワークを介した電子デバイス間のデータの伝送等をより効率的に行えるようにする。例えば、電子デバイスは、Lempel Ziv-77(LZ77)、LZ78、又は、Lempel-Ziv-Welch(LZW)等の辞書式符号化規格を用いて、オリジナルデータ(すなわち、非圧縮データ)から圧縮データを生成することができる。
【0002】
データを圧縮することで、データの格納及び処理の効率を高めることができるが、多くのデバイスは、ソフトウェア(すなわち、ソフトウェアルーチン、アプリケーションプログラム等)を用いてデータを圧縮する。データを圧縮するためのソフトウェアを用いるには、通常、中央処理装置(CPU)等の汎用プロセッサが多数の圧縮関連操作及び付随するメモリアクセスを行うことが必要である。圧縮関連操作の数及びメモリアクセスの数が多いため、データ圧縮にソフトウェアを使用するのは非効率的である。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、圧縮データを示すブロック図である。
【
図2】いくつかの実施形態による、リテラル書き込みコマンドを示すブロック図である。
【
図3】いくつかの実施形態による、文字列コピーコマンドを示すブロック図である。
【
図4】いくつかの実施形態による、オリジナルデータ、検索文字列、及び、いくつかの部分文字列を示すブロック図である。
【
図5】いくつかの実施形態による、電子デバイスを示すブロック図である。
【
図6】いくつかの実施形態による、圧縮サブシステムを示すブロック図である。
【
図7A】いくつかの実施形態による、圧縮データのコマンドを選択的に出力することを示すブロック図である。
【
図7B】いくつかの実施形態による、圧縮データのコマンドを選択的に出力することを示すブロック図である。
【
図8】いくつかの実施形態による、クロックのサイクル中に圧縮サブシステムによって実行される操作のタイムライン図である。
【
図9】いくつかの実施形態による、圧縮データ用のコマンドを生成するためにオリジナルデータを圧縮するためのプロセスを示すフローチャートである。
【
図10】いくつかの実施形態による、コマンド生成器からコマンドを選択的に出力するためのプロセスを示すブロック図である。
【発明を実施するための形態】
【0004】
図面及び説明を通して、同様の符号は同一の図面要素を指す。
【0005】
以下の説明は、当業者が、説明する実施形態を作成及び使用することを可能にするために提示されており、特定の用途及びその要件に関連して提供される。記載された実施形態に対する様々な変更は、当業者には直ちに明らかであり、本明細書で明確化される一般的原理は、他の実施形態及び用途に適用されてもよい。したがって、記載された実施形態は、示された実施形態に限定されず、本明細書で開示される原理及び特徴と一致する最も広い範囲が与えられるべきである。
【0006】
(用語)
以下の説明では、実施形態を説明するために様々な用語が使用される。以下では、これらの用語の1つについて簡略化した概要の説明である。この用語は、明確且つ簡潔にするために本明細書に列挙されていない重要な追加の態様を有する場合があり、したがって、説明は、この用語を限定することを意図していないことに留意されたい。
【0007】
機能ブロック:機能ブロックは、集積回路要素、ディスクリート回路要素等の1つ以上の相互に関連する回路要素のグループ、集合、及び/又は、セットのことを指す。回路要素は、回路要素が少なくとも1つの属性を共有するという点で「相互に関連」している。例えば、相互に関連する回路要素は、特定の集積回路チップ又はその一部に対し、その中に含まれ、その上に組み立てられ、又は、他の方法で結合されてもよく、所定の機能(計算又は処理機能、メモリ機能等)の実施に関与してもよく、共通の制御要素及び/又は共通クロック等によって制御されてもよい。機能ブロックは、単一の回路要素(例えば、単一の集積回路論理ゲート)から数百万又は数十億の回路要素(例えば、集積回路メモリ)までの任意の数の回路要素を含むことができる。
【0008】
(圧縮データ)
記載された実施形態では、オリジナルデータから圧縮データを生成するための操作が行われる。一般に、圧縮データは、オリジナルデータに対する1つ以上の圧縮操作及び/又は他の操作の出力であって、結果としてオリジナルデータの少なくとも一部が、オリジナルデータを再現するために使用することができるコマンド及び/又は他の値に置き換えられる操作の出力である。記載された実施形態では、ユーザファイル又はシステムファイル(例えば、オーディオファイル及び/又はビデオファイル、ドキュメントファイル、実行可能ファイル、オペレーティングシステムファイル等)、データフロー又はデータシーケンス(例えば、オーディオデータフロー及び/又はビデオデータフロー、ネットワークインタフェースを介して受信されたデータシーケンス等)、センサ(カメラ及び/又はマイクロフォン、サーモメータ、振動センサ等)からキャプチャされたデータ等を含む様々なタイプのデータが圧縮されてもよい。記載された実施形態では、Lempel Ziv-77(LZ77)、LZ78、Lempel-Ziv-Welch(LZW)等の辞書式符号化規格を含む多数の圧縮規格、アルゴリズム若しくはフォーマット、又は、それらの組み合わせを、データを圧縮するために使用することができる。
【0009】
本明細書で使用する「圧縮データ」及び「圧縮」という用語は、オリジナルデータの少なくとも一部が、オリジナルデータを再現するために使用することができるコマンド及び/又は他の値に置き換えられることを結果としてもたらす、オリジナルデータに対する操作に広く適用される。上記のように、これらの操作には、様々な符号化規格、アルゴリズム若しくはフォーマット、又は、それらの組み合わせが含まれる。したがって、これらの用語は、辞書式符号化圧縮等の操作、及び/又は、場合によっては「圧縮」操作とみなされ得る他の操作のみに限定されると解釈されるべきではない。
【0010】
図1は、いくつかの実施形態による、圧縮データを示すブロック図である。
図1に示すように、圧縮データ100は、ファイル、データフロー若しくはデータシーケンス等であってもよいし、又は、ファイル、データフロー若しくはデータシーケンス等に含まれてもよく、コマンド102のセット(すなわち、シリーズ、シーケンス等)を含む。一般に、コマンド102の各コマンドは、復元(decompression)操作中に、再現されるオリジナルデータに付加される「シンボル」とも呼ばれる文字列(すなわち、ビット、文字、数字の列等)を取得し及び/又は生成するのに使用可能な情報を含み、識別し、及び/又は、参照する。いくつかの実施形態では、各コマンドは、そのコマンドの文字列を取得し及び/又は生成するのに使用可能な情報を表し及び/又は識別するように編成されたビットのセットを含む。いくつかの実施形態では、コマンド内の情報は、コマンド外の情報(例えば、コマンド値が取得される個別のソースに関する情報、コマンドに関連する計算のために使用する情報、テーブル、レコード又は他のデータ構造への参照等)を指す。
【0011】
いくつかの実施形態では、圧縮データ内のコマンドは、リテラル書き込みコマンド及び文字列コピーコマンドを含む。
図2は、いくつかの実施形態による、リテラル書き込みコマンド200を示すブロック図である。リテラル書き込みコマンド200は、コマンド識別子(CMD)を含み、復元サブシステムで処理される場合に、このCMDによって、復元サブシステムは、(例えば、ビット、バイト等で表した)指定された長さ(LENGTH)のリテラル(LITERAL)を取得し、そのリテラルを、再現されたオリジナルデータに付加する。(
図2では、リテラルは、リテラル書き込みコマンド200の一部として示されているが、いくつかの実施形態では、リテラルは、圧縮データ100の別の部分又はブロック等に分かれて格納されてもよい。)
図1の例では、L1リテラル書き込みコマンドによって、復元サブシステムは、第1の1バイト文字列(例えば、文字A)を取得し、この第1の1バイト文字列を、再現される出力データに付加する。本明細書で使用する「付加する」とは、所定の文字列が、(
図1に示されていないコマンドを使用して再現された)以前に再現されたオリジナルデータシーケンスの最後に加えられること、又は、(コマンドが圧縮データの最初のコマンドである場合)新たな再現データの初期文字列として使用されることを意味する。
図1の例を続けると、L2~L5リテラル書き込みコマンドにより、第2の1バイト文字列~第5の1バイト文字列(例えば、文字B、C、D、E)が取得され、再現されたオリジナルデータに対応する位置で付加される。
【0012】
図3は、いくつかの実施形態による、文字列コピーコマンド300を示すブロック図である。文字列コピーコマンド300はコマンド識別子(CMD)を含み、復元サブシステムで処理される場合に、このCMDによって、復元サブシステムは、以前に再現されたオリジナルデータを(例えば、ビット、バイト等で表した)ある距離(DISTANCE)遡ったところから(例えば、ビット、バイト等で表した)指定された長さ(LENGTH)の文字列を取得し、そのデータを、再現されたオリジナルデータに付加する。一般に、文字列コピーコマンドは、復元サブシステムが、以前に再現されたオリジナルデータの前の部分から様々な長さ(又は、最小文字列長から最大文字列長までの長さ)の文字列をコピーし、その文字列のコピーを、再現されたオリジナルデータの末尾に追加することを可能にする。
図1の例では、S1文字列コピーコマンドによって、復元サブシステムは、以前に再現されたオリジナルデータの3バイト遡った位置から始まるリテラル書き込みコマンドL2及びL3によって再現オリジナルデータに付加されたリテラルの組み合わせ、すなわちB及びCを含む文字列をコピーし、そのコピーした文字列を、(再現されたデータにリテラル書き込みコマンドL4によって付加されたリテラルに続く位置で)再現されたオリジナルデータに付加する。S1文字列コピーコマンドの処理を受けて、再現されるオリジナルデータは、ABCDBCである。S2文字列コピーコマンドによって、復元サブシステムは、L4リテラルとS1文字列とを含む文字列のコピー(すなわち、DBC)を取得し、その文字列のコピーを、再現されたオリジナルデータに付加する。S2文字列コピーコマンドの処理を受けて、再現されたオリジナルデータは、ABCDBCEDBCである。S3文字列コピーコマンドによって、復元サブシステムは、L5リテラルとS2文字列とを含む文字列のコピー(すなわち、EDBC)を取得し、その文字列のコピーを、再現されたオリジナルデータに付加する。S3文字列コピーコマンドの処理を受けて、再現されたオリジナルデータは、ABCDBCEDBCEDBCである。
図1の例から分かるように、文字列コピーコマンドを使用して、リテラル及び以前の文字列の両方を単独で又は組み合わせてコピーし、再現されたオリジナルデータに付加することができる。
【0013】
特定のコマンドシーケンスが圧縮データ100に示されているが、いくつかの実施形態では、異なるコマンドのシーケンス及び/又はタイプが圧縮データに含まれ得る。一般に、圧縮データ100は、本明細書で説明する操作を可能にするために十分なコマンドを含む。さらに、様々なフィールド及び情報が、リテラル書き込みコマンド200及び文字列コピーコマンド300に含まれるように示されているが、いくつかの実施形態では、リテラル書き込みコマンド200及び文字列コピーコマンド300は、異なる情報及び/又は異なる構成の情報を含む。一般に、リテラル書き込みコマンド200及び文字列コピーコマンド300は、本明細書で説明する操作を可能にするために十分な情報を含む。また、
図1を説明する際の例として1バイトのリテラルが使われているが、いくつかの実施形態では、他の長さのリテラルを使用することもできる。例えば、いくつかの実施形態では、リテラルは、最大で2バイトまで許容される。さらに、いくつかの実施形態では、圧縮規格、アルゴリズム、フォーマット若しくはそれらの組み合わせに従って、及び/又は、他の理由で、最小の文字列長が文字列コピーコマンドに使用される。例えば、いくつかの実施形態では、最小の文字列長は3バイトである(したがって、許容される最短の文字列は3バイトである)。
【0014】
いくつかの実施形態では、文字列コピーコマンドは、限られた量の再現されたオリジナルデータによって定義され、したがってそのオリジナルデータを含む「辞書」から文字列をコピーすることが許容される。これらの実施形態では、文字列が文字列コピーコマンドのための辞書の一部でなくなる前に、再現されたオリジナルデータで文字列をどれだけ遡ることができるかに関しての制限がある。例えば、いくつかの実施形態では、辞書は、以前に再現されたオリジナルデータの32kB、1kB又は別の量のスライディングウィンドウを含む。言い換えれば、64kBの辞書を想定すると、以前に再現されたオリジナルデータが64kBを超えて存在する場合でも、文字列コピーコマンドを処理するために取得できるのは、再現されたオリジナルデータ内の最後に生成された64kBの文字列のみである。
【0015】
いくつかの実施形態では、圧縮操作中に、電子デバイスが、スライディングウィンドウ(例えば、32kBのスライディングウィンドウ)を使用してセクション単位でオリジナルデータを通過させ、そのセクション内のデータを含む辞書をセクション毎に判定することによって、オリジナルデータから圧縮データ(例えば、圧縮データ100)を生成する。その結果、電子デバイスは、各セクションの圧縮データとして、再現されるオリジナルデータに一意の文字列のリテラル値を付加するリテラル書き込みコマンドシーケンス、及び/又は、辞書内の(すなわち、以前に再現されたオリジナルデータ内の)文字列のコピーを取得し、その文字列のコピーを再現されたオリジナルデータに付加する文字列コピーコマンドシーケンスを生成する。いくつかの実施形態では、上記のように、復元操作中に、コマンドは、圧縮データから取り出され、同じ辞書/スライディングウィンドウ/セクションを使用してオリジナルデータを再現するのに使用される。
【0016】
(概要)
説明する実施形態では、オリジナルデータから圧縮データを生成するための操作を電子デバイスが実行する。この電子デバイスは、圧縮データのコマンドを生成するために、オリジナルデータから検索文字列を取得して処理する圧縮サブシステム機能ブロックを含む。操作中に、圧縮サブシステムは、各クロックサイクルにおいて、オリジナルデータから新しい検索文字列をコピーする。圧縮サブシステムは、各検索文字列から、いくつかの部分文字列を抽出する。例えば、いくつかの実施形態では、圧縮サブシステムは、11バイトの部分文字列から8バイトの4つの部分文字列を抽出し、各部分文字列は、オリジナルデータからの異なる8つの連続したバイトを含む。そして圧縮システムは、その後のクロックサイクルにおいて、部分文字列の各々を処理して、履歴バッファ内の格納データの中から部分文字列の最長一致を判定し、その部分文字列の最長一致に基づいて、圧縮データに対するコマンドを選択的に出力する。
【0017】
圧縮サブシステムは、比較器と、履歴バッファと、一致検出器と、コマンド生成器と、を含み、これらの各々が、部分文字列を処理するための操作の一部を実行する機能ブロックである。比較器は、検索文字列から(例えば、圧縮サブシステム内の文字列ハンドラによって)抽出された個別の部分文字列を入力として受け取る。次に、比較器は、比較器内の比較要素(例えば、組み合わせ論理等)のセットを使用して、検索文字列から抽出された部分文字列の各々を、履歴バッファ内の格納データのうち一致する可能性のある各データと比較する。例えば、10バイトの部分文字列を想定すると、履歴バッファが13バイト(すなわち、バイト0~12)の格納データを含む場合、比較器は、各部分文字列を、格納データの4つの可能な10バイトの連続した組み合わせ、すなわち、格納データのバイト0~9、1~10、2~11及び3~12の各々と比較する。比較器の比較要素は、比較する毎に、一致が見つかると一致の長さを示す結果を返し、又は、一致が見つからなかったという結果を返す。例えば、いくつかの実施形態では、比較要素は、比較する毎に、各バイトに一致が見つかったかどうか(又は、見つからなかったかどうか)を示すビットシーケンス(例えば、ビットベクトル)を返す。部分文字列の比較されたバイトの各ビットが同じ値を有する場合に、格納データのバイトに「一致」が見つかることに留意されたい。
【0018】
比較器は、比較の結果、すなわち、一致の指標を一致検出器に転送する。一致検出器は、各部分文字列についての一致の指標を、各々の一致パイプライン内において別々に且つ実質的に並行して(すなわち、同時に、又は、ほぼ同時に)処理して、部分文字列についての最長一致を判定する。各一致パイプライン内には、最長一致セレクタ機能ブロックの1つ以上のステージが順番にあり、各最長一致セレクタステージは、比較のために次のステージに転送される最長一致の数を減らし、最後の最長一致セレクタステージは、部分文字列についての単一の最長一致の識別を返す。例えば、一致パイプラインに3つの最長一致セレクタステージがあると想定すると、第1のステージの最長一致セレクタが、K個の一致(例えば、512、1000等)を処理し、K/X個のローカルな一致(例えば、128、200等)を返し得る。例えば、第1のステージの最長一致セレクタは、受け取った一致の中の4つの一致の個別のグループ毎に、2つの一致のペアを別々に比較して、次のペア比較に進む最長一致のペアを判定しすることができ(そして、さらに比較することで2つのより短い一致を排除することができ)、次のペア比較が4つの一致のグループに対しての単一の最長一致を返す。例を続けると、第2の一致ステージは、第1のステージからのK/X個のローカルな一致を処理することができ、(K/X)/Y個のローカルな一致(例えば、32、20等)を返すことができ、第3のステージの最長一致ステージは、第2のステージからの(K/X)/Y個のローカルな一致を処理することができ、単一の最長一致を返すことができる。第3の最終ステージから返される最長一致は、各々の部分文字列について比較器から受け取った全ての一致の中の最長一致である。次いで、一致検出器は、各一致パイプラインからの最長一致に関する情報をコマンド生成器に転送し、その情報は、一致の長さの指標(例えば、一致を表すビットシーケンス)と、最長一致に関連する格納データが存在する履歴バッファ内の場所又はアドレスと、を含む。
【0019】
コマンド生成器は、一致検出器から最長一致を受け取り、その最長一致に基づいて圧縮データのための1つ以上のコマンドを選択的に出力する。この操作では、コマンド生成器は、最長一致に従って、使用されるリテラル書き込みコマンド及び/又は文字列コピーコマンドを判定する。その後、コマンド生成器は、リテラル書き込みコマンド及び/又は文字列コピーコマンドを出力するか、又は、別の形でリテラル書き込みコマンド及び/又は文字列コピーコマンドを外部エンティティ(例えば、メモリ、プロセッサ、ネットワークインタフェース等)が利用できるようにする。コマンド生成器は、所定の最長一致に対してコマンドを出力するかどうかが、前の部分文字列について検出された最長一致の長さによって決まり、全ての最長一致/部分文字列に対してコマンドが出力されるとは限らないという点において、「選択的に」コマンドを出力する。コマンドを選択的に出力するためにコマンド生成器によって実行される操作については、以下に詳しく説明する。
【0020】
説明する実施形態は、部分文字列を格納データと比較し、その比較に基づいてコマンドを生成するためにハードウェア圧縮サブシステムを使用することによって、既存のデバイスがソフトウェアを使用して行う圧縮操作を、ハードウェアを使用して効率的且つ迅速に行う。この圧縮サブシステムは、同じ操作を行うためにソフトウェアエンティティを使用するよりも高速且つ効率的(例えば、メモリアクセスが少なくて済み、より少ない電力を使用する等)である。さらに、この圧縮サブシステムを使用することで、電子デバイス内の他の機能ブロック(例えば、プロセッサ、メモリ等)を空けて、他の操作を実行する。そのため、この圧縮サブシステムは、電子デバイス全体の性能を向上させ、結果としてユーザの満足度を向上させる。
【0021】
(検索文字列及び部分文字列)
説明する実施形態では、圧縮サブシステムが、オリジナルデータからコピーされる検索文字列及び部分文字列を用いて圧縮データを生成する操作を行う。
図4は、いくつかの実施形態による、オリジナルデータ400、検索文字列402及び部分文字列404~410を示すブロック図である。オリジナルデータ400は、圧縮データを生成するために使用されるデータであるか、又は、そのデータを含み、本明細書で説明する操作を、それに対して実行できるか、又は、そのために実行できる、任意のタイプのデータであってもよい。例えば、オリジナルデータ400は、ファイル、ネットワークインタフェースを介して受信されたデータのストリーム、センサ又は他のデータソースから取得されたデータ、電子デバイス内の機能ブロックによって出力されたデータ等のうち1つ以上であってもよいし、これらのうち1つ以上を含んでもよい。オリジナルデータ400は、バイトシーケンスを含み、そのうち左端のみがバイト412としてラベル付けされている。
【0022】
検索文字列402は、オリジナルデータ400の一部のコピーである。クロックの各サイクルにおいて、圧縮サブシステムは、オリジナルデータ400のある数のバイトをコピーして検索文字列402を生成する。
図4に示すように、検索文字列402は、開始バイト(SB)414から始まり、終了バイト(EB)416までの連続したバイト(すなわち、順番に全てのバイト)を含む、オリジナルデータ400からのバイトのコピーである。あるクロックのサイクルでオリジナルデータ400からバイトをコピーした後に、圧縮サブシステムは、開始バイト414を、次の開始バイト(NSB)418として
図4に示す新しい位置までインクリメントして、クロックの次のサイクルでオリジナルデータ400からバイト(すなわち、次の開始バイト418から次の終了バイト(NEB)420まで)を次の検索文字列にコピーするための準備をする。このようにして、圧縮サブシステムは、クロックのサイクル毎にオリジナルデータ400を進め、対応する検索文字列をコピーする。
【0023】
部分文字列404~410は、検索文字列402からコピーされた後に、圧縮データ用のコマンドを生成するために圧縮サブシステムで処理される、検索文字列402の様々な部分のコピーである。クロックの各サイクルにおいて、オリジナルデータ400から検索文字列402をコピーする場合、圧縮サブシステムは、検索文字列402の対応するバイトをコピーすることによって部分文字列404~410を生成する。次に、圧縮サブシステムは、部分文字列404~410を処理して、部分文字列404~410の最長一致を見つけ、そのような一致が存在する場合、部分文字列404~410について見つけられた一致に基づいて、圧縮データのコマンド(例えば、リテラル書き込みコマンド及び文字列コピーコマンド)を選択的に生成する。
【0024】
説明する実施形態では、部分文字列404~410は、バイト単位で指定された長さであり、
図4では8バイトで示されている。いくつかの実施形態では、指定された長さの部分文字列404~410は、システム設計者又は別のエンティティによって選択され設定される。例えば、部分文字列404~410のバイト単位の長さは、データを圧縮する速度及び効率と、圧縮サブシステム内の処理回路のサイズ、複雑さ、及び/又は、電力消費と、の間のトレードオフに基づいて設定することができる。さらに、圧縮サブシステムは、コマンドを生成するために、指定された数の部分文字列を実質的に並行して(すなわち、全体的又は部分的に同時に)処理する。
図4の例では、並行して処理される部分文字列の数が4つであると仮定されており、したがって、検索文字列402から4つの部分文字列404~410が生成される。いくつかの実施形態では、指定された数の部分文字列は、圧縮システム内の処理回路の数及び/又は構成に基づいて選択され設定される。いくつかの実施形態では、圧縮システム内の処理回路の数及び/又は構成は、実質的に並行して処理される所望の数の部分文字列に少なくとも部分的に基づいて選択される。
【0025】
部分文字列404~410が8バイトの長さであり、4つの部分文字列があることを考えると、検索文字列402は、そこから4つの異なる連続した部分文字列を抽出できるようにするのに十分な長さであり、したがって11バイトである。11バイトの検索文字列402からの部分文字列404は、最初の連続した部分文字列であり(すなわち、部分文字列406~410の他のバイト列と完全に同じではないバイトシーケンスを含む)、検索文字列402からの開始バイト414から始まる最初の8バイトのコピーを含む。部分文字列406~410は、第2の連続した部分文字列から第4の連続した部分文字列であり、検索文字列402からコピーされた、開始バイト414からのインクリメンタルに大きくなっていくオフセットから始まる8バイトを含む。インクリメンタルに大きくなっていくオフセットは、部分文字列406に対して1バイト、部分文字列408に対して2バイト、部分文字列410に対して3バイトである。
【0026】
上記のように、オリジナルデータ400から検索文字列402をコピーした後、圧縮サブシステムは、次の検索文字列の取得に備えて開始バイト414をインクリメントする。いくつかの実施形態では、開始バイト414がインクリメントされるバイト数は、圧縮サブシステムにおいて実質的に並行して処理しようとしている部分文字列の数に基づいて設定される。
図4の例では、部分文字列の数、すなわち、クロックの各サイクルで開始バイト414が進められるバイト数は4である。したがって、次の開始バイトである次の開始バイト418は、開始バイト414から4バイトのところにある。このように開始バイト414を進めることにより、圧縮サブシステムは、最終的にオリジナルデータ400の各バイトから始まる部分文字列を処理する。
【0027】
説明する実施形態では、クロックの各サイクルにおいて、圧縮サブシステムは、処理されたバイトをオリジナルデータ400からシフトさせ、この処理されたバイトを履歴バッファに追加する。概して、履歴バッファは、圧縮サブシステムの辞書として機能する、既に処理されたオリジナルデータ/以前のオリジナルデータを、指定された量(例えば、1kB、32kB等)だけ格納する。言い換えれば、履歴バッファは、文字列コピーコマンドが文字列をコピーするために遡ることを可能にする、既に処理された以前のオリジナルデータを、指定された量だけ格納する。いくつかの実施形態では、オリジナルデータ400からシフトされ、履歴バッファに追加される処理されたバイトの数は、部分文字列の数と、開始バイト414がインクリメントされるバイトの数と、に等しい。
図4の例では、このバイト数は4であり、したがって、クロックの各サイクルにおいて、4バイトのデータがオリジナルデータ400からシフトされ、履歴バッファに追加される。
【0028】
図4に関して、部分文字列404~410及び検索文字列402におけるバイト数、並びに、実質的に並行して処理された部分文字列の数と、それに依存する他の値との例を説明したが、いくつかの実施形態では、異なるバイト数が部分文字列404~410及び検索文字列402に存在し、及び/又は、異なる数の部分文字列が実質的に並行して処理される。概して、記載された実施形態は、任意の長さの検索文字列及び部分文字列、及び/又は、実質的に並行して処理される任意の数の部分文字列に対して操作可能である。さらに、
図4及び本明細書の他の箇所においては、様々な操作(例えば、部分文字列404~410の生成)を説明するために、個別の検索文字列402が使用されているが、いくつかの実施形態では、個別の検索文字列はコピーされず、存在しない場合及び/又は使用されない場合がある。これらの実施形態では、例えば、部分文字列404~410がオリジナルデータ400から直接コピーされる等のように、様々な操作を、オリジナルデータ400を直接使用して実行することができる。
【0029】
(電子デバイス)
図5は、いくつかの実施形態による、電子デバイス500を示すブロック図である。
図5に示すように、電子デバイス500は、プロセッサ502とメモリ504とを含む。プロセッサ502は、電子デバイス500において、計算、圧縮等の操作を行う機能ブロックである。プロセッサ502は、処理サブシステム506と圧縮サブシステム508とを含む。処理サブシステム506は、中央処理装置(CPU)コア、グラフィック処理装置(GPU)コア、組み込みプロセッサ、及び/又は、特定用途向け集積回路(ASIC)等のように、汎用計算、圧縮等の操作を行う1つ以上の機能ブロックを含む。
【0030】
圧縮サブシステム508は、オリジナルデータから圧縮データを生成するための操作を行う機能ブロックである。概して、圧縮サブシステム508は、入力として、オリジナルデータ(例えば、ファイル、データのストリーム等)を取り込み、出力として、圧縮データに含まれるコマンド(すなわち、オリジナルデータを圧縮するために使用されている辞書式符号化規格からのコマンド)を返す。上記のように、圧縮データ内のコマンドは、その後、オリジナルデータを再現するために、電子デバイス500又は別の電子デバイス内の復元サブシステム(図示省略)及び/又はソフトウェアアプリケーションで処理され得る。圧縮サブシステム508内の機能ブロックの構成(例えば、いくつかの個別の比較器、一致パイプライン等)に基づいて、圧縮サブシステム508は、時間周期当たり指定された数までのコマンド(例えば、クロックのサイクル毎に1~4コマンド、333ps毎に1~5コマンド等)を生成し、出力する。圧縮サブシステム508を、以下により詳細に説明する。
【0031】
メモリ504は、電子デバイス500内のメモリ(例えば、メインメモリ)の操作を行う機能ブロックである。メモリ504は、電子デバイス500内の機能ブロックによる使用のためにデータ及び命令を格納するためのメモリ回路(すなわち、記憶要素、アクセス要素等)、並びに、メモリ回路内のデータ及び命令のアクセス(例えば、読み出し、書き込み、チェック、削除、無効化等)を処理するための制御回路を含む。メモリ504内のメモリ回路は、第4世代のダブルデータレートシンクロナスダイナミックランダムアクセスメモリ(DDR4 SDRAM)、スタティックランダムアクセスメモリ(SRAM)、又は、それらの組み合わせ等のコンピュータ可読メモリ回路を含む。
【0032】
電子デバイス500は、要素(例えば、プロセッサ502、メモリ504等の機能ブロック及びデバイス)の特定の数及び構成を使用して示されている。ただし、電子デバイス500は、説明のために簡略化されている。いくつかの実施形態では、電子デバイス500には、異なる数又は構成の要素が存在する。例えば、電子デバイス500は、電源サブシステム、ディスプレイ等を含む場合がある。概して、電子デバイス500は、本明細書で説明する操作を実行するのに十分な要素を含む。
【0033】
圧縮サブシステム508は、プロセッサ502に含まれているものとして
図5に示されているが、いくつかの実施形態では、圧縮サブシステム508は、個別の及び/又はスタンドアロンの機能ブロックである。例えば、圧縮サブシステム508は、スタンドアロン集積回路チップ等に(それ自体で、又は、サポートする回路要素及び機能ブロックと共に)実装されてもよい。概して、説明する実施形態では、圧縮サブシステム508は、本明細書で説明する操作を実行するために電子デバイス500内に適切に配置されている。
【0034】
電子デバイス500は、データ圧縮又は他の操作を行う任意の電子デバイスであってもよいし、その電子デバイスに含まれてもよい。例えば、電子デバイス500は、デスクトップコンピュータ、ラップトップコンピュータ、ウェアラブル電子デバイス、タブレットコンピュータ、スマートフォン、サーバ、人工知能装置、仮想現実機器若しくは拡張現実機器、ネットワークアプライアンス、玩具、オーディオビジュアル機器、家庭用電化製品、コントローラ、車両等、及び/又は、それらの組み合わせ等の電子デバイスであってもよいし、その電子デバイスに含まれてもよい。
圧縮サブシステム
【0035】
説明する実施形態では、圧縮サブシステムがオリジナルデータから圧縮データを生成するための操作を行う。言い換えれば、圧縮サブシステムは、辞書式符号化規格等の符号化規格に従って、圧縮データとして機能するコマンドシーケンスをオリジナルデータに基づいて生成する。
図6は、いくつかの実施形態による、圧縮サブシステム508を示すブロック図である。
図6に示すように、圧縮サブシステム508は、文字列ハンドラ600と、履歴バッファ602と、比較器(COMP)604と、一致検出器606と、コマンド生成器608と、を含む。
【0036】
文字列ハンドラ600は、圧縮サブシステム508向けのオリジナルデータ610を処理するための操作を実行する機能ブロックである。文字列ハンドラ600によって実行される操作の中には、検索文字列612を生成して比較器604に提供するものがある。上記のように、検索文字列612は、圧縮データ用のコマンド614を生成するために圧縮サブシステム508で処理されるオリジナルデータ610からのある数のバイトのコピーである。検索文字列612を生成するために、文字列ハンドラ600は、オリジナルデータ610における(例えば、開始バイト414と同様の)開始バイトの記録を保持する。クロック616の各サイクルにおいて、文字列ハンドラ600は、開始バイトの記録を用いて、検索文字列612を生成するためにオリジナルデータ610内の特定された位置からの上記の数のバイトをコピーする。次に、文字列ハンドラ600は、比較器604での処理のために検索文字列612を比較器604に提供する。上記のように、検索文字列612のバイト数は、圧縮サブシステム508で処理しようとしている部分文字列の数及び長さによって決まる。例えば、長さ16バイトの4つの部分文字列が圧縮サブシステム508で処理される場合、文字列ハンドラ600は、オリジナルデータ610から検索文字列612用に19バイトをコピーする。
【0037】
文字列ハンドラ600によって実行される別の操作は、オリジナルデータ610からデータをシフトさせてシフトデータ618を生成し、次いで、シフトデータ618を履歴バッファ602に追加することである。クロック616の各サイクルにおいて、検索文字列612を比較器604に提供した後、文字列ハンドラ600は、オリジナルデータ610からある数のバイトをシフトさせ、それによってシフトデータ618を生成する。次に、文字列ハンドラ600は、シフトデータ618を履歴バッファ602に追加し、そこでシフトデータ618は(以下により詳細に説明するように)圧縮データ用のコマンドを生成するための辞書の一部として機能する。この操作のために、文字列ハンドラ600(又は履歴バッファ602)は、シフトデータ618を履歴バッファ602の下位桁にシフトさせ、それによって既存のデータ(履歴バッファ602にある場合)が、履歴バッファ602の下位桁から上位桁にシフトされるようにする。本明細書で使用する場合、データのバイトを「シフトさせる」ことは、(オリジナルデータ610のバイトが圧縮サブシステム508によって順番に受け取られた場合に)オリジナルデータ610の列から先入れ先出しの順序でデータの上記数のバイトを除去し、残りのオリジナルデータ610をクロック616の後続サイクルにおける操作のために残すことを含む。本明細書では、検索文字列612からシフトされたバイトと、より一般的には履歴バッファ602に格納されたデータとは、シフトされたバイトが本明細書で説明するようにシフトされる前に検索文字列の一部として処理され始めているので、「以前に処理されたデータ」等と呼ぶことがある。上記のように、文字列ハンドラ600がオリジナルデータ610をシフトさせるバイト数は、圧縮サブシステム508で処理しようとしている部分文字列の数によって決まる。例えば、4つの部分文字列が圧縮サブシステム508で処理される場合、文字列ハンドラ600は、クロック616のサイクル毎に4バイトずつオリジナルデータ610をシフトさせる。
【0038】
文字列ハンドラ600によって実行される別の操作は、クロック616の各サイクルにおいて、検索文字列612を比較器604に提供し、オリジナルデータ610からデータをシフトさせた後に、開始バイトをインクリメントすることである。この操作のために、文字列ハンドラ600は、記録された開始バイトを指定されたバイト数だけインクリメントし、それによって開始バイトを更新/設定して、クロック616の後続のサイクルでオリジナルデータ610から検索文字列612にバイトをコピーすることに備える。開始バイトをインクリメントすることにより、文字列ハンドラ600は、圧縮サブシステム508が(クロックの数サイクルにわたって)オリジナルデータ610内を進捗して、圧縮データのコマンドを確実に生成するようにする。上記のように、文字列ハンドラ600が開始バイトをインクリメントするバイト数は、圧縮サブシステム508で処理しようとしている部分文字列の数によって決まる。例えば、4つの部分文字列が圧縮サブシステム508で処理される場合、文字列ハンドラ600は、クロック616のサイクル毎に4バイトずつ開始バイトをインクリメントする。
【0039】
履歴バッファ602は、比較器604及び場合によっては他のエンティティによる使用のために、以前に処理されたデータを格納するための操作を実行する機能ブロックである。履歴バッファ602は、履歴バッファ602内へのデータの格納及び履歴バッファ602内のデータへのアクセスに使用される、例えばフリップフロップ、ラッチ等の順次論理記憶要素である記憶要素620を含む。履歴バッファ602内の順次論理記憶要素は、比較器604に近接して配置され、比較的真っすぐな信号経路によって比較器604に結合される。例えば、いくつかの実施形態では、順次論理記憶要素620は、記憶要素620及び比較器604が製造される半導体レイアウトにおいて比較器604に近接又は隣接し、半導体レイアウトにおいて比較的真っすぐな通信経路を介して比較器604に結合される。この理由から、比較器604は、文字列比較又は他の操作を行うために、記憶要素620内の以前に処理されたデータに速く(例えば、クロック616の単一サイクル内で)アクセスすることができる。
【0040】
操作中、履歴バッファ602(及び、より具体的には記憶要素620)は、シフトチェーンとして機能し、履歴バッファ602は、文字列ハンドラ600からシフトデータ618を受け取り、シフトデータ618を先入れ先出しの順序で記憶要素620内の既存のデータ上にシフトさせるようにする。言い換えれば、履歴バッファ602は、既存のデータ(存在する場合)を下位桁の記憶要素から上位桁の記憶要素に順次シフトさせ、既存のデータをシフトさせることによって空けられた下位桁の記憶要素にシフトデータ618が格納される。このようにして、履歴バッファ602のデータは、履歴バッファ602内を所定の方向に「流れる」(すなわち、シフトされる)。この操作の結果として、最下位桁に位置する記憶要素620の所定のセット(例えば、最下位Nバイト)は、各クロックサイクル後に最新のシフトデータを保持するはずである。シフトデータ618が記憶要素620にシフトされると、そのデータは、比較器604及び場合によっては他のエンティティによって使用できるようになる。
【0041】
いくつかの実施形態では、履歴バッファ602は、圧縮サブシステム508で使われている符号化規格に従う辞書として機能し、したがって、以前に処理されたデータの限られた量(例えば、1kB、32kB等)のみを格納する。これらの実施形態では、記憶要素620は、以前に処理されたデータを格納するための限られた量の記憶容量を有する。記憶要素620が以前に処理されたデータで満杯になると、新たなシフトデータ618をシフトさせるための次のシフト操作により、履歴バッファ602内の既存のデータの一部が削除又は破棄される(すなわち、記憶要素620の最高位桁を超えてシフトされる)ことになる。このように、履歴バッファ602が満杯になると、入力されるシフトデータが、履歴バッファ602から既存のデータを「押し出す(pushes)」。
【0042】
比較器604は、検索文字列612からの部分文字列と、履歴バッファ602からの格納データ(すなわち、格納された以前に処理されたデータ)と、を比較する操作を行って、格納データと部分文字列との間に一致があればそれを見つける機能ブロックである。上記のように、各部分文字列は、検索文字列612の開始バイトからの各々のバイトオフセットから始まる、検索文字列612からの指定された数のバイトのコピーであることを想起されたい。操作中に、各部分文字列は、履歴バッファ602内の格納データの可能な各列と比較され、一致が存在するかどうかが判定され、存在する場合には、一致の長さ(すなわち、一致するバイトの数)が判定されることになる。このことは、格納データの最初のバイトから始めて、各部分文字列が、記憶要素620内の全てのバイトオフセットでデータの列(又は文字列)と比較されることを意味する。例えば、履歴バッファ602が1000バイトのデータを格納し、部分文字列の長さが16バイトであり、一致のための最小長が(符号化規格等に従って)3バイトである場合、997個の個別の比較が実行されることになる。言い換えれば、所定の16バイトの部分文字列が、格納データの第1のバイトから始まる16バイトの格納データと比較され、格納データの第2のバイトから始まる16バイトの格納データと比較され、格納データの第3のバイトから始まる16バイトの格納データと比較される等のように、格納データの第997のバイトまで比較される(残りのバイトは文字列長のため比較されない)。
【0043】
比較要素(CE)622は、部分文字列と格納データとの間の個々の、すなわちビット単位の比較を実行する組み合わせ論理(例えば、ANDゲート等)及び/又は他の要素(例えば、複合論理ゲート、ラッチ等)のアレイ、ツリー又は他の構成であるか、それを含む機能ブロックである。比較要素622は、比較する毎に、一致が見つかると一致の長さを示す結果を返し、又は、一致が見つからなかったという結果を返す。例えば、いくつかの実施形態では、比較要素622は、比較する毎に、各バイトに一致が見つかったかどうか(又は、見つからなかったかどうか)を示すビット列(例えば、ビットベクトル)を返す。例えば、いくつかの実施形態では、16バイトの部分文字列の例を続けると、所定の部分文字列に対する最初の8バイトと履歴バッファ602からの格納データとの間に一致が見つけられ、結果として8バイトの一致が見つけられた場合、比較要素622によって返されるビット列は、11111100000000になる。別の例として、いくつかの実施形態では、比較要素622は、一連の一致するバイトのカウントを返す。
【0044】
一致検出器606は、比較器604から受け取った一致の指標に基づいて、各部分文字列について見つけられた最長一致を判定するための操作、又は、部分文字列に一致が見つけられなかったことを判定するための操作を実行する機能ブロックである。一致検出器606は、いくつかの一致パイプライン624~630を含み、これらの各々は、最長一致選択(LM SEL)ステージ632~638,640~646,648~654,656~662を含む。各一致パイプラインは、対応する部分文字列について比較器604によって見出された最長一致を、その一致パイプラインの最終ステージ(例えば、一致パイプライン624の最長一致選択ステージ638)によって単一の最長一致が出力されるまで減らすために使用される。最終ステージによって出力される最長一致は、比較器604から受け取った一致のうち、各々の部分文字列と格納データとの間で一致するバイトに関して、最も長い一致である(又は、同じ長さの2つ以上の最長一致のうち選ばれた1つである)。いくつかの実施形態では、最長一致に加えて、各一致パイプラインは、最長一致の格納データが見つけられた記憶要素620内の場所(例えば、絶対アドレス若しくは相対アドレス、バイトオフセット等)及び/又は最長一致に関する他の情報を追跡し、出力する。これらの実施形態では、最長一致の格納データの場所は、一致と共に伝えられるタグ又は他の識別子を使用して保持することができ、一致のための比較器604内のソース(すなわち、特定の比較要素)に基づいて格納データの場所を判定すること等ができる。
【0045】
最長一致を求める際に一致を減らすために、一致パイプライン内の最長一致選択ステージは、指定された大きさの一致のグループを相互に比較し、その比較に基づいて最長一致を選択する。最終ステージ以外のステージでは、比較の結果、すなわち「ローカルな」最長一致が次のステージに提供され、そこで比較(及び削減)される。したがって、各ステージから提供される一致のグループは、そのステージが受け取った一致のグループよりも小さくなる。例えば、各一致パイプラインの各最長一致選択ステージ(例えば、最長一致選択ステージ632~638等)は、4:1、16:1、又は、他の大きさの一致削減を実行し得る。例えば、1024個の一致が比較器604から一致検出器606に各々の部分文字列について提供されると仮定すると、所定の一致パイプラインにおける第1の最長一致選択ステージは、受け取った1024個の一致を256個の一致に減らすことができ(すなわち、4:1の削減)、第2の最長一致選択ステージは、第1のステージからの256個の一致を64個の一致に減らすことができ、第3の最長一致選択ステージは、第2のステージからの64個を16個の一致に減らすことができ、最終一致ステージは、第3のステージからの16個の一致を単一の最長一致に減らすことができる(すなわち、16:1の削減)。各最長一致選択ステージは、1つ以上の内部最長一致セレクタ機能ブロック(及び、場合によっては複数の比較ステップ)を用いて一致グループを比較し、各一致グループの最長一致を見つける。例えば、4:1の削減では、内部最長一致セレクタ機能ブロックが、1つの4:1比較ステップと、並行して2つの2:1比較ステップと、その後に続く第3の2:1比較ステップ等と、を実行することを伴い得る。
【0046】
コマンド生成器608は、一致パイプラインから受け取った最長一致と関連情報とに基づいて、コマンドを出力するための操作を行う機能ブロックである。言い換えれば、コマンド生成器608は、最長一致を用いて圧縮データ用に出力されるコマンドを判定する。一般に、このコマンドは、辞書圧縮規格のリテラル書き込コマンド及び文字列コピーコマンド等のように、符号化規格に従った圧縮データのコマンドである。圧縮データからのコマンドは、後に復元システム、ソフトウェアアプリケーション等で個別に処理されて、オリジナルデータを再現することができる。
【0047】
コマンド生成器608は、部分文字列の最長一致に基づいて圧縮データのコマンドを「選択的に」出力する。最長一致に基づいて選択的にコマンドを出力することは、一致パイプラインから出力された最長一致を用いて圧縮データのコマンドを生成することができるが、コマンドを生成するために最長一致を用いる必要がないことを意味する。所定の最長一致がコマンドの生成に使用されるかどうかは、クロックの同じサイクル又はクロックの以前のサイクルでの以前の最長一致、したがってコマンドによって決まる。以下に詳述するように、ある一致パイプラインにおける十分に長い最長一致により、一致パイプラインの一部又は全部におけるその後の最長一致は、所定のクロックのサイクル及び場合によってはクロックの1つ以上のそれ以降のサイクルでコマンドを生成するために使用できないようにする。
【0048】
図7A~
図7Bは、いくつかの実施形態による、圧縮データのコマンドを選択的に出力することを示すブロック図である。
図7A~
図7Bの例では、各矩形は、クロックの最初のサイクル、すなわちクロックサイクル700から、クロックの最終サイクルまで(この最終サイクルを含む)、すなわちクロックサイクル702~712までの、クロック616の各サイクルにおける一致パイプライン624~630の1つからの最長一致出力を表す。言い換えれば、クロックサイクル700~712の各々において、一致パイプライン624~630の各々は、その一致パイプラインによって見出された最長一致の長さを表す最長一致出力を提供し、これらの一致は
図7A~
図7Bで矩形を用いて示される(最長一致の値は、明確にするために、一部の矩形には示されない)。また、
図7A~
図7Bでは、部分文字列が長さ16バイトであることを想定しているが、これは必須ではない。
【0049】
図7A~
図7Bの例では、
図4に示すように、各部分文字列の開始バイトは、次の部分文字列から1バイトだけオフセットされており、したがってクロックの所定のサイクル(例えば、クロックサイクル700等)において、一致パイプライン624で一致が処理された部分文字列は、一致パイプライン626で一致が処理された部分文字列の最後のバイトを除いた全てのバイトを含み、一致パイプライン626~630で一致が処理された部分文字列についても同様であることを想起されたい。
【0050】
コマンドの生成に用いられるという点では、クロックの各サイクルにおいて、一致パイプライン624~630から出力される最長一致は、コマンド生成器608によって一致パイプライン624から一致パイプライン630まで順に考慮されることになる。概して、一致パイプライン624~630で最長一致が処理されている部分文字列の上記の重複を考慮すると、クロックサイクル700において1バイトより長い最長一致が一致パイプライン624で見出された場合、最長一致は、クロックサイクル700において一致パイプライン626で処理されている部分文字列の少なくとも最初のバイトを含む。この場合、クロックサイクル700において一致パイプライン626に見出された最長一致は、一致パイプライン624で見出された最長一致のため、コマンドを生成するために使用できないようにされる。これは、次の最長一致(すなわち、一致パイプライン624内で見出された最長一致に続く最長一致)が、一致パイプライン624で見出された最長一致の最後のバイトの後まで開始せず、したがって、一致パイプライン626で処理されている部分文字列の最初のバイトから開始できないためである。実際に、一致パイプライン624の最長一致が十分に長く(すなわち、4バイト)、次の最長一致は、クロックサイクル700において一致パイプライン626~630から最長一致が出力される他の何れかの部分列の開始バイトからは開始しないようになることが起こり得る。さらに、一致パイプライン624で見出された最長一致が十分に長く(すなわち、5バイト以上)、クロックサイクル702又はクロックサイクル704~706において一致パイプライン626-630から最長一致が出力される何れかの部分文字列の開始バイトからは、最長一致が開始しないようになることが起こり得る。いくつかの実施形態では、16バイトの最長一致が可能にされている(後述するように、かなり長い一致も可能にされている)。クロックサイクル700において16バイトの最長一致が一致パイプライン624に見出されると、次の最長一致は、
図7Aの一致パイプライン624~630で現在処理されている何れかの部分文字列の開始バイトから開始しないことになり、すなわち、クロックサイクル702~706において見出されないことになる。先に十分な長さの最長一致があるために最長一致が使用できないようにされた場合、その最長一致が破棄され、コマンドの生成に使われることがない。したがって、コマンドは、部分文字列の最長一致に基づいて、コマンド生成器から選択的に出力される(すなわち、出力される、又は、出力されない)。
【0051】
図7Aの例では、クロックサイクル700の一致パイプライン624~628の各々で処理中の部分文字列について、一致が見つけられないこと、及び/又は、閾値バイト数(例えば、3バイト等)未満の最長一致が見つけられることが想定されている。このことは、最初のバイトから始まる部分文字列が一致しない場合(以前に処理されたオリジナルデータでまだ検出されていない部分文字列等)、又は、格納されているデータの数バイトのみと一致する場合に起こり得る。この場合、コマンド生成器608は、一致パイプライン624~630の各々について、部分文字列の最初のバイトのみを書き込むためのリテラル書き込みコマンドを圧縮データに対して出力する。言い換えれば、コマンド生成器608は、これらの各部分文字列の最初のバイトの3つの1バイトリテラルの各々に対して、3つの別々のリテラル書き込みコマンドを出力する。リテラルは1バイトのみであるので、リテラル書き込みコマンドの何れも、後続の部分文字列のバイトに影響を与えず、コマンド生成器608が後続の一致パイプラインから最長一致のコマンドを生成できることに留意されたい。
【0052】
図7Aについて続けると、クロックサイクル700において一致パイプライン630で処理されている部分文字列について、9バイト(9B)の最長一致が見つけられたと仮定する。言い換えれば、一致パイプライン630で一致が処理された16バイトの部分文字列の最初のバイトから始めて、格納データで見つけられた最長一致(唯一の一致ではない可能性もあるが)は、部分文字列の最初の9バイトに対するものであった。このことは、記憶要素620(すなわち、辞書)内の以前に処理されたオリジナルデータの所定の位置にある9バイトの文字列を使用して、部分文字列を再現できることを意味する。したがって、コマンド生成器608は、圧縮データに対して、以前に処理されたオリジナルデータ/辞書内の位置から9バイトの文字列をコピーするための文字列コピーコマンドを出力する。
【0053】
クロックサイクル700における一致パイプライン630の最長一致が9バイトの長さであるので、一致パイプライン624~630で処理される次の8つの部分文字列の各々について、少なくとも最初のバイトが最長一致に含まれる。したがって、これらの部分文字列からの最長一致は、クロックサイクル702~704で返される次の8つの最長一致における陰影付けによって示されるように、使用できないようにされる。クロックサイクル700の観点から、クロックサイクル706での一致パイプライン624~630で見つけられた最長マッチには、クエスチョンマークが付されている。このことは、これらの最長一致が、それに基づいて生成されたコマンドを有するための候補であることを示すためである。このことは、クロックサイクル706において最長一致出力を生成するために一致パイプライン624~630によって処理される部分文字列が、前の部分文字列についての最長一致と重複することが(すなわち、クロックサイクル700において)未だ知られていないためである。
【0054】
クロックサイクル700における一致パイプライン630での9バイトの一致のために、コマンド生成器608によって最長一致が破棄/無視されると、クロックサイクル702~704の間に部分文字列を処理する際の投機的計算作業が失われるが、クロックサイクル700における一致パイプライン630での比較的長い長さの最長一致が見つけられたので、進展があったことに留意されたい。さらに、最長一致がクロックサイクル700で見つからず、及び/又は、長さが短かった場合、クロックサイクル702~704で見つけられた最長一致の一部又は全部が有用であった可能性がある。
【0055】
クロックサイクル702,704では、一致パイプライン624~630からの最長一致が全て破棄され、コマンドが出力されない。クロックサイクル706~712を示す
図7Bに示すように、16バイト(16B)の最長一致が、クロックサイクル706において一致パイプライン624に見出される。この場合、いくつかの実施形態では、一致は、
図7Bに示すクロックサイクルを超えて継続する場合があるので、したがって使用中の符号化規格に従った最大最長一致長までとしてもよく、例えば255バイトまでであってもよく、コマンド生成器608は、直ちにコマンドを生成することはない。代わりに、コマンド生成器608は、16バイト一致の発生及び位置を記憶要素620に記録し、その後のクロックサイクルを監視して、一致が継続するかどうか、すなわち、クロックサイクル706において一致パイプライン624内で最長一致が見つけられた部分文字列内の一致バイトの後に、1つ以上の後続の部分文字列が、さらに一致バイトに遭遇するかどうかを判定する。後に最長一致が16バイトしかない(したがって、それ以上の一致が見つからなかった)ことが判明した場合、コマンド生成器608は、以前に処理されたオリジナルデータ/辞書の位置から16バイトの文字列をコピーするための文字列コピーコマンドを出力する。或いは、最長一致が16バイトより長い場合、コマンド生成器608は、一致した文字列全体のバイトを、以前に処理されたオリジナルデータ/辞書の位置からコピーするための文字列コピーコマンドを出力する。
【0056】
機能ブロックの特定の数及び構成が、
図6の圧縮サブシステム508及び一致検出器606に示されているが、いくつかの実施形態では、機能ブロックの異なる数及び/又は構成が、圧縮サブシステム508及び/又は一致検出器606に存在する。例えば、いくつかの実施形態では、一致検出器606は、異なる数の一致パイプラインを含む。一般に、圧縮サブシステム508及び一致検出器606は、本明細書に記載された操作を実行するのに十分な機能ブロックを含む。
【0057】
一致パイプライン624~630からの最長一致は、一致パイプライン624~630から順番にコマンドを生成するために使用されるものと説明されているが、これは必須ではない。いくつかの実施形態では、コマンド生成器608は、最長一致の相対的長さに基づいてコマンドを生成するために、最長一致を選択的に使用する。これは、圧縮を改善するのに役立つ可能性がある。これらの実施形態では、コマンド生成器608は、一致パイプライン624~630の各々について最長一致の長さを判定し、その後、後続のより長い最長一致のための文字列コピーコマンドを生成するために、初期のより短い最長一致(複数可)を無視する。例えば、一致パイプライン624~626が3バイト及び12バイトの最長一致を有する場合、一致パイプライン624の3バイトの最長一致が文字列コピーコマンドを生成するために使用されるならば、パイプライン626の12バイトの一致は、上記のようにスキップされることになる。これらの実施形態では、最長一致の相対的長さに基づいて、コマンド生成器608は、一致パイプライン624に対するリテラル書き込みコマンドを発行し、それによって一致パイプライン624に対する最長一致を無視し、一致パイプライン626からの最長一致に対する12バイトの文字列コピーコマンドを生成する。
【0058】
(クロックのサイクルで実行される操作)
いくつかの実施形態では、圧縮サブシステムは、クロックのサイクル中にクロック信号のエッジ、レベル、遷移等を使用して、オリジナルデータから圧縮データを生成するための操作の性能を制御する。
図8は、いくつかの実施形態による、クロックのサイクル中に圧縮サブシステムによって実行される操作のタイムライン図である。
図8の例では、圧縮サブシステム508が操作を行うため、クロックがクロック616であることを想定している。しかしながら、
図8を1ページに収めるために、圧縮サブシステム508の4つの最長一致選択ステージのうち2つのみが示されている。
【0059】
クロック616は、概して、時間の進行に伴って(時間の矢印で示すように左から右へ)、2つの電圧レベル間を周期的に交互に変化し、すなわち、周期的に上昇及び下降する信号である。
図8に示すように、時間が進むにつれて、クロック616は、クロックサイクル800~810を生成する。圧縮サブシステム508内では、クロック616は、機能ブロック及び回路要素が、いつ操作を開始し及び/又は実行するかを制御し、同期させる。言い換えれば、クロック616のエッジ、レベル、遷移等が、圧縮サブシステム508内の機能ブロック及び回路要素の操作をトリガし、同期させる。
【0060】
圧縮サブシステム508は、クロック616によって制御される回路要素(例えば、ラッチ、フリップフロップ、伝送ゲート、スイッチ等)により、いくつかのステージ、ブロック又はフェーズに分割される。各ステージ、ブロック又はフェーズは、クロックの各サイクル中に操作を実行する。そのため、情報をクロックの連続したサイクルで所定のステージ、ブロック又はフェーズから次のステージ、ブロック又はフェーズへと流すことができる。
図8の例では、クロックサイクル800において、文字列ハンドラ600は、オリジナルデータ610から検索文字列612をコピーして、検索文字列612を比較器604に提供し、比較器604が検索文字列612から部分文字列を生成する。クロックサイクル802では、比較要素622において部分文字列が、履歴バッファ602内の記憶要素620からの保存データと比較され、部分文字列の一致が見出される。クロックサイクル804では、一致検出器606の各々の一致パイプラインにおける第1の最長一致選択ステージが、比較器604からの各部分文字列について一致を処理して、その部分文字列のローカルな最長一致を判定する。クロックサイクル806では、一致検出器606の各々の一致パイプラインにおける第2の最長一致選択ステージが、第1の一致ステージからの各部分文字列についてローカルな最長一致を処理して、その部分文字列の最長一致を判定する。クロックサイクル808では、コマンド生成器608が、一致パイプラインの各々からの最長一致を使用して、圧縮データ用にコマンドを選択的に出力する。
【0061】
圧縮サブシステム508内の機能ブロック及び回路要素をビジー状態に保つために、次の検索文字列612に対する処理がクロックサイクル802で開始され、クロックサイクル810を通じて進められる。言い換えれば、文字列ハンドラ600及び比較器604がクロックサイクル800での操作を完了した後に、文字列ハンドラ600及び比較器604は、新しい検索文字列に対して同じ操作を実行する。新しい検索文字列は、各ステージ、ブロック又はフェーズにおいてクロックの1サイクル後であるが、上記の検索文字列と同様に、圧縮サブシステム508内のステージ、ブロック又はフェーズを通じて進められる。
図8には示されていないが、この操作のパターンでは、圧縮サブシステム508がクロックの各サイクルにおいてオリジナルデータ610からの新しい検索文字列612に対する処理を開始して、全てのオリジナルデータが圧縮サブシステム508において処理されるまでパターンが継続される。
【0062】
特定の操作がクロックの各々のサイクルで実行されるように示されているが、いくつかの実施形態では、異なる操作が実行され、及び/又は、異なる操作がクロックの異なるサイクルで実行される。例えば、いくつかの実施形態では、検索文字列のコピー、部分文字列の生成及び比較は、クロックの同じサイクルで行われてもよい。概して、記載されている実施形態では、クロック616のサイクルは、圧縮サブシステム508における操作のトリガ/誘発及び同期のために使用される。
【0063】
(入力データの圧縮処理)
記載されている実施形態では、文字列ハンドラ、履歴バッファ、比較器、一致検出器606及びコマンド生成器(例えば、文字列ハンドラ600、履歴バッファ602、比較器604、一致検出器606及びコマンド生成器608)を含む圧縮サブシステム(例えば、圧縮サブシステム508)は、オリジナルデータ(例えば、オリジナルデータ610)を圧縮して圧縮データ用にコマンド(例えば、コマンド614)を生成する操作を実行する。
図9は、いくつかの実施形態による、圧縮データ用のコマンドを生成するためにオリジナルデータを圧縮するためのプロセスを示すフローチャートである。
図9に示す操作は、いくつかの実施形態によって実行される操作の一般的な例として示されていることに留意されたい。他の実施形態によって実行される操作は、異なる操作、異なる順序で実行される操作、及び/又は、異なるエンティティ又は機能ブロックによって実行される操作を含む。
【0064】
図9に示す処理では、圧縮サブシステムが、例えば、ファイル、データストリーム等のソースからオリジナルデータを受け取ることが想定されている。言い換えれば、オリジナルデータの個々のバイトが圧縮サブシステムによって受け取られ、したがって圧縮サブシステム内の機能ブロックによって操作されることが可能である。いくつかの実施形態では、圧縮サブシステムは、別のエンティティ(例えば、処理サブシステム、メモリ)によって圧縮サブシステムに提供されるオリジナルデータを単に圧縮して(場合によっては圧縮のみ行って)、圧縮データのためのコマンドを生成する。言い換えれば、これらの実施形態では、圧縮サブシステムは、圧縮サブシステムに提供されたオリジナルデータに基づいて生成されたコマンドを出力する以外の操作を行わない。しかしながら、いくつかの実施形態では、圧縮サブシステムは、メモリ及び/又は他の場所若しくはエンティティ(例えば、処理サブシステム、ネットワークインタフェース、IOデバイス等)からオリジナルデータを取り出すこと、生成されたコマンドをメモリに格納すること、及び/又は、コマンドを他のエンティティに提供すること等のように、他の操作を行うための機能ブロックを含む。
【0065】
図9の例では、圧縮サブシステムの機能ブロックの少なくとも一部は、これらの動作がほぼ同時に(例えば、クロックの同じサイクル(複数可)内等で)実行されるという意味で、ある操作を「実質的に並行して」実行する。例えば、ステップ904の比較操作は、履歴バッファからの各部分文字列及び格納データに対して実質的に並行して実行することが可能である。別の例として、ステップ906における各部分文字列の最長一致の判定を、実質的に並行して実行することが可能である。
【0066】
図9の処理は、文字列ハンドラがオリジナルデータから検索文字列(例えば、検索文字列612)を取得した時点で開始される(ステップ900)。この操作では、文字列ハンドラは、圧縮サブシステムで処理される指定されたバイト数をオリジナルデータからコピーする。次に、文字列ハンドラは、検索文字列を比較器に提供し、比較器は、検索文字列からいくつかの部分文字列を生成する(ステップ902)。この操作の間、比較器は、検索文字列から所定の数の異なるバイト列をコピーすることによって各部分文字列を生成する。部分文字列の最初のもの(例えば、部分文字列404)は、検索文字列(例えば、検索文字列402)の開始バイトから始まる検索文字列からの所定の数のバイトを含み、次の各々の部分文字列(例えば、部分文字列406~410)は、開始バイトからバイト単位でインクリメンタルに大きくなっていくオフセットから始まる検索文字列からの所定の数のバイトを含む。
【0067】
次に、比較器は、各々の比較要素において、各々の部分文字列を履歴バッファからの格納データと比較して、部分文字列と保存データとの間の一致を見つける(ステップ904)。この操作では、部分文字列の長さがNバイトであると仮定して、別個の比較要素が、実質的に並行して、格納データ内の可能なNバイトの各列(すなわち、バイト列0~N-1、1~N、2~N+1等)と各部分文字列とを比較する。それぞれの別個の内部要素は、一致が見つけられたかどうか(又は見つけられなかったかどうか)、一致の長さ、及び、一致データがある履歴バッファ内の位置を示す出力を提供する。例えば、いくつかの実施形態では、各内部要素は、数値、ビット列、一致長及びオフセット等の一致又はその欠如の表現、並びに、履歴バッファ内の位置を示す値を出力する。
【0068】
履歴バッファのサイズとそこに格納されているデータの量とに依存するが、比較器内には多くの比較要素があり、したがって多くの一致識別子が返され得る。部分文字列に対する適切なコマンドをコマンド生成器から出力するために、これらの一致の中から最長一致が判定される。そのため、比較器は、一致検出器に一致を提供する。一致検出器は、各々の一致パイプラインを使用して、各々の部分文字列の最長一致を判定する(ステップ906)。上記のように、各一致パイプラインは、一致が他の一致と長さによって比較されて、部分文字列に対する単一の最長一致のみが残るまで、より短い一致を排除する、1つ以上の最長一致選択ステージ(例えば、最長一致選択ステージ632~638)を含む。
【0069】
各部分文字列の最長一致に基づいて、コマンド生成器は、圧縮データに対するコマンドを選択的に出力する(ステップ908)。この操作では、コマンド生成器は、最長一致に基づいて少なくとも1つのコマンドを出力し、部分文字列があるだけ多くのコマンドを出力し得る。
図10は、いくつかの実施形態による、コマンドを選択的に出力するためのプロセスを示すブロック図である。
図10に示す操作は、いくつかの実施形態によって実行される操作の一般的な例として示されていることに留意されたい。他の実施形態によって実行される操作は、異なる操作、異なる順序で実行される操作、及び/又は、異なるエンティティ若しくは機能ブロックによって実行される操作を含む。
【0070】
図10に示すように、コマンド生成器が、クロックのサイクルで(すなわち、現在のクロックのサイクルの開始時に)、以前のクロックのサイクルからのカウント値を取得し、又は、カウント値をゼロに設定すると、処理が開始される(ステップ1000)。この操作のために、コマンド生成器が、コマンドを生成するために、現在のクロックのサイクルで使用されている、又は、以前のクロックのサイクルで使用された、最長一致のバイトのカウントを保持していることが前提となっている。次に、このカウントが使用されて、後続の最長一致のうち何れが破棄されるか、及び、コマンドの生成に何れが使用されるかが制御される。
【0071】
コマンド生成器は、次に、カウント値がゼロに等しくなるか、又は、スキップされる一致パイプライン、したがって最長一致が残らなくなるまで、最初の一致パイプラインから始めて、ラウンドロビン順に次の各パイプラインをスキップし、カウント値をデクリメントする(ステップ1002)。この操作のために、コマンド生成器は、
図7Aについて上述したような一致パイプラインからの最長一致をスキップし、スキップされた一致パイプラインからの最長一致を破棄する。全ての一致パイプラインがスキップされた場合(ステップ1004)、コマンド生成器は、コマンドを出力することなく、クロックのサイクル分の一致パイプラインの処理を終了する(ステップ1006)。この結果は、再び
図7Aに示すように、クロックの以前のサイクルからの最長一致が、クロックのサイクル内の最長一致の全てを使用不能にするのに十分な長さであった場合に生じ得る。
【0072】
一方、カウント値がゼロであり、1つ以上の一致パイプラインがスキップされていない場合(ステップ1004)、1つ以上のパイプライン(したがって最長一致)がクロックのサイクルで未だ処理されていない。この場合、コマンド生成器は、指定された順序(例えば、ラウンドロビン)で次の一致パイプラインの最長一致の長さが閾値より短いか、又は、一致が見つけられなかった場合、次の一致パイプラインのリテラル書き込みコマンドを出力し、カウント値をゼロに等しく設定する(ステップ1008)。それ以外の場合、指定された順序で次の一致パイプラインの最長一致の長さが閾値より長い場合、コマンド生成器は、最長一致に関連付けられた文字列コピーコマンドを出力し、カウント値を最長一致のバイト単位での長さから1を引いた値に等しく設定する。このようにしてカウント値を設定することで、文字列コピーコマンドに使用された最長一致の長さに基づいて、クロックのサイクル内の後続の一致パイプラインとクロックの後続のサイクルとをスキップすることができ、又は、リテラル書き込みコマンドが出力された場合にスキップされないようにできる。その後、コマンド生成器はスキップ操作に戻り、すなわち、ステップ1002に戻り、カウント値を処理し、場合によっては一致パイプライン等をスキップする。
【0073】
いくつかの実施形態では、少なくとも1つの電子デバイス(例えば、電子デバイス500)は、非一時的なコンピュータ可読記憶媒体に格納されたコード及び/又はデータを用いて、本明細書に記載された操作の一部又は全部を実行する。より具体的には、少なくとも1つの電子デバイスは、コンピュータ可読記憶媒体からコード及び/又はデータを読み出し、説明した操作を実行する際にコードを実行し、及び/又は、データを使用する。コンピュータ可読記憶媒体は、電子デバイスで使用されるコード及び/又はデータを格納する任意のデバイス、媒体、又は、これらの組み合わせであり得る。例えば、コンピュータ可読記憶媒体は、揮発性メモリ及び/又は不揮発性メモリ(例えば、フラッシュメモリ、ランダムアクセスメモリ(例えば、eDRAM、RAM、SRAM、DRAM、DDR4 SDRAM等)、不揮発性RAM(例えば、相変化メモリ、強誘電体ランダムアクセスメモリ、スピントランスファトルクランダムアクセスメモリ、磁気抵抗ランダムアクセスメモリ等)、読み出し専用メモリ(ROM)、及び/又は、磁気若しくは光学記憶媒体(例えば、ディスクドライブ、磁気テープ、CD、DVD等))を含むことができるが、これらに限定されない。
【0074】
いくつかの実施形態では、1つ以上のハードウェアモジュールが、本明細書に記載された操作を実行する。例えば、ハードウェアモジュールは、これらに限定されないが、1つ以上のプロセッサ/コア/中央処理装置(CPU)、特定用途向け集積回路(ASIC)チップ、ニューラルネットワークプロセッサ若しくはアクセラレータ、フィールドプログラマブルゲートアレイ(FPGA)、圧縮及び/若しくはコード化サブシステム、計算ユニット、組み込みプロセッサ、グラフィックプロセッサ(GPU)/グラフィックコア、パイプライン、アクセラレーテッドプロセシングユニット(APU)、機能ブロック、コントローラ、アクセラレータ、並びに/又は、他のプログラマブル論理デバイスを含むことができる。このようなハードウェアモジュールが起動されると、ハードウェアモジュールは、操作の一部又は全部を実行する。いくつかの実施形態では、ハードウェアモジュールは、操作を実行するための命令(プログラムコード、ファームウェア等)を実行することによって構成される1つ以上の汎用回路を含む。
【0075】
いくつかの実施形態では、本明細書に記載される構造及びメカニズムのうち一部又は全てを表すデータ構造(例えば電子デバイス500又はこれらの一部)は、データベース又は他のデータ構造を含む非一時的コンピュータ可読記憶媒体に記憶され、これは、電子デバイスにより読み出すことができ、構造及びメカニズムを含むハードウェアを製造するために直接的に又は間接的に使用することができる。例えば、データ構造は、Verilog又はVHDL等の高水準設計言語(HDL)でのハードウェア機能の動作レベルの記述又はレジスタトランスファレベル(RTL)の記述であり得る。記述は、合成ツールにより読み出されてもよく、合成ツールは、上述した構造及びメカニズムを含むハードウェアの機能を表すゲート/回路要素のリストを含むネットリストを合成ライブラリから生成するように、記述を合成してもよい。次に、ネットリストは、マスクに適用される幾何学形状を記述するデータセットを生成するように配置されてもよいし、ルーティングされてもよい。次いで、上述した構造及びメカニズムに対応する1つ以上の半導体回路(例えば集積回路)を製造するために、様々な半導体製造ステップでマスクが使用され得る。或いは、コンピュータアクセス可能な記憶媒体上のデータベースは、ネットリスト(合成ライブラリ付き若しくは合成ライブラリ無し)若しくはデータセット、又は、所望により、グラフィックデータシステム(GDS)IIデータであってもよい。
【0076】
本明細書では、変数又は未指定の値(すなわち、値の特定の例がない一般的な記述)は、N、M及びX等の文字で表される。本明細書で使用する場合、同様の文字を異なる場所で使用している場合があるが、各々の場合の変数及び未指定値は必ずしも同じではなく、すなわち、一般的な変数及び未指定値の一部又は全部に対して意図された異なる変数量及び値が存在する場合がある。言い換えると、本説明で変数及び未指定の値を表すために使用されるN及び任意の他の文字は、必ずしも互いに関連するわけではない。
【0077】
「エトセトラ」又は「等」という表現は、本明細書で使用される場合、「及び/又は」のケース、すなわち、「等」が関連付けられているリスト内の要素の「少なくとも1つ」に相当するものを示すことを意図している。例えば、「電子デバイスは、第1の動作、第2の動作等を実施する」という文において、電子デバイスは、第1の動作、第2の動作、及び、他の動作のうち少なくとも1つを実施する。加えて、「等」に関連付けられたリスト内の要素は、一連の例の中からの単なる例であり、少なくともいくつかの例は、いくつかの実施形態では現れない場合がある。
【0078】
実施形態の上述した説明は、例示及び説明のためにのみ提示されたものである。それらは、包括的であること、又は、実施形態を開示された形態に限定することを意図していない。したがって、当業者には、数多くの変更及び変形が明らかであろう。さらに、上記の開示には、実施形態を限定する意図はない。実施形態の範囲は、添付の特許請求の範囲により定義される。
【国際調査報告】