JP2019522940A - Simdエンジンを用いる汎用データ圧縮 - Google Patents

Simdエンジンを用いる汎用データ圧縮 Download PDF

Info

Publication number
JP2019522940A
JP2019522940A JP2019501704A JP2019501704A JP2019522940A JP 2019522940 A JP2019522940 A JP 2019522940A JP 2019501704 A JP2019501704 A JP 2019501704A JP 2019501704 A JP2019501704 A JP 2019501704A JP 2019522940 A JP2019522940 A JP 2019522940A
Authority
JP
Japan
Prior art keywords
subset
hash
processed
data stream
subsets
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2019501704A
Other languages
English (en)
Other versions
JP6921936B2 (ja
Inventor
ハーシュ,ミハエル
デヴィッド,イェホナタン
トアフ,ヤイール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of JP2019522940A publication Critical patent/JP2019522940A/ja
Application granted granted Critical
Publication of JP6921936B2 publication Critical patent/JP6921936B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3088Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3091Data deduplication
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6023Parallelization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; SPEECH OR AUDIO CODING OR DECODING
    • G10L13/00Speech synthesis; Text to speech systems
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction

Abstract

入力データストリームを圧縮して圧縮出力データストリームを生成するシステムは、ハッシュエントリを含むハッシュテーブルを格納するメモリであって、各ハッシュエントリは、入力データストリームの続くデータアイテムの関連サブセットのハッシュ値と、関連サブセットのメモリ位置へのポインタと、を含む、メモリを含む。メモリに結合されたプロセッサは、以下の動作:サブセット毎にハッシュ値を計算し、各計算したハッシュ値の一致についてハッシュテーブルを検索し、一致の結果に従いハッシュテーブルを更新する、を実行し、その間、SIMDエンジンに、連続サブセットに対して該動作のうちの1又は複数を同時実行するよう指示する。プロセッサは、次に、一致の結果及び該一致の結果に依存する比較結果に従い、圧縮出力データストリームを更新し、複数の関連サブセットに対して動作して圧縮出力データストリームを生成する。

Description

本発明は、その幾つかの実施形態において、データ圧縮に関し、より具体的には、排他的ではないが、単一命令多重データ処理(single instruction multiple data、SIMD)エンジンを用いるデータ圧縮に関する。
データ圧縮は、データを格納する記憶空間及び/又はデータを転送するネットワーク帯域幅を削減するために、記憶及び/又は転送のデータ容量を削減するよう、複数のアプリケーションで広く使用される。
データ圧縮は、データの元の表現より少ないビットを用いてデータを符号化することを含む。データ圧縮は記憶及び/又はネットワーキング資源を有意に削減するが、追加処理及び/又は計算資源、例えば処理エンジン、メモリリソース、及び/又は処理時間を必要とし得る。多くのデータ圧縮方法、技術、及び/又はアルゴリズムが現在利用可能であり、それぞれ、圧縮率と必要処理リソースとの間のトレードオフを使用する。
本発明の第1の態様によると、入力データストリームを圧縮して圧縮出力データストリームを生成するシステムであって、ハッシュテーブルを格納するメモリであって、前記ハッシュテーブルは複数のハッシュエントリを含み、各ハッシュエントリは、入力データストリームの複数のデータアイテムのうちの続くデータアイテムの複数のサブセットのうちの関連サブセットのハッシュ値と、前記関連サブセットのメモリ位置へのポインタと、を含む、メモリと、前記メモリに結合されるプロセッサであって、
以下の動作:
処理済みサブセットのうちのサブセット毎に前記ハッシュ値を計算し、
各計算したハッシュ値の一致について前記ハッシュテーブルを検索し、
前記一致の結果に従い、前記ハッシュテーブルを更新し、
を実行し、その間、前記動作のうちの少なくとも1つの動作は、単一命令多重データ処理、SIMD、エンジンに、前記複数のサブセットのうちの連続サブセットのグループの各被処理サブセットについて、前記少なくとも1つの動作を同時実行するよう指示することにより実行され、
前記一致の結果及び前記一致の結果に依存する比較の比較結果に従い、前記圧縮出力データストリームを更新し、
前記複数の関連サブセットについて、前記計算、検索、及び更新を繰り返して、前記圧縮出力データストリームを生成する、よう適応されるプロセッサと、
を含むシステムが提供される。
本発明の第1の態様の第1の可能な実装形式では、複数の関連サブセットのこのような各サブセットは、SIMDエンジンアーキテクチャに従い定められた所定数のデータアイテムを含む。
第1の態様の第1の実装形式のような又はそれに従う第1の態様による第2の可能な実装形式では、グループ内の被処理サブセットの数は、SIMDエンジンアーキテクチャに従い設定される。
第1の態様の前述の実装形式のうちのいずれかのような又はそれに従う第1の態様による第3の可能な実装形式では、一致の結果は、各計算したハッシュ値のハッシュテーブル内に存在する既存ハッシュ値との一致を示す。
第1の態様の前述の実装形式のうちのいずれかのような又はそれに従う第1の態様による第4の可能な実装形式では、前記比較は、前記一致の結果が前記計算したハッシュ値の前記ハッシュテーブル内の一致するハッシュ値との一致を示す場合に、前記比較結果を生成するよう行われ、
前記比較は、前記計算したハッシュ値を有する前記処理済みサブセットの前記データアイテムと、前記一致するハッシュエントリ内の前記ポインタにより指される前記関連サブセットの前記データアイテムとの間の比較を含む。
第1の態様の前述の実装形式のうちのいずれかのような又はそれに従う第1の態様による第5の可能な実装形式では、前記比較結果が、前記処理済みサブセット及び前記関連サブセットの前記データアイテムが同一であると示す場合、前記処理済みサブセットは、前記圧縮出力データストリーム内の前記関連サブセットへのポインタにより置き換えられ、
前記比較結果が、前記処理済みサブセット及び前記関連サブセットの前記データアイテムが同一でないと示す場合、前記処理済みサブセットは、前記圧縮出力データストリーム内で更新され、前記ハッシュテーブルは前記処理済みサブセットの新しいハッシュエントリにより更新される。
第1の態様の前述の実装形式のうちのいずれかのような又はそれに従う第1の態様による第6の可能な実装形式では、前記の同時計算は、前記プロセッサが処理済みサブセットの前記グループを前記SIMDエンジンの少なくとも1つのSIMDレジスタにロードすること、及び前記SIMDエンジンがサブセットの前記グループを同時処理すること、を含み、前記同時処理は、
前記グループの前記処理済みサブセットを互いに離すこと、
処理済みサブセット毎に異なるシフト値を用いて前記処理済みサブセットをシフトすること、及び、前記処理済みサブセットを処理して前記処理済みサブセット毎にハッシュ値を生成すること、を含む。
第1の態様の前述の実装形式のうちのいずれかのような又はそれに従う第1の態様による第7の可能な実装形式では、前記ハッシュテーブル内の前記処理済みサブセットの各々の前記一致についての前記の同時検索は、前記プロセッサが、前記SIMDエンジンに、前記計算したハッシュ値の各々の前記ハッシュテーブルに格納されたハッシュ値との一致について同時検索するよう指示することを含む。
第1の態様の前述の実装形式のうちのいずれかのような又はそれに従う第1の態様による第8の可能な実装形式では、少なくとも1つの処理済みサブセットによる前記ハッシュテーブルの前記の同時更新は、前記プロセッサが、前記SIMDエンジンに、前記少なくとも1つの処理済みサブセットに関連付けられたエントリにより、前記ハッシュテーブルを同時更新するよう指示することを含む。
第1の態様の前述の実装形式のうちのいずれかのような又はそれに従う第1の態様による第9の可能な実装形式では、前記圧縮出力データストリームは、レガシ圧縮方法を用いて圧縮された標準的圧縮出力データストリームに準拠し、前記圧縮出力データストリームは、レガシ伸長方法を用いて伸長される。
本発明の第2の態様によると、入力データストリームを圧縮して圧縮出力データストリームを生成する方法であって、複数のハッシュエントリを含むハッシュテーブルを格納するステップであって、各ハッシュエントリは、入力データストリームの複数のデータアイテムのうちのデータアイテムの複数のサブセットのうちの関連サブセットのハッシュ値と、前記関連サブセットのメモリ位置へのポインタと、を含む、ステップと、
以下の動作:
被処理サブセットのうちのサブセット毎に前記ハッシュ値を計算し、
各計算したハッシュ値の一致について前記ハッシュテーブルを検索し、
前記一致の結果に従い、前記ハッシュテーブルを更新する、
を実行するステップであって、前記動作のうちの少なくとも1つの動作は、プロセッサの単一命令多重データ処理、SIMD、エンジンに、前記複数の関連サブセットのうちの連続サブセットのグループの各被処理サブセットについて、前記少なくとも1つの動作を同時実行するよう指示することにより実行される、ステップと、
前記一致の結果及び前記一致の結果に依存する比較の比較結果に従い、前記圧縮出力データストリームを更新するステップと、
前記複数のサブセットを通じて、前記計算、検索、及び更新を繰り返して、前記圧縮出力データストリームを生成するステップと、を含む方法が提供される。
本発明の第2の態様の第1の可能な実装形式では、前記の同時計算は、前記プロセッサが被処理サブセットの前記グループを前記SIMDエンジンの少なくとも1つのSIMDレジスタにロードすること、及び前記SIMDエンジンが被処理サブセットの前記グループを同時処理すること、を含み、前記同時処理は、
前記グループの前記被処理サブセットを互いに離すこと、
被処理サブセット毎に異なるシフト値を用いて前記被処理サブセットをシフトすること、及び、前記被処理サブセットを処理して前記被処理サブセット毎にハッシュ値を生成すること、を含む。
本発明の第2の態様による第2の可能な実装形式では、前記ハッシュテーブル内の前記被処理サブセットの各々の前記一致についての前記の同時検索は、前記プロセッサが、前記SIMDエンジンに、前記計算したハッシュ値の各々の前記ハッシュテーブルに格納されたハッシュ値との一致について同時検索するよう指示することを含む。
本発明の第2の態様による第3の可能な実装形式では、少なくとも1つの被処理サブセットによる前記ハッシュテーブルの前記の同時更新は、前記プロセッサが、前記SIMDエンジンに、前記少なくとも1つの被処理サブセットに関連付けられたエントリにより、前記ハッシュテーブルを同時更新するよう指示することを含む。
第1の態様の前述の実装形式のうちのいずれかのような又はそれに従う第2の態様による第4の可能な実装形式では、前記圧縮出力データストリームは、レガシ圧縮方法を用いて圧縮された標準的圧縮出力データストリームに準拠し、前記圧縮出力データストリームは、レガシ伸長方法を用いて伸長される。
特に定められない限り、本願明細書で用いられた全ての技術的及び/又は科学的用語は、本発明の関連する分野の当業者により通常理解されるものと同じ意味を有する。ここに記載のものに類似する方法及び材料が本発明の実施形態の実施又は試験において使用できるが、例示的な方法及び/又は材料が。以下に記載される。対立する場合には、定義を含み本願明細書が制御する。さらに、材料、方法、及び例は、単に説明のためであり、必ずしも限定であることを意図しない。
本発明の幾つかの実施形態が、単に例として、添付の図面を参照してここで説明される。以下に特に図面を詳細に参照すると、図示の事項は例であり、本発明の実施形態の説明のための議論を目的とすることが強調される。これに関して、図面と共に取り入れられる説明は、本発明の実施形態がどのように実施されるかを当業者に明らかにする。
以下の図面がある。
本発明の幾つかの実施形態による、SIMDエンジンを用いて入力データストリームを圧縮する例示的なシステムの概略図である。 本発明の幾つかの実施形態による、SIMDエンジンを用いて入力データストリームを圧縮する例示的な処理のフローチャートである。 本発明の幾つかの実施形態による、SIMDエンジンのレジスタに入力データストリームの複数の連続バイトを同時ロードする例示的なシーケンスの概略図である。 本発明の幾つかの実施形態による、SIMDエンジンを用いて、それぞれ入力データストリームの連続バイトを含む複数のサブセットのハッシュ値を同時計算する例示的なシーケンスの概略図である。 本発明の幾つかの実施形態による、SIMDエンジンを用いて、ハッシュテーブル内の複数のハッシュ値の一致について同時検索する例示的なシーケンスの概略図である。 本発明の幾つかの実施形態による、SIMDエンジンを用いて複数のハッシュテーブルエントリを同時更新する例示的なシーケンスの概略図である。
本発明は、その幾つかの実施形態において、データ圧縮に関し、より具体的には、排他的ではないが、SIMDエンジンを用いるデータ圧縮に関する。
本発明は、データ、例えばデータ記憶及び/又はデータ転送、の量(容量)を削減するためにデータ圧縮を必要とする複数のアプリケーションに対して1又は複数のプロセッサのSIMDエンジンを用いる汎用データ圧縮のためのシステム及び方法を提示する。複数のデータアイテム、例えば、バイト、ワード、ダブルワード、及び/又はピクセルを含む入力データストリームは、反復データシーケンスの前のインスタンスへのポインタで反復データシーケンスを置き換えることにより、圧縮される。ここに提示される圧縮システム及び方法は、従来知られている無損失圧縮方法及び/又はアルゴリズム、例えばLempel−Ziv(LZ77及びLZ78)、Lempel−Ziv−Welch(LZW)、Lempel−Ziv−Oberhumer(LZO)、及び/又はLZ4を利用する。圧縮方法は、圧縮処理を拡張するため、例えば圧縮リソース及び/又は圧縮時間を削減するために、プロセッサのSIMDエンジンにより実行される圧縮動作を実証するために必要な程度まで本発明において説明されるだけである。しかしながら、当業者は圧縮方法の全ての側面に慣れ親しんでいることが期待される。圧縮方式は、圧縮処理中の1又は複数の動作の同時実行のために、SIMDエンジンを利用し、連続データアイテムのサブセットを処理してそれぞれのハッシュ値を計算し、ハッシュテーブル内のハッシュ値の一致について検索し、及び/又はハッシュテーブルをハッシュ値及び関連サブセットへのポインタで更新する。SIMDエンジンは、複数データアイテムに渡る単一命令(プロセッサ命令)の同時実行をサポートする。圧縮方法及び/又はアルゴリズムは、SIMDエンジンによる同時実行をサポートするために何らか操作されて良い。
SIMDエンジン技術をデータ圧縮処理に適用することは、現在の既存の逐次圧縮方法(レガシ及び/又は標準的圧縮方法)と比べて有意な利益を提示し得る。一般的なベクトル処理技術及び特にSIMD技術は、多くの側面で、例えば並列に処理され得るデータアイテム数及び/又はプロセッサの処理パワーにおいて、急速に進歩している。現在の既存の圧縮方法により使用される逐次データ圧縮は、主に時間を消費する及び/又はプロセッサ集中的動作であり得る。入力データストリームのデータアイテムは圧縮処理の基本動作に関して互いに独立であると考えられ得るので、入力データストリームの同時処理は、SIMDエンジン及び/又は技術を最大限に活用し得る。圧縮時間及び/又は計算リソースは、SIMDエンジンを用いて有意に削減され得る。圧縮動作のうちの1つでも同時実行することは、計算性能を有意に向上する。したがって、2つ又は全ての圧縮動作、例えばサブセットを処理してハッシュ値を計算する、ハッシュ値の一致について検索する、及び/又はハッシュテーブルを更新する、を実行するためにSIMDエンジンを適用することは、更に大きな有意な圧縮性能の向上を提示し得る。
SIMDエンジンを用いて圧縮される圧縮データ(ストリーム)のフォーマットは、幾つかのレガシ圧縮方法を用いて圧縮されたデータに完全に準拠して良い。SIMDエンジンを用いて圧縮されたデータの完全な準拠は、圧縮データを伸長するための従来知られた標準的な圧縮方法、技術、及び/又はツールを用いて圧縮されたデータの伸長を可能にする。勿論、伸長方法、技術、及び/又はツールは、使用される圧縮フォーマットに従い適切に選択される必要があって良い。例えば、LZ4伸長は、LZ4圧縮データフォーマットに従いSIMDエンジンを利用して圧縮された圧縮データを伸長するために利用されて良い。
本発明の少なくとも1つの実施形態を詳細に説明する前に、本発明は、必ずしもその用途において、以下の記載において説明された及び/又は図面及び/又は例に示されたコンポーネント及び/又は方法の構成及び配置の詳細に限定されないことが理解されるべきである。本発明は、他の実施形態又は種々の方法で実施され又は実行されることが可能である。
本発明は、システム、方法、及び/又はコンピュータプログラムプロダクトであって良い。コンピュータプログラムプロダクトは、プロセッサに本発明の態様を実施させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体(又は複数の媒体)を含み得る。
コンピュータ可読記憶媒体は、命令実行装置による使用のために命令を保持し格納可能な有形装置であり得る。コンピュータ可読記憶媒体は、例えば、限定ではないが、電子記憶装置、磁気記憶装置、光学的記憶装置、電磁気記憶装置、半導体記憶装置、又は前述の任意の適切な組合せであって良い。
ここに記載されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から個々のコンピューティング/処理装置に、又はネットワーク、例えばインターネット、ローカルエリアネットワーク、広域ネットワーク、及び/又は無線ネットワークを介して外部コンピュータ若しくは外部記憶装置にダウンロードされ得る。
コンピュータ可読プログラム命令は、完全にユーザのコンピュータで、部分的にユーザのコンピュータで、スタンドアロン型ソフトウェアパッケージとして、部分的にユーザのコンピュータで及び部分的にリモートコンピュータで、又は完全にリモートコンピュータ若しくはサーバで、実行されて良い。後者のシナリオでは、リモートコンピュータは、LAN(local area network)又はWAN(wide area network)を含む任意の種類のネットワークを通じてユーザのコンピュータに接続されて良く、或いは(例えば、インターネットサービスプロバイダを用いてインターネットを通じて)外部コンピュータへの接続が生成されて良い。幾つかの実施形態では、例えばプログラマブル論理回路、フィールドプログラマブルゲートアレイ(FPGA)、又はプログラマブルロジックアレイ(PLA)を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路をパーソナライズすることにより、コンピュータ可読プログラム命令を実行して良い。
本発明の態様は、本発明の実施形態による方法、機器(システム)及びコンピュータプログラムプロダクトのフローチャート図及び/又はブロック図を参照してここに記載される。フローチャート図及び/又はブロック図の各々のブロック、及びフローチャート図及び/又はブロック図のブロックの組合せは、コンピュータ可読プログラム命令により実装され得ることが理解される。
図中のフローチャート及びブロック図は、本発明の種々の実施形態に従うシステム、方法、及びコンピュータプログラムプロダクトの可能な実装のアーキテクチャ、機能、及び動作を示す。これに関し、フローチャート又はブロック図の各々のブロックは、特定の論理機能を実装するために1又は複数の実行可能命令を有するモジュール、セグメント、又は命令の一部、を表し得る。幾つかの代替の実施形態では、ブロックの中に記される機能は、図に示した順序と異なって生じて良い。例えば、連続して示される2つのブロックは、実際には、実質的に同時実行されて良く、或いは、これらのブロックは、含まれる機能に依存して、時には、逆の順序で実行されて良い。留意すべきことに、ブロック図及び/又はフローチャート図の各々のブロック、及びブロック図及び/又はフローチャート図のブロックの組み合わせは、特定の機能又は動作を実行する、又は特定目的ハードウェア及びコンピュータ命令の組み合わせを実行する専用ハードウェアに基づくシステムにより実施され得る。
ここで図1を参照すると、図1は、本発明の幾つかの実施形態による、SIMDエンジンを用いて入力データストリームを圧縮する例示的なシステムの概略図である。システム100は、入力データストリーム120を受信する及び/又は指定する並びに圧縮出力データストリーム130を出力する入力/出力(I/O)インタフェース102、入力データストリーム120を圧縮して圧縮出力データストリーム130を生成するSIMDエンジン106を含むプロセッサ104、メモリ108、及びプログラムストア110を含む。入力データストリーム120は、1又は複数のフォーマット、例えばデータファイル、メディアファイル、ストリーミングデータ、等で受信されて良い。入力データストリーム120は、複数のデータアイテム、例えば、ストリームとして順序通り配置され得るバイト、ワード、ダブルワード、及び/又はピクセルを含む。I/Oインタフェース102は、1又は複数のインタフェース、例えばネットワークインタフェース、メモリインタフェース、及び/又は記憶装置インタフェースを含み得る。I/Oインタフェース102は、データストリーム120及び/又は130をネットワーク及び/又は1又は複数のローカル周辺機器インタフェース、例えばユニバーサルシリアルバス(USB)、セキュアデジタル(SD)カード、等を介して受信し及び/又は送信するために、プロセッサ104により使用されて良い。I/Oインタフェース102は、メモリ108装置のようなメモリ及び/又はプログラムストア110のような記憶装置にデータストリーム120及び/又は130をフェッチし及び/又は格納するために、プロセッサ104により使用されても良い。同種又は異種のプロセッサ104は、クラスタとして及び/又はそれぞれ1又は複数のSIMDエンジン106を有する1又は複数のマルチコアプロセッサとして、並列処理のために構成されて良い。SIMDエンジン106は、ベクトル処理のための複数の処理パイプラインを含み、例えば複数のデータアイテムを同時処理する。プログラムストア110は、1又は複数の一時的な持続性メモリ記憶装置、例えばハードドライブ、フラッシュアレイ、等を含み得る。プログラムストア110は、1又は複数のネットワーク記憶装置、例えば記憶サーバ、ネットワークアクセス可能記憶装置(NAS)、ネットワークドライブ、等を更に含んで良い。
図2も参照すると、図2は、本発明の幾つかの実施形態による、SIMDエンジンを用いて入力データストリームを圧縮する例示的な処理のフローチャートである。入力データストリームを圧縮する圧縮処理200は、システム100のようなシステムにより実行されて良い。圧縮処理200は、SIMDエンジン106を利用して、入力データストリーム120の複数のデータアイテムを同時処理して、圧縮出力データストリーム130を生成する。
圧縮処理200は、例えばプロセッサ104により実行される複数のプログラム命令を含むコンプレッサ112及び/又はプログラムストア110からのSIMDエンジン106のような1又は複数のソフトウェアモジュールにより行われて良い。コンプレッサ112は、プロセッサ104の処理ユニットにより実行されて、圧縮処理管理し及び/又は調整し、例えばSIMDエンジン106にデータをロードし、SIMDエンジン106からデータを収集し、データを同期化し、タスクを同期化し、圧縮出力データストリーム130を更新する、等をして良い。コンプレッサ112を実行するプロセッサ104は、圧縮処理200を早め、したがって処理リソース及び/又は処理時間を削減するために、SIMDエンジン106に、圧縮処理200中に入力データストリーム120の複数のデータアイテム及び/又は中間成果物を同時処理するよう指示して良い。同時処理は、複数の処理パイプラインを用いて複数のデータアイテム及び/又は中間成果物に渡り動作(命令)を同時実行するSIMDエンジンに対して単一命令を開始するプロセッサ104により適用される。コンプレッサ112は、圧縮シーケンス200を制御するために、メモリ108内に1又は複数のデータ構造、例えば履歴アレイ114、ハッシュテーブル116、等を生成して良い。
202に示すように、処理200は、コンプレッサ112がI/Oインタフェース102を用いて入力データストリーム120を受信すること、例えばリモート装置からネットワークを介して入力データストリーム120を受信すること、ローカル周辺機器インタフェースから、メモリ108から、及び/又はプログラムストア110から入力データストリーム120をフェッチすること、で開始する。
圧縮処理200を実行するシステム100は、例えば従来知られている1又は複数の無損失圧縮方法、例えばLempel−Ziv(LZ77及びLZ78)、Lempel−Ziv−Welch(LZW)、Lempel−Ziv−Oberhumer(LZO)、及び/又はLZ4を用いて、入力データストリーム120を圧縮する。先に言及したように、圧縮方法は、圧縮処理200を拡張するためにSIMDエンジン106により実行される圧縮動作を実証するために必要な程度だけ、本発明において説明される。
SIMDエンジン106を利用して入力データストリーム120を圧縮する実施形態を更に提示する前に、圧縮方法の幾つかの基本的側面が先ず記載される。圧縮方法の基本的側面は、入力データストリーム120内の重複データシーケンスを識別し、圧縮出力データストリーム130の中の重複シーケンス自体を置き換える代わりに、重複シーケンスを同じシーケンスの前のインスタンスへのポインタで置き換えることである。スライディングウインドウが入力データストリーム120に適用されて、入力データストリーム120の連続データアイテムを含むローリングシーケンスを指定する。ローリングシーケンスのデータアイテムは、履歴テーブル114のような履歴アレイに格納される。ハッシュ値が、ローリングシーケンスの各々について計算され、ハッシュテーブル116のようなハッシュテーブルのハッシュテーブルエントリに格納される。ハッシュテーブルエントリの各々は、計算したハッシュ値と履歴アレイ114内の関連ローリングシーケンスへのポインタとのペアを含む。全ての新しいローリングシーケンスについて、ハッシュ値が計算され、同一のハッシュ値がハッシュテーブル116内に存在するかどうかを調べるために、ハッシュテーブル116内での一致について検索される。一致が見付かった場合、新しいローリングシーケンスは、一致するハッシュ値に関連付けられた前のローリングシーケンスと同一であって良い。
ハッシュ値を計算するために、複数のハッシュ関数が使用されて良い。ハッシュ関数の選択は、計算の複雑さ及び/又は処理時間と、2つのサブセットの類似性の確実さとの間のトレードオフを提示し得る。ローリングシーケンスの各々がユニークなハッシュ値に関連付けられるように、一義的な複雑なハッシュ値を計算することが可能である。しかしながら、複雑なハッシュ値の計算は、非常に計算が要求され得る。より低い複雑さのハッシュ関数は、ローリングシーケンスについて、より少ない複雑さのハッシュ値を生成し得る。しかしながら、何らかのレベルの曖昧さが存在し得る。例えば、2以上の類似しないローリングシーケンスについて、計算したハッシュ値が同じであり得る。このような低い複雑さのハッシュ値の場合、同じハッシュ値を有する新しいローリングシーケンス及び前のローリングシーケンスの実際のデータアイテムは、一致を決定するために比較される必要がある。一致が検出された場合、新しいローリングシーケンスが一致する前のローリングシーケンスと同じであることを示し、新しいローリングシーケンスは、圧縮出力データストリーム130に含まれないが、一致する前のローリングシーケンスの位置へのポインタで置き換えられて良い。ポインタは、置き換えられたローリングシーケンスが挿入される必要のある、圧縮出力データストリーム130内の適切な位置に置かれて良い。一致が検出されない場合、ローリングシーケンスは、圧縮出力データストリーム130に含まれる。ハッシュテーブル検索に続き、ハッシュテーブルは相応して更新されて良い。一致が見付からなかった場合、ハッシュテーブルは、新しいローリングシーケンスについて計算された新しいハッシュ値を含むよう更新されて良い。全てのハッシュエントリが占有された場合、前のローリングシーケンスに関連付けられた1又は複数のハッシュ値、例えば一致頻度の最も低いハッシュエントリ等は、ハッシュテーブルから省略されて良い。
履歴アレイ114のサイズ、例えば計算に利用可能な前のローリングシーケンスの数は、変化して良い。例えば計算に利用可能なより多くの前のローリングシーケンスを含む大きな履歴アレイ114の場合、一致の確率は増大し、したがって計算の向上をもたらす。しかしながら、履歴アレイ114が大きいほど、多くの検索動作及び/又はメモリリソースが必要とされ、したがって圧縮のための処理リソース及び/又は処理時間を増大する。圧縮方法の殆どで、履歴アレイ116のサイズは、圧縮効率と消費処理及び/又はメモリリソースとの間の最適トレードオフを達成するために、標準的に2KB、4KB、8KB、16KB及び/又は32KBである。
標準的に、圧縮方法は、ローリングシーケンスの各々についてハッシュ値を計算するためにシリアルシーケンスを利用し、ハッシュテーブルを検索し、及びハッシュテーブルを相応して更新する。圧縮処理200は、他方で、圧縮処理200を早めるために、SIMDエンジン106を用いて計算、検索、及び/又は更新動作のうちの1又は複数を同時実行して良い。
204に示すように、コンプレッサ112は、大部分の最近のサブセットを格納するために、メモリ108内に履歴アレイ114を生成する。履歴アレイ114の標準的なサイズは、2KB、4KB、8KB、16KB、及び/又は32KBである。処理リソースの可用性及び/又はメモリ108のサイズに従い、他のサイズが履歴アレイ114に割り当てられて良い。コンプレッサ112は、また、履歴アレイ114に格納されたサブセットのうちの1つへのポインタ及び関連サブセットについて計算したハッシュ値を含むハッシュエントリを格納するために、メモリ108内にハッシュテーブル116を生成する。つまり、最初に、圧縮処理200の始めに、履歴アレイ114及びハッシュテーブル116は、空であり、スライドウインドウが入力データストリーム120に適用されるにつれ次第にサブセット(ローリングシーケンス)で満たされる。
206に示すように、コンプレッサ112は、入力データストリーム120に渡りローリングウインドウを適用する。サブセットの各々のサイズを指示するウインドウのサイズは、プロセッサ104のアーキテクチャ及び/又はSIMDエンジン106のアーキテクチャに従い適応されて良い。コンプレッサ112は、入力データストリーム120に渡りスライドウインドウをスライドさせ、ウインドウの全てのスライド(シフト)の間、前のローリングシーケンスの最も早い(第1)データアイテムが省略され、新しいローリングシーケンスを生成するために新しいデータアイテムが追加されるようにする。
208に示すように、コンプレッサ112は、SIMDエンジン106を用いて新しいローリングシーケンスについてハッシュ値を計算する。ローリングシーケンスの同時処理を可能にするために、ローリングシーケンスは、それぞれローリングシーケンスの連続データアイテムを含む複数の被処理サブセットに分離される。被処理サブセットのグループ(ローリングシーケンス)は、SIMDエンジン106を用いて同時処理される。グループ内の被処理サブセットの数は、プロセッサ104のアーキテクチャ及び/又はSIMDエンジン106のアーキテクチャに従い適応されて良い。コンプレッサ112は、サブセットの各々についてハッシュ値を計算するために、被処理サブセットを1又は複数のSIMDエンジン106にロードする。コンプレッサ112によりSIMDエンジンに発行されるロード命令の種類、シノプシス、特徴、及び/又は使用法は、プロセッサ104及び/又はSIMDエンジン106のアーキテクチャに従い適応されて良い。
ここで図3Aを参照すると、図3Aは、本発明の幾つかの実施形態による、SIMDエンジンのレジスタに入力データストリームの複数の連続バイトを同時ロードする例示的なシーケンスの概略図である。図3Bも参照すると、図3Bは、本発明の幾つかの実施形態による、SIMDエンジンを用いて、それぞれ入力データストリームの連続バイトを含むサブセットのグループのハッシュ値を同時計算する例示的なシーケンスの概略図である。例示的なロードシーケンス300の間、コンプレッサ112のようなコンプレッサは、各連続レジスタが1アイテムだけスライドされたデータのウインドウを含むように、連続データアイテム310を、SIMDエンジン106の4個のレジスタ302A乃至302Dにロードする。レジスタ302にロードされる連続データアイテムの数は、被処理サブセットの各々のサイズ及び/又はサブセットのグループのサイズを指示する。図3Aに提示される例示的なシーケンスは16バイトアーキテクチャを利用するSIMDエンジンを記載し、例えば各レジスタは16バイト幅であり、8個のサブセットのグループの同時処理を可能にし、例えば4個の連続データアイテム310を含むサブセットについてそれぞれ計算される8個のハッシュ値320を計算する。後述するように、SIMDエンジン106が3個のハッシュ値320を同時計算できるようにするために、データアイテム310は間隔を開けられる必要がある。データアイテム310は、各バイト(8ビット)がワード(16ビット)の空間を占有するように間隔を開けられ、したがって、例示的なSIMDエンジン106のレジスタ幅に適合するように32個のデータアイテム310が16バイトの4個のレジスタを占有する。SIMDエンジン106の他のアーキテクチャ、例えば32、64、128、256バイト等は、異なる数の連続データアイテム310をSIMDエンジン106のレジスタ302にロードすることを可能にし得る。ハッシュ値320は4個の連続データアイテム310毎に計算されるので、SIMDエンジン106にロードされた32バイトは、11個の連続データアイテムS310A乃至SK+10310Kからなる。
プロセッサ104が、例えば16バイトSIMDエンジン106を作動させるStreaming SIMD Extensions(SSE)命令セットを利用するIntel Architecture(IA)プロセッサであると仮定すると、32バイトのロード動作は8個の命令を必要とし得る。
ロード動作中、コンプレッサ112は、データアイテムのバイト(8ビット)をワード(16ビット)に変換して、図3Bに示すように各データアイテムが1ワードを占有するようにする。
コンプレッサ112は、SIMDエンジン106に、レジスタ302にロードされたデータアイテム310をシフトするよう指示する。以下のように、レジスタ部分302A−302Dの各々に異なるシフトが適用される。
・レジスタ部分302Aに格納されたデータアイテムS310A乃至SK+7310Hは、6ビット左にシフトされる。
・レジスタ部分302Bに格納されたデータアイテムSK+1310B乃至SK+8310Iは、4ビット左にシフトされる。
・レジスタ部分302Bに格納されたデータアイテムSK+2310C乃至SK+9310Jは、2ビット左にシフトされる。
・レジスタ部分302Dに格納されたデータアイテムSK+3310D乃至SK+10310Kは、全くシフトされない。
レジスタ302に適用されるシフトの程度は、レジスタ302にロードされる連続データアイテム310の数に依存し、ここでは、シフトの程度は、SIMDエンジン106のアーキテクチャに依存する。
例示的な処理シーケンス301の間、ロードシーケンス300に続き、コンプレッサ112は、SIMDエンジン106に、被処理サブセットの各々についてハッシュ値320を同時計算する330よう指示して良い。コンプレッサ112によりSIMDエンジンに発行される計算命令の種類、シノプシス、特徴、及び/又は使用法は、プロセッサ104及び/又はSIMDエンジン106のアーキテクチャに従い適応されて良い。ハッシュ値320の計算330は、連続データアイテム310のサブセットに渡り実行される単純なXOR演算であって良い。連続データアイテム310のサブセットは、被処理サブセットとして参照される。被処理サブセットの各々は、4個のデータ連続アイテム310を含む。例えば、第1被処理サブセットはデータアイテムS310A乃至SK+3310Dを含み、第2被処理サブセットはデータアイテムSK+1310B乃至SK+4310Eを含み、データアイテムSK+7310I乃至SK+10310Kを含む最後の被処理サブセットまで同様である。
SIMDエンジン106は、単純なXOR演算であって良い計算330を、被処理サブセットの各々に含まれるそれぞれ4個のデータアイテム310に渡り適用することにより、全ての被処理サブセットについてハッシュ値を同時計算する。SIMDエンジン106の提示の例示的なシーケンス及びアーキテクチャでは、SIMDエンジン106は、8個のハッシュ値320、データアイテムS310A乃至SK+3310Dについてハッシュ値320A、データアイテムSK+1310B乃至SK+4310Eについてハッシュ値320B、データアイテムSK+2310C乃至SK+5310Fについてハッシュ値320C、データアイテムSK+3310D乃至SK+6310Gについてハッシュ値320D、データアイテムSK+4310E乃至SK+7310Hについてハッシュ値320E、データアイテムSK+5310F乃至SK+8310Iについてハッシュ値320F、データアイテムSK+6310G乃至SK+9310Jについてハッシュ値320G、データアイテムSK+7310H乃至SK+10310Kについてハッシュ値320H、を生成する。計算したハッシュ値320は、SIMDエンジン106のレジスタ304に格納される。
プロセッサ104が、例えば16バイトSIMDエンジン106を作動させるSSE命令セットを利用するIAプロセッサであると仮定すると、32個のハッシュ値320の計算は6個の命令を必要とし得る。
もう一度、図2を参照する。210に示すように、コンプレッサ112は、計算したハッシュ値320の各々を、ハッシュテーブル116のハッシュエントリの中で利用可能な複数のハッシュ値の各々と比較することにより、計算したハッシュ値320の各々の一致について検索する。ハッシュテーブル116のハッシュエントリのうちの1つに同一ハッシュ値が見付かった場合、計算したハッシュ値320のうちの1つについて一致が見付かる。コンプレッサ112は、SIMDエンジン106に、ハッシュテーブル116の中で計算したハッシュ値320の各々の一致について同時検索するよう指示するために、命令を発行して良い。コンプレッサ112によりSIMDエンジンに発行される検索命令の種類、シノプシス、特徴、及び/又は使用法は、プロセッサ104及び/又はSIMDエンジン106のアーキテクチャに従い適応されて良い。例えば、IAプロセッサ104では、コンプレッサ112は、SIMDエンジン106に検索動作を実行するよう指示するために、以下の関数1に示されるように、SSE命令セットから「gather」命令を使用して良い。
関数1:
void__m512i_m512_132gather_epi32(__m512i vindex, void const* base_addr, int scale)
シノプシス:
void__m512i_m512_132gather_epi32(__m512i vindex, void const* base_addr, int scale)
#include “immintrin.h”
Instruction :Vpgatherdd zmm32z {k}, vm32z
CPUID Flags :AVX512F for AVX−512, KNCNI for KNC
説明:
32ビットインデックスを用いてメモリから32ビット整数を集める。32ビット要素は、base_addrで開始するアドレスからロードされ、vindex内の各32ビット要素によりオフセットされる(各インデックスはscale内の因子によりスケーリングされる)。scaleは1、2、4、又は8であるべきである。
動作:
FOR j:=0 to 15
i:=j*32
dst[i+31:i]:=MEM[base_addr+SignExtend(vindex[i+31:i])*scale]
ENDFOR
Dst[MAX:512]:=0
コンプレッサ112は、SIMDエンジン106に検索動作を実行するよう指示するために、以下の擬似コード抜粋1に表されるように「gather」命令を発行して良い。
擬似コード抜粋1:
Result[i]=hashTable[hashes[i]] for i in 0…15
212に示すように、計算したハッシュ値320のうちの1又は複数がハッシュテーブル116内の格納されたハッシュ値のうちの1つに一致する場合、コンプレッサ112は、被処理サブセットが一致する格納されたハッシュ値を含むハッシュエントリによりポイントされる関連サブセットと同じか否かを決定するために更なる比較を開始して良い。コンプレッサ112により使用されるハッシュ関数計算330が、曖昧な結果を提示し得る、例えば同じハッシュ値320が異なるデータアイテム310を有する異なるサブセットについて計算され得る、単純なXOR演算であり得るので、更なる比較が要求されて良い。更なる比較は、被処理サブセットに含まれるデータアイテム310と、ハッシュテーブル116内の一致する格納されたハッシュ値に関連付けられた関連サブセットに含まれるデータアイテム310との比較を含む。被処理サブセット及び関連サブセットの両方のデータアイテム310が同様である場合、コンプレッサ112は、被処理サブセットについて一致指示を発行する。
ここで図4を参照すると、図4は、本発明の幾つかの実施形態による、SIMDエンジンを用いて、ハッシュテーブル内の複数のハッシュ値の一致について同時検索する例示的なシーケンスの概略図である。例示的な検索シーケンス400の間、コンプレッサ112のようなコンプレッサは、SIMDエンジン106のようなSIMDエンジンに、ハッシュ値320のような計算した複数のハッシュ値の、ハッシュテーブル116のようなハッシュテーブル内のハッシュエントリ402に格納されたハッシュ値との一致について、同時検索するよう指示する。例示的なシーケンス400は、前述の例示的なロードシーケンス300及び例示的な同時計算シーケンス301に続く。SIMDエンジン106は、レジスタ304に格納された計算したハッシュ値320の各々を、ハッシュテーブル116内のハッシュエントリ402の中で利用可能な格納されたハッシュ値の各々と比較するよう、同時に8個の比較動作450を開始する。各検索動作は、計算したハッシュ値320のうちの1つに関連付けられる。例えば、検索動作450Aは計算したハッシュ値320Aに関連付けられ、検索動作450Bは計算したハッシュ値320Bに関連付けられ、検索動作450Hは計算したハッシュ値320Hに関連付けられるまで同様である。例示的な検索シーケンス400において分かるように、検索動作450Aの間、それぞれの計算したハッシュ値320Aの間で一致が見付からない。しかしながら、空のハッシュエントリ402Gがハッシュテーブル116内で検出される。検索動作450Bの間、それぞれの計算したハッシュ値320Bとハッシュエントリ402C内の格納されたハッシュ値との間で一致が見付かる。検索動作450Hの間、それぞれの計算したハッシュ値320Hとハッシュエントリ402K内の格納されたハッシュ値との間で別の一致が検出される。SIMDエンジン106により使用されるハッシュ関数計算330はデータアイテム310に渡る単純なXOR演算であって良いので、ハッシュ値320は曖昧である場合がある。したがって、被処理サブセット及びハッシュテーブル116内の一致する格納されたハッシュ値に関連付けられたサブセットの実際のデータアイテム310は、的確な一致を決定するために比較される必要がある。コンプレッサ112は、履歴アレイ114内の一致する計算したハッシュ値320毎に、比較動作460を開始して良い。例えば、SIMDエンジン106は、計算したハッシュ値320Bとハッシュエントリ402Cに格納されたハッシュ値との間の一致を示した。コンプレッサは、したがって、ハッシュエントリ402Cに関連付けられたデータセットのデータアイテム310を比較するために、比較動作460Aを開始する。例えば、ハッシュエントリ402CはデータアイテムSK−5310Pで開始するサブセットに関連付けられると仮定すると、コンプレッサ112は、データアイテムSK+1310B乃至SK+4310E(ハッシュ値320Bを生成する)を、それぞれのデータアイテムSK−5310P乃至SK−2310Mと比較して、一致を決定する。データアイテムSK+1310B乃至SK+4310EがデータアイテムSK−5310P乃至SK−2310Mと同様である場合、コンプレッサ112は一致を示して良い。同様に、コンプレッサ112は、ハッシュエントリ402Kに関連付けられたデータセットのデータアイテム310を比較するために、比較動作460Bを開始する。例えば、ハッシュエントリ402KはデータアイテムSK−3310Nで開始するサブセットに関連付けられると仮定すると、コンプレッサ112は、データアイテムSK+7310H乃至SK+10310K(ハッシュ値320Hを生成する)を、それぞれのデータアイテムSK−3310N乃至S310Aと比較して、一致を決定する。データアイテムSK+7310H乃至SK+10310KがデータアイテムSK−3310N乃至S310Aと同様である場合、コンプレッサ112は一致を示して良い。
もう一度、図2を参照する。214に示すように、コンプレッサ112は、一致の結果に従いハッシュテーブル116を更新する。コンプレッサ112は、命令を発行して、SIMDエンジン106に、ハッシュエントリ402のうちの1又は複数を、それぞれの1又は複数の被処理サブセットに関連付けられた新しいハッシュエントリ402で同時更新するよう指示して良い。つまり、新しいハッシュエントリ402の各々は、それぞれのサブセットについて計算されたハッシュ値320と、履歴アレイ114内のそれぞれのサブセットへのポインタと、を含む。ハッシュテーブル116は、1又は複数の更新方式を用いて、1又は複数のシナリオで更新されて良い。ある方式では、全ての被処理サブセットがハッシュテーブル116内のエントリに関連付けられる。しかしながら、例えばハッシュテーブル116が、同時処理されるサブセットの数より多くのハッシュエントリ402を含む場合、コンプレッサ112は、ハッシュテーブル116を更新するために1又は複数の方式を適用して良い。例えば、ハッシュエントリ402のような1又は複数の空のハッシュエントリがSIMDエンジン106の一致検索動作の間に検出された場合、空のハッシュエントリの各々を有するハッシュエントリ402のうちの1又は複数は、更新されて、被処理サブセットのうちの1つに関連付けらて良い。これは、それぞれのハッシュエントリ402が、それぞれの被処理サブセットの計算したハッシュ値320のような計算したハッシュ値320と、被処理サブセットのデータアイテム310のような第1データアイテムへのポインタと、を含むよう生成されることを意味する。
別のシナリオでは、SIMDエンジン106の一致検索動作の間に、1又は複数の計算したハッシュ値320は、ハッシュテーブル116に格納された1又は複数のハッシュ値と一致する。しかしながら、比較動作に続いて、コンプレッサ112は、被処理サブセットの内容(データアイテム)と、(一致するハッシュエントリによりポイントされた)関連サブセットの内容(データアイテム)とが同じでないことを示す。このような場合、コンプレッサ112は、ハッシュテーブル116内のそれぞれのハッシュエントリ402を、被処理サブセットの第1データアイテム310をポイントするポインタで更新して良い。ハッシュ値は当然に同じであり、したがって、コンプレッサ112はそれを変更しない。
コンプレッサ112は、更に、新しく生成したハッシュエントリ402が最近のサブセットに関連付けられた新しく計算したハッシュ値320を含むことを可能にするために、ハッシュエントリ402のうちの1又は複数をドロップする1又は複数の方法及び/又は技術を適用して良い。
コンプレッサ112によりSIMDエンジンに発行される更新命令の種類、シノプシス、特徴、及び/又は使用法は、プロセッサ104及び/又はSIMDエンジン106のアーキテクチャに従い適応されて良い。例えば、IAプロセッサ104では、コンプレッサ112は、SIMDエンジン106にハッシュテーブル116内の更新動作を実行するよう指示するために、以下の関数2に示されるように、SSE命令セットから「scatter」命令を使用して良い。
関数2:
void__m512i_m512_132scatter_epi32(void* base_addr, __m512i vindex, __512i a, int scale)
シノプシス:
void__m512i_m512_132scatter_epi32(void* base_addr, __m512i vindex, __512ia, int scale)
#include “immintrin.h”
Instruction :vpscatterdd vm32{k}, zmm
CPUID Flags :AVX512F for AVX−512, KNCNI for KNC
説明:
32ビットインデックスを用いて、aからメモリに32ビット整数を散乱させる。32ビット要素は、base_addrで開始するアドレスに格納され、vindex内の各32ビット要素によりオフセットされる(各インデックスはscale内の因子によりスケーリングされる)。scaleは1、2、4、又は8であるべきである。
動作:
FOR j:=0 to 15
i:=j*32
MEM[base_addr+SignExtend(vindex[i+31:i])*scale]:=a[i+31:i]
ENDFOR
コンプレッサ112は、SIMDエンジン106に更新動作を実行するよう指示するために、以下の擬似コード抜粋2に表されるようにscatter命令を発行して良い。
擬似コード抜粋2:
hashTable[hashes[i]]=position[i] for i in 0…15
ここで図5を参照すると、図5は、本発明の幾つかの実施形態による、SIMDエンジンを用いて複数のハッシュテーブルエントリを同時更新する例示的なシーケンスの概略図である。ハッシュテーブル116のようなハッシュテーブルに対する例示的な更新シーケンス500の間、コンプレッサ112のようなコンプレッサは、ハッシュテーブル116を、ハッシュエントリ402のような1又は複数の新しいハッシュエントリで同時更新するよう、SIMDエンジン106のようなSIMDエンジンに指示する。例示的なシーケンス500は、前述の例示的なロードシーケンス300、例示的な同時計算シーケンス301、及び例示的な同時検索シーケンス400に続く。SIMDエンジン106は、ハッシュエントリ402を更新したハッシュ値及び被処理サブセットへの更新したポインタで更新するために、8個の更新動作510を同時に開始する。SIMDエンジン106は、更新されたハッシュエントリ402の各々を、計算したハッシュ値320のうちのそれぞれ1つ、及び計算したハッシュ値320に関連付けられたそれぞれのサブセットの第1データアイテム310へのポインタで更新する。例示的な更新シーケンス500において分かるように、SIMDエンジン106は、ハッシュテーブル116内の8個のハッシュエントリ402を更新するために、8個の更新動作510を同時に開始する。例えば、更新動作510Aはハッシュエントリ402Gを、データアイテムS310A乃至SK+3310Dを含む被処理サブセットについて計算した計算したハッシュ値320A、及び被処理サブセットの第1データアイテム310であるデータアイテムS310Aをポイントする更新されたポインタで更新するために行われる。更新動作510Aに続いて、データアイテムS310A乃至SK+3310Dを含む被処理サブセットが、関連サブセットと考えられる。同様に、更新動作510Bはハッシュエントリ402Cを、データアイテムSK+1310B乃至SK+4310Eを含む被処理サブセットについて計算した計算したハッシュ値320B、及び被処理サブセットの第1データアイテム310であるデータアイテムSK+1310Bをポイントする更新されたポインタで更新するために行われる。更新動作510Bに続いて、データアイテムSK+1310B乃至SK+4310Eを含む被処理サブセットが、関連サブセットと考えられる。同時更新動作510は全ての被処理サブセットについて同様であり、ハッシュエントリ402Kを更新するために行われる更新動作510Hまで同じ方法である。更新動作510Hの間、ハッシュエントリ402Kは、データアイテムSK+7310H乃至SK+10310Kを含む被処理サブセットについて計算した計算したハッシュ値320H、及び被処理サブセットの第1データアイテム310であるデータアイテムSK+7310Hをポイントする更新されたポインタで更新される。更新動作510Hに続いて、データアイテムSK+7310H乃至SK+10310Kを含む被処理サブセットが、関連サブセットと考えられる。
もう一度、図2を参照する。216に示すように、コンプレッサ112は、圧縮出力ストリーム130を被処理サブセットで更新する。入力データストリーム120内の関連サブセット(前のサブセット)と一致する(同じデータアイテム310を有する)とされた被処理サブセット毎に、コンプレッサ112は、圧縮出力ストリーム130内の被処理サブセットを関連サブセットの位置へのポインタで置き換える。入力データストリーム120内のどの関連サブセット(前のサブセット)とも一致しないとされた被処理サブセット毎に、コンプレッサ112は、圧縮出力ストリーム130内に被処理サブセット自体を配置する。
決定点である218に示すように、コンプレッサ112は、追加データアイテムが入力データストリーム120内で利用可能かどうかを調べる。追加データアイテム310が検出された場合、処理200はステップ206に枝分かれし、ステップ206乃至216は追加サブセットグループについて繰り返される。コンプレッサ112が入力データストリーム120の終わりに達したと決定した場合、処理200は220に枝分かれする。
220に示すように、コンプレッサ112が入力データストリーム120を処理した後、コンプレッサ112は、例えばI/Oインタフェース102を用いて圧縮出力ストリーム130を出力する。
圧縮出力ストリーム130のフォーマットは、従来知られているレガシ(標準的な)圧縮方法、特に逐次圧縮を適用する方法により入力データストリーム120について生成された圧縮出力ストリームに準拠して良い。圧縮出力ストリーム130の準拠は、従来知られている標準的な伸長方法、技術、及び/又はツールを用いて圧縮出力ストリーム130を伸長することを可能にする。当然に、伸長フォーマットは、コンプレッサ112により利用される圧縮フォーマットに選択されて良い。例えば、圧縮出力ストリーム130がLZ4圧縮データフォーマットに従う場合、標準的なLZ4伸長方法、技術、及び/又はツールが圧縮出力ストリーム130を伸長するために要求されて良い。
<例>
ここで、以上の記載と一緒に本発明を非限定的に説明する以下の例を参照する。
SIMDエンジン106のようなSIMDエンジンを利用する圧縮処理により提供される性能向上を検証するために、幾つかの実験が行われた。実験中、入力データストリーム120のような標準的な入力データストリームが、現在当分野で知られているような入力データストリームに逐次適用されるLZO圧縮アルゴリズムを用いて圧縮された(レガシ方法)。同じ標準的な入力データストリーム120は、また、同時にハッシュ値320を計算し330及びハッシュテーブル116を検索するために、SIMDエンジン106を利用する処理200により適用されるような単純な圧縮アルゴリズムを用いて圧縮された。両方の圧縮方法(レガシ及び処理200)は、16バイトSIMDアーキテクチャを有するIntelによる3.0GHz動作周波数のAdvanced Vector Extensions(AVX)プロセッサで実行された。実験は、以下のような様々な圧縮率:1.0、2.3、及び3.8について行われた。実験の結果は以下の表1に示される。
[表1]
Figure 2019522940
表1から明らかなように、SIMDエンジン106を用いる圧縮処理200は、レガシ(標準的な)圧縮処理に比べて〜40%の有意な性能向上を示す。
本発明の種々の実施形態の記載は、説明の目的で提示されたが、包括的であることを意図せず又は開示された実施形態に限定されない。多くの変更及び変形が、記載された実施形態の範囲及び精神から逸脱することなく、当業者に明らかである。ここで使用される用語は、実施形態の原理、実際の用途又は市場に見られる技術に優る技術的向上を最適に説明するために、又は当業者がここに開示された実施形態を理解できるようにするために、選択された。
本願から成熟する特許の寿命の間、SIMDのような多くの関連ベクトル処理技術が開発されることが予想され、用語SIMDの範囲は推測的に全てのこのような新技術を包含することが意図される。
ここで使用される用語「訳」は±10%を表す。
用語「含む」、「含む」、「有する」(comprises、comprising、includes、including、having)及びそれらの活用は、「含むが限定されない」を意味する。この用語は、用語「から成る」及び「基本的に〜から成る」を包含する。
語句「基本的に〜から成る」は、組立又は方法が追加構成要素及び/又はステップを含み得るが、追加構成要素及び/又はステップが請求される組立又は方法の基本的且つ新規な特徴を実質的に変更しない場合だけである。
ここで用いられるように、単数を表す語(「a」、「an」及び「the」)は、特に文脈上明示されない限り、複数への参照も含む。例えば、用語「化合物(a compound)」又は「少なくとも1つの化合物(at least one compound)」は、それらの混合物を含む複数の化合物を含み得る。
語「例示的な」は、「一例、例、又は説明を提供する」ことを意味するために本願明細書で用いられる。「例示的な」として記載される任意の実施形態は、必ずしも、他の実施形態より好適である又は有利であると考えられず及び/又は他の実施形態からの特徴の組み込みを排除しない。
語「任意的な」は、「幾つかの実施形態において提供され、他の実施形態で提供されない」ことを意味するために、本願明細書で用いられる。本発明の任意の特定の実施形態は、そのような特徴が対立しない限り、複数の「任意的な」特徴を含み得る。
本願を通じて、本発明の種々の実施形態が範囲形式で提示され得る。理解されるべきことに、範囲形式の記載は、単に便宜及び簡潔さのためであり、本発明の範囲に対する柔軟性のない限定として考えられるべきではない。したがって、範囲の記載は、全ての可能な下位範囲、並びに該範囲内にある個々の数値を具体的に開示しているものと考えられるべきである。例えば、1乃至6のような範囲の記載は、1乃至3、1乃至4、1乃至5、2乃至4、2乃至6、3乃至6、等のような下位範囲、並びに該範囲内の個々の数、例えば1、2、3、4、5、及び6を具体的に開示していると考えられるべきである。これは、範囲の幅に拘わらず適用される。
数値範囲が本願明細書に示されるときはいつも、示された範囲内の任意の前述の数(分数又は整数)を含むことを意味する。語句、第1指示数と第2指示数との「間に分布する/の範囲」、及び第1指示数から第2指示数「まで分布する/の範囲」は、本願明細書で同義的に使用され、第1及び第2指示数並びにそれらの間の全ての分数及び整数を含むことを意味する。
明確さのために別個の実施形態の文脈で記載された本発明の特定の特徴は、単一の実施形態の中で組み合わせて提供されても良いことが理解される。反対に、簡潔さのために単一の実施形態の文脈で記載された本発明の種々の特徴は、別個に又は任意の適切な小結合において、又は本発明の任意の他の記載された実施形態において適切であるとき提供されても良い。種々の実施形態の文脈で記載された特定の特徴は、実施形態がこれらの要素無しで動作不能でない限り、これらの実施形態の基本的特徴と考えられない。
本願明細書で言及される公報、特許、及び/又は特許出願は、参照により、各々個々の公報及び/又は特許出願が具体的に及び個々に参照により本願明細書に組み込まれるべきであると示されるように同程度に、それらの全体が本願明細書に組み込まれる。さらに、本願における任意の参照の引用又は特定は、このような参照が本発明に対して従来技術として利用可能であることの許可として考えられるべきではない。見出しが使用される範囲で、それらは必ずしも限定として考えられるべきではない。

Claims (15)

  1. 入力データストリームを圧縮して圧縮出力データストリームを生成するシステムであって、
    ハッシュテーブルを格納するメモリであって、前記ハッシュテーブルは複数のハッシュエントリを含み、各ハッシュエントリは、入力データストリームの複数のデータアイテムのうちの続くデータアイテムの複数のサブセットのうちの関連サブセットのハッシュ値と、前記関連サブセットのメモリ位置へのポインタと、を含む、メモリと、
    前記メモリに結合されるプロセッサであって、
    以下の動作:
    被処理サブセットのうちのサブセット毎に前記ハッシュ値を計算し、
    各計算したハッシュ値の一致について前記ハッシュテーブルを検索し、
    前記一致の結果に従い、前記ハッシュテーブルを更新する、
    を実行し、その間、前記動作のうちの少なくとも1つの動作は、単一命令多重データ処理、SIMD、エンジンに、前記複数のサブセットのうちの連続サブセットのグループの各被処理サブセットについて、前記少なくとも1つの動作を同時実行するよう指示することにより実行され、
    前記一致の結果及び前記一致の結果に依存する比較の比較結果に従い、前記圧縮出力データストリームを更新し、
    前記複数の関連サブセットについて、前記計算、検索、及び更新を繰り返して、前記圧縮出力データストリームを生成する、よう適応されるプロセッサと、
    を含むシステム。
  2. 前記複数の関連サブセットの各々は、前記SIMDエンジンのアーキテクチャに従い定義された所定数のデータアイテムを含む、請求項1に記載のシステム。
  3. 前記グループ内の被処理サブセットの数は、前記SIMDエンジンのアーキテクチャに従い設定される、請求項1又は2に記載のシステム。
  4. 前記一致の結果は、各計算したハッシュ値の前記ハッシュテーブル内に存在する既存ハッシュ値との一致を示す、請求項1乃至3のいずれかに記載のシステム。
  5. 前記比較は、前記一致の結果が前記計算したハッシュ値の前記ハッシュテーブル内の一致するハッシュ値との一致を示す場合に、前記比較結果を生成するよう行われ、
    前記比較は、前記計算したハッシュ値を有する前記被処理サブセットの前記データアイテムと、前記一致するハッシュエントリ内の前記ポインタによりポイントされる前記関連サブセットの前記データアイテムとの間の比較を含む、
    請求項1乃至4のいずれかに記載のシステム。
  6. 前記比較結果が、前記被処理サブセット及び前記関連サブセットの前記データアイテムが同一であると示す場合、前記被処理サブセットは、前記圧縮出力データストリーム内の前記関連サブセットへのポインタにより置き換えられ、
    前記比較結果が、前記被処理サブセット及び前記関連サブセットの前記データアイテムが同一でないと示す場合、前記被処理サブセットは、前記圧縮出力データストリーム内で更新され、前記ハッシュテーブルは前記被処理サブセットの新しいハッシュエントリにより更新される、
    請求項1乃至5のいずれかに記載のシステム。
  7. 前記の同時計算は、前記プロセッサが被処理サブセットの前記グループを前記SIMDエンジンの少なくとも1つのSIMDレジスタにロードすること、及び前記SIMDエンジンがサブセットの前記グループを同時処理すること、を含み、前記同時処理は、
    前記グループの前記被処理サブセットを互いに離すこと、
    被処理サブセット毎に異なるシフト値を用いて前記被処理サブセットをシフトすること、及び、前記被処理サブセットを処理して前記被処理サブセット毎にハッシュ値を生成すること、を含む、請求項1乃至6のいずれかに記載のシステム。
  8. 前記ハッシュテーブル内の前記被処理サブセットの各々の前記一致についての前記の同時検索は、前記プロセッサが、前記SIMDエンジンに、前記計算したハッシュ値の各々の前記ハッシュテーブルに格納されたハッシュ値との一致について同時検索するよう指示することを含む、請求項1乃至7のいずれかに記載のシステム。
  9. 少なくとも1つの被処理サブセットによる前記ハッシュテーブルの前記の同時更新は、前記プロセッサが、前記SIMDエンジンに、前記少なくとも1つの被処理サブセットに関連付けられたエントリにより、前記ハッシュテーブルを同時更新するよう指示することを含む、請求項1乃至8のいずれかに記載のシステム。
  10. 前記圧縮出力データストリームは、レガシ圧縮方法を用いて圧縮された標準的圧縮出力データストリームに準拠し、前記圧縮出力データストリームは、レガシ伸長方法を用いて伸長される、請求項1乃至9のいずれかに記載のシステム。
  11. 入力データストリームを圧縮して圧縮出力データストリームを生成する方法であって、
    複数のハッシュエントリを含むハッシュテーブルを格納するステップであって、各ハッシュエントリは、入力データストリームの複数のデータアイテムのうちのデータアイテムの複数のサブセットのうちの関連サブセットのハッシュ値と、前記関連サブセットのメモリ位置へのポインタと、を含む、ステップと、
    以下の動作:
    被処理サブセットのうちのサブセット毎に前記ハッシュ値を計算し、
    各計算したハッシュ値の一致について前記ハッシュテーブルを検索し、
    前記一致の結果に従い、前記ハッシュテーブルを更新する、
    を実行するステップであって、その間、前記動作のうちの少なくとも1つの動作は、プロセッサの単一命令多重データ処理、SIMD、エンジンに、前記複数の関連サブセットのうちの連続サブセットのグループの各被処理サブセットについて、前記少なくとも1つの動作を同時実行するよう指示することにより実行される、ステップと、
    前記一致の結果及び前記一致の結果に依存する比較の比較結果に従い、前記圧縮出力データストリームを更新するステップと、
    前記複数のサブセットを通じて、前記計算、検索、及び更新を繰り返して、前記圧縮出力データストリームを生成するステップと、
    を含む方法。
  12. 前記の同時計算は、前記プロセッサが被処理サブセットの前記グループを前記SIMDエンジンの少なくとも1つのSIMDレジスタにロードすること、及び前記SIMDエンジンが被処理サブセットの前記グループを同時処理すること、を含み、前記同時処理は、
    前記グループの前記被処理サブセットを互いに離すこと、
    被処理サブセット毎に異なるシフト値を用いて前記被処理サブセットをシフトすること、及び、前記被処理サブセットを処理して前記被処理サブセット毎にハッシュ値を生成すること、を含む、請求項11に記載の方法。
  13. 前記ハッシュテーブル内の前記被処理サブセットの各々の前記一致についての前記の同時検索は、前記プロセッサが、前記SIMDエンジンに、前記計算したハッシュ値の各々の前記ハッシュテーブルに格納されたハッシュ値との一致について同時検索するよう指示することを含む、請求項11に記載の方法。
  14. 少なくとも1つの被処理サブセットによる前記ハッシュテーブルの前記の同時更新は、前記プロセッサが、前記SIMDエンジンに、前記少なくとも1つの被処理サブセットに関連付けられたエントリにより、前記ハッシュテーブルを同時更新するよう指示することを含む、請求項11に記載の方法。
  15. 前記圧縮出力データストリームは、レガシ圧縮方法を用いて圧縮された標準的圧縮出力データストリームに準拠し、前記圧縮出力データストリームは、レガシ伸長方法を用いて伸長される、請求項11乃至14のいずれか一項に記載の方法。
JP2019501704A 2016-07-14 2016-07-14 Simdエンジンを用いる汎用データ圧縮 Active JP6921936B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/EP2016/066798 WO2018010800A1 (en) 2016-07-14 2016-07-14 General purpose data compression using simd engine

Publications (2)

Publication Number Publication Date
JP2019522940A true JP2019522940A (ja) 2019-08-15
JP6921936B2 JP6921936B2 (ja) 2021-08-18

Family

ID=56409635

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019501704A Active JP6921936B2 (ja) 2016-07-14 2016-07-14 Simdエンジンを用いる汎用データ圧縮

Country Status (5)

Country Link
US (1) US10489160B2 (ja)
EP (1) EP3476051A1 (ja)
JP (1) JP6921936B2 (ja)
CN (1) CN108141225B (ja)
WO (1) WO2018010800A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109361398B (zh) * 2018-10-11 2022-12-30 南威软件股份有限公司 一种基于并行和流水线设计的lz过程硬件压缩方法及系统
CN110572160A (zh) * 2019-08-01 2019-12-13 浙江大学 一种指令集模拟器译码模块代码的压缩方法
CN110830938B (zh) * 2019-08-27 2021-02-19 武汉大学 一种针对室内信号源部署方案筛选的指纹定位快速实现方法
CN111370064B (zh) * 2020-03-19 2023-05-05 山东大学 基于simd的哈希函数的基因序列快速分类方法及系统
CN113886652B (zh) * 2021-10-09 2022-06-17 北京欧拉认知智能科技有限公司 一种内存优先的多模图数据存储与计算方法及系统

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3913004B2 (ja) * 2001-05-28 2007-05-09 キヤノン株式会社 データ圧縮方法及び装置及びコンピュータプログラム及び記憶媒体
KR101956031B1 (ko) * 2012-10-15 2019-03-11 삼성전자 주식회사 데이터 압축 장치 및 방법, 데이터 압축 장치를 포함하는 메모리 시스템
CN103023509A (zh) * 2012-11-14 2013-04-03 无锡芯响电子科技有限公司 一种硬件lz77压缩实现系统及其实现方法
US8766827B1 (en) * 2013-03-15 2014-07-01 Intel Corporation Parallel apparatus for high-speed, highly compressed LZ77 tokenization and Huffman encoding for deflate compression
JP6048251B2 (ja) * 2013-03-21 2016-12-21 富士通株式会社 データ圧縮装置、データ圧縮方法、およびデータ圧縮プログラム、並びにデータ復元装置、データ復元方法、およびデータ復元プログラム
US9690488B2 (en) * 2015-10-19 2017-06-27 Intel Corporation Data compression using accelerator with multiple search engines

Also Published As

Publication number Publication date
WO2018010800A1 (en) 2018-01-18
US20190146801A1 (en) 2019-05-16
CN108141225B (zh) 2020-10-27
JP6921936B2 (ja) 2021-08-18
EP3476051A1 (en) 2019-05-01
CN108141225A (zh) 2018-06-08
US10489160B2 (en) 2019-11-26

Similar Documents

Publication Publication Date Title
JP6921936B2 (ja) Simdエンジンを用いる汎用データ圧縮
EP4012928B1 (en) Methods, devices and systems for semantic-value data compression and decompression
Ratanaworabhan et al. Fast lossless compression of scientific floating-point data
EP2788902B1 (en) Techniques for more efficient usage of memory-to-cpu bandwidth
US9203887B2 (en) Bitstream processing using coalesced buffers and delayed matching and enhanced memory writes
CN112514270B (zh) 数据压缩
WO2014106782A1 (en) High bandwidth compression to encoded data streams
US9137336B1 (en) Data compression techniques
Lenhardt et al. Gipfeli-high speed compression algorithm
CN107534445B (zh) 用于分割哈希值计算的向量处理
Goel A compression algorithm for DNA that uses ASCII values
Chłopkowski et al. A general purpose lossless data compression method for GPU
WO2007108395A1 (ja) 可変長符号の復号装置および復号方法
Ouyang et al. Fast compression of huge DNA sequence data
GB2524515A (en) Method to improve compression ratio for a compression engine
Lu et al. G-Match: a fast GPU-friendly data compression algorithm
US11748307B2 (en) Selective data compression based on data similarity
Pungila et al. Real-Time Hybrid Compression of Pattern Matching Automata for Heterogeneous Signature-Based Intrusion Detection
De Agostino Compressing Large Size Files on the Web in MapReduce
De Agostino Real-time and distributed applications for dictionary-based data compression
Tu et al. A novel classified multi-dictionary code compression for embedded systems
Zhang Efficient Parallel Text Compression on GPUs
Deshpande et al. Fast Burrows Wheeler Compression Using CPU and GPU

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190215

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20191223

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200204

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200501

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201027

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210125

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210629

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210728

R150 Certificate of patent or registration of utility model

Ref document number: 6921936

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150