(57)【特許請求の範囲】
【請求項１】
ベクトル処理を使用して入力データストリームをセグメント化するためのシステムであって、
複数のセグメントからなるセグメント化されたデータストリームを生成するために、入力データストリーム全体を通して、以下のステップ、すなわち
入力データストリームの連続的なデータ項目のシーケンスに対してローリングシーケンスを適用するステップであって、前記ローリングシーケンスは、前記シーケンスの連続的なデータ項目のサブセットを含む、ステップと、
複数の部分ハッシュ値を並行に計算するステップであって、各々の部分ハッシュ値は、プロセッサの複数の処理パイプラインのうちの１つによって計算され、各々の部分ハッシュ値は、前記サブセットの均等に間隔が隔てられたデータ項目を各々が含む複数の部分ローリングシーケンスのうちのそれぞれの１つのためのものである、ステップと、
前記複数の部分ハッシュ値の各々の、それぞれの少なくとも１つの部分セグメント化基準との整合性を決定するステップと、
前記複数の部分ハッシュ値のうちの少なくともいくつかが前記それぞれの少なくとも１つの部分セグメント化基準に適合する場合、前記シーケンスを可変サイズセグメントとして指定するステップと
を繰り返すように適合されたプロセッサ
を備えることを特徴とするシステム。
【請求項２】
前記プロセッサは、単一命令複数データＳＩＭＤプロセッサであることを特徴とする請求項１に記載のシステム。
【請求項３】
前記プロセッサは、それぞれの以前の部分ローリングシーケンスのそれぞれの部分ハッシュ値、前記それぞれの部分ローリングシーケンスから省略される被省略データ項目、および前記それぞれの部分ローリングシーケンスに追加される被追加データ項目を使用して、前記複数の部分ハッシュ値の各々を部分ローリングハッシュ値として計算するように適合されることを特徴とする請求項１または２に記載のシステム。
【請求項４】
前記プロセッサは、前記それぞれの少なくとも１つの部分セグメント化基準に適合する前記シーケンスの連続するサブセットに対して計算された連続的な適合する部分ハッシュ値の数が前記複数の部分ローリングシーケンスの数を超える場合、前記シーケンスを前記可変サイズセグメントとして指定するように適合されることを特徴とする請求項１乃至３のいずれかに記載のシステム。
【請求項５】
前記シーケンスは、予め定義済みの最小個数の前記連続的なデータ項目を含むことを特徴とする請求項１乃至４のいずれかに記載のシステム。
【請求項６】
前記プロセッサは、前記部分ハッシュ値の、前記それぞれの少なくとも１つの部分セグメント化基準との整合性を検出する前に、大きいシーケンスのサイズが予め定義済みの最大値を超える場合、前記複数のシーケンスのうちの少なくとも１つの大きいシーケンスを前記可変サイズセグメントとして指定するように適合されることを特徴とする請求項１乃至５のいずれかに記載のシステム。
【請求項７】
ベクトル処理を使用して入力データストリームをセグメント化するための方法であって、
複数のセグメントからなるセグメント化されたデータストリームを生成するために、入力データストリーム全体を通して、以下のステップ、すなわち
入力データストリームの連続的なデータ項目のシーケンスに対してローリングシーケンスを適用するステップであって、前記ローリングシーケンスは、前記シーケンスの連続的なデータ項目のサブセットを含む、ステップと、
複数の部分ハッシュ値を並行に計算するステップであって、各々の部分ハッシュ値は、プロセッサの複数の処理パイプラインのうちの１つによって計算され、各々の部分ハッシュ値は、前記サブセットの均等に間隔が隔てられたデータ項目を各々が含む複数の部分ローリングシーケンスのうちのそれぞれの１つのためのものである、ステップと、
前記複数の部分ハッシュ値の各々の、それぞれの少なくとも１つの部分セグメント化基準との整合性を決定するステップと、
前記複数の部分ハッシュ値のうちの少なくともいくつかが前記それぞれの少なくとも１つの部分セグメント化基準に適合する場合、前記シーケンスを可変サイズセグメントとして指定するステップと
を繰り返すように適合されたプロセッサを使用すること
を含むことを特徴とする方法。
【請求項８】
前記複数の部分ハッシュ値の各々は、それぞれの以前の部分ローリングシーケンスのそれぞれの部分ハッシュ値、前記それぞれの部分ローリングシーケンスから省略される被省略データ項目、および前記それぞれの部分ローリングシーケンスに追加される被追加データ項目を使用して、部分ローリングハッシュ値として計算されることを特徴とする請求項７に記載の方法。
【請求項９】
前記シーケンスは、前記それぞれの少なくとも１つの部分セグメント化基準に適合する前記シーケンスの連続するサブセットに対して計算された連続的な適合する部分ハッシュ値の数が前記複数の部分ローリングシーケンスの数を超える場合、前記可変サイズセグメントとして指定されることを特徴とする請求項７または８に記載の方法。
【請求項１０】
前記シーケンスは、予め定義済みの最小個数の前記連続的なデータ項目を含むことを特徴とする請求項７乃至９のいずれかに記載の方法。
【請求項１１】
前記複数のシーケンスのうちの少なくとも１つの大きいシーケンスは、前記部分ハッシュ値の、前記それぞれの少なくとも１つの部分セグメント化基準との整合性を検出する前に、前記大きいシーケンスのサイズが予め定義済みの最大値を超える場合、前記可変サイズセグメントとして指定されることを特徴とする請求項７乃至１０のいずれかに記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、そのいくつかの実施形態では、入力データストリームのセグメント化に関し、より詳細には、排他的ではないが、ベクトル処理を使用した入力データストリームのセグメント化に関する。
【背景技術】
【０００２】
情報時代である現在、記憶され、および／または位置間で転送される必要があるデータの量が急速に増加している。おびただしい量のデータは、データを記憶するための記憶空間および／またはそれを転送するためのネットワーク帯域幅に関して、重大なコストおよび／または複雑性の課題を提起し得る。
【０００３】
記憶するため、および／または転送するためのデータの量を少なくするために広く使用されている１つの解決法は、冗長なデータを排除することによってデータ量を少なくする方法であるデータ重複排除である（しばしば「インテリジェント圧縮」または「単一インスタンス記憶」と呼ばれている）。ファイル重複排除のための方法が存在しているが、ブロック重複排除は、データ圧縮に関してより良好な結果を提供し得る。ブロック重複排除では、データストリームのデータセグメント（ブロック）の１つの一意のインスタンスのみが実際に保持され、一方、既に保持されているデータセグメントと全く同じである冗長なデータセグメントは、保持されているデータセグメントの複製に対するポインタと置換される。ブロック重複排除は、複数のデータタイプ、例えば１つまたは複数のデータセグメント（ブロック）の一意のインスタンスを特定するためのデータファイル、媒体ファイル、ストリームデータ等のうちの１つであってもよいデータストリームを処理する。一意の数（ハッシュ値）は、ハッシュアルゴリズムを使用してセグメント毎に生成される。暗号化強度ハッシュアルゴリズムは、通常、この目的、例えばＭＤ５および／またはＳＨＡ−１のために使用される。セグメント毎に生成されるハッシュ値は、その前のセグメントに対して生成された既存のハッシュ値に対して比較され、ハッシュ値が既存のハッシュ値に等しい場合、セグメントは保持されず、その代わりに、既存のセグメントの複製に対するポインタと置換される。さらに、セグメントが更新される場合、変化したデータのみが保持されることがあり、一方、著しい量のセグメントを含み得る残りの不変のデータは保持されない。
【０００４】
主な課題のうちの１つは、セグメントのデータコンテンツに対する変化によってセグメントが受ける影響が可能な限り小さくなるよう、データストリームを効果的にセグメント化することである。ローリングハッシュ技法は、当業界で知られているように、データストリームをセグメント化するために使用され得る。ローリングハッシュを使用して、データストリーム中のデータのシーケンスをシフトさせるためのハッシュ値が計算される（各々のローリングシーケンス中では、終了データ項目が省略され、かつ、新しいデータ項目が挿入される）。計算されたハッシュ値は、予め定義済みの１つまたは複数のセグメント化基準との整合性がチェックされ、整合性が確認される場合、それぞれのローリングシーケンスの終了がセグメント境界または切断点として指定される。
【発明の概要】
【０００５】
本発明の第１の態様によれば、ベクトル処理を使用して入力データストリームをセグメント化するためのシステムが提供され、システムは、複数のセグメントからなるセグメント化されたデータストリームを生成するために、入力データストリーム全体を通して、以下のステップ、すなわち、入力データストリームの連続的なデータ項目のシーケンスに対してローリングシーケンスを適用するステップであって、ローリングシーケンスは、シーケンスの連続的なデータ項目のサブセットを含む、ステップと、複数の部分ハッシュ値を並行に計算するステップであって、各々の部分ハッシュ値は、プロセッサの複数の処理パイプラインのうちの１つによって計算され、各々の部分ハッシュ値は、サブセットの均等に間隔を隔てたデータ項目を各々が含む複数の部分ローリングシーケンスのうちのそれぞれの１つのためのものである、ステップと、複数の部分ハッシュ値の各々の、それぞれの少なくとも１つの部分セグメント化基準との整合性を決定するステップと、複数の部分ハッシュ値のうちの少なくともいくつかがそれぞれの少なくとも１つの部分セグメント化基準に適合する場合、シーケンスを可変サイズセグメントとして指定するステップとを繰り返すように適合されたプロセッサを備える。
【０００６】
並行という用語は、それによって継続期間の重畳という意味を有しており、また、同時という意味、例えば同じ時間に生じるという意味をも含む。
【０００７】
本発明の第１の態様の第１の実装形態自体によれば、プロセッサは単一命令複数データＳＩＭＤプロセッサである。
【０００８】
第１の態様の第２の実装形態自体によれば、または第１の態様の第１の実装形態によれば、プロセッサは、それぞれの以前の部分ローリングシーケンスのそれぞれの部分ハッシュ値、それぞれの部分ローリングシーケンスから省略される被省略データ項目、およびそれぞれの部分ローリングシーケンスに追加される被追加データ項目を使用して、複数の部分ハッシュ値の各々を部分ローリングハッシュ値として計算するように適合される。
【０００９】
第１の態様の第３の実装形態自体によれば、または第１の態様の第１の実装形態または第２の実装形態のいずれかによれば、プロセッサは、それぞれの少なくとも１つの部分セグメント化基準に適合するシーケンスの連続するサブセットに対して計算された連続的な適合する部分ハッシュ値の数が複数の部分ローリングシーケンスの数を超える場合、シーケンスを可変サイズセグメントとして指定するように適合される。
【００１０】
第１の態様の第４の実装形態自体によれば、または第１の態様の第１実装形態から第３の実装形態のいずれかによれば、シーケンスは、予め定義済みの最小個数の連続的なデータ項目を含む。
【００１１】
第１の態様の第５の実装形態自体によれば、または第１実装形態から第４の実装形態のいずれかによれば、プロセッサは、部分ハッシュ値の、それぞれの少なくとも１つの部分セグメント化基準との整合性を検出する前に、大きいシーケンスのサイズが予め定義済みの最大値を超える場合、複数のシーケンスのうちの少なくとも１つの大きいシーケンスを可変サイズセグメントとして指定するように適合される。
【００１２】
本発明の第２の態様によれば、ベクトル処理を使用して入力データストリームをセグメント化するための方法が提供され、方法は、複数のセグメントからなるセグメント化されたデータストリームを生成するために、入力データストリーム全体を通して、以下のステップ、すなわち、入力データストリームの連続的なデータ項目のシーケンスに対してローリングシーケンスを適用するステップであって、ローリングシーケンスがシーケンスの連続的なデータ項目のサブセットを含む、ステップと、複数の部分ハッシュ値を並行に計算するステップであって、各々の部分ハッシュ値は、プロセッサの複数の処理パイプラインのうちの１つによって計算され、各々の部分ハッシュ値は、サブセットの均等に間隔が隔てられたデータ項目を各々が含む複数の部分ローリングシーケンスのうちのそれぞれの１つのためのものである、ステップと、複数の部分ハッシュ値の各々の、それぞれの少なくとも１つの部分セグメント化基準との整合性を決定するステップと、複数の部分ハッシュ値のうちの少なくともいくつかがそれぞれの少なくとも１つの部分セグメント化基準に適合する場合、シーケンスを可変サイズセグメントとして指定するステップとを繰り返すように適合されたプロセッサを使用するステップを含む。
【００１３】
本発明の第２の態様の第１の実装形態自体によれば、複数の部分ハッシュ値の各々は、それぞれの以前の部分ローリングシーケンスのそれぞれの部分ハッシュ値、それぞれの部分ローリングシーケンスから省略される被省略データ項目、およびそれぞれの部分ローリングシーケンスに追加される被追加データ項目を使用して、部分ローリングハッシュ値として計算される。
【００１４】
第２の態様の第２の実装形態自体によれば、または第２の態様の第１の実装形態によれば、シーケンスは、それぞれの少なくとも１つの部分セグメント化基準に適合するシーケンスの連続するサブセットに対して計算された連続的な適合する部分ハッシュ値の数が複数の部分ローリングシーケンスの数を超える場合、可変サイズセグメントとして指定される。
【００１５】
第２の態様の第３の実装形態自体によれば、または第２の態様の第１実装形態または第２の実装形態のいずれかによれば、シーケンスは、予め定義済みの最小個数の連続的なデータ項目を含む。
【００１６】
第２の態様の第４の実装形態自体によれば、または第２の態様の第１実装形態から第３の実装形態のいずれかによれば、複数のシーケンスのうちの少なくとも１つの大きいシーケンスは、部分ハッシュ値の、それぞれの少なくとも１つの部分セグメント化基準との整合性を検出する前に、大きいシーケンスのサイズが予め定義済みの最大値を超える場合、可変サイズセグメントとして指定される。
【００１７】
本発明のいくつかの実施形態が、本明細書においてほんの一例として、添付の図面を参照して説明される。以下、図面をとりわけ詳細に参照するが、示されている特定の内容は一例であり、本発明の実施形態の例示的な議論のためのものであることが強調される。この点に関し、図面を参照してなされる説明は、本発明の実施形態が実践され得る方法を当業者に明らかにする。
【図面の簡単な説明】
【００１８】
【図１】本発明のいくつかの実施形態による、ベクトル処理を使用して入力データストリームをセグメント化するための例示的システムの概略図である。
【図２】本発明のいくつかの実施形態による、ベクトル処理を使用して入力データストリームをセグメント化するための例示的処理のフローチャートである。
【図３Ａ】入力データストリームをセグメント化するためのローリングハッシュ値を計算する例示的処理の概略図である。
【図３Ｂ】入力データストリームをセグメント化するためのローリングハッシュ値を計算する例示的処理の概略図である。
【図３Ｃ】入力データストリームをセグメント化するためのローリングハッシュ値計算の例示的公式化を示す図である。
【図４Ａ】本発明のいくつかの実施形態による、ベクトル処理を使用して入力データストリームをセグメント化するための部分ローリングハッシュ値を計算する例示的処理の概略図である。
【図４Ｂ】本発明のいくつかの実施形態による、ベクトル処理を使用して入力データストリームをセグメント化するための部分ローリングハッシュ値を計算する例示的処理の概略図である。
【図４Ｃ】本発明のいくつかの実施形態による、セグメント化のための部分ローリングハッシュ値計算の例示的公式化の概略図である。
【図５Ａ】本発明のいくつかの実施形態による、部分セグメント化基準を使用して部分ローリングハッシュ値を制限する例示的処理の概略図である。
【図５Ｂ】本発明のいくつかの実施形態による、部分セグメント化基準を使用して部分ローリングハッシュ値を制限する例示的処理の概略図である。
【図５Ｃ】本発明のいくつかの実施形態による、部分セグメント化基準を使用して部分ローリングハッシュ値を制限する例示的処理の概略図である。
【図５Ｄ】本発明のいくつかの実施形態による、部分セグメント化基準を使用して部分ローリングハッシュ値を制限する例示的処理の概略図である。
【発明を実施するための形態】
【００１９】
本発明は、そのいくつかの実施形態では、入力データストリームのセグメント化に関し、より詳細には、排他的ではないが、ベクトル処理を使用した入力データストリームのセグメント化に関する。
【００２０】
本発明は、冗長な（重複した）データセグメントを除去することによって入力データストリームのデータの量を少なくするために、入力データストリームに適用される重複排除処理の一部としてベクトル処理を使用して入力データストリームをセグメント化するためのシステムおよび方法を提供する。入力データストリーム、例えばデータファイル、媒体ファイル、ストリーミングデータ等のデータの量を少なくするための重複排除処理は、入力データストリームを記憶し、および／または転送するために必要な記憶空間および／またはネットワーク帯域幅を低減するために実施される。セグメント化は、連続的なデータ項目、例えばバイト、ワード、ダブルワードおよび／または入力データストリームのピクセルのシーケンスを通じて漸進的にシフトされるローリングシーケンスを構成している複数の部分ローリングシーケンスを並行または同時に処理することによって実施される。部分ローリングシーケンスは、部分ローリングシーケンスの各々に対して部分ローリングハッシュ値を計算するために並行に処理される。複数の部分ローリングハッシュ値の各々は、１つまたは複数のベクトルプロセッサ、例えば単一命令複数データ（ＳＩＭＤ）プロセッサの複数の処理パイプラインのうちのそれぞれの１つの中で計算される。ローリングシーケンスは、シーケンスの連続的なデータ項目のサブセットを含むが、複数の部分ローリングシーケンスの各々は、ローリングシーケンスのサブセットの均等に間隔が隔てられたデータ項目を含む。シーケンスは、部分ローリングシーケンスの各々に対して計算される部分ローリングハッシュ値のうちの少なくともいくつかがそれぞれの１つまたは複数の部分セグメント化基準に適合する（満たす）場合、可変サイズセグメントとして指定され得る。処理は、セグメント化されたデータストリームを生成するために、入力データストリーム全体を通して、複数の後続するローリングシーケンスに対して繰り返され、各ローリングシーケンスは、その前のローリングシーケンスが終了する点で始まる。
【００２１】
ベクトル処理を使用した同時セグメント化は、既存の逐次セグメント化方法と比較すると著しい利点を提供し得る。ベクトル処理技術は、多くの面、例えば近代のプロセッサの中で利用可能な処理パイプラインの数、並列に処理され得るデータ項目の数、および／またはプロセッサの処理能力が急速に進歩している。入力データストリームの効果的なセグメント化は、重複排除処理全体の有効性に対する大きな貢献を有し得るが、それは、大きな時間消費および／または重複排除処理のプロセッサ集中操作のうちの１つであり得る。入力シーケンスのデータ項目は、ローリングシーケンスに対するハッシュ値の計算に関して、互いに独立していると見なされ得るため、セグメント化処理の一部として同時に起こる部分ローリングシーケンスの処理は、ＳＩＭＤエンジンを有するプロセッサなどのベクトル処理技術を全面的に利用し得る。ベクトルプロセッサを使用した入力データストリームの処理は、現在のセグメント化方法によって使用されている逐次セグメント化と比較すると、セグメント化時間を著しく短縮し得る。セグメント化時間が著しく短縮されるため、重複排除処理全体が著しく短縮され得るし、また、事によるとデータ転送および／またはデータ記憶操作におけるボトルネックを除去し得る。
【００２２】
本発明の少なくとも１つの実施形態を詳細に説明する前に、本発明は、その適用が、以下の説明の中で示され、および／もしくは図面および／もしくは実施例に示されている構成要素ならびに／または方法の構造および配置の詳細に必ずしも限定されないことを理解されたい。本発明は、他の実施形態が可能であり、または様々な方法で実践または実施することができる。
【００２３】
本発明は、システム、方法および／またはコンピュータプログラム製品であってもよい。コンピュータプログラム製品は、本発明の態様をプロセッサに実施させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体（または媒体）を含み得る。
【００２４】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持し、かつ、記憶することができる有形デバイスとすることができる。コンピュータ可読記憶媒体は、例えば、それらに限定されないが、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または上記デバイスの任意の適切な組合せであってもよい。
【００２５】
本明細書において説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれの計算／処理デバイスにダウンロードされ、もしくはネットワーク、例えばインターネット、ローカルエリアネットワーク、広域ネットワークおよび／または無線ネットワークを介して、外部コンピュータまたは外部記憶デバイスにダウンロードされることができる。
【００２６】
コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体を実行し、独立ソフトウェアパッケージとしてユーザのコンピュータ上で一部を実行し、ユーザのコンピュータ上および遠隔コンピュータ上で一部を実行し、または遠隔コンピュータもしくはサーバ上で全体を実行し得る。後者のシナリオの場合、遠隔コンピュータは、ローカルエリアネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または外部コンピュータに接続がなされ得る（例えばインターネットサービスプロバイダを使用してインターネットを介して）。いくつかの実施形態では、例えばプログラム可能論理回路機構、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）またはプログラム可能論理アレイ（ＰＬＡ）を含む電子回路機構は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路機構を個別化することによってコンピュータ可読プログラム命令を実行し得る。
【００２７】
本発明の態様は、本明細書においては、本発明の実施形態による方法、装置（システム）およびコンピュータプログラム製品のフローチャートの例および／またはブロック図を参照して説明される。フローチャートの例および／またはブロック図の各ブロック、およびフローチャートの例および／またはブロック図におけるブロックの組合せは、コンピュータ可読プログラム命令によって実現できることは理解されよう。
【００２８】
図のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法およびコンピュータプログラム製品の可能な実装のアーキテクチャ、機能および操作を示したものである。この点に関して、フローチャートまたはブロック図における各ブロックは、明記された論理機能を実現するための１つまたは複数の実行可能命令を含む、命令のモジュール、セグメントまたは部分を表し得る。いくつかの代替の実装では、ブロックに記されている機能は、図に記されている順序に依らずに生じ得る。例えば連続して示されている２つのブロックは、実際、実質的に並行に実行されてもよく、またはブロックは、時には、含まれている機能に応じて逆の順序で実行され得る。また、ブロック図および／またはフローチャートの例の各ブロック、およびブロック図および／またはフローチャートの例におけるブロックの組合せは、明記された機能または行為を実施し、または専用ハードウェアおよびコンピュータ命令の組合せを実施する専用ハードウェアベースシステムによって実現可能であることにも留意されよう。
【００２９】
ここで、本発明のいくつかの実施形態による、ベクトル処理を使用して入力データストリームをセグメント化するための例示的システムの概略図である図１を参照する。システム１００は、入力データストリーム１２０を受け取り、および／または指定し、かつ、セグメント化されたデータストリーム１３０を出力するための入出力（Ｉ／Ｏ）インタフェース１０２と、入力データストリーム１２０をセグメント化してセグメント化されたデータストリーム１３０を生成するための複数の処理パイプライン１０６を備えるプロセッサ１０４と、プログラムストア１０８とを含む。入力データストリーム１２０は、１つまたは複数のフォーマット、例えばデータファイル、媒体ファイル、ストリーミングデータ等で受け取られ得る。入力データストリーム１２０は、複数のデータ項目、例えばストリームとしてシーケンスで配列され得るバイト、ワード、ダブルワードおよび／またはピクセルを含む。入出力インタフェース１０２は、１つまたは複数のインタフェース、例えばネットワークインタフェース、メモリインタフェースおよび／または記憶装置インタフェースを含み得る。入出力インタフェース１０２は、データストリーム１２０および／または１３０を取り出し、ならびに／またはメモリデバイスおよび／もしくは記憶デバイス等に記憶するために、例えばデータストリーム１２０および／もしくは１３０をネットワークを介して受け取り、ならびに／または伝送するために使用され得る。プロセッサ１０４は、１つまたは複数のコアを各々が有する１つまたは複数のプロセッサを含み得る。プロセッサ１０４は、複数の処理パイプライン１０６などのベクトル処理機能をさらに含む。処理パイプライン１０６は、それぞれデータを処理することができる複数の独立した実行パイプライン、例えば複数のプロセッサ、複数のコアおよび／またはベクトルプロセッサ、例えばＳＩＭＤプロセッサおよび／またはＳＩＭＤエンジンをサポートする。ＳＩＭＤエンジンは、プロセッサ１０４の単一の命令で複数のデータ項目を並行に処理することができる複数の処理パイプライン１０６を備える。プログラムストア１０８は、１つまたは複数の非一時的持続性記憶デバイス、例えばハードドライブ、フラッシュアレイ等を含み得る。
【００３０】
本発明のいくつかの実施形態による、ベクトル処理を使用して入力データストリームをセグメント化するための例示的処理のフローチャートである図２をさらに参照する。入力データストリームをセグメント化するためのセグメント化処理２００は、システム１００などのシステムによって実施され得る。セグメント化処理２００は、入力データストリーム１２０の部分シーケンスを並行に処理してセグメント化されたデータストリーム１３０を生成するために複数の処理パイプライン１０６を使用する。
【００３１】
セグメント化処理２００は、例えば、プロセッサ１０４および／または処理パイプライン１０６によって実行される複数のプログラム命令を含む、プログラムストア１０８からのコーディネータ１１０および／またはワーカー１１２などの１つまたは複数のソフトウェアモジュールによって実施され得る。任意選択で、ワーカー１１２は、処理パイプライン１０６と共に埋め込まれた１つまたは複数のマイクロコードモジュールを含んでよく、マイクロコードモジュールは、処理パイプライン１０６によって実行されるプログラム命令を含む。コーディネータ１１０は、例えばプロセッサ１０４の処理ユニットによって実行され得る。コーディネータ１１０は、セグメント化処理を管理し、および／または統合してもよく、例えば複数の処理パイプライン１０６の間でデータを分配し、複数の処理パイプライン１０６からデータを収集し、データを同期化し、タスクを同期化し、ワーカー１１２を調整し、セグメントを指定し、および／または同様の他のことをし得る。プロセッサ１０４、および／または処理パイプライン１０６の各々は、複数のワーカー１１２のインスタンスを実行し、入力データストリーム１２０の部分シーケンスを並行に処理し得る。プロセッサ１０４が、独立した処理ユニットである処理パイプライン１０６を備えたベクトルプロセッサである場合、各々の処理パイプライン１０６は、ワーカー１１２インスタンスを独立して実行し得る。しかしながらプロセッサ１０４がＳＩＭＤエンジンを組み込んでいる場合、ワーカー１１２は、データをＳＩＭＤエンジンの処理パイプライン１０６の各々に割り当てるプロセッサ１０４によって実行され得る。プロセッサ１０４は、次に、単一命令を開始して、同じ操作（命令）を並行に実行するよう、ＳＩＭＤエンジンのすべての処理パイプライン１０６に命令してよく、各処理パイプライン１０６は、そのそれぞれの割り当てられたデータを処理する。
【００３２】
２０２に示されているように、処理２００は、コーディネータ１１０が入出力インタフェース１０２から入力データストリーム１２０を受け取ることから開始する。
【００３３】
ベクトル処理を使用した同時セグメント化処理を説明する前に、ローリングシーケンスおよびローリングハッシュを使用したセグメント化処理が最初に説明される。
【００３４】
ここで、入力データストリームをセグメント化するためのローリングハッシュ値を計算する例示的処理の概略図である図３Ａおよび図３Ｂを参照する。入力データストリーム１２０は、複数のデータ項目、例えばバイト、ワード、ダブルワード、ピクセル等を含む入力データストリーム１２０に対してシフトするローリングシーケンスを適用することによって処理される。ローリングシーケンスは、データストリーム１２０の開始で始まる入力データストリーム１２０に対してシフトされ、また、入力データストリーム１２０の終了に向かってシフトされる。ローリングシーケンスは、セグメントが識別され、かつ、指定されるまでシフトされる。セグメントが指定されると、後続するシーケンスがその前の指定済みセグメントの終了から始まり、かつ、それぞれのローリングシーケンスが入力データストリーム１２０の終了に向かってシフトされる。この処理は、セグメント化されたデータストリーム１３０を生成するために、入力データストリーム全体がセグメント化されるまで繰り返される。ローリングシーケンスに含まれるデータ項目の数は、１つまたは複数の態様、例えばセグメント化要件、データスループット、処理能力等に応じて変化し得る。例示的入力データストリーム１２０は、６４個のデータ項目を各々が含むローリングシーケンスにより処理されるが、説明したようにデータ項目の数は異なり得る。ハッシュ値ＨK  ３１２Ａは、データ項目ＳK  ３１０Ａ０からＳK-63  ３１０Ａ６３を含むローリングシーケンス３１０Ａに対して計算される。ローリングシーケンスは、次に、データ項目ＳK-63  ３１０Ａ６３が省略され、かつ、新しいデータ項目ＳK+1  ３１０Ｂ１が追加されるよう、左側へシフトされてローリングシーケンス３１０Ｂを画定する。新しいハッシュ値ＨK+1  ３１２Ｂは、データ項目ＳK+1  ３１０Ｂ１からＳK-62  ３１０Ａ６２を含むローリングシーケンス３１０Ｂに対して計算される。ローリングシーケンスは、以下で説明されるようにセグメントが検出されるまで、入力データストリーム１２０のシーケンスを通じてシフトされる。ハッシュ値ＨK  ３１２ＡおよびＨK+1  ３１２Ｂ、ならびに入力データストリーム１２０の後続するシーケンスに対して計算される後続するハッシュ値は、多くのローリングハッシュ関数、例えばＲａｂｉｎ−Ｋａｒｐローリングハッシュおよび／またはＢｕｚｈａｓｈのうちの１つを使用して計算され得る。
【００３５】
ハッシュ値ＨK  ３１２ＡおよびＨK+1  ３１２Ｂなどのハッシュ値を、ローリングシーケンス３１０Ａおよび３１０Ｂなどのそれらのそれぞれのローリングシーケンスから計算することは可能であるが、上記から、ハッシュ値ＨK  ３１２ＡおよびＨK+1  ３１２Ｂの各々は、その前のハッシュ値、それぞれのシーケンスからの被省略データ項目、およびそれぞれのシーケンスへの被追加データ項目に依存することは明らかである。したがって各々のハッシュ値は、ローリングハッシュ値と見なされてもよく、また、その前のハッシュ値、被省略データ項目および被追加データ項目の値を使用して計算されてもよく、こうしてローリングシーケンス３１０Ａおよび３１０Ｂなどのそれぞれのローリングシーケンス全体の冗長で複雑な演算を回避する。
【００３６】
ここで、入力データストリームをセグメント化するためのローリングハッシュ値計算の例示的公式化である図３Ｃを参照する。入力ストリーム１２０などの例示的入力ストリームのシーケンスに適用されるローリングシーケンス３１０Ｂなどのそれぞれのローリングシーケンスに対するローリングハッシュ値ＨK+1  ３１２Ｂなどのローリングハッシュ値は、ハッシュ値ＨK  ３１２Ａなどのその前のハッシュ値、被省略データ項目ＳK-63  ３１０Ａ６３などの被省略データ項目、および被追加データ項目ＳK+1  ３１０Ｂ１などの被追加データ項目の関数として計算され得る。
【００３７】
ハッシュ値ＨK  ３１２ＡおよびＨK+1  ３１２Ｂなどのハッシュ値の各々は、シーケンスが「切断」される点を特定してセグメントを指定するために、１つまたは複数のセグメント化基準に対する整合性に対して比較される。１つまたは複数のセグメント化基準は、例えばハッシュ値の最後の１２ビットが予め定義済みの値に等しいことをチェックすることなどの例えばデータパターンを定義し得る。これは、通常、平均的に４，０９６バイト毎に「切断」を生成することになる。当然、セグメントのサイズは可変であり、計算されたローリングハッシュ値が１つまたは複数のセグメント化基準に適合するシーケンス内の位置に依存する。最小サイズは、入力データストリーム１２０の処理されたシーケンスが、最小ブロックサイズから始まって「切断」まで大きくなるよう、複数の可変サイズセグメントの各々に対して予め定義され得る。最大サイズは、処理されたシーケンス中の「切断」点を特定する前に予め定義済みの最大サイズに到達すると、ハッシュ値が１つまたは複数のセグメント化基準に適合しない場合であってもセグメントが「切断」されるよう、複数の可変サイズセグメントの各々に対して予め定義され得る。
【００３８】
セグメント化処理は、セグメント化されたデータストリーム１３０などのセグメント化されたデータストリームを生成するために、入力データストリーム１２０の後続するシーケンスに対して、入力データストリーム１２０の終了まで継続する。
【００３９】
もう一度図２を参照する。２０４に示されているように、コーディネータ１１０は、入力ストリーム１２０などの入力ストリームの連続的なデータ項目のシーケンスに対して、ローリングシーケンス３１０Ａおよび／または３１０Ｂなどのローリングシーケンスを適用する。コーディネータ１１０は、第１のシーケンスを選択して、入力データストリーム１２０の開始から始まって、入力データストリーム１２０の終了に向かって進行する。コーディネータ１１０は、処理されたシーケンスに対して、ローリングシーケンス３１０Ａおよび３１０Ｂなどのローリングシーケンスをシフトさせる。上記で説明したように、ローリングシーケンスの各々に含まれるデータ項目の数、例えば３２個、６４個および／または１２８個は、セグメント化処理ならびに／または処理資源特性および／もしくは能力の１つまたは複数の態様に依存する。
【００４０】
２０６に示されているように、コーディネータ１１０は、ローリングシーケンスを複数の部分ローリングシーケンスに分割し、複数の部分ローリングシーケンスの各々は、処理パイプライン１０６のうちのそれぞれの１つによって各々が実行される複数のワーカー１１２のうちのそれぞれの１つによって並行に（ｃｏｎｃｕｒｒｅｎｔｌｙ）処理される。処理２００がＳＩＭＤエンジンを有するプロセッサ１０４によって実施される場合、ワーカー１１２は、それぞれの部分ローリングシーケンスのデータをＳＩＭＤエンジンの処理パイプライン１０６の各々に割り当てるプロセッサ１０４によって実行される。部分ローリングシーケンスの数は、利用可能な処理パイプライン１０６の数、例えば４個、８個、１６個、３２個、６４個および／または１２８個に適合するように設定される。部分ローリングシーケンスの各々は、ローリングシーケンス３１０Ａおよび３１０Ｂなどのローリングシーケンスのサブセットの均等に間隔が隔てられたデータ項目を含む。例えばローリングシーケンス３１０Ａおよび３１０Ｂは、処理パイプライン１０６などの４つの処理パイプラインを有するベクトルプロセッサ１０４、または４つの処理パイプライン１０６を有するＳＩＭＤエンジンを備えたベクトルプロセッサ１０４によって実行される４つのワーカー１１２に適合するために４つの部分ローリングシーケンスに分割される。ローリングシーケンス３１０Ａおよび３１０Ｂの各々の部分ローリングシーケンスは、ローリングシーケンス３１０Ａまたは３１０Ｂの４番目毎のデータ項目を含む。第１の部分ローリングシーケンスは、データ項目０、４、８…を含み、第２のデータサブストリームは、データ項目１、５、９…を含み、第３のデータサブストリームは、データ項目２、６、１０…を含み、また、第４のデータサブストリームは、データ項目３、７、１１…を含み得る。同様に、別の例として、ローリングシーケンス３１０Ａおよび３１０Ｂが、処理パイプライン１０６などの８つの処理パイプラインおよび８つのＳＩＭＤ処理パイプライン１０６を有するベクトルプロセッサ１０４によって実行される８つのワーカー１１２に適合するために８つの部分ローリングシーケンスに分割される場合、各々の部分ローリングシーケンスは、ローリングシーケンスのサブセットの８番目毎のデータ項目を含む。第１の部分ローリングシーケンスは、データ項目０、８、１６…を含み、第２の部分ローリングシーケンスは、データ項目１、９、１７…を含み、第３の部分ローリングシーケンスは、データ項目２、１０、１８…を含み、第４の部分ローリングシーケンスは、データ項目３、１１、１９…を含み、第５の部分ローリングシーケンスは、データ項目４、１２、２０…を含み、第６の部分ローリングシーケンスは、データ項目５、１３、２１…を含み、第７の部分ローリングシーケンスは、データ項目６、１４、２２…を含み、また、第８の部分ローリングシーケンスは、データ項目７、１５、２３を含んでもよく、以下同様である。同様に、コーディネータ１１０は、利用可能なワーカー１１２の数、すなわち利用可能な処理パイプライン１０６の数に適合するために、シーケンスを１６個、３２個、６４個、１２８個、２５６個等に分割し得る。
【００４１】
複数の処理パイプライン１０６のうちのそれぞれの１つによって実行されるワーカー１１２の各々は、それぞれの部分ローリングシーケンスを処理して、それぞれの部分ローリングシーケンスに対する部分ローリングハッシュ値を計算する。ワーカー１１２は、多くのローリングハッシュ関数、例えばＲａｂｉｎ−Ｋａｒｐローリングハッシュおよび／またはＢｕｚｈａｓｈのうちの１つを使用して部分ハッシュ値を計算し得る。複数のワーカー１１２は、すべての部分ローリングシーケンスが並行に処理されるよう、それらのそれぞれの部分ローリングシーケンスを並行に処理する。ＳＩＭＤエンジンを有するプロセッサ１０４の場合、プロセッサ１０４によって実行されるワーカー１１２は、単一コマンド（命令）を開始して、それらのそれぞれの部分ローリングシーケンスの部分ローリングハッシュ値を並行に計算するよう、すべてのＳＩＭＤエンジン処理パイプライン１０６に命令する。
【００４２】
ここで、本発明のいくつかの実施形態による、ベクトル処理を使用して入力データストリームをセグメント化するための部分ローリングハッシュ値を計算する例示的処理の概略図である図４Ａおよび図４Ｂを参照する。
【００４３】
図４Ａに示されているように、コーディネータ１１０は、８つの処理パイプライン１０６を有する例示的ベクトルプロセッサ１０４に適合するために、ローリングシーケンス３１０Ａなどのローリングシーケンスを８つの部分ローリングシーケンス４１０Ａ０から４１０Ａ７に分割する。コーディネータ１１０は、部分ローリングシーケンス４１０Ａ０から４１０Ａ７を８つのそれぞれのワーカー１１２に分配し得る。ＳＩＭＤエンジンを有するプロセッサ１０４の場合、プロセッサ１０４によって実行される単一のワーカー１１２は、ＳＩＭＤエンジン処理パイプライン１０６の各々に、部分ローリングシーケンス４１０Ａ０〜４１０Ａ７のうちのそれぞれの１つのデータを割り当てる。しかしながら、本明細書において上記で示したように、部分ローリングシーケンスの数は、ワーカー１１２および／または利用可能な処理パイプライン１０６の数に応じて異なり得る。部分ローリングシーケンス４１０Ａ０から４１０Ａ７の各々は、複数の処理パイプライン１０６のうちのそれぞれの１つによって実行されるそれぞれのワーカー１１２によって処理される。ＳＩＭＤエンジンを有するプロセッサ１０４の場合、ＳＩＭＤエンジン処理パイプライン１０６は、それぞれの部分ローリングシーケンス４１０Ａ０〜４１０Ａ７をワーカー１１２（プロセッサ１０４によって実行される）による単一命令で並行に処理する。
【００４４】
本明細書において提供される例示的処理２００は、本明細書において以前に提供された例であって、ローリングシーケンス３１０Ａなどのローリングシーケンスの各々が６４個のデータ項目のサブセットを含み、したがってコーディネータ１１０がローリングシーケンス３１０Ａを、８つのデータ項目を各々が含む８つの部分ローリングシーケンス４１０Ａ０から４１０Ａ７に分割する例に従う。したがって例示的部分ローリングシーケンス４１０Ａ０は、８つのデータ項目ＳK  ３１０Ａ０、ＳK-8  ３１０Ａ８、ＳK-16  ３１０Ａ１６、ＳK-24  ３１０Ａ２４、ＳK-32  ３１０Ａ３２、ＳK-40  ３１０Ａ４０、ＳK-48  ３１０Ａ４８およびＳK-56  ３１０Ａ５６を含み、例示的部分ローリングシーケンス４１０Ａ７は、８つのデータ項目ＳK-7  ３１０Ａ７、ＳK-15  ３１０Ａ１５、ＳK-23  ３１０Ａ２３、ＳK-31  ３１０Ａ３１、ＳK-39  ３１０Ａ３９、ＳK-47  ３１０Ａ４７、ＳK-55  ３１０Ａ５５およびＳK-63  ３１０Ａ６３を含み、以下同様である。部分ローリングシーケンス４１０Ａ０から４１０Ａ７などの複数の部分ローリングシーケンスの各々は、それぞれ８つのデータ項目を含むが、データ項目の数は、１つまたは複数の態様、例えばセグメント化要件、ハッシュ関数タイプ、データスループット、プロセッサアーキテクチャ等に応じて変化し得ることがもう一度強調される。プロセッサアーキテクチャは、１つまたは複数の特性、例えばレジスタの幅、キャッシュ線幅、メモリインタフェース幅および／または速度、ネットワークインタフェース幅および／または速度、記憶媒体インタフェース幅および／または速度等を含み得る。
【００４５】
８つのワーカー１１２は、８つの部分ローリングシーケンス４１０Ａ０から４１０Ａ７を並行に処理して、それぞれの部分ローリングシーケンス４１０Ａ０から４１０Ａ７の各々に対する部分ローリングハッシュ値Ｈ’K  ４１２Ａ０からＨ’K-7  ４１２Ａ７などの部分ローリングハッシュ値を計算する。追加的におよび／または代替として、プロセッサ１０４がＳＩＭＤエンジンを含む場合、プロセッサ１０４によって実行されるワーカー１１２は、８つの部分ローリングシーケンス４１０Ａ０から４１０Ａ７を処理するように８つのＳＩＭＤエンジン処理パイプライン１０６に命令する。８つのＳＩＭＤエンジン処理パイプライン１０６は、部分ローリングシーケンス４１０Ａ０〜４１０Ａ７のうちのそれぞれの１つの各々に対する部分ローリングハッシュ値Ｈ’K  ４１２Ａ０からＨ’K-7  ４１２Ａ７を計算する。ワーカー１１２は、１つまたは複数のハッシュ関数、例えばＲａｂｉｎ−ＫａｒｐまたはＢｕｚｈａｓｈを使用して、部分ローリングハッシュ値Ｈ’K  ４１２Ａ０からＨ’K-7  ４１２Ａ７を計算し得る。
【００４６】
図４Ｂに示されているように、処理パイプライン１０６の各々は、その前のローリングシーケンス４１０Ａ０〜４１０Ａ７の各々の一番左側のデータ項目が省略され、かつ、新しいデータ項目が追加されるよう、部分ローリングシーケンスを右側へシフトさせて、部分ローリングシーケンス４１０Ｂ０から４１０Ｂ７を生成する。例えば部分ローリングシーケンス４１０Ｂ０は、データ項目ＳK-56  ３１０Ａ５６が省略され、かつ、新しいデータ項目ＳK+8  ３１０Ｂ８が追加される、シフトされた部分ローリングシーケンス４１０Ａ０に対応している。同様に、部分ローリングシーケンス４１０Ｂ７は、データ項目ＳK-63  ３１０Ａ６３が省略され、かつ、新しいデータ項目ＳK+1  ３１０Ｂ１が追加される、シフトされた部分ローリングシーケンス４１０Ａ７に対応している。
【００４７】
８つの処理パイプライン１０６は、それらのそれぞれの部分ローリングシーケンス４１０Ｂ０〜４１０Ｂ７を並行に処理して、それぞれの部分ローリングシーケンス４１０Ｂ０〜４１０Ｂ７の各々に対するハッシュ値Ｈ’K+8  ４１２Ｂ０からＨ’K+1  ４１２Ｂ７などの部分ハッシュ値を計算する。
【００４８】
ハッシュ値ＨK  ３１２ＡおよびＨK+1  ３１２Ｂなどのハッシュ値と同様、部分ハッシュ値Ｈ’K  ４１２Ａ０〜Ｈ’K-7  ４１２Ａ７およびＨ’K+8  ４１２Ｂ０〜Ｈ’K+1  ４１２Ｂ７などの部分ハッシュ値の各々は、それらのそれぞれの部分シーケンス４１０Ａ０〜４１０Ａ７および４１０Ｂ０〜４１０Ｂ７に対して計算され得る。しかしながら上記から明らかなように、部分ハッシュ値Ｈ’K  ４１２Ａ０〜Ｈ’K-7  ４１２Ａ７およびＨ’K+8  ４１２Ｂ０〜Ｈ’K+1  ４１２Ｂ７の各々は、その前のそれぞれの部分ハッシュ値、それぞれの部分ローリングシーケンスからの被省略データ項目、およびそれぞれの部分ローリングシーケンスへの被追加データ項目に依存する。したがって各々の部分ハッシュ値Ｈ’K  ４１２Ａ０〜Ｈ’K-7  ４１２Ａ７およびＨ’K+8  ４１２Ｂ０〜Ｈ’K+1  ４１２Ｂ７は、ローリングハッシュと見なされ得る。したがってワーカー１１２は、その前のそれぞれの部分ハッシュ値、それぞれの被省略データ項目およびそれぞれの被追加データ項目の値を使用して部分ハッシュ値Ｈ’K  ４１２Ａ０〜Ｈ’K-7  ４１２Ａ７を計算してもよく、こうしてそれぞれの部分ローリングシーケンス４１０Ａ０〜４１０Ａ７および／または４１０Ｂ０〜４１０Ｂ７の全体の冗長な演算を回避する。
【００４９】
ここで、本発明のいくつかの実施形態による、入力データストリームをセグメント化するための部分ローリングハッシュ値計算の例示的公式化である図４Ｃを参照する。それぞれの処理パイプライン１０６は、部分ローリングシーケンス４１０Ｂ７などのそれぞれの部分ローリングシーケンスに対する部分ローリングハッシュ値Ｈ’K+1  ４１２Ｂ７などの部分ローリングハッシュ値を、部分ローリングハッシュ値Ｈ’K-7  ４１２Ａ７、被省略データ項目ＳK-63  ３１０Ａ６３などの被省略データ項目、および被追加データ項目ＳK+1  ３１０Ｂ１などの被追加データ項目などのその前の部分ローリングハッシュ値の関数として計算し得る。同様に、他の処理パイプライン１０６の各々は、同じ方法論を使用して部分ローリングハッシュ値Ｈ’K+2  ４１２Ｂ６からＨ’K+8  ４１２Ｂ０を計算し得る。
【００５０】
もう一度図２を参照する。２０８に示されているように、計算された部分ローリングハッシュ値の各々が、ローリングシーケンス３１０Ａおよび３１０Ｂ（それぞれの部分ローリングシーケンスを各々が含む）などのローリングシーケンスを含む完全なシーケンスがセグメントとして指定され得るかどうかを決定するために、それぞれの１つまたは複数の部分セグメント化基準との整合性についてチェックされ、および／またはそれぞれの１つまたは複数の部分セグメント化基準を満たしている。部分ローリングハッシュ値Ｈ’K  ４１２Ａ０〜Ｈ’K-7  ４１２Ａ７および／またはＨ’K+8  ４１２Ｂ０〜Ｈ’K+1  ４１２Ｂ７などのそれぞれの部分ハッシュ値の各々は、シーケンスが「切断」され得る点を特定してセグメントを指定するために整合性がチェックされる。１つまたは複数の部分セグメント化基準は、例えば部分ローリングハッシュ値４１２が予め定義済みの値より大きい、および／または部分ローリングハッシュ値４１２内のビットの予め定義済みの数が予め定義済みの値に等しい、などのデータパターンを定義し得る。各々がそれぞれの部分セグメント化基準に適合する連続的な部分ハッシュ値の数は、平均セグメントサイズに影響を及ぼす。それらのそれぞれの部分セグメント化基準に適合するために要求される連続的な部分ハッシュ値の数は、許容される最大データセグメントサイズ、および／または所望のデータセグメントサイズに応じて変化し得る。
【００５１】
２１０に示されているように、部分ローリングハッシュ値がそれぞれの部分セグメント化基準に適合する場合、コーディネータ１１０は、ローリングシーケンスがシフトされる（また、部分ローリングシーケンスを含む）シーケンスを「切断」し、かつ、シーケンスをデータセグメントとして指定し得る。コーディネータ１１０は、シーケンスを「切断し」、かつ、それをセグメントとして指定するための１つまたは複数のセグメント化基準を使用してもよく、セグメント化基準は、１つまたは複数の部分セグメント化基準の組合せである。
【００５２】
当然、セグメントのサイズは可変であり、それぞれの計算された部分ローリングハッシュ値に対するそれぞれの１つまたは複数の部分セグメント化基準との整合性が確認されるシーケンス内の位置に依存する。通常、データ重複排除のためには、データセグメントの平均サイズは、例えば４キロバイト（ＫＢ）、６ＫＢおよび／または８ＫＢであってもよく、これらは、データセグメントを処理するオーバヘッドがセグメントの数に関して最適化されるよう、現在の処理、記憶および／またはネットワーク化スループットおよび性能と最も良く適合し得る。
【００５３】
任意選択で、最小サイズは、部分ローリングシーケンスが最小ブロックサイズから始まって「切断」まで大きくなるよう、複数の可変サイズセグメントの各々に対して予め定義され得る。典型的なセグメントサイズに基づいて、予め定義される最小サイズは、例えば２ＫＢであり得る。
【００５４】
任意選択で、最大サイズは、「切断」点を特定する前に予め定義済みの最大サイズに到達すると、ハッシュ値が１つまたは複数のセグメント化基準に適合しない場合であってもセグメントが「切断」されるよう、複数の可変サイズセグメントの各々に対して予め定義され得る。典型的なセグメントサイズに基づいて、予め定義される最大サイズは、例えば１６ＫＢであり得る。
【００５５】
ここで、本発明のいくつかの実施形態による、部分セグメント化基準を使用して部分ローリングハッシュ値を制限する例示的処理の概略図である図５Ａおよび図５Ｂを参照する。コーディネータ１１０は、ワーカー１１２が、複数の部分ローリングシーケンスのうちの１つと結合したそれらのそれぞれの部分ローリングハッシュ値の、それぞれの部分セグメント化基準との整合性を確認すると、セグメント化基準との整合性を確認し得る。プロセッサ１０４がＳＩＭＤエンジンを有している場合、プロセッサによって実行されるワーカー１１２は、それぞれＳＩＭＤ処理パイプライン１０６のうちのそれぞれの１つによって計算された部分ローリングハッシュ値を収集し、かつ、部分ローリングハッシュ値をそれぞれの部分セグメント化基準に対して比較する。例えば部分ローリングシーケンス４１０Ａ０〜４１０Ａ７などのそれぞれの部分ローリングシーケンスの部分ローリングハッシュ値Ｈ’K  ４１２Ａ０〜Ｈ’K-7  ４１２Ａ７などの部分ローリングハッシュ値が、すべて、それぞれの部分セグメント化基準に適合する場合、コーディネータ１１０は、データ項目ＳK  ３１０Ａ０の点までのシーケンスをセグメントとして指定し得る。
【００５６】
図５Ａに示されているように、ＱK  ５１０Ａは、部分セグメント化基準Ｑ’K-7  ５１０Ａ７〜Ｑ’K  ５１０Ａ０のセットの組合せであるセグメント化基準であり、「１」は、それぞれの部分ハッシュ値の、それぞれの部分セグメント化基準との整合性を示し、また、「０」は、それぞれの部分ハッシュ値のそれぞれの１または複数の部分セグメント化基準との非整合性を示す。例えば部分セグメント化基準Ｑ’K-7  ５１０Ａ７は、部分ハッシュ値Ｈ’K-7  ４１２Ａ７の整合性を示している。部分セグメント化基準Ｑ’K-5  ５１０Ａ５、Ｑ’K-3  ５１０Ａ３およびＱ’K-1  ５１０Ａ１は、それぞれの部分セグメント化基準に適合していないため、セグメント化基準ＱK  ５１０Ａ全体が満たされていない。
【００５７】
一方、図５Ｂに示されているように、すべての部分セグメント化基準Ｑ’K-7  ５１０Ａ７〜Ｑ’K  ５１０Ａ０は、それらのそれぞれの部分セグメント化基準に適合しており、したがってセグメント化基準ＱK  ５１０Ａ全体が満たされ、「切断」５２０が実施されて、それぞれの部分ローリングシーケンスを含むローリングシーケンスを含むシーケンスをセグメントとして指定する。
【００５８】
任意選択で、コーディネータ１１０は、連続するローリングシーケンス、例えばその前のローリングシーケンスおよび／または後続するローリングシーケンスの連続的な部分ローリングハッシュ値の、それぞれの部分セグメント化基準との整合性をチェックする。それぞれの部分セグメント化基準に適合するために必要な連続的な部分ハッシュ値の数は、部分ローリングハッシュ値の数を超え得る（この数は、当然、部分ローリングシーケンスの数および処理パイプライン１０６の数である）。したがってローリングシーケンスのセグメント化基準との整合性は、連続する部分ローリングシーケンスの部分ハッシュ値の整合性の関数である。上記で説明したように、連続的な適合する部分ローリングハッシュ値の数は平均セグメントサイズに影響を及ぼすため、部分セグメント化基準との整合性がチェックされる連続的な部分ローリングハッシュ値の数は、必要な、および／または所望の典型的なデータセグメントサイズに適合するように設定され得る。本明細書において提供されている例は、８つの連続的な部分ローリングハッシュ値の、それぞれの部分セグメント化基準との整合性を提供しているが、データセグメントの必要な／所望の典型的なサイズに応じて、連続的な部分ローリングハッシュ値の他の数も使用され得る。
【００５９】
ローリングシーケンス３１０Ａおよび／または３１０Ｂなどの元のローリングシーケンスの整合性を確認することと比較すると、シーケンスをセグメント化するための分解能および／または細分性が増すため、部分ローリングシーケンスの２つの連続するグループの連続的な部分ハッシュ値の整合性をチェックすることにより、コーディネータは追加利点を提供し得る。
【００６０】
ここで、本発明のいくつかの実施形態による、部分セグメント化基準を使用して部分ローリングハッシュ値を制限する例示的処理の概略図である図５Ｃおよび図５Ｄを参照する。
【００６１】
図５Ｃに示されているように、ＱK  ５１０Ａは、部分セグメント化基準Ｑ’K-7  ５１０Ａ７〜Ｑ’K  ５１０Ａ０のセットの組合せであるセグメント化基準である。部分セグメント化基準Ｑ’K-5  ５１０Ａ５、Ｑ’K-3  ５１０Ａ３およびＱ’K-1  ５１０Ａ１は、それぞれの部分セグメント化基準に適合していないため、コーディネータ１１０は、セグメント化基準ＱK  ５１０Ａ全体が満たされていないことを決定し得る。部分セグメント化基準Ｑ’K+1  ５１０Ｂ７〜Ｑ’K+8  ５１０Ｂ０のセットの組合せであるセグメント化基準ＱK+8  ５１０Ｂについても同様であり、すべての部分セグメント化基準Ｑ’K+1  ５１０Ｂ７〜Ｑ’K+8  ５１０Ｂ０がそれぞれの部分セグメント化基準に適合しているわけではないため、満たされていない。さらに、すべてがそれらのそれぞれの部分セグメント化基準に適合している２つの後続するセグメント化基準ＱK  ５１０ＡおよびＱK+8  ５１０Ｂには、部分セグメント化基準のシーケンスは存在せず、したがって対応するシーケンスは、セグメント境界または「切断」点が指定され得ない。
【００６２】
一方、図５Ｄに示されているように、コーディネータ１１０は、８つの連続的な部分セグメント化基準Ｑ’K+6  ５１０Ｂ２からＱ’K+13  ５１０Ｃ３のセットが、すべて、それらのそれぞれの部分セグメント化基準に適合していることを確認してもよく、したがってコーディネータは、「切断」５２０を挿入して、対応するシーケンスをセグメントとして指定してもよく、シーケンスは、ローリングシーケンス５１０Ｃ３（これを含む）までのデータ項目を含む。
【００６３】
コーディネータ１１０は、次に、入力データストリーム１２０のシーケンス内の後続するセグメントの特定に進行してもよく、後続するシーケンスは、その前に検出されたセグメントの終了から始まる。
【００６４】
もう一度図２を参照する。決定点である２１２に示されているように、入力データストリーム１２０の終了に到達したことをコーディネータ１１０が検出する場合、処理２００は２１４へ分岐される。コーディネータ１１０が、入力データストリーム１２０が追加データ項目を含むことを検出する場合、コーディネータ１１０は、２０４へ分岐して、入力データストリーム１２０の後続するシーケンスのためにセグメント化処理を繰り返し得る。コーディネータ１１０は、入力データストリーム１２０の終了に到達するまでステップ２０４から２１２を反復し、セグメント化されたデータストリーム１３０を生成する。
【００６５】
２１４に示されているように、入力データストリーム１２０に対するセグメント化処理２００が終了すると、コーディネータ１１０は、セグメント化されたデータストリーム１３０を例えば入出力インタフェース１０２を使用して出力し得る。
【００６６】
セグメント化に引き続いて、コーディネータ１１０は、複数のアプリケーションのうちの１つまたは複数、例えばデータ重複排除のために使用されるべく、セグメント化されたデータストリームを出力し得る。
【００６７】
本発明の様々な実施形態の説明は、例示を目的として提供されたものであり、網羅的であること、または開示された実施形態に限定されることは意図されていない。当業者には、説明された実施形態の範囲および精神を逸脱することなく、多くの修正および変更が明らかであろう。本明細書において使用されている専門用語は、実施形態の原理、実際的なアプリケーション、または市場で見出される技術に対する技術的な改善を最も良好に説明するために、または本明細書において開示されている実施形態についての他の当業者による理解を可能にするために選択された。
【００６８】
本出願からの成就後の特許権の存続期間の間、ＳＩＭＤなどの多くの関連するベクトル処理技術が開発されることが期待され、ＳＩＭＤという用語の範囲には、推測的にすべてのこのような新しい技術を含むことが意図されている。
【００６９】
本明細書において使用されているように、「約」という用語は±１０％を意味している。
【００７０】
「備える」、「備えている」、「含む」、「含んでいる」、「有している」という用語およびそれらの同根語は、「含んでいるが、それには限定されない」を意味している。この用語は、「〜からなっている」および「本質的に〜からなっている」という用語を包含している。
【００７１】
「本質的に〜からなっている」という語句は、構成または方法は、追加要素および／またはステップを含み得るが、それは、追加要素および／またはステップが特許請求される構成または方法の基本的で、かつ、新規な特性を実質的に変えない場合のみであることを意味している。
【００７２】
本明細書において使用されているように、単数形の表現は、そうではないことを文脈が明確に示していない限り、複数の参照を含む。例えば「化合物」または「少なくとも１つの化合物」という用語は、その混合物を含む複数の化合物を含み得る。
【００７３】
「例示的」という語は、本明細書においては、「例、実例または例示として働く」ことを意味するべく使用されている。「例示的」として説明されている任意の実施形態は、必ずしも他の実施形態に優る好ましい、または有利なものとして解釈してはならず、および／または他の実施形態からの特徴の組込みを排除するものとして解釈してはならない。
【００７４】
「任意選択で」という語は、本明細書においては、「いくつかの実施形態では提供され、また、他の実施形態では提供されない」ことを意味するべく使用されている。本発明の任意の特定の実施形態は、このような特徴が競合しない限り、複数の「任意選択の」特徴を含み得る。
【００７５】
明確にするために個別の実施形態の文脈で説明されている本発明の特定の特徴は、単一の実施形態における組合せで提供されてもよいことを認識されたい。一方、簡潔にするために単一の実施形態の文脈で説明されている本発明の様々な特徴は、個別に、もしくは任意の適切な副組合せで、または適切である場合、本発明の任意の他の説明されている実施形態でも提供され得る。様々な実施形態の文脈で説明されている特定の特徴は、これらの要素なしには実施形態が動作しない限り、これらの実施形態の本質的な特徴と見なされるべきではない。
【図１】
0006420489.tif 000002
【図２】
0006420489.tif 000003
【図３Ａ】
0006420489.tif 000004
【図３Ｂ】
0006420489.tif 000005
【図３Ｃ】
0006420489.tif 000006
【図４Ａ】
0006420489.tif 000007
【図４Ｂ】
0006420489.tif 000008
【図４Ｃ】
0006420489.tif 000009
【図５Ａ】
0006420489.tif 000010
【図５Ｂ】
0006420489.tif 000011
【図５Ｃ】
0006420489.tif 000012
【図５Ｄ】
0006420489.tif 000013