(58)【調査した分野】(Int.Cl.,DB名)
前記1つ以上のシャッフル演算は、単一命令複数データ(SIMD)プロセッサ命令セットからの1つ以上の並列シャッフル命令を備える、請求項1に記載の可変長データを復号するためのシステム。
前記1つ以上の記述子に関連する前記1つ以上のオフセットは、固定サイズを伴う入力オフセットと、可変サイズを伴う出力オフセットとを含む、請求項6に記載の可変長データを復号するためのシステム。
前記1つ以上のデータのブロックに関連する前記1つ以上のオフセットは、可変サイズを伴う入力オフセットを備える、請求項6に記載の可変長データを復号するためのシステム。
【発明を実施するための形態】
【0005】
本開示の種々の実施形態によるシステムおよび方法は、データセットを符号化および復号することへの従来のアプローチで体験される、上記および他の欠陥のうちの1つ以上を克服し得る。具体的には、種々のアプローチは、例えば、検索エンジンポスティングリストで遭遇するもの等の整数のシーケンスを含む、データセットの改良型符号化および/または復号を提供する。
【0006】
方法、システム、および/またはデバイスが、種々の実施形態に従って、並列シャッフル演算を利用して、検索エンジンポスティングリストの中の符号化ドキュメント識別番号の差を復号するために提供される。一実施形態では、符号化ドキュメント識別番号の差を復号することは、1つ以上の記述子を読み取ることを含む。各記述子は、符号化ドキュメント識別番号の差のグループに関するサイズ情報を含む。いくつかの実施形態では、符号化ドキュメント識別番号の差は、グループ1進形式で符号化される。符号化ドキュメント識別番号の差のグループを表す、複数のデータが読み取られる。符号化ドキュメント識別番号の差のグループは、1つ以上の記述子に関連する。参照テーブルからの1つ以上の記述子に関連する、1つ以上のシャッフルシーケンスが識別される。1つ以上の並列シャッフル演算は、識別されたシャッフルシーケンスを使用して、符号化ドキュメント識別番号の差のグループを表す複数のデータに行われる。1つ以上の並列シャッフル演算は、複数のデータにゼロの1つ以上のシーケンスを挿入することを含む。符号化ドキュメント識別番号の差のグループを表す、シャッフルされた複数のデータからの複数の復号されたドキュメント識別番号の差が判定される。
【0007】
可変長データを復号するための方法、システム、および/またはデバイスが、種々の実施形態に従って提供される。いくつかの実施形態では、可変長データを復号することは、1つ以上のデータのブロックを読み取ることを含む。各データのブロックは、複数の符号化可変長データを表す。1つ以上のデータのブロックに関連する、1つ以上の記述子が読み取られる。1つ以上の記述子に関連する、1つ以上のシャッフルシーケンスが、参照テーブルから識別される。1つ以上のシャッフル演算が、1つ以上の識別されたシャッフルシーケンスを使用して、1つ以上のデータのブロックに行われる。複数の復号された可変長データが、シャッフルされた1つ以上のデータのブロックから判定される。
【0008】
いくつかの実施形態では、1つ以上のシャッフル演算を行うことは、整数の32ビット表現等の標準形式で1つ以上のデータのブロックの1つ以上の部分を表すように、シャッフルされた1つ以上のデータのブロックにゼロの1つ以上のシーケンスを挿入することを含む。1つ以上のデータブロックは、可変長表現で符号化された複数の整数を表してもよい。いくつかの実施形態では、1つ以上のデータブロックは、可変長表現で符号化された他のデータを表してもよい。
【0009】
シャッフルされた1つ以上のデータのブロックから複数の復号された可変長データを判定することはまた、シャッフルされた1つ以上のデータのブロックから部分結果を判定することを含んでもよい。部分結果と関連付けられる残りの部分は、別のデータのブロックから判定されてもよい。そのような実施形態は、上記で論議されるような完全ブロック変化例を利用してもよい。場合によっては、1つ以上のシャッフル演算は、単一命令複数データ(SIMD)プロセッサ命令セットからの1つ以上の並列シャッフル命令を含んでもよい。
【0010】
いくつかの実施形態は、1つ以上の記述子に関連する1つ以上のオフセットを識別することを含んでもよい。1つ以上の記述子に関連する1つ以上のオフセットは、固定サイズを伴う入力オフセットを含んでもよく、場合によっては、1つ以上の記述子に関連する1つ以上のオフセットは、可変サイズを伴う出力オフセットを含んでもよい。固定サイズは、1つ以上のデータのブロックおよび1つ以上の記述子に含まれるバイト数に依存してもよい。1つ以上の記述子に関連する1つ以上のオフセットは、可変サイズを伴う入力オフセットを含んでもよい。可変サイズは、データのブロックによって表されるデータの数に依存してもよい。いくつかの実施形態はまた、出力オフセットを識別することを含んでもよい。
【0011】
本明細書で説明される技術は、いくつかの可変長符号化形式と、非常に高速の復号方法の使用を可能にし得る復号方法およびシステムとを含む。場合によっては、形式はまた、さらなるデータ圧縮を可能にしてもよい。実施形態は、検索エンジンポスティングリストに利用されてもよいが、本明細書で説明される技術は、データベース等を用いて、番号および他のデータセットのリストをコンパクトに記憶し、それらを効率的に復号することが有益であり得る、他の状況で使用することができる。
【0012】
実施形態は、深いパイプラインを使用する、いくつかのプロセッサにおいて、深いパイプラインの有効性に干渉し得る分岐を回避することを含むが、それに限定されない、多数の利点を提供してもよい。実施形態は、どれだけのデータが読み取られる必要があり得るかを決定するよりもむしろ、場合によっては(オブジェクトサイズ境界上の代わりに)整合させられていないデータを読み取ることを含み、従来の可変長符号化および復号で行われるであろうよりも頻繁に、データを読み書きしてもよい。いくつかの実施形態は、可能な復号オプションを事前計算し、1つ以上のテーブルの中にその情報を記憶することを利用してもよい。いくつかの実施形態は、単一命令複数データ(SIMD)命令を使用して、並行して多くのバイトに作用してもよい。いくつかの実施形態は、パックシャッフルバイト(PSHUFB)のようなシャッフル命令等のSIMD命令を利用してもよい。いくつかの実施形態は、データに関する長さの情報を含む、記述子ビットおよび/または記述子バイトを利用してもよい。
【0013】
標準形式をより効率的に復号するための方法が提供される。本形式は、varint−
SUと呼ばれてもよく、符号化された整数の長さの分割(S)1進(U)表現を伴う可変長整数符号化(varint)を含む。本方法は、たとえ圧縮バイトが自然マシン順序で記憶されない場合があっても、稼働する変化例とともに、この形式を復号するための並列処理を利用してもよい。実施形態は、一度に、符号化データのバイトのグループに作用してもよい。一実施形態では、8バイトのブロックが、一度に作用されてもよい。本方法は、並行して、継続および終端ビットであり得る、記述子ビットを抽出または収集することを含んでもよい。いくつかの実施形態では、この抽出または収集プロセスは、パックマスクバイト移動(PMOVMSKB)命令を使用する。本方法は、事前計算されたシャッフルシーケンスのテーブルの中へのオフセットとして、抽出されたビットを使用してもよい。PSHUFB等の並列置換命令が、データを復号する方法を判定するためにシャッフルシーケンスを使用してもよい。復号されたデータから元の継続および/または終端ビットを除去するように一連のビットシフト演算が行われてもよい。
【0014】
いくつかの実施形態では、パック1進(PU)表現を伴う符号化形式が、復号方法とともに提供される。この形式は、varint−PUと呼ばれてもよい。場合によっては、これは、第1のバイトの中で見出すことができる単一の記述子の中へ、継続および/または終端ビットを移動させることを含んでもよい。これは、データビットが連続的にメモリの中に記憶されることを可能にしてもよく、それは、より効率的に復号することを可能にし得る。
【0015】
いくつかの実施形態では、ブロックとして記憶される、符号化された整数のグループを復号するための方法が提供される。本形式は、いくつかの実施形態ではvarint−GBと呼ばれ得る、グループ2進(GB)表現を含んでもよい。場合によっては、この方法は、並行してデータバイトのグループを復号するために、PSHUFB命令等のシャッフル命令を利用してもよい。シャッフルシーケンスが、記述子バイトの値によって指定されるテーブルから得られてもよい。
【0016】
いくつかの実施形態では、同時に整数のグループに対する符号化形式および復号方法が提供される。この形式は、場合によっては、グループ1進(GU)表現を含み得る形式を含んでもよい。例えば、8バイト整数のグループ(潜在的に不完全)については、本形式は、1進長符号化を伴うvarint−G8IUと呼ばれてもよい。
【0017】
本明細書で言及される別の符号化形式は、1進長符号化を伴う8バイトのグループの情報(それぞれ完全)を表す、varint G8CUである。Varint−G8CUは、概して、整数またはデータが符号化中にブロックの中の残りの空間に適合しないであろう場合を指す。その場合、データの第1の部分が、現在のデータブロックの中に記憶されてもよく、データの残りの部分が、次のブロックの中に記憶されるように持ち越されてもよい。実施形態は、ブロック間の運搬に関する情報を考慮するテーブルを含む、復号方法を含んでもよい。
【0018】
いくつかの実施形態では、空間を節約するために、ビットベクトルとともに上記の圧縮方式のうちの少なくとも1つを利用する、ハイブリッドを含む、可変長符号化形式の変化例が提供される。いくつかの実施形態では、可変長符号化形式は、グループ1進形式を含んでもよい。実施形態は、整数またはデータのうちの1つよりも多くが1バイトに符号化されてもよいように、符号化される次に来る整数またはデータのシーケンスが非常に小さいかどうかを検出することを含んでもよい。これらの整数またはデータは、ビットベクトルとして記憶されてもよい。例えば、n番目のビットは、位置ベース+nにおけるドキュメントがポスティングリストの中にあるかどうかを表してもよい。特別な記述子値は、データバイトのグループが、可変長整数形式のうちの1つを使用するものとして、またはビットベクトルとして解釈されるべきかどうかを示してもよい。
【0019】
いくつかの実施形態では、空間を節約するように、圧縮方式および連長符号化のハイブリッドを含む、可変長符号化形式の変化例が提供される。実施形態は、値自体の代わりに、連長を記憶することによって、全て1の連続等の類似データの連続を符号化してもよい。
【0020】
グループ形式のうちの1つを利用する実施形態は、より大きいグループに容易に拡張されてもよく、これは、より幅広い並列性(例えば、256ビットレジスタ)を提供し得る、プロセッサの付加的な効率性獲得を提供する場合がある。
【0021】
図1は、種々の実施形態による態様を実装するための環境100の実施例を図示する。理解されるように、ウェブベースの環境が説明の目的で使用されるが、種々の実施形態を実装するために、異なる環境が適宜に使用されてもよい。電子クライアントデバイス102は、適切なネットワーク104上で要求、メッセージ、または情報を送受信し、デバイスのユーザに情報を返信するように動作可能である、任意の適切なデバイスを含むことができる。そのようなクライアントデバイスの実施例は、パーソナルコンピュータ、携帯電話、手持ち式メッセージングデバイス、ラップトップコンピュータ、セットトップボックス、携帯情報端末、電子書籍リーダ、および同等物を含む。ネットワークは、イントラネット、インターネット、セルラーネットワーク、ローカルエリアネットワーク、任意の他のそのようなネットワーク、あるいはそれらの組み合わせを含む、任意の適切なネットワークを含むことができる。そのようなシステムに使用される構成要素は、ネットワークの種類および/または選択される環境に少なくとも部分的に依存し得る。そのようなネットワークを介して通信するためのプロトコルおよび構成要素が周知であり、本明細書では詳細に論議されない。ネットワーク上の通信は、有線または無線接続、およびそれらの組み合わせによって可能にすることができる。この実施例では、環境が、要求を受信し、それに応答してコンテンツを供給するためのウェブサーバ106を含むため、ネットワークは、インターネットを含むが、当業者に明白となるように、他のネットワークについては、同様の目的を果たす代替的なデバイスを使用することができる。いくつかの実施形態は、単一の電子クライアントデバイス102を利用してもよい。
【0022】
例証的な環境は、少なくとも1つのアプリケーションサーバ108と、複数のリソース、サーバ、ホスト、インスタンス、ルータ、スイッチ、データ記憶部、および/または本明細書ではデータプレーン110と呼ばれるであろうものを定義する他のそのような構成要素とを含むが、このプレーンのリソースは、データを記憶し、データへのアクセスを提供することに限定されないことを理解されたい。適切なデータ記憶部からデータを取得すること等のタスクを行うように相互作用することができる、連鎖され、または別様に構成され得る、いくつかのアプリケーションサーバ、層、または他の要素、プロセス、または構成要素が存在し得ることを理解されたい。本明細書で使用されるように、「データ記憶部」という用語は、任意の標準、分散、またはクラスタ化環境内で、任意の組み合わせおよび数のデータサーバ、データベース、データ記憶デバイス、およびデータ記憶媒体を含み得る、データを記憶する、アクセスする、および取り出すことが可能な任意のデバイス、またはデバイスの組み合わせを指す。アプリケーションサーバは、アプリケーション用のデータアクセスおよびビジネスロジックの大部分を処理して、クライアントデバイス用の1つ以上のアプリケーションの態様を実行するように、必要に応じてデータ記憶部と一体化するための任意の適切なハードウェアおよびソフトウェアを含むことができる。アプリケーションサーバは、データ記憶部と協働して、受付制御サービスを提供し、この実施例では、HTML、XML、または別の適切な構造化言語の形態で、ウェブサーバによってユーザに供給され得る、ユーザに転送されるテキスト、グラフィック、オーディオ、および/またはビデオ等のコンテンツを生成することが可能である。いくつかの実施形態では、ウェブサーバ106、アプリケーションサーバ108、および同様の構成要素を、データプレーンの一部であると見なすことができる。全ての要求および応答の処理、ならびにクライアントデバイス102とアプリケーションサーバ108との間のコンテンツの送達は、ウェブサーバによって処理することができる。本明細書の他の場所で論議されるように、構造化コードを任意の適切なデバイスまたはホストマシン上で実行することができるため、ウェブおよびアプリケーションサーバは、必要とはされず、かつ構成要素例にすぎないことを理解されたい。
【0023】
データプレーン110のデータ記憶部は、特定の態様に関するデータを記憶するためのいくつかの別個のデータテーブル、データベース、または他のデータ記憶機構および媒体を含むことができる。例えば、図示されるデータプレーンは、製作側のためのコンテンツを供給するために使用することができる、製作データ112およびユーザ情報116を記憶するための機構を含む。データプレーンはまた、報告および分析等の目的で使用することができる、ログデータ114を記憶するための機構を含むことも示される。適宜に、上記の記載された機構のうちのいずれかの中に、またはデータプレーン110内の付加的な機構の中に記憶することができる、ページ画像情報およびアクセス権情報用等のデータ記憶部の中に記憶される必要があり得る、多くの他の態様が存在し得ることを理解されたい。データプレーン110は、それと関連付けられるロジックを通して、アプリケーションサーバ108から命令を受信し、それに応答して、データ、命令、または他のそのような情報を取得する、更新する、または別様に処理するように動作可能である。一実施例では、ユーザが、あるタイプの項目に対する検索要求を提出する場合がある。この場合、データプレーンの構成要素が、ユーザの識別を検証するようにユーザ情報にアクセスし、そのタイプの項目に関する情報を取得するようにカタログ詳細情報にアクセスする場合がある。次いで、ユーザがユーザデバイス102上のブラウザを介して閲覧することができるウェブページ上の結果一覧の中等で、情報をユーザに返信することができる。目的とする特定の項目の情報は、ブラウザの専用ページまたはウィンドウの中で閲覧することができる。
【0024】
各サーバは、典型的には、そのサーバの一般管理および動作のための実行可能プログラム命令を提供する、オペレーティングシステムを含み、かつ典型的には、サーバのプロセッサによって実行されたときに、サーバがその意図した機能を果たすことを可能にする命令を記憶する、コンピュータ可読媒体を含むであろう。サーバのオペレーティングシステムおよび一般機能性のための好適な実装は、公知であり、または市販されており、特に本明細書の本開示を踏まえて、当業者によって容易に実装される。
【0025】
環境は、一実施形態では、1つ以上のコンピュータネットワークまたは直接接続を使用した、通信リンクを介して相互接続される、いくつかのコンピュータシステムおよび構成要素を利用する、分散コンピュータ環境である。しかしながら、そのようなシステムは、
図1で図示されるよりも少数または多数の構成要素を有するシステムで、同等に良好に動作できることが、当業者によって理解されるであろう。したがって、
図1のシステム100の描写は、本質的に例証的であり、本開示の範囲にとって限定的ではないと解釈されるべきである。
【0026】
図1で図示されるもの等の環境は、種々のコンテンツプロバイダまたは他のそのようなエンティティに有用となり得、複数のホストおよび種々のタイプのリソースが、コンテンツを供給すること、ユーザを認証すること、リソースを割り付けること、またはいくつかの他のそのようなタスクのうちのいずれかを行うこと等のタスクを行うために使用される場合がある。これらのホストのうちのいくつかは、同様の機能性を提供するように構成されてもよい一方で、他のサーバは、少なくともいくつかの異なる機能を果たすように構成されてもよい。
【0027】
実施形態は、可変長符号化の種々の方法を提供する。いくつかの実施形態は、バイト指向符号化を含んでもよい。バイト指向符号化は、以下の特性を含む。自然2進表現の全ての有効ビットが保存される。各バイトは、1つだけの整数またはデータからのビットを含有する。符号化の単一バイト内のデータビットは、それらが元のデータまたは整数の中で有した順序付けを保存する。単一の整数またはデータからの全てのビットは、次の整数または次のデータからの全てのビットに先行する。
【0028】
符号化のためのバイト指向形式は、種々の次元に沿って変化してもよい。例えば、データまたは整数の長さは、2進または1進表現で表されてもよい。場合によっては、いくつかのデータバイトが、データおよび長さの情報の両方を含有するように、データまたは整数の長さを表すビットを、対応する整数またはデータのデータビットに隣接して記憶することができる。場合によっては、いくつかの整数またはデータの長さを表すビットを、データビットを含有するバイトとは明確に異なる1つ以上のバイトにともにグループ化することができる。
【0029】
いくつかの実施形態では、1進または2進表現または形式のビットは、連続的にパックされ、またはグループ化されてもよい。1進表現のビットはまた、符号化された整数のデータのバイトにわたって分割されてもよい。場合によっては、2進表現は、符号化された整数またはデータのバイトにわたって分割されてもよい。いくつかの実施形態では、1つ以上の符号化された整数またはデータの長さを表すために使用される、一式のビットは、どのようにしてデータビットが組織化されるかを説明し得るため、記述子と呼ばれてもよい。記述子は、データビットと隣接して位置してもよい。場合によっては、記述子は、データビットと非隣接して位置してもよい。
【0030】
いくつかの実施形態では、各符号化された整数またはデータは、少なくとも1バイトを含んでもよい。2進および1進記述子の両方は、値n−1を記録することによって、整数またはデータの長さnを表してもよい。これは、所与の長さを表すために必要とされるビットの数を削減し得る。代替として、整数またはデータの長さは、nとして長さを記憶することを含んでもよく、それは、長さゼロがゼロデータバイトを伴う恣意的な定数を表すことを可能にし得る。
【0031】
上記で論議される態様は、異なるバイト指向符号化形式の説明を提供するために利用されてもよい。これらの態様は、4バイト以下で符号化することができる整数の形式を符号化するために使用されてもよい。しかしながら、いくつかのインスタンスは、一般的にデータを符号化することを対象にするように拡張してもよい。さらに、例えば、データおよび/または整数が4よりも多くのバイトを伴い得る、符号化原則も利用されてもよい。
【0032】
以下は、異なる可変長符号化のいくつかの異なる実施形態を説明する。付加的な実施形態が、本開示の範囲内で構築されてもよい。一般に、実施形態は、異なる長さを有し得る、符号化された値を含んでもよい。長さは、1つ以上の記述子において符号化されてもよい。2つの特性が、異なる符号化タイプに対する記述子を説明するために利用されてもよい。第1の記述子特性は、配列記述を含んでもよい。記述子の配列記述は、分割、パック、またはグループと呼ばれてもよい。上述のように、分割記述子は、1つ以上の整数またはデータに関する情報も含む、いくつかのバイトの間で、長さ情報を提供する記述子を分配することを含んでもよい。パック記述子は、ともにパックされている記述子ビットを指してもよい。いくつかの実施形態では、パック記述子は、それぞれの整数またはデータの符号化に先行してもよい。グループ記述子は、いくつかの整数またはデータに対する記述子をともにグループ化することを含んでもよい。
【0033】
第2の記述子特性は、長符号化記述を含んでもよい。いくつかの長符号化記述は、個々のビットを利用する1進であってもよい一方で、いくつかの長符号化記述は、2つのビットを利用する2進法であってもよい。いくつかの実施形態は、目的とする符号化された整数またはデータの長さに基づいて、より多くのビットを利用してもよい。
【0034】
異なる実施形態で見出され得る、これらの形式のうちのいくつかの多数の変化例がある。符号化されたデータのバイトは、当技術分野で公知である、リトルエンディアンまたはビッグエンディアン順序で記憶されてもよい。記述子ビットは、最下位(LS)または最上位ビット(MSB)の中に記憶されてもよい。これらの選択肢は、時として、恣意的な慣例として説明されるが、実践では、ある変形例をある機械構造にとって魅力的にする、効率性の考慮事項があってもよい。例えば、分割1進表現(以下で論議される)では、最上位ビットの中で終端を0として表すことにより、1バイトの整数の一般的な事例が、いずれのシフトまたはマスクも伴わずに復号されることを可能にしてもよい。他の実施例では、パック表現については、データビットをともに保って、整合させられていない負荷から利益を得るために、最下位ビットを使用することが有益であり得る。表現が自然バイト順序付けを保存するときに、従来の復号方法がより効率的に作動してもよい一方で、以下で論議されるSIMD方法の実施は、順序付けに依存しなくてもよい。以下の実施例は、概して、リトルエンディアン順序を伴うであろうが、ビッグエンディアン順序が、記述されるものから適応されてもよい。例えば、パック符号化(以下で論議される)を用いると、記述子は、最下位ビットの中に記憶され、リトルエンディアンマシンを用いてデータを得るようにシフトしてもよい。ビッグエンディアンマシンについては、パック符号化に対する記述子は、最上位ビットの中に記憶され、データを得るようにマスクしてもよい。加えて、記述子ビットの中の1および0の意味が、いくつかの実施形態では、交換されてもよい。
【0035】
いくつかの実施形態は、記述子に1進表現を利用してもよい。1進形式については、数量が、継続ビットと呼ばれ得る、連続1ビットの数によって表されてもよく、その後に、終端ビットと呼ばれ得る、終端0が続く、自然慣例が利用されてもよい。いくつかの実施形態は、終端1が後に続く、連続0ビットを使用して、この慣例を逆転させてもよい。自然慣例を利用し、最下位ビットから始まって、例えば、ビット0111は、一実施形態では、3という数を表してもよい。
【0036】
いくつかの実施形態では、分割1進形式は、継続および/または終端ビットのシーケンスの中の符号化された整数またはデータの長さを表すと見なされてもよい。記述子ビットは、各バイトの中のビットが継続または終端を示し得る、分散継続ビットと見なされてもよい。例えば、3バイト整数符号化は、このようなものであってもよい。
【0037】
1xxxxxxx
1xxxxxxx
0xxxxxxx
先頭のビットが、長さ3を表す、1進の数2を形成してもよいことに留意されたい。これは、いくつかのバイトにわたって分割され、1進で表される、長さ情報を伴う整数の可変長表現であるため、いくつかの実施形態では、varint−SUと呼ばれてもよい。いくつかの実施形態では、分割1進表現は、最上位ビットを継続または終端ビットとして使用してもよい。これは、実施形態が終端バイトケースへのシフトを回避することを可能にしてもよい。それはまた、コンパイラがビットを試験するために符号チェックを使用することを可能にしてもよい。しかしながら、いくつかの実施形態は、継続または終端ビットに対するバイトの最下位ビットを利用してもよい。
【0038】
図2Aは、最上位ビット(MSB)の中に位置する記述子ビット210およびバイトの残りのビットの中に位置する7つのデータビット220を伴う、8ビットから成るバイトの分割1進表現の実施形態の実施例を提供する。
図2Bは、整数123456が、分割1進表現を使用して表されてもよく、表現が次のバイトに続く場合は、各バイトがMSB(すなわち各バイトの最左ビット)に1(例えば、211および212)を含み、整数の終了に達した場合に0 213を含む、実施例を提供する。
【0039】
いくつかの実施形態は、記述子のパック1進表現を含んでもよい。これは、いくつかの実施形態では、varint−PUと呼ばれてもよく、かつvarint−SUに類似してもよいが、ともにパックされた記述子ビットを伴う。パックビットは、全てのバイトにわたって分割されるよりもむしろ、第1のバイトの下位ビットの中で収集されてもよい。記述子を保持する下位ビットの選択は、1つの整数に対する全てのデータビットが隣接するように、概して当技術分野で公知である、リトルエンディアンアーキテクチャ上のリトルエンディアン符号化に適切であり得る。同じ理由から、ビッグエンディアンアーキテクチャ上で、上位ビットの中に記述子を置き、ビッグエンディアン符号化を使用することが、復号するのにより効率的であり得る。
図3Aは、最上位ビット320の中に7n個のデータビットを伴って、n個の記述子ビットが最下位(LS)ビット310の中でともにパックされる、パック1進表現の一実施例を提供する。これは、リトルエンディアンアーキテクチャの実施例を提供する。ビッグエンディアンアーキテクチャを用いると、記述子ビットは、最上位ビットの中に配置されてもよい。テーブル330は、データビットの中のバイト数を表すために、どのようにしてn個の記述子ビットが利用され得るかという4つの実施例を提供する。
図3Bは、数が3バイト321を伴うという情報を最初の3つの下位ビット011 311が表す、数123456のパック1進表現の実施例を示す。
【0040】
実施形態はまた、以下でさらに詳細に論議される、グループ1進表現を含んでもよい。
【0041】
いくつかの実施形態は、記述子のパック2進表現を利用してもよい。例えば、第1のバイトの2ビットが、符号化された整数またはデータの長さを2進数で示すように保存されてもよい。
図4Aは、最大で30データビット420とともに、2つの記述子ビット410が利用される、実施形態の実施例を提供する。テーブル430は、データビットの数を表すために、どのようにして2個の記述子ビット410が利用され得るかという4つの実施例を提供する。いくつかの実施形態は、より多いまたは少ないビットを利用してもよい。
図4Bは、123456を符号化するために、どのようにしてパック2進表現が利用され得るかという一実施例を提供する。123456を表すことは、16ビット(すなわち、2バイト)よりも多く、25ビット(すなわち、3バイト)よりも少ない、17データビットを伴う。したがって、2個の記述子ビット411は、3バイト421がデータビットに提供されることを表す。この場合、記述子ビット411は、3バイトの長さを10として表す。
【0042】
他の実施形態は、他の表現を利用してもよい。例えば、2進記述子ビットが、所与の整数またはデータ表現に対するいくつかのバイトにわたって分割され得る、いくつかの場合において、分割2進表現が利用されてもよい。いくつかの実施形態は、以下でさらに詳細に論議される、グループ2進表現を含んでもよい。
【0043】
いくつかの実施形態は、記述子の長さが事前に固定され得る、2進長記述子を利用してもよい。本明細書で説明される実施形態は、概して、固定長で示される2進形式を伴うが、いくつかの実施形態は、記述子自体の長さを記憶するために付加的なメタデータを利用してもよい。加えて、いくつかの実施形態は、固定長kビット2進記述子(1バイトにつき1ビット)を分割することを含んでもよく、それは、少なくともk個のバイトを必要とし得る、バイト指向整数符号化をもたらしてもよい。
【0044】
いくつかの符号化形式は、いくつかの整数またはデータをともにグループ化してもよい。これは、SIMD並列性を活用するための機会を提供してもよい。いくつかの実施形態は、符号化された形態の修正を伴わずに、元の(符号化されていない)整数またはデータに有効ビットを含有する各バイトが現れる、バイト保存型であるバイト指向符号化特性を満たす符号化を含んでもよい。
【0045】
グループ符号化を用いた実施形態は、データバイトから記述子バイトを分離することを含んでもよい。グループ形式でのデータバイトからの記述子バイトの分離は、いくつかの実施形態では、より効率的な復号を可能にしてもよい。この分離は、復号プロセスを簡略化するように、テーブルの使用を可能にしてもよい。しかしながら、パックおよび分割表現もまた、以下でさらに詳細に論議されるように、テーブルの使用から利益を得てもよい。いくつかの実施形態では、グループ形式は、そうでなければ散在記述子ビットを排除するために必要とされ得る、ビット単位の操作を回避してもよい。具体的には、バイト保存型符号化を用いた実施形態は、特に、以下でさらに詳細に説明される、SIMD技法を用いた復号に準拠してもよい。
【0046】
図5Aは、グループ2進形式バイト順序付けの実施例を図示する。
図5Aの実施例では、バイト順序付けは、4つの2ビット2進数を含有する記述子バイト510が先行する、4つの整数(520−a、520−b、520−c、および520−d)のグループを含む。各2ビット2進数は、対応する整数の長さを表す(例えば、右から左に読むと、第1の2ビット数が整数0 520−aを表し、次の2ビット数が整数1 520−bを表す等)。
図5Aで示されるこの形式は、概して、varint−GB形式と呼ばれてもよい。
【0047】
図5Bは、リトルエンディアンバイト順序でグループ2進形式を使用して、どのようにして4つの16進数0xAAAA521−a、0xBBBBBB521−b、0xCC521−c、0xDDDDDDDD521−dが表され得るかを示す。4つの整数は、対応して、2バイト、3バイト、1バイト、および4バイトを占有する。記述子バイト511は、2ビット2進値n−1によって各バイトの長さnを表す。この実施例を使用して、
図5Bで示される記述子バイト511は、それぞれ、01、10、00、および11(右から左へ読む)を含む。01は、整数0xAAAA521−aの2バイト長を表し、10は、整数0xBBBBBB521−bの3バイト長を表し、00は、整数0xCC521−cの1バイト長を表し、11は、整数0xDDDDDDDD521−dの4バイト長を表す。記述子ビットとデータバイトとの間の一貫した順序を維持するために、いくつかの実施形態は、最下位ビットの中に第1の2進数長を記憶してもよい。したがって、
図5Bで示される4つの整数に対する記述子バイト511は、11001001として表されてもよい。バイトアドレスは、増加するビット有意性の順序に合致して、右から左へ増加する。記述子の中のビットのペアの順序は、整数の順序に合致する。
【0048】
グループ2進形式のいくつかの実施形態は、それらの長さを2進数で記憶する、可変数のバイトを占有する固定数の整数を伴う。対照的に、グループ1進形式のいくつかの実施形態は、それらの長さを1進で記憶する、可変数の整数を符号化する固定数のバイトを伴う。例えば、varint−GUと呼ばれる一実施形態では、各符号化された整数の長さの1進表現を含有する1つの記述子バイトとともに、8データバイトがともにグループ化されてもよい。8データバイトのうちのそれぞれは、それらのサイズに応じて、わずか2個の整数および8個もの整数を符号化してもよい。記述子の中のゼロの数は、グループの中で符号化される整数の数を示す。グループ1進形式の実施形態が、
図6Aで示される。この実施形態では、8というブロックサイズ620が、記述子バイト610の全ビットを使用することができる最小限のサイズであってもよく、8のより大きい倍数が、いくつかの実施形態に可能である。
図6Bは、グループ1進形式を使用して4つの整数を符号化することの実施例を提供する。この実施例では、
図5Bのグループ2進形式で示されるのと同じ4つの整数0xAAAA、0xBBBBBB、0xCC、および0xDDDDDDDDが、グループ1進形式を例証するために使用される。これらの値を符号化することは、10バイトを伴うであろうが、8バイトのみがブロック内で利用可能である。最初の3つの整数0xAAAA621−a、0xBBBBBB621−b、および0xCC621−cは、パディング630の2バイトを残して、6バイトを使用してブロック内に適合する。最後の整数0xDDDDDDDDは、次のブロック(図示せず)のために残される。記述子611は、パディング630の2バイトを表す2つのパディングビット11とともに、3つの1進値、0xAAAA621−aの2バイト長を表す01、0xBBBBBB621−bの3バイト長を表す011、および0xCC621−cの1バイト長を表す0を含有する。これらは、11001101という2進値を記述子に与えて、整数と同じ順序で配列される。
【0049】
図6Cは、最大で16データバイトを符号化し得る、グループ1進形式の実施例を提供する。実施形態では、2つの記述子バイト(それぞれ、612−aおよび612−b)が利用され、第1の記述子バイト612−aは、最大で8データバイト622−aの第1のブロックを表し、第2の記述子バイト612−bは、最大で8データバイト622−bの第2のブロックを表す。グループ1進形式の他の実施形態は、一例のみとして、24または32データバイト等について、さらに多くのデータを符号化してもよく、追加記述子バイトが8データバイトの各付加的なグループに提供されてもよい。この実施例は、データバイトと隣接する記述子バイトを示すが、いくつかの実施形態は、データバイトと隣接していない記述子バイトを含んでもよい。
【0050】
いくつかの実施形態で整数を表し得る、符号化されたバイトの全グループが、8バイトブロックの中へ均等に適合するわけではない場合があるため、いくつかの実施形態は、符号化の変化例を提供してもよい。これらは、場合によっては、不完全または完全と呼ばれてもよい。
【0051】
いくつかの実施形態ではvarint−G8IUと呼ばれ得る、不完全ブロック変化例では、実施形態が、必要であればデータブロックを不完全なままにして、8バイトの中に適合する限り多くの整数を記憶してもよい。論議される実施形態では、8は、データブロックの中のバイト数を表す。不完全ブロック変化例の実施形態は、
図6Bに関して上記で論議された。残りの空間は、ゼロで埋められてもよいが、復号時に無視されてもよい。復号する付加的な整数がないときに、記述子の最終(最上位)ビットは、1ビットの未終了シーケンスであってもよい。いくつかの実施形態は、可変サイズデータブロックを使用して、パディングを回避する、この符号化形式の変化例を含んでもよい。
【0052】
一実施形態ではvarint−G8CUと呼ばれ得る、完全ブロック変化例を利用する実施形態では、データブロックの中の全てのバイトが満たされてもよい。例えば、varint−G8CU実施形態では、データブロックの中の8バイト全てが満たされる。以前のように、記述子の中のゼロビットの数は、符号化される完全整数の数を示す。整数が現在のブロックの中の残りの空間を超える状況では、適合する限り多くの整数が、現在のブロックの中に配置される。その整数の残りのバイトは、次のデータブロックの中へ持ち越される。同様に、対応する記述子ビットは、次のブロックの記述子バイトへ持ち越される。
図7Aは、8データバイトr720および記述子バイト710を伴う、完全ブロックを用いたグループ1進形式の実施例を提供し、それは、
図6Aと同様である。
図7Bは、どのようにしてバイトが次のデータブロックに持ち越され得るかを示す。再度、例示目的のみで、
図7Bは、いくつかの他の実施例で使用されるのと同じ4つの整数0xAAAA、0xBBBBBB、0xCC、および0xDDDDDDDDを示す。最初の3つの整数721および対応する記述子ビット711は、正確にvarint−G8IUの場合のように記憶される。しかしながら、varint−G8CUは、第4の整数を異なって処理してもよい。その最初の2つのバイト722は、第1のデータブロックの中に配置され、それを完全に満たし、残りの2つのバイト723は、次のブロックに入る。これら最後の2つのバイトに対応する2つの記述子ビット712は、次のブロックの記述子バイトに入る。2つの記述子バイトにわたって広がるが、この第4の整数に対する記述子ビットの1進値は、依然として符号化された整数の長さ−1を表す。
【0053】
図7Cは、その後に16データバイト724が続く、2個の記述子バイト713を利用してもよい、グループ1進形式の実施例を提供する。この実施形態は、例えば、128ビットレジスタを用いて実装されてもよい。
【0054】
図8は、種々の実施形態による、検索エンジンポスティングリストの符号化ドキュメント識別番号に対するコンピュータ実装方法800を提供する。方法800は、例えば、
図1の環境100で見られるような環境およびデバイスで実装されてもよい。方法800はまた、
図6A−Cおよび/または7A−Cに関して論議されるグループ形式の態様を含んでもよい、および/または利用してもよい。実行可能命令を用いて構成される1つ以上のコンピュータシステムの制御の下で、方法800は、データ記憶のためのブロックサイズを判定することを含んでもよい802。検索エンジンポスティングリストの複数のドキュメント識別番号が受信される804。隣接するドキュメント識別番号の間の差が判定される806。各ドキュメント識別番号の差の符号化表現が判定される808。ドキュメント識別番号の差の符号化表現が、可変長表現を使用する。ドキュメント識別番号の差の一連の複数の符号化表現が識別される810。一連の各ドキュメント識別番号の差の符号化表現のそれぞれのサイズの合計は、データ記憶のための判定されたブロックサイズ以下である。1つ以上の記述子が生成される812。記述子は、ドキュメント識別番号の差の一連の符号化表現の中のドキュメント識別番号の差の符号化表現の数、およびそれぞれのドキュメント識別番号の差の各符号化表現のサイズに関する情報を提供する。記述子は、各サイズの1進表現を用いて、ドキュメント識別番号の差の各符号化表現のサイズを表してもよい。1つ以上の記述子およびドキュメント識別の差の一連の符号化表現が記憶される814。ドキュメント識別番号の差の一連の符号化表現は、グループとして記憶され、1つ以上の記述子は、ドキュメント識別番号の差の符号化表現のグループと隣接して記憶される。
【0055】
図9は、種々の実施形態による、可変長表現を使用してデータを符号化するためのコンピュータ実装方法900を提供する。方法900は、例えば、
図1の環境100で見られるような環境およびデバイスで実装されてもよい。方法800はまた、
図6A−C、7A−C、および/または
図8の方法800に関して論議されるグループ形式の態様を含んでもよい、および/または利用してもよい。実行可能命令を用いて構成される1つ以上のコンピュータシステムの制御の下で、方法900は、データ記憶のためのブロックサイズを判定することを含む902。複数のデータ項目が、識別される904。場合によっては、データ項目は、デルタギャップである。各データ項目の符号化表現が判定される906。データ項目の符号化表現は、可変長表現を使用する。データ項目の複数の符号化表現の第1のサブセットが識別される908。データ項目の複数の符号化表現の第1のサブセットからのデータ項目の符号化表現のそれぞれのサイズの合計は、データ記憶のための判定されたブロックサイズ以下である。第1の記述子が、生成される910。第1の記述子は、第1のサブセットのデータ項目の符号化表現のそれぞれのサイズを表す。データ項目の複数の符号化表現の第1のサブセットが、第1の記憶されたグループとして記憶される912。第1の記述子も、記憶される914。
【0056】
いくつかの実施形態では、第1の記述子が、第1の記憶されたグループと隣接して記憶される一方で、他の場合においては、記述子は、第1の記憶されたグループと非隣接して記憶されてもよい。記述子は、1進形式で各データ項目の各符号化表現のそれぞれのサイズを表してもよい。1進形式は、各長さの表現をゼロによって分離する一方で、各データ項目の各符号化表現のそれぞれのサイズを、1を引いた1進サイズとして表すことを含んでもよい。場合によっては、第1のサブセットと判定されたデータのブロックサイズとの間のサイズの差を表すパディング情報が、第1の記述子に挿入されてもよい。これは、データ項目の複数の符号化表現のサイズが、データ記憶のための判定されたブロックサイズよりも小さい場合であってもよい。
【0057】
いくつかの実施形態では、データ項目の複数の符号化表現からのそれぞれのデータ項目の付加的な符号化表現が識別されてもよい。それぞれのデータ項目の付加的な符号化表現の少なくとも第1の部分が、第1の記憶されたグループの一部として記憶されてもよい。それぞれのデータ項目の付加的な符号化表現の少なくとも第2の部分が、第2の記憶されたグループの一部として記憶されてもよい。第2の記述子が、これらの場合において生成されてもよい。第2の記述子は、第2の記憶されたグループの一部として、それぞれのデータ項目の付加的な符号化表現の少なくとも第2の部分のサイズを部分的に表してもよい。
【0058】
実施形態は、上記で論議される符号化形式のうちの1つ以上を復号するために利用され得る、いくつかの異なる復号方法を含んでもよい。これらの復号方法はまた、本開示で必ずしも論議されない場合がある、他の符号化形式にも有用であり得る。いくつかの実施形態は、単一命令複数データ(SIMD)命令を利用してもよい。実施形態は、異なる符号化された形式で見出される複数のバイトに並行して作用するために、そのような命令を利用してもよい。
【0059】
いくつかの実施形態は、多くのデータセンタで広範に利用されている、IntelおよびAMDによるプロセッサで実装される、Intel(登録商標)64アーキテクチャを含むが、それに限定されない、異なるプラットフォームに利用可能なSIMD命令を利用してもよい。Intel(登録商標)64アーキテクチャでは、一連のSIMD改良が経時的に追加されてきた。SIMD能力の中には、16バイトXMMベクトルレジスタ、およびそれらに作用するための並列命令がある。いくつかの実施形態は、他の形式が類似または異なる能力をIntel(登録商標)64アーキテクチャに提供するために、SIMD命令を利用してもよい。
【0060】
いくつかの実施形態は、シャッフル命令を利用してもよい。一例のみとして、2006年にSSSE3で導入されたPSHUFB命令が、いくつかの実施形態で利用されてもよい。それは、XMMレジスタの中でバイトの置換(「シャッフル」)を行い、特定位置でのゼロの挿入を可能にする。PSHUFBは、データを含有する場所、およびシャッフルシーケンスを含有するレジスタといった、2つのオペランドを有する。データオペランドの元の値が保存される場合、PSHUFBは、シャッフルシーケンス(shf)に従って、バイトのソースシーケンス(src)を宛先シーケンス(dst)に変換すると見なすことができる。以下は、PSHUFBで見られるようなシャッフルシーケンスを提供し得る、擬似コードの一実施例を提供する。
【表1】
【0061】
一例のみとして、シャッフルシーケンスの中のi番目の値は、どのソースバイトをi番目の宛先バイトの中に配置するかを示す。いくつかの実施形態では、シャッフルシーケンスの中のi番目の値が負である場合、ゼロが対応する宛先バイトの中に配置される。
【0062】
いくつかの実施形態は、PSHUFB命令以外に、他のSIMDシャッフル命令を利用してもよい。例えば、PowerPCプロセッサ用のAltiVec/VMX命令セットからのVPERMが、以下で論議される復号方法の目的で、同様の機能を提供してもよい。加えて、他のプラットフォーム用の他のシャッフル命令が、機能を提供してもよく、かつ異なる実施形態で利用されてもよい。
【0063】
図10で図示される実施例は、索引シーケンスi1010、シャッフルシーケンスshf1020、ソースシーケンスsrc1030、および宛先シーケンスdst1040を用いて、一度に4つの32ビット整数のバイト順序を逆転させるために、どのようにしてPSHUFBを使用することができるかを示す。
【0064】
上記で論議されるようないくつかの実施形態は、残りの有効バイトを、目的とする1つ以上の整数またはデータに対して損なわれていない状態にしながら、先頭のゼロバイトを除去する、バイト保存型形式を含んでもよい。次いで、復号は、正しい場所でゼロバイトを再挿入することを含んでもよい。いくつかの実施形態は、シーケンス{0,1,2,3,...}に−1を挿入することによって構築され得る、シャッフルシーケンスを利用してもよい。いくつかの実施形態は、整数のシーケンスに挿入するために−1以外の何かを利用してもよい。このシーケンスを用いると、PSHUFB等のシャッフル命令は、欠落したゼロを挿入しながら、有効データバイトをコピーしてもよい。
【0065】
上記で論議される符号化された形式のうちの1つを復号するためにPSHUFB等のシャッフル命令を使用することの実施例が、
図11で示される。この実施例では、符号化された形式は、varint−G8IUと呼ばれるグループ1進形式である。これは、
図6Bで表される同じデータである。
図11は、シャッフルシーケンスshf1120、索引シーケンスi1110、符号化された形式のソースシーケンスsrc1130、および復号されたデータの宛先シーケンスdst1140を示す。例えば、索引0におけるシャッフルシーケンスの最右バイト(すなわち、最低アドレスを伴うバイト)0が、0番目のソースバイトを取り、それを0番目の宛先バイトに入れる。一般に、i番目のシャッフルシーケンス入力は、どの入力場所からソースを選び、次いで、i番目の宛先場所に配置するかを指示する。別の実施例として、
図11は、i=4について、索引2におけるソースが索引4を伴う宛先に配置されることをシャッフルシーケンスが述べることを示す。加えて、シャッフルシーケンスが−1を有する(他の実施形態では異なる方法で表され得る)ときに、ゼロ値が、その索引における宛先に配置されてもよい。実施例として、索引i=3において、シャッフルシーケンスは、−1を有し、その場合、ゼロが、索引i=3における宛先に配置されるであろう。この特定の実施例では、3つの整数が復号され、図で記述されるように、3という出力オフセットをもたらす。
【0066】
所与の形式について、正しいシャッフルシーケンスは、特定のデータブロックおよびその対応する記述子バイトについて事前計算されてもよい。記述子(および時として付加的な状態)の可能な値について、復号時に必要とされる場合がある、任意のシャッフルシーケンスのテーブルが構築されてもよい。
【0067】
いくつかの実施形態では、テーブル入力はまた、事前計算されたオフセットも含有する。varint−GB形式等のグループ2進形式については、オフセットは、4つの整数を復号するためにいくつのバイトが消費されたかを示してもよく、例えば、16バイトを出力してもよい。他の実施形態は、より多いまたは少ないバイトを出力してもよく、場合によっては、より多いまたは少ない整数を伴ってもよい。varint−GU形式等のグループ1進形式については、オフセットは、いくつの整数が復号されたかを示してもよく、例えば、8バイトを消費してもよい。他の実施形態は、利用された場合、より多くのバイトを消費してもよい。
【0068】
いくつかの実施形態では、テーブル構築が一度だけ起こってもよい一方で、テーブル参照は、グループが復号されるたびに起こってもよい。
【0069】
これらのテーブルの可用性を考慮すると、復号の一般的方法は、以下のように説明されてもよい。
1.データの塊およびその対応する記述子を読み取る。
2.テーブルから適切なシャッフルシーケンスおよび/またはオフセットを調べる。
3.シャッフルを行う。
4.結果を書き込む。
5.入力および出力ポインタを前進させる。
【0070】
図12は、いくつかの実施形態による、いくつかの復号の方法のブロック図を提供する。ブロック1202では、データおよびデータに対応する1つ以上の記述子が読み取られる。ブロック1204では、記述子と関連付けられる1つ以上のシャッフルシーケンスが、事前計算され得るテーブルから識別される。ブロック1206では、シャッフル演算が、シャッフルシーケンスを使用してデータに行われる。この動作は、並行して起こってもよい。ブロック1208では、復号された結果が、シャッフルされたデータから書き込まれる。いくつかの実施形態では、どれだけ多くのデータが読み取られたかに関する情報が返信されるであろう。
【0071】
以下は、いくつかの異なる形式に対する上記のステップの異なる実装を提供するが、他の実施形態は、他の形式に、より多いまたは少ないこれらのステップを利用してもよい。
【0072】
実施形態は、非常に少ない命令を用いて、いくつかの整数またはデータが同時に復号されることを可能にする。いくつかの実施形態は、条件文を必要としなくてもよく、したがって、分岐予測ミスによる性能ペナルティを回避してもよい。論理的複雑性が、コードからテーブルにシフトされてもよい。実施形態は、固定量の読み書きを含み、次いで、どれだけ多くの入力データまたは出力データを実際に処理したかを判定するためにテーブルに依存してもよい。これは、入力および出力バッファが、少なくともこの量を、読み取るまたは書き込むために利用可能な状態にすることを要求し得る。
【0073】
いくつかの実施形態では、データブロックは、任意の固定境界上で整合させられていない。いくつかの実施形態は、整合させられていない読み書きを効率的に行うCPUの能力に依存してもよい。
【0074】
いくつかの実施形態は、場合によっては、以下等の擬似コードを使用して説明され得る、並列復号を利用してもよい。
【0075】
並列(SIMD)シャッフルを使用して、データの塊を復号する。
【表2】
【0076】
この方法が復号プロセスの内側ループを構成するため、実施形態は、関数呼び出しオーバーヘッドを回避するように実装をインライン化してもよい。擬似コードで上記に示されるような実施形態は、3つの入力を取り入れてもよい。
【0077】
・src−符号化された値の入力バイトストリームへのポインタ。
【0078】
・dst−varint−GBおよびvarint−G8IUの場合は、整数の出力ストリームへのポインタ。varint−G8CUの場合は、varint−G8CUのブロックを復号することにより、復号された整数の一部の書き込みをもたらし得るため、dstは、バイトの出力ストリームへのポインタであってもよい。
【0079】
・state−varint−G8CUが、書き込まれた最後の整数の4を法とするバイト数を示すために使用され得る、補助状態。
【0080】
実施形態は、入力ストリームから符号化値を読み取り、復号された整数またはデータを出力ストリームに出力し、その結果として、src、dst、および更新状態の新しい位置を返信してもよい。
【0081】
いくつかの実施形態は、PSHUFB演算によって使用されるXMMレジスタ等のいくつかのレジスタのサイズである、16バイトを読み取ってもよい。しかしながら、より多くのバイトが読み取られてもよく、例えば、いくつかのレジスタは、一例のみとして、8バイトまたは32バイト等に対して、より小さいまたは大きいサイズを有してもよい。単一のバイト記述子に対応するバイト数は、1進形式については8であってもよく、2進形式については多くても16であってもよい。
【0082】
実施形態は、各形式に異なるテーブルを利用してもよい。例えば、テーブルは、各記述子値に1つずつ、varint−GBおよびvarint−G8IU形式に対して256個の入力を有してもよい。varint−G8CU形式については、各記述子および状態ペアに対する入力があり得るため、テーブルは、4×256=1024個の入力を有してもよく、状態は、0=i<4で、整数iである。
【0083】
いくつかの実施形態は、正しい位置にゼロを挿入するデータの16バイトを拡張するために、提供されたシャッフルシーケンスとともにPSHUFB演算を使用し、次いで、その結果を宛先に書き込む、shuffleAndWrite演算等の演算を利用してもよい。他の実施形態は、同様に、正しい位置へのゼロの挿入および結果の書き込みとともにデータの一連のバイトを拡張するために、並列シャッフル演算とともにシャッフルシーケンスを利用してもよい。
【0084】
varint−GBの場合、シャッフルシーケンスは、単一のPSHUFB演算を表す16バイトシーケンスであってもよい。グループが4つの符号化された整数を含有するため、単一のPSHUFBが十分であってもよく、したがって、出力は、16バイトを超えなくてもよい。
【0085】
いくつかの実施形態では、グループ1進形式を復号するために、シャッフルシーケンスは、2つのPSHUFB演算を特定する32バイトシーケンスであってもよい。8バイトデータブロックが、32バイトに拡張し得る、最大8個の整数を符号化してもよいため、第2のPSHUFBが、1進形式のために必要とされてもよい。第1のPSHUFBの出力が、dstから始まる場所に書き込まれてもよく、第2のPSHUFBの出力が、dst+16から始まる場所に書き込まれてもよい。条件文を回避するために、出力が16バイトを超えないときでさえも、第2のシャッフルが行われてもよい。PSHUFBが定位置でレジスタを再配列するため、対応するレジスタは、第2のPSHUFBの前に元のデータでリロードされてもよい。いくつかの実施形態は、単一のシャッフル演算を伴うのみであってもよい。いくつかの実施形態は、2つのシャッフルよりもむしろ1つのシャッフルを利用してもよい。
【0086】
いくつかの1進形式については、上記の擬似コードの中でsrcを増分し得る、入力オフセットは、8バイトであってもよい。varint−G8IUについては、復号された整数の単位で測定される出力オフセットは、1から8個の整数を含有する場合がある、シーケンスの最後のブロックを除いて、2から8の間で異なってもよい。varint−G8CUについては、1つのブロックを復号することにより、復号された整数の一部分の書き込みをもたらしてもよいため、出力がバイトストリームであり、オフセットがバイト単位で測定される。出力は、1から32バイトを出力し得るシーケンスの最後のブロックを除いて、8から32バイトである。
【0087】
2進形式の場合、出力オフセットは、一定の4つの整数であってもよい。varint−GB形式の実施形態は、4で割り切れない長さのシーケンスに対処するように、補助情報を有してもよい。これは、別々に記憶された長さ情報、またはゼロ値がシーケンスの中で現れない場合があるため、終端のゼロが無視され得るという慣例を使用して、行われてもよい。入力オフセットは、4から16バイトの間で異なってもよい。これらの符号化の実施形態については、入力オフセットは、記述子の付加的な1バイトも考慮してもよい。可変オフセットが、事前計算され、形式テーブルに記憶されてもよい。
【0088】
varint−G8CU形式については、テーブルはまた、後続のブロックを復号するために使用される最後の整数の中のバイト数を示す、新しい状態情報を含有してもよい。
【0089】
符号化された形式のうちのそれぞれについては、復号テーブルが事前に構築されてもよい。そのような復号テーブルは、上記で説明されるもの等の復号のための方法で利用されてもよい。各テーブルは、各可能な記述子値および状態値に対応する、テーブル入力を含んでもよい。各テーブルは、論理的に、4つのものを含有する。
・シャッフルシーケンス
・入力オフセット
・出力オフセット
・後続ブロックに使用する状態値
形式のうちのいくつかについては、これらの値のうちのいくつかは、テーブルの中の全ての入力にわたって一定であるため、明示的に記憶される必要がない。
【0090】
テーブル構築プロセスは、記述子バイト値および状態値を入力として取り込むことができる。それは、入力に対するシャッフルシーケンスを構築し、入力および出力オフセットならびに次の状態を計算することができる。
【0091】
いくつかの実施形態は、符号化から実際に生じることができるものである、有効な記述子値に対処してもよい。varint−GBについては、全ての可能なバイト値が有効であり得る。グループ1進形式については、連続的なゼロビット間の距離が4を超えない場合に、記述子が有効であり得る。
【0092】
シャッフルシーケンス、オフセット値、および次の状態値を構築するための方法は、いくつかの実施形態では、以下の抽象関数に依存してもよい。
【0093】
・num(d)は、符号化が記述子値dによって表されるグループ内で完成する、整数の数を生じる。varint−GBについては、これは4である(それが1から4であり得る最後のブロックを除いて)。グループ1進形式については、この値は、dの中の0(終端)ビットの数であってもよい。
【0094】
・len(d; i)は、グループ内のi番目の整数の長さを生じ、各iについて、0=i<nである。これは、varint−GBについてはdの中のi番目の個別ビットペア、または1進形式についてはdの中のi番目の1進値によって判定される、長さであってもよい。
【0095】
・rem(d)は、グループ内の最後の符号化された整数の中の4を法とするバイト数を生じる。これは、それが記述子の中の先頭の1の数に等しい、varint−G8CUに必要とされてもよい。他の形式については、それは0であってもよい。
【0096】
実施形態は、復号されているソースデータの1つのブロックの中のバイト位置を表す、シーケンス{0,1,2,3,...}に−1(またはゼロのブロックを提示する他の可能な数)を挿入するために利用され得る、シャッフルシーケンスを構築してもよい。結果として生じるシャッフルシーケンスは、欠落した先頭のゼロを挿入しながら、有効データバイトをコピーするために、PSHUFB命令等のシャッフル命令によって利用されてもよい。以下の擬似コードは、異なる実施形態に利用され得る、所与の記述子値に対するシャッフルシーケンスの構築の1つの説明を提供する。
【0097】
所与の記述子値に対するシャッフルシーケンスを構築する。
【表3】
【0098】
上記のシャッフルシーケンス構築擬似コードは、2つの入力を含む。
【0099】
・desc:記述子値
・state:以前のグループ内の最後の整数から書き込まれた、4を法とするバイト数。varint−GBおよびvarint−G8IUについては、完全な整数のみが、これらの形式で所与のデータブロックに書き込まれるため、状態の値は常に0である。
【0100】
第1のループは、所与の記述子に対応するグループ内のあらゆる完全整数にわたって反復する。グループ内の各完全整数については、内側ループが、復号された整数を完成させるために必要な先頭のゼロを生成するように−1を挿入して、シャッフル演算のソースから符号化されたバイトを移動させるようにシャッフルシーケンスを設定する。ここで、変数jが、データブロックの中のソースデータ位置にわたって前進する一方で、変数kは、シャッフル演算の宛先位置に対応するシャッフルシーケンスの中の位置にわたって前進する。
【0101】
終結ループが、varint−G8CUに必要とされてもよい。それは、グループ内の最後の不完全な整数のソースから符号化されたバイトを移転させるように、残りのシャッフルシーケンスを設定する。ループは、rem(desc)がゼロである、他のグループ形式に影響を及ぼさない。
【0102】
実施形態はまた、入力オフセットを計算してもよい。1進形式については、入力オフセットは、記述子バイトの数とともに、ブロックデータバイトの数に等しくてもよい。例えば、オフセットは、データの8バイトのブロックおよび1記述子バイトがある場合では、9となるであろう。varint−GB等のグループ2進形式については、所与の記述子dに対する入力オフセットは、以下のように表されてもよく、
【数1】
【0103】
これは、記述子バイトに対する1を加えたグループ内の整数の長さの合計である。
【0104】
varint−GBおよびvarint−G8IUに対する出力オフセットは、num(d)整数に等しくてもよく、iは、varint−GBについては4であってもよい。varint−G8CUに対する出力オフセットは、以下のように表されてもよく、
4・num(d)−state+rem(d)
後続のブロックに対する状態値は、varint−GBおよびvarint−G8IUについては0であってもよく、varint−G8CUについてはrem(d)であってもよい。
【0105】
いくつかの実施形態は、上記で説明される方法の特定の実装を利用してもよい。例えば、以下の説明は、上記で論議される特定の形式のうちのいくつかを復号するためのいくつかの特定の方法を提供する。
【0106】
いくつかの実施形態では、varint−GBにおいて整数のグループ(いくつかの実施形態では4であってもよい)を復号するために、長さおよびシャッフルシーケンス入力が、記述子によって示されるテーブルで調べられてもよく、シャッフルシーケンスが、入力データに適用されてもよく、入力が、テーブルで見出される長さだけ前進させられてもよい。出力は、4つの整数の長さ(すなわち、16バイト)だけ進んでもよい。これは、以下の擬似コードで示されてもよい。この方法は、他のグループ2進形式、および分割1進形式等の他の形式のうちのいくつかに適用可能かつ適応可能であってもよい。
【0107】
並列シャッフルを使用して、varint−GB形式で記憶された4つの整数を復号する。
【表4】
【0108】
上記の復号とともに利用され得る、長さおよびシャッフルシーケンスのテーブルが、異なる方法で構築されてもよい。いくつかの実施形態では、テーブルは、記述子バイトの各可能な値の入力を有する。記述子バイトの全ての可能な値にわたって反復し、テーブル入力は、所与の記述子バイト値に対して構築されてもよい。テーブルに記憶された長さは、記述子バイト自体を過ぎて進むように、1を加えた、記述子バイトの中の各ペアのビットによって表される長さの合計であってもよい。シャッフルシーケンスは、ソースから宛先へバイトをマップするよう構築されてもよいが、最大4バイトまで先頭のゼロで各復号された整数を満たすために、−1で埋められてもよい。以下は、そのようなテーブルを構築する1つの方法を説明してもよい。このテーブル構築の方法は、他のグループ2進形式、および分割1進形式等の他の形式のうちのいくつかに適用可能かつ適応可能であってもよい。
【0109】
単一のシャッフルおよびvarint−GBデコーダに対する長さのテーブル入力を構築する。
【表5】
【0110】
varint−G8IUを復号することは、varint−GBを復号することよりもいくらか複雑であり得る。8個もの整数が単一のブロックの中で符号化されてもよいため、それらの復号された形態は、32バイトもの多くを占有してもよい。Intel(登録商標)64XMMベクトルレジスタ等のいくつかのアーキテクチャは、16バイトを有するのみであってもよいため、2つのシャッフルが、出力の完全32バイトを生成するように行われてもよい。いくつかの実施形態は、1つだけのシャッフル演算を用いて復号することができてもよい。第2のシャッフルが必要であるかどうかを確認するようにチェックするよりもむしろ、いくつかの実施形態は、単純に、両方のシャッフルを毎回行い、出力データのどれだけ多くを保つかを判定してもよい。以下の擬似コードは、varint−G8IU形式で8バイトを復号する1つのそのような方法の1つの説明を提供する。
【0111】
2つのシャッフルを使用して、varint−G8IU形式で記憶された8バイトを復号する。
【表6】
【0112】
varint−G8IUの1つのブロックを復号した後、入力は、8バイトだけ進められてもよいが、出力位置は、復号される整数の数に応じて可変量で進んでもよい。いくつかの実施形態では、たとえ8バイトブロックのみが復号され得ても、ベクトルレジスタは、16バイトの入力データで満たされてもよい。この方法は、他のグループ1進形式、および分割1進形式等の他の形式のうちのいくつかに適用可能かつ適応可能であってもよい。
【0113】
一実施形態では、所与の記述子の位置1310を用いてシャッフルシーケンス1320を構築する動作が、
図13で示される。これは、
図6Bで表される同じデータである。この実施例については、記述子バイトは、11001101を含有し、出力長は、3つの4バイト整数である。12バイトの出力のみが生成されるため、この場合、第2のシャッフルの出力は必要とされない。長さおよびシャッフルシーケンス入力が、記述子バイトの各可能な値に1つずつ、テーブルに対して構築されてもよい。以下の擬似コードは、どのようにして各テーブル入力が作成され得るかという一実施例を示す。この方法は、バイト位置(0から7)をシャッフルシーケンスにコピーするが、記述子の中の終端(ゼロ)ビットに遭遇するたびに、先頭の(最上位)ゼロバイトを用いて現在の出力整数を完成させるように、シャッフルシーケンスを−1で埋めてもよい。
【0114】
varint−G8IUデコーダに対する所与のテーブル入力の2つのシャッフルシーケンスを構築する。一対の隣接する16バイトシャッフルシーケンスを、単一の32バイトシーケンスとして構築する。
【表7】
【0115】
いくつかの実施形態では、テーブル入力が、全ての可能なバイト値に対して構築されてもよいが、全てのバイト値が有効で可能な記述子に対応するわけではない場合がある。有効な記述子が、3つよりも多くの連続1ビット(長さで符号化整数4バイトを示す)を持たなくてもよい一方で、無効な記述子は、それを有してもよい。この状態を防ぐために、「bytes−remaining−in−integer>0」テストが、上記の擬似コードで利用されてもよい。
【0116】
varint−G8CU形式を復号することを伴う実施形態は、付加的な複雑性を伴い得る。例えば、データブロックに完全には適合しない整数が、部分的に書き込まれてもよく、その残りのバイトは、後続データブロックに記憶される。この理由により、長さおよびシャッフルシーケンスに使用される、この形式に対するテーブルを用いた実施形態は、異なるバイト数を持ち越す場合において、異なるデータを含有してもよい。テーブルは、2つの次元を有すると見なすことができ、一方は、今までのところ部分的に復号された整数に書き込まれたバイト数によって索引付けされ、他方は、記述子バイト値によって索引付けされる。加えて、各テーブル入力は、シャッフルシーケンスおよび出力長だけでなく、部分出力バイトカウントの新しい値も含有してもよい。したがって、いくつかの実施形態は、以下の擬似コードで表されるような、varint−G8CUの1つのブロックのための復号方法を利用してもよい。
【0117】
2つのシャッフルを使用して、varint−G8CU形式で記憶された8バイトを復号する。
【表8】
【0118】
varint−G8CUに対するテーブル構築は、varint−G8IUに類似し得るが、本方法は、部分的に符号化された整数に対するバイト数(ここではpartial−output−countと呼ばれる)が、以前のブロックを復号している間にすでに書き込まれていてもよいという事実を考慮してもよい。これは、いくつかの実施形態については、varint−G8CU等のいくつかの形式を復号するために利用され得る、テーブルに対するシャッフルシーケンスを構築するために利用され得る、以下の擬似コードで示されてもよい。出力が、もはや完全32ビット整数を生成すると保証されない場合があるため、出力位置は、整数よりもむしろバイト単位で前進させられてもよい。以下の擬似コードでの長さの計算が、この差を反映してもよい。
【0119】
varint−G8CUデコーダに対する所与のテーブル入力の2つのシャッフルシーケンスを構築する。一対の隣接する16バイトシャッフルシーケンスを、単一の32バイトシーケンスとして構築する。
【表9】
【0120】
上記は、種々の実施形態による、グループ形式に対する復号方法およびテーブル構築方法のいくつかの異なる実施例を提供するが、復号およびテーブル構築のための他の方法が、本開示の範囲内で利用されてもよい。
【0121】
さらに、上記の復号および/またはテーブル構築方法は、並列シャッフル演算、および/または分割1進、分割2進、パック1進、および/またはパック1進形式等の他の符号化形式を復号するためのテーブルを利用し得る、他の実施形態によって利用されてもよい。
【0122】
一実施形態では、分割1進形式を復号するための方法が提供されてもよい。実施形態は、この形式を復号するためのSIMD命令を利用し得る、並列方法を利用してもよい。いくつかの実施形態は、一度に、例えば、8バイトの符号化されたデータ等のバイトのブロックに作用してもよい。符号化されたデータは、分割1進符号化形式に従って符号化されてもよい。各バイトの中で見出される継続ビットまたは終端ビットであり得る、記述子ビットは、並行して抽出または収集されてもよい。いくつかの実施形態では、この収集プロセスは、PMOVMSKB命令等のSIMD命令を利用してもよい。例えば、PMOVMSKB命令は、バイトの集合から最上位ビットを抽出してもよい。他の並列命令もまた、これらのビットを収集または抽出するために利用されてもよい。記述子と呼ばれ得る、抽出されたビットは、事前計算されたシャッフルシーケンスのテーブルの中へのオフセットとして使用されてもよい。シャッフルシーケンスを使用する、PSHUFB等の並列置換命令が、どのようにしてデータを復号するかを判定するために使用されてもよい。いくつかの実施形態では、復号されたデータから元の継続および/または終端ビットを除去またはサニタイズするように、一連のビットシフト演算が適用されてもよい。テーブルおよびシャッフル演算を使用して復号するための同様の方法が、分割2進符号化形式に利用されてもよい。いくつかの実施形態は、バイト順序の変化が起こる場合でさえも、個別ステップを使用して同様の結果を達成してもよい。このプロセスは、2つの置換を構成するシャッフルシーケンスを事前計算することを伴ってもよく、1つの置換は、形式を復号し、もう1つの置換は、バイト順序を変化させる。
【0123】
いくつかの実施形態では、上記で論議されるようなvarint−G8IU等のグループ1進形式に対するテーブルを構築するための方法が、PSHUFB等のシャッフル命令を使用して、分割1進符号化データを復号するために利用されてもよい。
【0124】
図14は、種々の実施形態による、検索エンジンポスティングリストの中の符号化ドキュメント識別番号の差を復号するためのコンピュータ実装方法1400を提供する。方法1400は、例えば、
図1の環境100で見られるような環境およびデバイスで実装されてもよい。方法1400はまた、少なくとも
図5A−C、6A−C、および/または7A−Cに関して説明されるようなグループ形式を含む、上記で論議されるようなグループ形式を復号することの態様を含んでもよい、および/または利用してもよい。実行可能命令を用いて構成される1つ以上のコンピュータシステムの制御の下で、方法1400は、1つ以上の記述子を読み取ることを含む1402。各記述子は、符号化ドキュメント識別番号の差のグループに関するサイズ情報を含む。いくつかの実施形態では、符号化ドキュメント識別番号の差は、グループ1進形式で符号化される。符号化ドキュメント識別番号の差のグループを表す複数のデータが読み取られ1404、符号化ドキュメント識別番号の差のグループは、1つ以上の記述子に関連する。参照テーブルからの1つ以上の記述子に関連する、1つ以上のシャッフルシーケンスが識別される1406。1つ以上の並列シャッフル演算が、識別されたシャッフルシーケンスを使用して、符号化ドキュメント識別番号の差のグループを表す複数のデータに行われる1408。1つ以上の並列シャッフル演算は、複数のデータにゼロの1つ以上のシーケンスを挿入することを含む。符号化ドキュメント識別番号の差のグループを表す、シャッフルされた複数のデータからの複数の復号されたドキュメント識別番号の差が判定される1410。
【0125】
図15は、種々の実施形態による、可変長データを復号するためのコンピュータ実装方法1500を提供する。方法1500は、例えば、
図1の環境100で見られるような環境およびデバイスで実装されてもよい。方法1500はまた、少なくとも
図5A−C、6A−C、および/または7A−C、および/または
図14の方法1400に関して説明されるようなグループ形式を含む、上記で論議されるようなグループ形式を復号することの態様を含んでもよい、および/または利用してもよい。実行可能命令を用いて構成される1つ以上のコンピュータシステムの制御の下で、方法1500は、1つ以上のデータのブロックを読み取ることを含む1502。各データのブロックは、複数の符号化された可変長データを表す。1つ以上のデータのブロックに関連する、1つ以上の記述子が読み取られる1504。1つ以上の記述子に関連する1つ以上のシャッフルシーケンスが、参照テーブルから識別される1506。1つ以上のシャッフル演算が、1つ以上の識別されたシャッフルシーケンスを使用して、1つ以上のデータのブロックに行われる1508。複数の復号された可変長データが、シャッフルされた1つ以上のデータのブロックから判定される1510。
【0126】
いくつかの実施形態では、1つ以上のシャッフル演算を行うことは、整数の32ビット表現等の標準形式で1つ以上のデータのブロックの1つ以上の部分を表すように、シャッフルされた1つ以上のデータのブロックにゼロの1つ以上のシーケンスを挿入することを含む。1つ以上のデータブロックは、複数の可変長整数を表してもよい。いくつかの実施形態では、1つ以上のデータブロックは、他の可変長データを表してもよい。
【0127】
シャッフルされた1つ以上のデータのブロックから複数の復号された可変長データを判定することはまた、シャッフルされた1つ以上のデータのブロックから部分結果を判定することを含んでもよい。部分結果と関連付けられる残りの部分は、別のデータのブロックから判定されてもよい。そのような実施形態は、上記で論議されるような完全ブロック変化例を利用してもよい。場合によっては、1つ以上のシャッフル演算は、単一命令複数データ(SIMD)プロセッサ命令セットからの1つ以上の並列シャッフル命令を含んでもよい。
【0128】
いくつかの実施形態は、1つ以上の記述子に関連する1つ以上のオフセットを識別することを含んでもよい。1つ以上の記述子に関連する1つ以上のオフセットは、固定サイズを伴う入力オフセットを含んでもよく、場合によっては、1つ以上の記述子に関連する1つ以上のオフセットは、可変サイズを伴う出力オフセットを含んでもよい。固定サイズは、1つ以上のデータのブロックおよび1つ以上の記述子に含まれるバイト数に依存してもよい。1つ以上の記述子に関連する1つ以上のオフセットは、可変サイズを伴う入力オフセットを含んでもよい。可変サイズは、データのブロックによって表されるデータの数に依存してもよい。いくつかの実施形態はまた、他の出力オフセットを識別することを含んでもよい。
【0129】
パック1進またはパック2進等のパック形式を伴う実施形態はまた、上記で論議されるものといくつかの類似点を共有する、復号方法を利用してもよい。パック形式を復号することを伴う実施形態は、符号化された形式のビットをマスクおよびシフトするために使用される、テーブルを事前計算することを含んでもよい。例えば、パック2進形式を利用する、いくつかの実施形態では、第1のバイトの下位2ビットは、整数を符号化するために、いくつのバイトが必要とされ得るかを示すことができる。そのようなパック2進形式を復号するための方法は、以下のステップを含んでもよい。場合によっては4であり得る、バイトのグループが、隣接メモリに読み込まれてもよい。読み取られたデータの第1のバイトが、マスクのテーブルで調べるために使用されてもよい。結果は、記述子を排除するように、右に2ビット、シフトされてもよい。どのバイトを保つかを判定し、結果を出力するように、マスクが適用されてもよい。入力ポインタが、記述子による量だけ移動させられてもよい。
【0130】
パック形式を復号し得る実施形態は、条件文またはループを回避してもよい。いくつかの実施形態では、シフトおよびマスクが、出力に書き込む同じ命令文に組み込まれてもよい。これは、記述子のコピーを保存する必要性を回避してもよい。いくつかの実施形態では、マスクは単に、所望され得るバイト全てにわたって1のビットを有し、所望されないバイトにわたって0のビットを有してもよい。
【0131】
いくつかの実施形態では、パック1進形式を復号するために、同様の方法が利用されてもよい。いくつかの実施形態では、パック2進形式の場合のように2ビットをシフトする代わりに、実施形態は、テーブルに従って異なる量でシフトしてもよい。
【0132】
いくつかの実施形態は、次に論議されるような付加的な補助符号化方法を利用してもよい。これらは、ハイブリッド符号化または形式と呼ばれてもよい。これらのハイブリッド形式では、符号化の基礎形式が使用されるか、またはより圧縮された代替形式が使用されるかを示すために、マーカが使用されてもよい。
【0133】
いくつかの実施形態では、空間を節約するように、所与の圧縮方式およびビットベクトルのハイブリッドを含む、可変長符号化形式の変化例が提供される。いくつかの実施形態では、可変長符号化形式は、グループ1進形式を含んでもよい。実施形態は、整数またはデータのうちの1つよりも多くが1バイトに符号化されてもよいように、符号化される次に来る整数またはデータのシーケンスの全構成要素が非常に小さいかどうかを検出することを含んでもよい。これらの整数またはデータは、ビットベクトルとして記憶されてもよい。例えば、n番目のビットは、位置ベース+nにおけるドキュメントがポスティングリストの中にあるかどうかを表してもよい。特別な記述子値は、データバイトのグループが、可変長整数形式のうちの1つを使用するものとして、またはビットベクトルとして解釈されるべきかどうかを示してもよい。
【0134】
ビットベクトルを利用する実施形態は、1進形式またはシーケンスの中に小さい整数またはデータに関するデータを記憶してもよい。1進シーケンスは、ゼロによって分離される、a−1、b−1、c−1...の1進表現を連結させることによって、小さい値a、b、c、...のシーケンスを表してもよい。そのようなシーケンスは、バイトでシーケンス表現の長さを示すバイトによって先行されてもよい。一例のみとして、8未満の整数連が、1進シーケンスにパックされてもよい。2つ以上の整数の符号化値が、単一のバイトの中へ適合する、すなわち、それらの合計が8以下であるときに、1進シーケンスが使用されてもよい。これは、この形態の符号化が、上記で論議される他の形式のうちの1つからの対応する可変長表現と同程度の空間しか使用しないことを保証してもよい。
【0135】
例えば、以下のハイブリッド1進シーケンス方法は、G8IUおよびG8CUを含む、グループ1進形式に適用されてもよい。各ブロック境界において、1は、場合によってはデルタギャップであり得る小さい数のシーケンスが、1進数のシーケンスとして符号化される、代替符号化に潜在的に切り替わることができる。記述子の下位4ビットは、
図16で示されるように、マーカ1610として使用されてもよい。例えば、それらの値が、有効なG8IUまたはG8CU記述子では起こらないであろう、1111である場合に、代替圧縮形態を使用して、データバイトが符号化されていることを示すことができる。場合によっては、代替圧縮形態が使用されていることを示すために、他のマーカが利用されてもよい。この実施例では、記述子の上位4ビット1615が、1進シーケンス表現のバイトの長さ引く1を表す。
【0136】
基礎から代替圧縮形式に切り替えるときを判定するために、異なる条件が使用されてもよい。一実施形態では、エンコーダが、符号化される次の2つの整数を見る。次の2つの整数が両方とも、1進表現を使用した1バイトの中へ適合するであろう場合には、これらの値で始まる1進シーケンスを作成することができ、最大バイト長(16)に達するまで、または次のデルタギャップの1進表現が、ビット単位で1バイトのサイズである8を超えるまでのいずれかで、継続することができる。2つの整数が1進表現を使用する1バイトの中へ適合しないであろう場合には、基礎符号化(例えば、G8IUまたはG8CU等)が、このブロックに使用される。
【0137】
例えば、符号化される値の次のシーケンスが、2、1、1、4、1、1、3、1、5、1、2、9であると想定されたい。最初の2つの値の1進符号化は、01および0となるであろう。連結値が1バイト未満を占有するため、圧縮1進シーケンスを使用することができる。各1進値は、1進では1バイトの中で表すことができない、値9に達するまで連結させられる。9より前の値は、
図17で示される、1つの1進シーケンスとして記憶することができる。シーケンスは、3バイトの記憶を必要とする、22ビット1720を占有する。ハイブリッド形式が使用されていることを示すために、1111のマーカ1710が使用される。記述子の中の上位ビット1715は、2進では3よりも1小さい、0010に設定することができる。付加的なビットが最終バイトの中に残された場合、それらは、1 1725に設定され、シーケンスの最終バイトの中の上位の1は、未終了1進値を表すため、常に復号時に無視される。
【0138】
いくつかの実施形態では、空間を節約するように、所与の圧縮方式および連長符号化のハイブリッドを含む、可変長符号化形式の変化例が提供される。いくつかの実施形態では、可変長符号化形式は、グループ1進形式を含んでもよい。実施形態は、値自体の代わりに、連長を記憶することによって、全て1の連等の類似データの連続を符号化してもよい。一例のみとして、値1の連長が、いくつかの索引で起こってもよい。いくつかの製品検索との関連で、製品の種類または名前等の共通のワードの反復により、反復が見出されてもよい。実施形態は、いくつかの異なる連長符号化を含んでもよい。いくつかの実施形態は、固定長記述子を伴う連続を含んでもよい。これらの実施形態は、長さ−3を表す単一のバイトで符号化され得る、3から258の間の長さの連続を含んでもよい。いくつかの実施形態は、可変長記述子を伴う連続を含んでもよい。これらの実施形態は、上記で論議されるように、分割1進形式を使用して符号化され得る、3から2^28+2の間の長さの連続を含んでもよい。いくつかの実施形態は、固定長記述子を伴うブロックの連続を含んでもよい。これらの実施形態は、2進値m−1を用いて4ビットで符号化され得る、[1,16]の中のmに対する長さ8mの連続を含んでもよい。いくつかの実施形態は、1の連続が少なくとも3の長さであるときに、連長符号化を利用してもよい。これは、連長符号化が、対応する可変長表現と同程度の空間しか使用しないことを確実にしてもよい。
【0139】
以下は、固定長記述子を伴うブロックの連続を用いたハイブリッド符号化(RBC)の実施例を提供する。この実施例は、G8IUおよびG8CUを含む、グループ1進形式に適用されてもよい。
【0140】
例えば、特定の値がデータの中で非常に一般的である場合、その値の継続的連続を見て、連長だけを記憶することによって、高圧縮を達成することが可能である。いくつかの用途では、値1が非常によく見られるため、以下は、この様式で1の連続を特異的に表すであろう。当然ながら、他の定数の連続を同様に符号化することができる。空間を節約するために、bがカウンタの粒度である、b個の継続的な1のブロックを数えることができる。以下の実施例については、bは8に等しくなるであろうが、bの他の値を明確に使用することができる。
【0141】
上記で論議されるように、各ブロック境界において、1は、継続的な1の連続が、連長を示すカウントによって表される、代替符号化に潜在的に切り替わることができる。記述子の下位4ビットをマーカとして使用することができる。例えば、
図18で示されるように、記述子の上位ビットが以下のような連長を表すことを示すために、有効なG8IUまたはG8CU記述子では起こらないであろう、1111として表される、マーカ1810が利用されてもよい。上位4ビット1815の2進値がvである場合、連長はb*(v+1)である。これは、長さがbおよび16bの間のbの任意の倍数である、連続の表現を可能にする。
【0142】
例えば、bまたはより多くの1の次に来る連続が見られるときはいつでも、圧縮RBC符号化が利用されてもよい。128個の値が符号化されたとき、または1の連続が終了するときのいずれかで、RBCシーケンスは終了することができる。1の次に来る連続の長さがbの倍数ではない場合、連長を超えない最大倍数を使用することができ、残りの値は、(そのブロックの中に記憶される、あらゆる他の次に来る値とともに)通常の基礎符号化を使用して次のブロックの中に記憶される。この表現は、極めてコンパクトであり、いずれのデータバイトも必要とせず、全ての情報は記述子バイトの中にある。
【0143】
例えば、シーケンスの中の次の値が、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、5であると想定されたい。b=8であり、少なくとも8個の1があるため、連長符号化シーケンスを構築することができる。連続の中の1の数は、2*8+3である、19である。8の直近の倍数が16であるため、これら16だけに対するRBC表現を使用することができる。「2」は、グループ8の数を表し、参照番号1915において
図19で示されるように、値2−1=1を記憶することができる。そして再度、この実施例では1111として表される、マーカ1910も利用される。
【0144】
いくつかの実施形態は、固定長記述子を伴う連続を用いたハイブリッド符号化方式(RC)を含んでもよい。この方法は、主に分割1進形式(varint−SU)に適用されるが、グループ1進またはパック1進と組み合わせることもできる。以下は、分割1進を用いた実装の説明を提供するが、他の1進形式に適用されるように修正されてもよい。
【0145】
上記で論議されるように、定数値の連続は、それらの長さによって表されてもよい。しかしながら、この実施例については、別個の記述子バイトがSU形式で利用されない。したがって、値ゼロが、
図20で示されるように、マーカ2010として利用されてもよく、これは、値ゼロが入力で発生しないことを要求してもよい(例えば、ポスティングリストの中のデルタギャップの場合である)。符号化表現の中の各バイトは、varint−SU符号化整数の中の最初のバイト、またはRC形式用のマーカである値ゼロのいずれかであってもよい。値がゼロではない場合、このバイトは、通常のSU符号化整数の中の第1のものであり得る。値がゼロである場合、連長情報を記憶するために、次のバイトを使用することができる。具体的には、長さの連続r>2については、参照番号2020で示されるように、r−3という2進値がバイトの中に記憶される。これは、3から258の長さの連続の符号化を可能にする。
【0146】
RC形式を使用するときを判定するために、次に来る値のシーケンスを調査することができる。少なくとも次の3つの値が1である場合、(最大で258の)1の連続全体を圧縮形態で符号化することができる。そうでなければ、SU形式の次の値を記憶することができる。RC形式に切り替わるために必要とされる最小長の閾値は、3である必要はなく、3は、符号化がvarint−SUよりもコンパクトであることを保証する最小閾値である。
【0147】
例えば、シーケンスの中の次の値が、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、5であると想定されたい。
図21は、この1のシーケンスをRC形式で記憶することの実施例を示す。シーケンスが少なくとも3つの1で始まるため、1のシーケンス全体をRC形式で符号化することができる。これは、第1のバイト2110の中のゼロ、および第2のバイト2120の中の19から3を引いた連長を記憶することを意味する。連続の後の5は、基礎varint−SU形式で記憶することができる。
【0148】
いくつかの実施形態は、可変長記述子を伴う連続を用いたハイブリッド符号化方法(RV)を含んでもよい。この方法は、主に分割1進形式(varint−SU)に適用されるが、グループ1進またはパック1進と組み合わせることもできる。
【0149】
上記で論議されるように、定数値の連続は、それらの長さによって表すことができ、
図22で見られるようなマーカ2210として、第1のバイトの中の値ゼロを使用することができ、これは、値ゼロが入力で発生しないことを要求してもよい(例えば、ポスティングリストの中のデルタギャップの場合である)。符号化表現の中の各バイトは、varint−SU符号化整数の中の最初のバイト、またはRV形式用のマーカである値ゼロのいずれかであってもよい。値がゼロではない場合、このバイトは、通常のSU符号化整数の中の第1のものであり得る。値がゼロである場合、varint−SU形式で連長情報を記憶するために、次の1−4バイト2220を使用することができる。値自体ではなく、連長が記憶される。再度、具体的には、長さの連続r>2については、r−3という2進値を符号化表現の中に記憶することができる。varint−SUが4バイトの中に最大で2^28−1の整数を記憶することができるため、これは、3から2^28+2の長さの連続の符号化を可能にする。
【0150】
RV形式を使用するかどうかを決定するための基準は、RC形式と同一となり得、次に来る値のシーケンスを調査することができる。少なくとも次の3つの値が1である場合、(最大で2^28+2の)1の連続全体を圧縮形態で符号化することができる。そうでなければ、次の値をSU形式で記憶することができる。RV形式に切り替わるために必要とされる最小長の閾値は、3である必要はなく、3は、符号化がvarint−SUよりもコンパクトであることを保証する最小閾値である。
【0151】
例えば、シーケンスの中の次の値が300個の1であり、その後に異なる数が続くと想定されたい。シーケンスが少なくとも3つの1で始まるため、シーケンス全体をRV形式で符号化することができる。これは、第1のバイトの中のゼロ、および300から3を引いた連長をvarint−SU形態で記憶することを意味する。
図23は、RV形式で300個の1を記憶することの実施例を示す。最右バイトは、マーカバイト2310を表し、左側の第2および第3のバイト2320は、varint−SU形式の数量297を表す。
【0152】
上記で論議されるように、種々の実施形態は、場合によっては、1つ以上のユーザコンピュータ、コンピュータデバイス、またはいくつかのアプリケーションのうちのいずれかを操作するために使用することができる処理デバイスを含むことができる、多種多様な動作環境で実装することができる。ユーザまたはクライアントデバイスは、標準オペレーティングシステムを実行するデスクトップまたはラップトップコンピュータ等のいくつかの汎用パーソナルコンピュータのうちのいずれか、ならびにモバイルソフトウェアを実行し、いくつかのネットワーキングおよびメッセージングプロトコルをサポートすることが可能なセルラー、無線、および手持ち式デバイスを含むことができる。そのようなシステムはまた、種々の市販のオペレーティングシステムのうちのいずれか、ならびに開発およびデータベース管理等の目的のための他の既知のアプリケーションを実行する、いくつかのワークステーションを含むこともできる。これらのデバイスはまた、ダミー端末、シンクライアント、獲得システム、およびネットワークを介して通信することが可能な他のデバイス等の他の電子デバイスを含むこともできる。
【0153】
種々の態様はまた、サービス指向アーキテクチャの一部になり得る等の、少なくとも1つのサービスまたはウェブサービスの一部として実装することもできる。ウェブサービス等のサービスは、拡張可能マークアップ言語(XML)形式であり、SOAP(「Simple Object Access Protocol(シンプルオブジェクトアクセスプロトコル)」に由来する)等の適切なプロトコルを使用して交換されるメッセージを使用すること等によって、任意の適切なタイプのメッセージングを使用して通信することができる。そのようなサービスによって提供または実行されるプロセスは、ウェブサービス記述言語(WSDL)等の任意の適切な言語で書くことができる。WSDL等の言語を使用することにより、種々のSOAPフレームワーク内のクライアント側コードの自動生成等の機能性を可能にする。
【0154】
ほとんどの実施形態は、TCP/IP、OSI、FTP、UPnP、NFS、CIFS、およびAppleTalk等の種々の市販のプロトコルのうちのいずれかを使用する通信をサポートするために、当業者に周知されるであろう、少なくとも1つのネットワークを利用する。ネットワークは、例えば、ローカルエリアネットワーク、広域ネットワーク、仮想プライベートネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話ネットワーク、赤外線ネットワーク、無線ネットワーク、およびそれらの任意の組み合わせであり得る。
【0155】
ウェブサーバを利用する実施形態では、ウェブサーバは、HTTPサーバ、FTPサーバ、CGIサーバ、データサーバ、Java(登録商標)サーバ、およびビジネスアプリケーションサーバを含む、種々のサーバまたはミッドティアアプリケーションのうちのいずれかを実行することができる。サーバはまた、Java、C、C#、またはC++等の任意のプログラミング言語、あるいはPerl、Python、またはTCL等の任意のスクリプト言語、ならびにそれらの組み合わせで書かれた1つ以上のスクリプトまたはプログラムとして実装され得る、1つ以上のウェブアプリケーションを実行すること等によって、ユーザデバイスからの要求に応答して、プログラムまたはスクリプトを実行することが可能であってもよい。サーバはまた、Oracle(登録商標)、Microsoft(登録商標)、Sybase(登録商標)、およびIBM(登録商標)から市販されているものを制限なく含む、データベースサーバを含んでもよい。
【0156】
環境は、上記で論議されるように、種々のデータ記憶部ならびに他のメモリおよび記憶媒体を含むことができる。これらは、コンピュータのうちの1つ以上に対してローカルである(および/またはその中に常駐する)、あるいはネットワークにわたるコンピュータのうちのいずれかまたは全てから遠隔にある、記憶媒体上等の種々の場所に存在することができる。特定の一式の実施形態では、情報は、当業者に周知である記憶領域ネットワーク(「SAN」)内に存在してもよい。同様に、コンピュータ、サーバ、または他のネットワークデバイスに起因する機能を果たすためのあらゆる必要ファイルが、適宜に、ローカルに、および/または遠隔に記憶されてもよい。システムがコンピュータ化デバイスを含む場合、そのような各デバイスは、バスを介して電気的に連結され得るハードウェア要素を含むことができ、要素は、例えば、少なくとも1つの中央処理装置(CPU)、少なくとも1つの入力デバイス(例えば、マウス、キーボード、コントローラ、タッチスクリーン、またはキーパッド)、および少なくとも1つの出力デバイス(例えば、表示デバイス、プリンタ、またはスピーカ)を含む。そのようなシステムはまた、ディスクドライブ、光学記憶デバイス、およびランダムアクセスメモリ(「RAM」)または読取専用メモリ(「ROM」)等の固体記憶デバイス、ならびにリムーバブルメディアデバイス、メモリカード、フラッシュカード等の1つ以上の記憶デバイスを含んでもよい。
【0157】
そのようなデバイスはまた、上記で説明されるように、コンピュータ可読記憶媒体リーダ、通信デバイス(例えば、モデム、ネットワークカード(有線または無線)、赤外線通信デバイス等)、およびワーキングメモリを含むこともできる。コンピュータ可読記憶媒体リーダは、遠隔、ローカル、固定、および/またはリムーバブル記憶デバイス、ならびにコンピュータ可読情報を一時的、および/またはより永久的に含有する、記憶する、伝送する、および取り出すための記憶媒体を表す、コンピュータ可読記憶媒体と接続することができ、またはそれを受容するように構成することができる。本システムおよび種々のデバイスはまた、典型的には、オペレーティングシステム、クライアントアプリケーションまたはウェブブラウザ等のアプリケーションプログラムを含む、いくつかのソフトウェアアプリケーション、モジュール、サービス、または少なくとも1つのワーキングメモリデバイス内に位置する他の要素を含むであろう。代替実施形態は、上記で説明されるものからの多数の変化例を有してもよいことを理解されたい。例えば、カスタマイズしたハードウェアもまた、使用される場合があり、および/または特定の要素が、ハードウェア、ソフトウェア(アプレット等の移植性ソフトウェアを含む)、あるいは両方で実装される場合がある。さらに、ネットワーク入力/出力デバイス等の他のコンピュータデバイスへの接続が採用されてもよい。
【0158】
コードまたはコードの部分を含有するための記憶媒体およびコンピュータ可読媒体は、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)または他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、または他の磁気記憶デバイス、または所望の情報を記憶するために使用することができ、かつシステムデバイスによってアクセスすることができる任意の他の媒体を含む、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータ等の情報の記憶および/または伝送のための任意の方法または技術で実装される、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体等であるが、それらに限定されない、記憶媒体および通信媒体を含む、当技術分野で公知である、または使用される任意の適切な媒体を含むことができる。本開示および本明細書で提供される教示に基づいて、当業者であれば、種々の実施形態を実装する他の手段および/または方法を理解するであろう。
【0159】
したがって、本明細書および図面は、制限的な意味よりもむしろ例証的な意味で見なされるものである。しかしながら、請求項に記載されるような本発明のより広い精神および範囲から逸脱することなく、種々の修正および変更がそれに行われてもよいことが明白となるであろう。
【0160】
付記:
付記1. 検索エンジンポスティングリストの中の符号化ドキュメント識別番号の差を復号するためのコンピュータ実装方法であって、
実行可能命令を用いて構成される、1つ以上のコンピュータシステムの制御の下で、
各記述子が、符号化ドキュメント識別番号の差のグループに関する複数のサイズ情報に関する、情報を含む、1つ以上の記述子を読み取ることと、
前記1つ以上の記述子に関連する前記符号化ドキュメント識別番号の差のグループを表す、複数のデータを読み取ることと、
参照テーブルから前記1つ以上の記述子に関連する1つ以上のシャッフルシーケンスを識別することと、
前記識別されたシャッフルシーケンスを使用して、前記符号化ドキュメント識別番号の差のグループを表す、前記複数のデータに1つ以上の並列シャッフル演算を行うことであって、前記1つ以上の並列シャッフル演算は、前記複数のデータにゼロの1つ以上のシーケンスを挿入することを含む、1つ以上の並列シャッフル演算を行うことと、
前記符号化ドキュメント識別番号の差のグループを表す、前記シャッフルされた複数のデータから、複数の復号されたドキュメント識別番号の差を判定することと、
を含む、コンピュータ実装方法。
【0161】
付記2. 前記符号化ドキュメント識別番号の差は、グループ1進形式で符号化される、付記1に記載の検索エンジンポスティングリストの中の符号化ドキュメント識別番号の差を復号するためのコンピュータ実装方法。
【0162】
付記3. 可変長データを復号するためのコンピュータ実装方法であって、
実行可能命令を用いて構成される、1つ以上のコンピュータシステムの制御の下で、
各データのブロックが、複数の符号化可変長データを含む、1つ以上のデータのブロックを読み取ることと、
前記1つ以上のデータのブロックに関連する1つ以上の記述子を読み取ることと、
参照テーブルから前記1つ以上の記述子に関連する1つ以上のシャッフルシーケンスを識別することと、
前記1つ以上の識別されたシャッフルシーケンスを使用して、前記1つ以上のデータのブロックに1つ以上のシャッフル演算を行うことと、
前記シャッフルされた1つ以上のデータのブロックから、複数の復号された可変長データを判定することと、
を含む、コンピュータ実装方法。
【0163】
付記4. 前記1つ以上のシャッフル演算を行うことはさらに、標準形式で前記1つ以上のデータのブロックの1つ以上の部分を表すように、前記シャッフルされた1つ以上のデータのブロックにゼロの1つ以上のシーケンスを挿入することを含む、付記3に記載の可変長データを復号するためのコンピュータ実装方法。
【0164】
付記5. 前記1つ以上のデータブロックは、複数の可変長整数を表す、付記3に記載の可変長データを復号するためのコンピュータ実装方法。
【0165】
付記6. 前記シャッフルされた1つ以上のデータのブロックから前記複数の復号された可変長データを判定することはさらに、
前記シャッフルされた1つ以上のデータのブロックから部分結果を判定することを含み、前記部分結果と関連付けられる残りの部分は、別のデータのブロックから判定される、
付記3に記載の可変長データを復号するためのコンピュータ実装方法。
【0166】
付記7. 前記1つ以上のシャッフル演算は、単一命令複数データ(SIMD)プロセッサ命令セットからの1つ以上の並列シャッフル命令を含む、付記3に記載の可変長データを復号するためのコンピュータ実装方法。
【0167】
付記8. 前記1つ以上の記述子に関連する1つ以上のオフセットを識別することをさらに含む、付記3に記載の可変長データを復号するためのコンピュータ実装方法。
【0168】
付記9. 前記1つ以上の記述子に関連する前記1つ以上のオフセットは、固定サイズを伴う入力オフセットと、可変サイズを伴う出力オフセットとを備える、付記8に記載の可変長データを復号するためのコンピュータ実装方法。
【0169】
付記10. 前記1つ以上の記述子に関連する前記1つ以上のオフセットは、可変サイズを伴う入力オフセットを備える、付記8に記載の可変長データを復号するためのコンピュータ実装方法。
【0170】
付記11. 可変長データを復号するためのシステムであって、
プロセッサと、
メモリデバイスであって、前記プロセッサによって実行されたときに、前記システムに、
各データのブロックが、複数の符号化可変長データを含む、1つ以上のデータのブロックを読み取らせ、
前記1つ以上のデータのブロックに関連する1つ以上の記述子を読み取らせ、
参照テーブルから前記1つ以上の記述子に関連する1つ以上のシャッフルシーケンスを識別させ、
前記1つ以上の識別されたシャッフルシーケンスを使用して、前記1つ以上のデータのブロックに1つ以上のシャッフル演算を行わせ、
前記シャッフルされた1つ以上のデータのブロックから、複数の復号された可変長データを判定させる、
命令を含む、メモリデバイスと、
を備える、システム。
【0171】
付記12. 前記1つ以上のシャッフル演算を行うことはさらに、標準形式で前記1つ以上のデータのブロックの1つ以上の部分を表すように、前記シャッフルされた1つ以上のデータのブロックにゼロの1つ以上のシーケンスを挿入することを含む、付記11に記載の可変長データを復号するためのシステム。
【0172】
付記13. 前記1つ以上のデータブロックは、複数の可変長整数を表す、付記11に記載の可変長データを復号するためのシステム。
【0173】
付記14. 前記シャッフルされた1つ以上のデータのブロックから複数の復号された可変長データを判定することはさらに、
前記シャッフルされた1つ以上のデータのブロックから部分結果を判定することを含み、前記部分結果と関連付けられる残りの部分は、別のデータのブロックから判定される、
付記11に記載の可変長データを復号するためのシステム。
【0174】
付記15. 前記1つ以上のシャッフル演算は、単一命令複数データ(SIMD)プロセッサ命令セットからの1つ以上の並列シャッフル命令を備える、付記11に記載の可変長データを復号するためのシステム。
【0175】
付記16. 前記1つ以上の記述子に関連する1つ以上のオフセットを識別することをさらに含む、付記11に記載の可変長データを復号するためのシステム。
【0176】
付記17. 前記1つ以上の記述子に関連する前記1つ以上のオフセットは、固定サイズを伴う入力オフセットと、可変サイズを伴う出力オフセットとを含む、付記16に記載の可変長データを復号するためのシステム。
【0177】
付記18. 前記1つ以上のデータのブロックに関連する前記1つ以上のオフセットは、可変サイズを伴う入力オフセットを備える、付記16に記載の可変長データを復号するためのシステム。
【0178】
付記19. 可変長データを復号するための命令を記憶する、非一過性のコンピュータ可読記憶媒体であって、プロセッサによって実行されたときに、前記プロセッサに、
各データのブロックが、複数の符号化可変長データを含む、1つ以上のデータのブロックを読み取らせ、
前記1つ以上のデータのブロックに関連する1つ以上の記述子を読み取らせ、
参照テーブルから前記1つ以上の記述子に関連する1つ以上のシャッフルシーケンスを識別させ、
前記1つ以上の識別されたシャッフルシーケンスを使用して、前記1つ以上のデータのブロックに1つ以上のシャッフル演算を行わせ、
前記シャッフルされた1つ以上のデータのブロックから、複数の復号された可変長データを判定させる、
命令を備える、非一過性のコンピュータ可読記憶媒体。
【0179】
付記20. 前記1つ以上のシャッフル演算を行うことはさらに、標準形式で前記1つ以上のデータのブロックの1つ以上の部分を表すように、前記シャッフルされた1つ以上のデータのブロックにゼロの1つ以上のシーケンスを挿入することを含む、付記19に記載の非一過性のコンピュータ可読記憶媒体。
【0180】
付記21. 前記1つ以上のデータブロックは、複数の可変長整数を表す、付記19に記載の非一過性のコンピュータ可読記憶媒体。
【0181】
付記22. 前記シャッフルされた1つ以上のデータのブロックから複数の復号された可変長データを判定することはさらに、
前記シャッフルされた1つ以上のデータのブロックから部分結果を判定することを含み、前記部分結果と関連付けられる残りの部分は、別のデータのブロックから判定される、
付記19に記載の非一過性のコンピュータ可読記憶媒体。
【0182】
付記23. 前記1つ以上のシャッフル演算は、単一命令複数データ(SIMD)プロセッサ命令セットからの1つ以上の並列シャッフル命令を備える、付記19に記載の非一過性のコンピュータ可読記憶媒体。
【0183】
付記24. 前記1つ以上の記述子に関連する1つ以上のオフセットを識別することをさらに含み、前記1つ以上の記述子に関連する前記1つ以上のオフセットは、固定サイズを伴う入力オフセットと、可変サイズを伴う出力オフセットとを備える、付記19に記載の非一過性のコンピュータ可読記憶媒体。
【0184】
付記25. 前記1つ以上の記述子に関連する1つ以上のオフセットを識別することをさらに含み、前記1つ以上の記述子に関連する前記1つ以上のオフセットは、可変サイズを伴う入力オフセットを備える、付記19に記載の非一過性のコンピュータ可読記憶媒体。
【0185】
付記26. 検索エンジンポスティングリスト用のドキュメント識別番号を符号化するためのコンピュータ実装方法であって、
実行可能命令を用いて構成される、1つ以上のコンピュータシステムの制御の下で、
データ記憶のためのブロックサイズを判定することと、
前記検索エンジンポスティングリスト用の複数のドキュメント識別番号を受信することと、
隣接するドキュメント識別番号の間の差を判定することと、
各ドキュメント識別番号の差の符号化表現を判定することであって、前記ドキュメント識別番号の差の前記符号化表現は、可変長表現を使用する、判定することと、
前記ドキュメント識別番号の差の前記複数の符号化表現の逐次サブセットを識別することであって、前記逐次サブセットの各ドキュメント識別番号の差の前記符号化表現のそれぞれのサイズの合計は、データ記憶のための前記判定されたブロックサイズ以下である、識別することと、
1つ以上の記述子であって、ドキュメント識別番号の差の符号化表現の前記サブセットの中のドキュメント識別番号の差の符号化表現の数、および前記逐次サブセットの中のそれぞれのドキュメント識別番号の差のそれぞれの符号化表現のサイズに関する情報を提供する、記述子を生成することと、
前記1つ以上の記述子および前記ドキュメント識別の差の符号化表現の前記サブセットを記憶することであって、ドキュメント識別番号の差の符号化表現の前記逐次サブセットは、グループとして記憶され、前記1つ以上の記述子は、前記ドキュメント識別番号の差の符号化表現のグループと隣接して記憶される、記憶することと、
を含む、コンピュータ実装方法。
【0186】
付記27. 前記1つ以上の記述子は、それぞれのサイズの1進表現を用いて、前記逐次サブセットのそれぞれのドキュメント識別番号の差の各符号化表現のサイズを表す、付記26に記載の検索エンジンポスティングリストに対するドキュメント識別番号を符号化するためのコンピュータ実装方法
付記28. 可変長表現を使用してデータを符号化するためのコンピュータ実装方法であって、
実行可能命令を用いて構成される、1つ以上のコンピュータシステムの制御の下で、
データ記憶のためのブロックサイズを判定することと、
複数のデータ項目を識別することと、
各データ項目の符号化表現を判定することであって、前記データ項目の前記符号化表現は、可変長表現を使用する、判定することと、
前記データ項目の前記複数の符号化表現の第1のサブセットを識別することであって、データ項目の前記複数の符号化表現の前記第1のサブセットからの前記データ項目の前記符号化表現のそれぞれのサイズの合計は、データ記憶のための前記判定されたブロックサイズ以下である、識別することと、
第1の記述子であって、前記データ項目の前記複数の符号化表現の前記第1のサブセットからの前記データ項目の前記符号化表現のそれぞれのサイズを表す、第1の記述子を生成することと、
前記データ項目の前記複数の符号化表現の前記第1のサブセットからの前記データ項目の前記符号化表現を、第1の記憶されたグループとして記憶することと、
前記第1の記述子を記憶することと、
を含む、方法。
【0187】
付記29. 前記第1の記述子を記憶することは、前記第1の記憶されたグループと隣接して前記第1の記述子を記憶することを含む、付記28に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【0188】
付記30. 前記第1の記述子を記憶することは、前記第1の記憶されたグループと非隣接して前記第1の記述子を記憶することを含む、付記28に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【0189】
付記31. 前記第1の記述子を生成することは、1進形式で各データ項目のそれぞれの符号化表現のサイズを表すことを含む、付記28に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【0190】
付記32. 前記1進形式で各データ項目のそれぞれの符号化表現のサイズを表すことは、各データ項目の各符号化表現のそれぞれのサイズを、1を引いた1進サイズとして表し、それぞれのサイズの表現をゼロによって分離する、前記1進形式を生成することを含む、付記31に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【0191】
付記34. 前記第1の記述子を生成することは、前記第1のサブセットと前記データのブロックサイズとの間のサイズの差を表す、パディング情報を前記第1の記述子に挿入することを含む、付記31に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【0192】
付記34.
前記データ項目の前記複数の符号化表現からそれぞれのデータ項目の付加的な符号化表現を識別することと、
前記第1の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第1の部分を記憶することと、
第2の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第2の部分を記憶することと、
をさらに含む、付記28に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【0193】
付記35. 第2の記述子であって、前記第2の記憶されたグループの一部として、それぞれのデータ項目の前記付加的な符号化表現の少なくとも前記第2の部分の長さを部分的に表す、第2の記述子を生成することをさらに含む、付記34に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【0194】
付記36. 前記データ項目は、デルタギャップである、付記28に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【0195】
付記37. 可変長表現を使用して、データを符号化するためのシステムであって、
プロセッサと、
メモリデバイスであって、前記プロセッサによって実行されたときに、前記システムに、
データ記憶のためのブロックサイズを判定させ、
複数のデータ項目を識別させ、
各データ項目の符号化表現を判定させ、前記データ項目の前記符号化表現は、可変長表現を使用し、
前記データ項目の前記複数の符号化表現の第1のサブセットを識別させ、データ項目の前記複数の符号化表現の前記第1のサブセットからの前記データ項目の前記符号化表現のそれぞれのサイズの合計は、データ記憶のための前記判定されたブロックサイズ以下であり、
第1の記述子であって、前記データ項目の前記複数の符号化表現の前記第1のサブセットの前記データ項目の前記符号化表現のそれぞれのサイズを表す、第1の記述子を生成させ、
前記データ項目の前記複数の符号化表現の前記第1のサブセットからの前記データ項目の前記符号化表現を、第1の記憶されたグループとして記憶させ、
前記第1の記述子を記憶させる、
命令を含む、メモリデバイスと、
を備える、システム。
【0196】
付記38. 前記第1の記述子を記憶することは、前記第1の記憶されたグループと隣接して前記第1の記述子を記憶することを含む、付記37に記載の可変長表現を使用してデータを符号化するためのシステム。
【0197】
付記39. 前記第1の記述子を記憶することは、前記第1の記憶されたグループと非隣接して前記第1の記述子を記憶することを含む、付記37に記載の可変長表現を使用してデータを符号化するためのシステム。
【0198】
付記40. 前記第1の記述子を生成することは、1進形式で各データ項目のそれぞれの符号化表現のサイズを表すことを含む、付記37に記載の可変長表現を使用してデータを符号化するためのシステム。
【0199】
付記41. 前記1進形式で各データ項目のそれぞれの符号化表現のサイズを表すことは、それぞれのデータ項目の各符号化表現のそれぞれのサイズを、1を引いた1進サイズとして表し、それぞれのサイズの表現をゼロによって分離する、前記1進形式を生成することを含む、付記40に記載の可変長表現を使用してデータを符号化するためのシステム。
【0200】
付記42. 前記第1の記述子を生成することは、前記第1のサブセットと前記データのブロックサイズとの間のサイズの差を表す、パディング情報を前記第1の記述子に挿入することを含む、付記37に記載の可変長表現を使用してデータを符号化するためのシステム。
【0201】
付記43.
前記データ項目の前記複数の符号化表現からそれぞれのデータ項目の付加的な符号化表現を識別することと、
前記第1の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第1の部分を記憶することと、
第2の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第2の部分を記憶することと、
をさらに含む、付記37に記載の可変長表現を使用してデータを符号化するためのシステム。
【0202】
付記44. 第2の記述子であって、前記第2の記憶されたグループの一部として、それぞれのデータ項目の前記付加的な符号化表現の少なくとも前記第2の部分の長さを部分的に表す、第2の記述子を生成することをさらに含む、付記43に記載の可変長表現を使用してデータを符号化するためのシステム。
【0203】
付記45. 可変長表現を使用してデータを符号化するための命令を記憶する、非一過性のコンピュータ可読記憶媒体であって、前記命令は、プロセッサによって実行されたときに、前記プロセッサに、
データ記憶のためのブロックサイズを判定させ、
複数の可変長データを識別させ、
各データ項目の符号化表現を判定させ、前記データ項目の前記符号化表現は、可変長表現を使用し、
前記データ項目の前記複数の符号化表現の第1のサブセットを識別させ、データ項目の前記複数の符号化表現の前記第1のサブセットからの前記データ項目の前記符号化表現のそれぞれのサイズの合計は、データ記憶のための前記判定されたブロックサイズ以下であり、
第1の記述子であって、前記データ項目の前記複数の符号化表現の前記第1のサブセットの前記データ項目の前記符号化表現のそれぞれのサイズを表す、第1の記述子を生成させ、
前記データ項目の前記複数の符号化表現の前記第1のサブセットからの前記データ項目の前記符号化表現を、第1の記憶されたグループとして記憶させ、
前記第1の記述子を記憶させる、
非一過性のコンピュータ可読記憶媒体
付記46. 前記第1の記述子を記憶することは、前記第1の記憶されたグループと隣接して前記第1の記述子を記憶することを含む、付記45に記載の非一過性のコンピュータ可読記憶媒体。
【0204】
付記47. 前記第1の記述子を記憶することは、前記第1の記憶されたグループと非隣接して前記第1の記述子を記憶することを含む、付記45に記載の非一過性のコンピュータ可読記憶媒体。
【0205】
付記48. 前記第1の記述子を生成することは、1進形式で各データ項目のそれぞれの符号化表現のサイズを表すことを含む、付記45に記載の非一過性のコンピュータ可読記憶媒体。
【0206】
付記49. 前記1進形式で各データ項目のそれぞれの符号化表現のサイズを表すことは、各データ項目の各符号化表現のそれぞれのサイズを、1を引いた1進サイズとして表し、それぞれのサイズの表現をゼロによって分離する、前記1進形式を生成することを含む、付記48に記載の非一過性のコンピュータ可読記憶媒体。
【0207】
付記50.
前記データ項目の前記複数の符号化表現からそれぞれのデータ項目の付加的な符号化表現を識別することと、
前記第1の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第1の部分を記憶することと、
第2の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第2の部分を記憶することと、
をさらに含む、付記45に記載の非一過性のコンピュータ可読記憶媒体。
【0208】
付記51. 第2の記述子であって、前記第2の記憶されたグループの一部として、それぞれのデータ項目の前記付加的な符号化表現の少なくとも前記第2の部分の長さを部分的に表す、第2の記述子を生成することをさらに含む、付記50に記載の非一過性のコンピュータ可読記憶媒体。
以下に、本願出願時の特許請求の範囲に記載された発明を付記する。
[1]可変長データを復号するためのシステムであって、
プロセッサと、
メモリデバイスであって、前記プロセッサによって実行されたときに、前記システムに、
各データのブロックが、複数の符号化可変長データを含む、1つ以上のデータのブロックを読み取らせ、
前記1つ以上のデータのブロックに関連する1つ以上の記述子を読み取らせ、
参照テーブルから前記1つ以上の記述子に関連する1つ以上のシャッフルシーケンスを識別させ、
前記1つ以上の識別されたシャッフルシーケンスを使用して、前記1つ以上のデータのブロックに1つ以上のシャッフル演算を行わせ、
前記シャッフルされた1つ以上のデータのブロックから、複数の復号された可変長データを判定させる、
命令を含む、メモリデバイスと、
を備える、システム。
[2]前記1つ以上のシャッフル演算を行うことはさらに、標準形式で前記1つ以上のデータのブロックの1つ以上の部分を表すように、前記シャッフルされた1つ以上のデータのブロックにゼロの1つ以上のシーケンスを挿入することを含む、前記[1]に記載の可変長データを復号するためのシステム。
[3]前記1つ以上のデータブロックは、複数の可変長整数を表す、前記[1]に記載の可変長データを復号するためのシステム。
[4]前記シャッフルされた1つ以上のデータのブロックから複数の復号された可変長データを判定することはさらに、
前記シャッフルされた1つ以上のデータのブロックから部分結果を判定することを含み、前記部分結果と関連付けられる残りの部分は、別のデータのブロックから判定される、
前記[1]に記載の可変長データを復号するためのシステム。
[5]前記1つ以上のシャッフル演算は、単一命令複数データ(SIMD)プロセッサ命令セットからの1つ以上の並列シャッフル命令を備える、前記[1]に記載の可変長データを復号するためのシステム。
[6]前記1つ以上の記述子に関連する1つ以上のオフセットを識別することをさらに含む、前記[1]に記載の可変長データを復号するためのシステム。
[7]前記1つ以上の記述子に関連する前記1つ以上のオフセットは、固定サイズを伴う入力オフセットと、可変サイズを伴う出力オフセットとを含む、前記[6]に記載の可変長データを復号するためのシステム。
[8]前記1つ以上のデータのブロックに関連する前記1つ以上のオフセットは、可変サイズを伴う入力オフセットを備える、前記[6]に記載の可変長データを復号するためのシステム。
[9]可変長表現を使用してデータを符号化するためのコンピュータ実装方法であって、
実行可能命令を用いて構成される、1つ以上のコンピュータシステムの制御の下で、
データ記憶のためのブロックサイズを判定することと、
複数のデータ項目を識別することと、
各データ項目の符号化表現を判定することであって、前記データ項目の前記符号化表現は、可変長表現を使用する、判定することと、
前記データ項目の前記複数の符号化表現の第1のサブセットを識別することであって、データ項目の前記複数の符号化表現の前記第1のサブセットからの前記データ項目の前記符号化表現のそれぞれのサイズの合計は、データ記憶のための前記判定されたブロックサイズ以下である、識別することと、
第1の記述子であって、前記データ項目の前記複数の符号化表現の前記第1のサブセットからの前記データ項目の前記符号化表現のそれぞれのサイズを表す、第1の記述子を生成することと、
前記データ項目の前記複数の符号化表現の前記第1のサブセットからの前記データ項目の前記符号化表現を、第1の記憶されたグループとして記憶することと、
前記第1の記述子を記憶することと、
を含む、方法。
[10]前記第1の記述子を記憶することは、前記第1の記憶されたグループと隣接して前記第1の記述子を記憶することを含む、前記[9]に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
[11]前記第1の記述子を記憶することは、前記第1の記憶されたグループと非隣接して前記第1の記述子を記憶することを含む、前記[9]に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
[12]前記第1の記述子を生成することは、1進形式で各データ項目のそれぞれの符号化表現のサイズを表すことを含む、前記[9]に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
[13]前記1進形式で各データ項目のそれぞれの符号化表現のサイズを表すことは、各データ項目の各符号化表現のそれぞれのサイズを、1を引いた1進サイズとして表し、前記それぞれのサイズの表現をゼロによって分離する、前記1進形式を生成することを含む、前記[12]に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
[14]前記第1の記述子を生成することは、前記第1のサブセットと前記データのブロックサイズとの間のサイズの差を表す、パディング情報を前記第1の記述子に挿入することを含む、前記[12]に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
[15]前記データ項目の前記複数の符号化表現からそれぞれのデータ項目の付加的な符号化表現を識別することと、
前記第1の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第1の部分を記憶することと、
第2の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第2の部分を記憶することと、
をさらに含む、前記[9]に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。