JP2023553832A - コンピュータメモリにおける値類似性を利用するためのシステム、方法、及びデバイス - Google Patents
コンピュータメモリにおける値類似性を利用するためのシステム、方法、及びデバイス Download PDFInfo
- Publication number
- JP2023553832A JP2023553832A JP2023532372A JP2023532372A JP2023553832A JP 2023553832 A JP2023553832 A JP 2023553832A JP 2023532372 A JP2023532372 A JP 2023532372A JP 2023532372 A JP2023532372 A JP 2023532372A JP 2023553832 A JP2023553832 A JP 2023553832A
- Authority
- JP
- Japan
- Prior art keywords
- value
- data
- values
- delta
- base
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 189
- 238000013144 data compression Methods 0.000 claims abstract description 79
- 230000015654 memory Effects 0.000 claims description 126
- 238000007906 compression Methods 0.000 claims description 73
- 230000006835 compression Effects 0.000 claims description 73
- 230000006837 decompression Effects 0.000 claims description 16
- 238000012545 processing Methods 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 9
- 230000001186 cumulative effect Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 abstract description 2
- 230000008569 process Effects 0.000 description 26
- 238000007667 floating Methods 0.000 description 10
- 230000002829 reductive effect Effects 0.000 description 8
- 238000005265 energy consumption Methods 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002427 irreversible effect Effects 0.000 description 1
- 238000003064 k means clustering Methods 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6017—Methods or arrangements to increase the throughput
- H03M7/6029—Pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1028—Power efficiency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1048—Scalability
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/40—Specific encoding of data in memory or cache
- G06F2212/401—Compressed data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Memory System (AREA)
- Image Analysis (AREA)
Abstract
データ圧縮方法(2200)が開示され、この方法は、各データブロックが複数のデータ値を含む複数のデータブロックを取得(2210)するステップを含む。この方法は、取得された複数のデータブロックのベースデルタ符号化(2220)を実行し、デルタ値とは、データ値とベース値との差を意味する。この方法は、複数のデータブロックのデータ値の中から、前記複数のデータブロックに共通するセットのグローバルベース値を決定する(2230)ことを含む。セットのグローバルベース値は、前記セットのグローバルベース値におけるグローバルベース値に関して、複数のデータブロックのデータ値のデルタ値を最小化するように選択される。方法は、セットのグローバルベース値において、複数のデータブロックの個々のデータ値を符号化するステップ(2240)を含む。【選択図】図22
Description
本主題は、概して、電子コンピュータ内のメモリにおけるデータ圧縮の分野に関する。
データ圧縮は、頻度の高いデータの集まりを、頻度の低いデータの集まりよりも効率的に符号化することによって、データをより効率的に格納して、転送する一般的な技法である。一般的に、データをより効率的に格納して、転送することは、多くの理由から注目されている。コンピュータメモリ、例えば、処理デバイスが動作するデータやコンピュータ命令を保持するメモリ、例えば、メインメモリやキャッシュメモリにおいて、前記データをより効率的に、例えばK倍格納することは、前記メモリのサイズを潜在的にK分の1に小さくすることができ、1つのメモリから別のメモリへのデータ転送に潜在的にK分の1少ない通信容量を使用し、コンピュータシステム内又はコンピュータシステム間、及び/又はメモリ間で前記データを格納及び転送するためのエネルギー消費を潜在的にK分の1に少なくすることができるため、興味深い。あるいは、データ圧縮を伴わない場合よりも、K倍多いデータを利用可能なコンピュータメモリに潜在的に格納することができる。これは、より多くのメモリを追加する必要なしに、コンピュータの性能を潜在的にK倍高くできるので興味深いが、コスト高になることも、あるいはリソース制約により単純に望ましくないこともある。別の例として、スマートフォン、タブレット、ラップ/デスクトップ、又はセットトップボックスは、サイズと重さが制限されている。その理由は、スマートフォン、タブレット、ラップ/デスクトップ、又はセットトップボックスがより大きく、あるいはより多ければ、エンドユーザにとってあまり価値がない可能性があるからである。したがって、そのような製品の市場価値を潜在的に低下させる。それでも、メモリ容量をより多くして、あるいはメモリ通信帯域幅をより高くして利用可能にすることで、潜在的に製品の市場価値を高めることができる。その理由は、メモリ容量又はメモリ通信帯域幅をより多くすることで、製品をより高性能にすることができるので、その有用性がより高まるからである。
要約すると、コンピュータ化された製品の一般的なランドスケープにおいて、隔離されたデバイス又は相互接続されたデバイスも含め、データ圧縮によって、潜在的に性能を高め、エネルギー消費を削減し、利用可能なメモリ通信帯域幅を増加させ、あるいはメモリによって消費されるコストを削減し、面積を小さくすることができる。したがって、データ圧縮は、本明細書で言及されるものを超える広範囲なコンピュータ化された製品において幅広い有用性を有する。
従来技術における圧縮メモリシステムは、典型的には、ディスクからメモリページを読み出すことによって、又はメモリ割り当てを通じて、メモリページをその作成時に圧縮する。圧縮は、ソフトウェアルーチン又はハードウェアアクセラレータによって、様々な周知の方法を使用して行うことができる。プロセッサがメモリからデータを要求するとき、データは、典型的には、要求元のプロセッサに提供する前に、最初に解凍されなければならない。そのような要求は、クリティカルなメモリアクセスパス上で終わる可能性があるので、解凍は、典型的には、メモリアクセス時間への影響が少ないように、ハードウェアによって加速される。
メモリアクセス時間への影響を少なくして、さらに、メモリオブジェクト、例えば、メモリのページ内のデータを効果的に圧縮することができるように、データは、典型的には、データブロック毎に圧縮される。ここで、データブロックは、64バイトとすることができるが、それより少なくても多くてもよい。データブロックは、いくつかの値、例えば、整数、又は浮動小数点値(floatsと呼ばれることもある)、あるいは他のデータタイプを含んでもよい。例えば、64バイトのデータブロックは、16個の32ビットの整数又は浮動小数点を含んでもよい。
圧縮技法は、可逆にすることも、不可逆にすることもできる。可逆圧縮技法は、可逆方式で圧縮された値が解凍された後に正確に復元できるように情報を保存する。対照的に、不可逆圧縮技法は、情報の全てを保存するわけではない。他方で、値が不可逆方式で圧縮される場合、その値は、解凍された後に正確に復元されない。元の値と復元された値との差は、圧縮誤差と呼ばれる。課題は、その誤差をいかに小さく抑えるかである。
従来技術から知られているデルタ圧縮と呼ばれる可逆圧縮技法の1つのファミリーでは、採用されるアプローチは、数値的に近いデータ値の集合における値類似性を利用することである。前記データ値の集合に数値的に近いベース値を選択することによって、各個々の値とベース値との間の差(デルタ値と呼ばれる)を追跡するだけでよい。
例えば、ベース-デルタ-即値圧縮(以下、BDIと称する)では、データブロックのベース値は、前記データブロックに関連する値の中で任意にピッキングされる。データブロックは、ブロック内の各値と前記ベース値との間の差を追跡し続けることによって圧縮される。データブロック内の全ての値が数値的に類似している場合、前記差は、小さくなる。例えば、データブロックが4つの値100,98,102及び105を含み、第一の値(100)がベース値としてピッキングされる場合、差は、0、-2、2及び5となる。
差(以降、デルタ値と呼ぶ)及びベース値を格納するだけで、例示的なデータブロックをよりコンパクトに格納することが可能である。この例では、元のブロックは、4×32=128ビットの格納を必要とするが、BDIは、理想的には、デルタ値の範囲が[-8,7]であると仮定すると、32+3×4=44ビットしか必要とせず、デルタ値を格納するために4ビットが必要となる。これによって、圧縮度(又は比と呼ばれることもある)は、128/44=3倍となる。
BDIは、元の値/デルタ値から/にベース値を単純に減算/加算することによって、データブロックを圧縮/解凍するハードウェア加速圧縮及び解凍デバイスによって実装できるので魅力的である。しかしながら、これは、データブロック内の値が数値的に類似している場合にのみ効果的に機能する。そうでなければ、デルタ値を符号化するために必要とされるメタデータは、圧縮からのゲインを相殺する可能性がある。例えば、それぞれ4つの値を有する2つのブロックB1及びB2を考え、B1は、値100、102、205、208を含み、B2は、200、202、105、108を含むものとする。BDIは、B1のベース値として100をピッキングして、デルタ値を0,2,105及び108として符号化してもよい。対照的に、BDIは、B2のベース値として200をピッキングし、デルタ値を0、2、-95、及び-92として符号化してもよい。明らかに、この例では、デルタ値を符号化するためのメタデータの量が多いほど、BDIの圧縮有効性が低下することがある。ベース値がB1とB2との間で共有されている場合、メタデータを削減できる可能性がある。
この特許開示が対処する困難な問題は、複数のデータブロックに格納されたデータセットが与えられると、複数のデータブロックによって共有され得るベース値のセットを選択できるシステム、方法、及びデバイスをどのように考案するかである。第一の課題は、前記複数のデータブロックの中から、メタデータの量を減らすベース値のセットを選択して、複数のデータブロックの中でデルタ値を効果的に符号化するように構成された方法及びデバイスを考案することである。第二の課題は、ハードウェアアクセラレータを介して圧縮及び解凍プロセスを効果的に管理するように構成された方法及びデバイスをどのように考案するかである。
ベース値を選択することは、デルタ値が明示的に符号化される符号化スキームにつながる。しかしながら、デルタ値は、コンパクトに符号化され得る反復値を意味する値冗長性を示すことがある。例えば、2つの例示的なデータブロックを再び考え、B1は、値100、102、205、208を含み、B2は、値200、202、105、108を含むものとする。ベース値が100及び200である場合、B1のデルタ値は、0、2、5及び8であり、B2のデルタ値は、0、2、5及び8である。この例は、デルタ値が値冗長性を明らかにし、これを利用できることを示している。具体的には、B1におけるデルタ値kは、この例では、B2におけるデルタ値kと同じである。
本特許開示は、さらに、従来技術の方法を使用して組み合わせて符号化されたデルタ値の値冗長性を利用するように構成されたシステム、方法、及びデバイスをどのように考案するかの問題に対処する。
浮動小数点値に適用される不可逆圧縮技法のファミリーにおいて、目標は、切り捨てによって最下位ビットを無視することによって、高い圧縮度(又は比と呼ばれることもある)を達成することである。例えば、仮数のn個の最下位ビットを無視することができる。切り捨ての効果は、仮数における残りのビットの情報エントロピーが実質的に減少し、浮動小数点値のサイズを効果的に低減するために、デルタ圧縮又は既存の圧縮技法の任意の他のファミリーを使用可能にすることである。残念ながら、切り捨ては、高い誤差率を招く可能性がある。本発明は、最終的に、浮動小数点数における仮数の無視されるn個の最下位ビットをどのように表すかを選択することによって、浮動小数点値に対する高い圧縮比及び実質的に低い誤差率を維持するように構成されたシステム、方法及びデバイスをどのように考案するかの問題に対処する。
本発明の第一の態様は、各データブロックが複数のデータ値を含む複数のデータブロックを取得するステップを含むデータ圧縮方法である。本方法は、取得された複数のデータブロックのベースデルタ符号化を実行するステップを含み、デルタ値はデータ値とベース値との間の差を意味し、この実行するステップは、最初に、複数のデータブロックのデータ値の中で、前記複数のデータブロックに共通のセットのグローバルベース値を決定することによって行われる。セットのグローバルベース値は、セットのグローバルベース値におけるグローバルベース値に対して、複数のデータブロックのデータ値のデルタ値を最小にするように選択される。次いで、方法は、複数のデータブロックの個々のデータ値を符号化するステップを含み、この符号化するステップは、セットのグローバルベース値において、個々のデータ値ごとに、個々のデータ値に数値的に最も近く、したがって最小のデルタ値をもたらす1つのグローバルベース値を選択するステップと、符号化された個々のデータ値のために、選択された1つのグローバルベース値及び結果として生じるデルタ値を表すメタデータを生成するステップとによって行われる。
本発明の第二の態様は、取得された、複数のデータブロックのベースデルタ符号化を実行するためのデータ圧縮デバイスであり、各データブロックは複数のデータ値を含み、デルタ値は、データ値とベース値との間の差を意味する。データ圧縮デバイスは、複数のデータブロックのデータ値の中から、複数のデータブロックに共通のセットのグローバルベース値を決定するように構成されたアナライザユニットを備える。セットのグローバルベース値は、セットのグローバルベース値におけるグローバルベース値に対して複数のデータブロックのデータ値のデルタ値を最小にするように選択される。データ圧縮デバイスは、複数のデータブロックの個々のデータ値の符号化を、セットのグローバルベース値において、個々のデータ値ごとに、個々のデータ値に数値的に最も近く、したがって最小のデルタ値をもたらす1つのグローバルベース値を選択することと、符号化された個々のデータ値のために、選択された1つのグローバルベース値及び結果として生じるデルタ値を表すメタデータを生成することによって行うように構成されたエンコーダユニットをさらに備える。
本発明の第三の態様は、データ解凍方法であり、この方法は、本発明の第一の態様によるデータ圧縮方法によって生成されたメタデータを取得するステップと、取得されたメタデータによって表されるグローバルベース値及びデルタ値から、各データブロックが複数のデータ値を含む複数のデータブロックを再構築するステップとを含む。
本発明の第四の態様は、デコーダユニットを備えるデータ解凍デバイスであり、デコーダユニットは、本発明の第二の態様によるデータ圧縮デバイスによって生成されたメタデータを取得し、取得されたメタデータによって表されるグローバルベース値及びデルタ値から、各データブロックが複数のデータ値を含む複数のデータブロックを再構築するように構成される。
本発明の第五の態様は、1つ以上のメモリと、本発明の第二の態様によるデータ圧縮デバイスと、本発明の第四の態様によるデータ解凍デバイスとを備えるシステムである。
本発明の第六の態様は、処理デバイスによってロードされ実行されると、本発明の第一の態様による方法を実行させるコード命令を含むコンピュータプログラム製品である。代替又は追加として、本発明の第六の態様は、その上に格納されたコード命令を含むコンピュータプログラムを含むコンピュータ可読ストレージ媒体として見ることができ、コード命令は、処理デバイスによってロードされ実行されると、本発明の第一の態様による方法を実行させる。
本発明の第七の態様は、処理デバイスによってロードされ実行されると、本発明の第三の態様による方法を実行させるコード命令を含むコンピュータプログラム製品である。代替又は追加として、本発明の第七の態様は、その上に格納されたコード命令を含むコンピュータプログラムを含むコンピュータ可読ストレージ媒体として見ることができ、コード命令は、処理デバイスによってロードされ実行されると、本発明の第三の態様による方法を実行させる。
本発明のさらなる態様は、コンピュータメモリ圧縮方法である。本方法は、ベース値のセットを選択することに関して、コンピュータメモリコンテンツを分析するステップを含む。本方法は、データブロック内の各値についてデルタ値を最小化するベース値をピッキングするベース値のセットに関して、デルタ値によって全てのデータブロック内の値を表現することによって、前記コンピュータメモリコンテンツを符号化するステップも含む。本方法は、ハフマン符号化又は算術符号化等の従来技術から知られている任意のエントロピーベース又は重複排除ベースの圧縮方法を使用して、デルタ値の間の値冗長性をどのように利用するかをさらに含んでもよい。さらに、確立されたベース値のセットを使用してデルタ符号化で圧縮されたデータ値を解凍するための方法が提示され、この方法では、デルタ値は、エントロピーベース又は重複排除ベースの圧縮方法を使用して符号化される。
本発明の別の態様は、コンピュータメモリ圧縮デバイスである。デバイスは、各データブロックにおける任意のベース値を使用することと比較して、複数のデータブロックにおけるデルタ値のサイズを低減するためにベース値のセットを選択するように構成されたアナライザユニットを備える。デバイスは、また、複数のデータブロックに共通の選択されたベース値のセットを使用して、前記コンピュータメモリコンテンツを符号化して、各値のデルタ値を確立するように構成されたエンコーダユニットも備える。エンコーダユニットは、符号化されたコンピュータメモリコンテンツのデータ値を表すメタデータと、データ値を解凍するように構成されたデバイスとを提供するように、さらに構成される。エンコーダユニットは、また、ハフマン符号化又は算術符号化又は重複排除ベース等の従来技術から知られている任意のエントロピーベースの圧縮方法を使用して、よりコンパクトにデルタ値を符号化するように構成され、デバイスは、確立されたベース値のセットを使用して、デルタ符号化で圧縮されたデータ値を解凍するように構成され、デルタ値は、エントロピーベース又は重複排除ベースの圧縮方法を使用して符号化される。
開示される実施形態の他の態様と、目的、特徴、及び利点については、以下の詳細な特許開示、添付の従属請求項、及び図面から明らかになるであろう。
一般に、請求項で使用される全ての用語は、本明細書で別様に明示的に定義されない限り、当技術分野におけるそれらの通常の意味に従って解釈されるべきである。「1つの/その[要素、デバイス、構成要素、手段、ステップ等]」への全ての言及は、特に明示的に述べられていない限り、要素、デバイス、構成要素、手段、ステップ等の少なくとも1つの事例を指すものとしてオープンに解釈されるべきである。本明細書に開示される任意の方法のステップは、明示的に述べられていない限り、開示される正確な順序で行われる必要はない。
本文書は、コンピュータメモリ内のデータを圧縮するためのシステム、方法、デバイス、及びコンピュータプログラム製品を開示し、これらは、グローバルベース値を識別し、エントロピーベースの符号化を使用してデルタ値をコンパクトに格納することによって、コンピュータメモリ内の値をコンパクトに符号化するために値類似性を利用する圧縮アプローチのファミリーを用いる。
コンピュータシステム100の例示的な実施形態を図1に示す。このシステムは、マイクロプロセッサチップ110と、M1 151、M2 152からMK 153で示される1つ以上のメモリモジュールと、を備える。マイクロプロセッサチップは、離散システムであっても、あるいは任意の利用可能な技術においてシステムオンチップ(SoC)上に統合されてもよい。マイクロプロセッサ110は、CPU又はコアと呼ばれることもあるP1 131、P2 132からPN 133で示される1つ又は複数の処理ユニットと、メモリ階層と、を備える。一方、メモリ階層は、複数のキャッシュレベル、例えば、図1に例示的に示され、C1、C2、及びC3と示されるような3つのレベルを備える。これらのレベルは、同じ又は異なるメモリ技術、例えば、SRAM、DRAM、又は、任意のタイプの不揮発性技術、例えば、位相変更メモリ(PCM)を含む技術で実装することができる。キャッシュレベルの数は、異なる実施形態において変化してもよく、例示的な実施形態100は、3つのレベルを示し、その最後のキャッシュレベルがC3 120である。これらのレベルは、何らかの種類の相互接続手段(例えば、バス又は任意の他の相互接続ネットワーク)を使用して接続される。例示的実施形態では、レベルC1及びC2は、Pi(例えば、図1のP1)と表されるそれぞれの処理ユニットiにプライベートであり、それによってのみアクセス可能である。代替実施形態は、任意の数のプライベートキャッシュレベルを有することができること、又は代替として、全てのキャッシュレベルが、図1の第三のレベルC3 120によって図示されるように共有されることは、当業者に周知である。キャッシュ階層におけるデータの包含に関して、任意の実施形態が可能であり、当業者によって理解され得る。例えば、C1をC2に含むことができるが、C2は、レベルC3に関して非包括的であり得る。当業者は、代替実施形態を理解することができる。図1のコンピュータシステム100は、MCTRL1 141、MCTRL2 142、及びMCTRLL143と表される1つ又は複数のメモリコントローラを備える。最後のキャッシュレベル(図1のC3)は、メモリコントローラに接続され、次いで、メモリコントローラは、1つ又は複数のメモリモジュールに接続される。メモリコントローラは、マイクロプロセッサチップ110上に集積することも、あるいはマイクロプロセッサチップの外部に実装することもできる。最後に、コンピュータシステムは、1つ以上のタスクを実行する。タスクは、特定のシステム上で実行することができる任意のソフトウェアアプリケーション又はその一部とすることができる。
図1の実施形態によって例示されるようなコンピュータシステムは、レベル(例えば、図1のC1、C2、及びC3)にかかわらず、M1 151~MK 153と表されるメモリ及びキャッシュメモリの容量が限られていることに悩まされることがある。キャッシュ容量が限られているので、メモリ階層内の次のレベルでサービスされなければならないメモリ要求の割合が高くなる可能性があり、性能の低下やエネルギー消費の増加を招く。この問題を軽減するために、キャッシュ容量を増やすことが考えられ、それによって、メモリ階層の次のレベルによってサービスされる必要がある要求の数を減らすことができる。マイクロプロセッサチップ上のキャッシュレベルの容量を増加させると、いくつかの問題を招くことになる。第一に、キャッシュアクセス要求時間が長くなり、性能低下につながる可能性がある。第二に、より大きいキャッシュへのアクセス要求において消費されるエネルギーは、潜在的により高い可能性がある。第三に、より大きなキャッシュレベルを実現するために、マイクロプロセッサチップ上でより多くのシリコン又は同等の材料を使用することは、処理能力の低下と引き換えにする必要があり得る。したがって、上記で特定された問題なしに、キャッシュ容量を増やすことが望ましい。メモリ容量が限られていると、同様の問題があり、メモリ階層のストレージレベルとして典型的に実現されるメモリ階層の次のレベルでサービスされなければならないメモリ要求が高くなり得る。そのようなストレージレベルアクセスは、より遅く、かなりの性能低下とエネルギー消費をもたらすことになる。メモリ容量が増加すると、これらの欠点を軽減することができる。しかしながら、メモリ容量が増加すると、コンポーネントレベルでも、あるいはエネルギー消費の意味合いでもコンピュータシステムのコストを増加させる可能性がある。さらに、メモリが多いと、より多くの空間を消費することになり、これは、特に、例えば、モバイルコンピュータ(例えば、タブレット、スマートフォン、ウェアラブル、及びインターネットに接続された小型コンピュータ化デバイス)を含むフォームファクタ制約製品におけるコンピュータシステムの有用性を制限し得る。
本特許開示は、前述の例示的なメモリ階層圧縮のどのレベルで適用されるかが異なるいくつかの実施形態を考慮する。第一の実施形態は、メインメモリにおいて適用される本発明の圧縮方法を考慮する。しかしながら、他の実施形態も、当業者によって理解され得る。そのような実施形態も、本特許開示に明示的に包含されなくても、企図されることが意図されている。
第一の開示される実施形態に関して、メインメモリ容量が限られていることの問題を考慮する場合、図1の例示的なシステムは、データ及び命令がメインメモリ内で圧縮できるように構成することができる。図2は、そのようなコンピュータシステム200の一例を示す。追加されたものは、マイクロプロセッサチップ210上のコンピュータメモリ圧縮デバイス205である。コンピュータメモリ圧縮デバイス205は、4つの機能ブロックを備える。これらのブロックは、ロケータ(アドレス変換)ユニット211と、エンコーダ(コンプレッサ)ユニット212と、デコーダ(デコンプレッサ)ユニット213と、アナライザユニット214とを備える。
以下により詳細に説明するように、アナライザユニット214は、コンピュータメモリ内のデータのメモリオブジェクト、例えば、複数のデータブロックを含むページ内の複数のデータブロック内のデータ値をコンパクトに符号化するためのグローバルベース値を確立することに関して、コンピュータメモリコンテンツを分析するように構成される。これらの点に関して、データ値は、典型的には、メモリオブジェクトよりも細かい粒度であり、メモリオブジェクトは、典型的には、コンピュータメモリコンテンツ全体よりも細かい粒度である。メモリオブジェクトは、典型的には、複数のデータブロックを含んでもよく、データブロックは、典型的には、整数若しくは浮動小数点値又は任意の他のタイプのメモリワード(別名、データワード)等の複数のデータ値を含んでもよい。
エンコーダユニット212は、グローバルベースのセットに関してデルタ値を作成することによってメモリオブジェクトの全てのデータブロックを符号化するように、また任意選択で、エントロピーベースの圧縮方法を使用してデルタ値を符号化するように構成される。エンコーダユニット212は、符号化されたコンピュータメモリコンテンツのメモリオブジェクトのデータブロックを表すメタデータを提供するように、さらに構成される。メタデータは、データ値ごとに使用されたグローバルベース値への参照によってデルタ値がどのように符号化されたかを反映する。そのようなメタデータの例は、例えば、図8のボックス860及び870に見られる。ロケータユニット211は、メタデータを使用して、符号化されたコンピュータメモリコンテンツ内のメモリオブジェクトの位置を特定するように構成される。
コンピュータメモリ圧縮デバイス205は、一方の側のメモリコントローラ及び他方の側の最終レベルキャッシュC3に接続される。アドレス変換ユニット211の目的は、従来の物理アドレスPAを圧縮アドレスCAに変換し、圧縮メモリにメモリブロックを配置することである。当業者は、そのようなアドレス変換が必要とされるのは、従来のメモリページ(例えば、4KB)が、圧縮メモリ内の従来のメモリページのサイズよりも小さい任意のサイズに圧縮され得るためであることを認識する。エンコーダ(コンプレッサ)ユニット212の目的は、修正され、最終レベルキャッシュから追い出されたメモリブロックを圧縮することである。メモリシステムの性能への影響を無視できるようにするために、圧縮は高速でなければならず、典型的には専用の圧縮器ユニットによって加速される。同様に、メモリブロックがプロセッサによって要求され、キャッシュレベル、例えば、例示的な実施形態ではC1、C2及びC3のいずれにおいても利用可能でないとき、そのメモリブロックは、メモリから要求されなければならない。アドレス変換ユニット211は、ブロックの位置を特定するが、ブロックがキャッシュ階層、例えば、C1にインストールされる前に、ブロックを解凍しなければならない。デコンプレッサユニット213の目的は、メモリシステムの性能への影響を無視できるようにするために、このプロセスを加速することである。
(グローバルベース値を選択するためのメモリコンテンツの分析)
図3は、メモリの一部分と、そこに含まれる値との例示的なスナップショットを示す。310は、6つの例示的なデータブロックBL1、BL2、…、BL6(311、312、…、316)と、それらが含む値とを示す。例えば、データブロック311(BL1)は、値100、102、205、及び208を含むのに対し、データブロック313(BL3)は、値205、208、100、及び102を含む。320は、310の例示的なデータブロックに含まれる各値の頻度のヒストグラムを示し、出現する値が列321に、出現する回数、すなわち、頻度が列322にある。値200は、BL2 312、BL4 314及びBL5 315で3回出現するのに対し、値400は、BL6 316で1回しか出現しないことが分かる。
図3は、メモリの一部分と、そこに含まれる値との例示的なスナップショットを示す。310は、6つの例示的なデータブロックBL1、BL2、…、BL6(311、312、…、316)と、それらが含む値とを示す。例えば、データブロック311(BL1)は、値100、102、205、及び208を含むのに対し、データブロック313(BL3)は、値205、208、100、及び102を含む。320は、310の例示的なデータブロックに含まれる各値の頻度のヒストグラムを示し、出現する値が列321に、出現する回数、すなわち、頻度が列322にある。値200は、BL2 312、BL4 314及びBL5 315で3回出現するのに対し、値400は、BL6 316で1回しか出現しないことが分かる。
図4は、メモリの一部分、例えば、ページ内の各値又は値のサブセットの頻度のヒストグラムを確立するように構成されたデバイス420を示す。これは、図2のアナライザ214の一部とすることができる。デバイス420は、値タグアレイ421と、値頻度アレイ425とを備える。メモリの部分で、各値の出現頻度に関して解析されるべき部分をスキャンすることができる。これは、例えば、その部分の位置の全て又はサブセットから読み出すプロセッサ、又はメモリの部分の全ての値の全て又はサブセットをスキャンするように構成されたデバイスを有することによって行うことができる。解析されるメモリの部分の各値は、メモリ値として表されるレジスタ410に入れることができる。レジスタは、この実施形態ではキャッシュとして編成されるデバイス420にインデックス付けするために使用することができる。
例示的なキャッシュ様構造は、N個のエントリを含み、各エントリは、値タグアレイエントリ、例えば、423(VT2)及び値頻度アレイエントリ、例えば427(VF2)を含む。当業者は、キャッシュが直接マッピングされるように構成され得ること、すなわち、メモリ値レジスタ410に含まれるメモリ値とデバイス420内のエントリとの間に1対1の対応があることを認識する。
あるいは、キャッシュは、セットアソシアティブであるように構成することができ、すなわち、メモリ値レジスタ410に含まれるメモリ値とデバイス420内のエントリとの間に1対多の対応関係がある。それにもかかわらず、レジスタ410に含まれるメモリ値は、デバイス420にインデックス付けすることができる。レジスタ410のメモリ値のタグビットが、ダイレクトマップ構成(direct-mapped configuration)の場合は1と一致すれば、あるいはセットアソシアティブ構成(set-associative configuration)の場合は420のいずれかのエントリと一致すれば、420にヒットがある。ヒットがある場合、対応する値頻度アレイエントリがインクリメントされる。例として、エントリ423(VT2)がレジスタ410のメモリ値と一致すると仮定する。次に、427(VF2)が選択される。VF2が15を含む場合、それは16にインクリメントされる。レジスタ410のメモリ値がデバイス420に含まれない場合、エントリが作成されなければならない。ダイレクトマップ構成の場合、選択されたエントリに存在する値を置換する。セットアソシアティブ構成の場合、複数のエントリが存在することができ、その中から選択して置換する。当業者であれば、多くの置換ポリシーの中から、例えば、LRU(Least-Recently-Used)又はFIFO(First-In-First-Out)を選択できることを認識しているが、このデバイスに特有なものは、最低頻度値と呼ばれる開示されたポリシーであり、すなわち、値頻度アレイ425内の最低カウントを有するエントリが置換のために選択される。
メモリの部分内の全ての意図された値がスキャンされたとき、デバイス420は、図3の値-頻度ヒストグラム320の推定を含む。一実施形態では、デバイス420は、個々のエントリ、例えば、エントリ426(VF1)と併せてエントリ422(VT1)が、メモリにアクセスするコンピュータ命令によって、すなわち、命令をロードして、格納するコンピュータ命令によって読み取られ得るように構成される。これにより、コンテンツをデバイス420からメモリ430に移動できる可能性が広がる。図2に見られるように、デバイス420は、アナライザ214の一部とすることができ、アナライザ214は、メモリコントローラ141(MCTRL1)、142(MCTRL2)又は143(MCTRL3)を介してメモリデバイス151(M1)、152(M2)又は153(M3)のいずれかに接続される。
ここで、デバイス420によって確立された値-頻度ヒストグラムが、分析されたメモリオブジェクト、例えばページと呼ばれるメモリの部分に含まれる値の全てのデルタ値を最小化するために、いくつかのベース値を選択するためにどのように使用され得るかを説明する。
図5は、複数のデータブロック内のデータ値の間で、グローバルベース値を確立する方法を示す。選択するベース値の数をBであると仮定する。採用されるアプローチは、最初に、メモリオブジェクト内で出現する値の範囲をN個の固定サイズのビンに分割することである。例として、値が1,2,…,100の範囲であると仮定する。4つのビンが選択される場合、範囲は、4つのビン:1,2,…,25と、26,27,…,50と、51,52,…,75と、76,77,…,100とに分割される。
方法520の第一のステップは、値をそれらの頻度と共に最低値から最高値にソートすることである。第二のステップ530は、いくつのビンN及びいくつのグローバルベース値Bを考慮するかを確立することである。ベース値の数を適度に低い数に保つために、Bは、N以下である。例として、Nは4であるように選択され得、Bは4であるように選択され得、ビン当たり最大1つのグローバルベース値をもたらす。この例では、ボックス530で述べる、最大のN(MaxN)が4であり、最大のBがNである場合、(N,B)と示されるNとBの全ての可能な組合せが考慮されるべきであり、すなわち、(N,B)=(1,1)、(2,1)、(2,2)、(3,1)、(3,2)、(3,3)、(4,1)、(4,2)、(4,3)、(4,4)が考慮される。第二のステップ530は、全てのこれらの組合せが考慮されることを保証する。
第三のステップ540は、複数の組合せ(N,B)のうちの1つを考慮し、各ビンにおけるグローバルベース値を確立する。当業者は、先行技術から公知のクラスタリング方法、例えば、k平均クラスタリング(k-means clustering)を選択するであろう。しかしながら、k平均は、クラスタ内の全ての値までの距離を最小化するグローバル値を選択する。これは、必ずしも圧縮比を最大化するわけではない。これを実現するために、3つの値:1、1及び7のクラスタを考える。k平均は、ベース値を平均値(1+1+7)/3=3として選択する。ベース値と最初の2つの値との間の距離は2であり、バイナリ表記で符号化するために2ビットを必要とするが、ベース値と最後の値との間の距離は、4であり、3ビットを必要とする。したがって、合計で2+2+3=7ビットが必要とされる。同じである最初の2つの値がベース値としてピッキングされる場合、それらまでの距離は、ゼロであり、第三の値までの距離は、6であり、3ビットしか必要としない。ベース値として値の1つを選択することによって、圧縮比は、前記ベース値として値の平均を選択するよりも高くなる。
したがって、方法の第三のステップ540は、まず、値の範囲をN個のビンに分割する。B≦NであるB個のグローバルベース値では、最も高い累積値頻度を有するB個のビンのそれぞれに、ベース値が割り当てられる。前記B個のビンのそれぞれにおいて、ベース値は、そのビンにおける最高頻度の値を割り当てられる。第四のステップ550は、後述する図6の方法に従ってデルタ値を確立するために、最も近いベース値を使用することによってメモリオブジェクト内の全てのデータ値を圧縮する。圧縮比、すなわち、圧縮メモリオブジェクトのサイズに対する非圧縮メモリオブジェクトのサイズの比が確立され、記録される。
第五のステップ560では、考慮すべきビンの数Nとグローバルベース値の数Bとのさらなる組合せがあるかどうかを決定する。さらなる組合せがある場合、次のステップは、プロセス530の第二のステップに戻ることになる。さらなる組合せがない場合、第六のステップ570は、最も高い圧縮比をもたらすN個のビンとB個のグローバルベース値との組合せをピッキングし、プロセスは580で終了する。
(グローバルベース値を使用するメモリコンテンツの圧縮及び解凍)
ここで、例えば、図5に関連して説明した方法を用いて確立されたセットのグローバルベース値を用いてデータブロックを圧縮する方法を考える。プロセスは、610で開始する。この目的のために、図6に示される方法は、第一のステップ620で、メモリオブジェクト、例えば、ページ、又はデータブロックにおける複数のデータ要素と、第一の値を考慮することによって表す値とを考慮する。
ここで、例えば、図5に関連して説明した方法を用いて確立されたセットのグローバルベース値を用いてデータブロックを圧縮する方法を考える。プロセスは、610で開始する。この目的のために、図6に示される方法は、第一のステップ620で、メモリオブジェクト、例えば、ページ、又はデータブロックにおける複数のデータ要素と、第一の値を考慮することによって表す値とを考慮する。
グローバルベース値は、グローバルベース値テーブルと呼ばれるテーブルに格納されると仮定される。前記テーブル内の各エントリは、インデックスに関連付けられる。例えば、前記テーブルがN個のエントリを有する場合、インデックスは、log2Nビットによって表すことができる。本方法の第二のステップ630は、選択された値をグローバルベース値テーブル内のグローバルベース値の全てと比較し、前記データ値に数値的に最も近いベース値、すなわち、前記ベース値と前記データ値との間の差(デルタ値として示される差)が最も小さいベース値を選択する。
前記データ値は、図8に開示された方法でデータ値を符号化するためにメタデータによって示されるベース値インデックス及びデルタ値によって符号化される。データ値が圧縮される場合(860)及び圧縮されない場合(870)に対応する2つのメタデータフォーマット860及び870が存在する。ボックス860のように圧縮されたブロックを考慮すると、第一のフィールド810は、データ値が圧縮されることを示す単一のビットCである。フィールド820は、グローバルベース値テーブル内のグローバルベース値を選択するために使用されるベースポインタインデックスを含む。第三のフィールド825(符号)は、次のフィールドが非負であるか否かを含む単一のビットである。最後に、デルタ値で示される830は、デルタ値を含む。明示的な符号ビットを有することによって、デルタ値が非負である場合、又は負である場合に、デルタ値をベース値からの距離として解釈することが可能になる。これにより、後述の提案されるデバイスが簡素化される。
データ値が圧縮されていない場合、メタデータフォーマット870が使用される。全てのデータを圧縮することができるが、デルタ値が予め設定された閾値未満である場合にのみデータを圧縮する実施形態も検討する。そうでない場合、C840はクリアされ、第二のフィールド850は非圧縮データ値を含む。そうでない場合、C840が設定される。
図6及び第四のステップ650に戻ると、メモリオブジェクト又はデータブロック内に考慮すべきデータ値がさらにある場合、次の値が考慮され、第二のステップ630が選択される。考慮すべきデータ値がそれ以上ない場合、方法は、ステップ660で終了する。
図6に示す方法の実施形態では、データ値は、常に、最も近いベース値を考慮することによって、デルタ値によって符号化される。しかしながら、大きすぎるデルタ値を許容すると、データ値のうちのいくつかが全く圧縮されなかった場合よりも、圧縮比が低くなることがある。代替実施形態では、上限デルタ値UBと表記されるデルタ値に境界を置き、対応するデルタ値が前記上限デルタ値以下である場合にのみ値を圧縮することができる。圧縮されていない値は、それらのデルタ値が上限デルタ値よりも大きいので、外れ値(outlier values)と呼ばれる。
図25は、各ベース値に関連する最大デルタ値(以下、MDと示す)の存在下でデルタ値を選択するための方法を示す。上限デルタ値UBは、最大デルタ値MD以下の閾値である。有利には、最大デルタ値(the maximum delta value)MDは、nビットを有する最も大きな二進数(the largest binary number)によって定義され、n=min_compressed_value_size-log2(B)である。min_compressed_value_sizeパラメータは、所与の目標圧縮比から生じる符号化されたデータ値のビットで表される最小サイズである。Bは、セットのグローバルベース値におけるベース値の数である。例えば、目標圧縮比が2であり、32ビットのデータ値を有する場合、min_compressed_value_sizeは16ビットになる。例として、Bが128である場合、16-log2128=9ビットを使用し、MD=29-1=511となる。目標圧縮比が1.5であり、依然として32ビットのデータ値を有する場合、min_compressed_value_sizeは21ビットとなる。目標圧縮比が2であるが、データ値が64ビット値である場合、min_compressed_value_sizeは32ビットとなる。これらは、当業者が理解するように、単なる非限定的な例であり、最大デルタ値MDを定義する他の方法も可能である。
図25に示す方法2500は、2510で開始し、例えば、ベース値のセット内の各ベース値について、図6に示す方法によりベース値のセットが確立されている2520と仮定する。そのベース値に関連する全てのデータ値は、ベースに関連する値のセットの中で最も大きなデルタ値(the largest delta value)である上限デルタ値(UB)を確立する2530と見なされる。最大デルタ値であるUBがMDより大きい場合、UBは、MDに設定される2540。プロセスは、ベース値の各々に対して繰り返され2550、全てのベース値が考慮されたときに終了する2560。
各ベース値に対してUBを確立すると、データ値は、デルタ値がUB以下である場合、その最も近いベース値に対するデルタとして符号化される。そうでない場合、データ値は、圧縮されない。
ここで、図6に関連して説明した方法に従って、セットのグローバルベース値を使用してデータブロックを圧縮するように構成されたエンコーダ700を示す図7に注目する。例として、データブロック710に含まれる2つの値711(V0)及び712(V1)を考える。データ値を符号化するデバイス700のこの例示的な実施形態は、それぞれB0、B1、B2及びB3に対応する4つのエントリ722,723,724及び725を有するグローバルベース値テーブル720を備える。グローバルベース値テーブル720は、グローバルベース値のうちの1つを目下の値に対して最小の差で選択するために、データ値721を格納するように構成される。
グローバルベース値テーブルは、さらに、任意のグローバルベース値エントリとデータ値721との間の差が確立され得るように構成される。一実施形態では、これは、グローバルベース値エントリとデータ値との間の減算を実行することによって、アソシアティブに並列に行うことができる。ベース値とデータ値との間の差は、レジスタ732,733,734及び735に格納され、データ値721とベース値エントリ722(B0)との間の差は、732(Diff)に格納され、データ値721とベース値エントリ724(B2)との間の差は、734(Diff)に格納される。図8のデルタ値フィールド830は、ベース値からの距離(非負又は負)として解釈されることに留意されたい。
図19及び図20に示すデバイスの残りは、複数の差を使用して最小の差を確立し、前記差に対応するベース値テーブルエントリを選択するように構成される。
ここで、図19に注目する。差を格納する図7の複数のレジスタ730は、図19の1910で再び示す。例示的実施形態では、各差レジスタ1911,1912,1913及び1914(Diff)は、I3、I2、I1、及びI0と表される4つのビットを備え、I0は、最下位ビットである。インデックスブロック1921,1922,1923及び1924の目的は、どの1つが差の最上位ビットであるか、すなわち、非ゼロである最上位ビットであるかを確立することである。差レジスタと同数のインデックスブロックがある。インデックスブロックの真理値表を1930に示す。例えば、1932における第三の入力ベクトル「01XX」を考えると、Xは、任意のバイナリ値「0」又は「1」を表す。ここで、ビットI2は、最上位(非ゼロ)ビットであり、出力(U1,U0)=(1,0)をもたらす。別の例として、第一のビットベクトル「0001」において、I0は、最上位(非ゼロ)ビットであり、出力(U1,U0)=(0,0)をもたらす。
ここで、最上位非ゼロビットのインデックス符号化は、別のブロック変換(block Convert)1925,1926,1927及び1928に供給される。変換の目的は、後述する最小の差の抽出に用いるビット列を作成することである。変換ブロックの真理値表をボックス1940に示す。これは、入力1941として、インデックスブロック(U1、U0)からの最上位ビットのインデックス符号化を有し、出力として、真理値表1942(入力)及び1943(出力)に従うビット列を有する。例えば、入力(1,0)について、出力(X3,X2,X1,X0)は、(0,1,1,1)である。一般に、インデックスによって指される最上位ビット及び全ての下位ビットは、「1」に設定される。
図20は、データ値を符号化するために必要な追加の機能を示す。図19の複数の変換機能ブロック1925,1926,1927及び1928は、図20の2011、2012、2013、2014に再び描かれている。2020は、各変換ブロックに対して1つのレジスタを備え、変換ブロックからの出力を含むビット列を格納する。例として、レジスタ2022,2023,2024及びレジスタ2025は、ビット列「0111」、「0001」、「1111」及び「0011」を含む。2020の目的は、最も小さい最上位ビット、すなわち、最上位ビットから数えて「1」である第一のビットを有するビット列を確立することである。これは、論理ANDを列ごとに適用することによって確立することができる。例えば、全てのX3ビットに適用される論理積は、「0」をもたらすが、X0に適用される論理積は、「1」をもたらす。したがって、レジスタ2021は、列ごとの論理積演算を適用した後、最小の差に対応するビット列を含むことになる。
最後のステップは、レジスタ2021を使用して、最小の差又はデルタをもたらすベース値テーブルエントリを確立することである。これは、2030及び2040において行われる。2030は、2020で確立されたビット列に適用される複数の優先度エンコーダ2031,2032,2033,2034及び2035を備える。優先度エンコーダの出力は、差又はデルタ値における最上位ビットのビット位置のインデックスである。優先度エンコーダの代替として、1920のインデックスブロック、例えば、ブロック1921からの出力(U1,U0)を使用することができる。2040で、全てのインデックスがレジスタ2021のインデックスと並列に比較される。同じである1つのインデックスは、どのベース値エントリが最小の差をもたらすかを一意に確立し、そのエントリを取り出すためにイネーブル信号に変換することができる。これは、決定ボックス2041,2042,2043及び2044によって示される。対応するベース値エントリを可能にするベース値に対して同じ距離を示す複数のインデックスが存在し得る。次いで、ランダム選択に頼る最低又は最高のエントリ番号を選択することができる。
当業者は、データ値が任意のベース値と同じである場合、優先度デコーダが意味のあるインデックス値を出力することができないことを知っている。1つの解決策は、図19のインデックスブロック1921,1922,1923及び1924への入力信号(I3、I2、I1、I0)に適用されるゼロ比較器によって、この場合を検出することである。次いで、前記ゼロ比較器の出力信号は、図20の決定ボックス2041,2042,2043及び2044における決定を優先する。例えば、2041及び2042が最小インデックスとの一致を確立し、2043がゼロ比較一致を報告する場合、2043が勝利する。最後に、複数のエントリがゼロ比較を報告する場合、最高又は最低のエントリ番号を有する、又はランダム選択によるベース値レジスタが、1つのベース値レジスタを有効にする。
ここで、図25に示す代替方法に戻ると、データ値は、最も近いベース値によって形成されるデルタ値が上限値以下である場合にのみ符号化される。図26は、図25に関連して説明した方法に従ってセットのグローバルベース値を使用してデータブロックを圧縮するように構成されたエンコーダ2600を示す。これは、図6の方法に従ってデータ値を圧縮するように構成されたエンコーダから適合される。例として、データブロック2610に含まれる2つの値2611(V0)及び2612(V1)を考える。データ値を符号化するデバイス2600のこの例示的な実施形態は、それぞれB0、B1、B2、及びB3に対応する4つのエントリ2622,2623,2624及び2625を有するグローバルベース値テーブル2620を備える。ベース値、それぞれB0~B3 2622~2655だけを格納するのとは対照的に、図25に示す方法によって確立されている各ベース値に関連する上限デルタ値も格納する。目下の値に対する最小の差を有するグローバルベース値のうちの1つ、及びその関連付けられた上限値を選択するために、グローバルベース値テーブル2620は、データ値2621を格納するように構成される。
グローバルベース値テーブルは、さらに、任意のグローバルベース値エントリとデータ値2621との間の差が確立され得るように構成される。一実施形態では、これは、グローバルベース値エントリとデータ値との間の減算を実行することによって、アソシアティブに並列に行うことができる。ベース値とデータ値との間の差は、レジスタ2632,2633,2634及び2635に格納され、データ値2621とベース値エントリ2622(B0)との間の差は、2632(Diff)に格納され、データ値2621とベース値エントリ2624(B2)との間の差は、2634(Diff)に格納される。図8のデルタ値フィールド830は、ベース値からの距離(非負又は負)として解釈されることに留意されたい。
前述の図19及び図20で説明されるデバイスの残りは、複数の差を使用して最小の差を確立し、前記差に対応するベース値テーブルエントリを選択するように構成される。図26のデバイスは、最後のステップとして、差がベース値に関連する上限値以下である場合、確立されたベース値テーブルエントリ及び差を符号化のために使用する。これは、選択されたベース値に対応するベース値レジスタB0~B3 262 2~2625のいずれかから取り出すことができる。2660は、最終的に、確立された差を前記上限値と比較し、差が前記上限値以下である場合にのみ符号化を生成する。
ここで、図8のメタデータレイアウト800に戻る。データ値が圧縮されない場合、Cビット840は、クリアされ、データ値は、圧縮されない850。
別の実施形態では、高スループットで値を符号化することが望ましい。この目的のために、例示的なパイプラインレジスタが機能ブロック間に配置され、そのようなパイプライン化されたデバイスの例を示すために破線701として表される。
代替実施形態では、デルタ値のサイズをさらに小さくすることができる。デルタ値のための固定量の空間、例えば、16ビットを確保することが有利である。しかしながら、デルタ値が通常小さい場合、未使用ビットは、「0」(あるいは、2の補数表現では「1」)となる。図8のメタデータフォーマットに戻ると、開示される発明は、ベースポインタインデックス値をデルタ値と連結する。0(又は1)のストライク(strike)をよりコンパクトに符号化することによって、連結されたフィールドのサイズをさらに小さくすることができる。
一実施形態では、図8のデルタ値フィールド830は、最上位ビットから第一の非ゼロビットまでの0の数(あるいは、2の補数表現において、最上位ビットからゼロである最初のビットまでの1の数)をカウントすることによって符号化され得る。このような0又は1のストライクは、ランレングス符号化することができる。例えば、図16は、13ビットのデルタ値1611を示し、最上位10ビットが、0であり、その後に1が続く。メタデータフォーマット1620は、ランレングス符号化が使用されることを示すためのコード1621(CODE)と、それに続くゼロの数(バイナリ表記では1010)1622と、それに続く非ゼロ部分1623とを用いて、ランレングス符号化を使用してどのようにデルタ値が符号化されたかを示す。
代替実施形態では、複数の近傍値が多数の先行する0(又は1)を有する場合、最初に複数の値の最上位ビットを考慮し、次いで2番目の上位ビットを考慮すること等によって、0の数をランレングス符号化することができる。例えば、図17は、4つの例示的な値1710,1720,1730及び1740を考慮する。第一の値の20個の最上位ビット1710は、0であるが、第二の値1720、第三の値1730及び第四の値1740は、それぞれ19、21及び21ビットの最上位ビットゼロを有する。
4つの例示的な値1710,1720,1730及び1740について、最上位ビットから始まり、次いで次の最上位ビットから始まる、複数の値にわたる列ごとのゼロのストライクを調べることによって、19の最上位ビットはゼロである。前記ゼロをランレングス符号化することによって、複数のデルタ値をより効果的に圧縮することができる。これは、当業者によってビットプレーン圧縮として知られている。そのような方法及びデバイスと、本特許開示に開示される方法及びデバイスとの組合せもまた、検討される。
図17は、また、ビットプレーン圧縮を、グローバルベースを用いる開示されたデルタ符号化方法と組み合わせるときのメタデータ1750のためのフォーマットの実施形態も示す。ここでは、4つの値の例示的なブロックのメタデータが示されている。サイズ1751は、任意のデルタ値の最も大きなサイズを示す。これは、例えば、ランレングス符号化を用いることによって、ブロック内の全ての値においてゼロである最上位ビットの数をカウントすることによって決定することができる。各個々の値に関連するベース値は、BP1 1752、BP2 1754、BP3 1756及びBP4 1758において符号化される。最後に、各個々の値に関連するデルタ値は、D1 1753、D2 1755、D3 1757及びD4 1759において符号化される。他のメタデータフォーマットも可能であり、例えば、図8の例示的なメタデータフォーマットの実施形態で使用されるように、ブロックが圧縮されているか否かを符号化する専用ビットを有することも可能である。
企図しているのは、本開示におけるデルタ圧縮を含む任意の圧縮方法、エントロピーベースの圧縮、重複排除ベースの圧縮、又は当業者に知られている任意の圧縮方法を適用する前の準備ステップとして広く適用可能なシステム、方法、及びデバイスである。
一例として、データ値が浮動小数点数である場合を考える。浮動小数点数を考慮する不可逆圧縮技法のファミリーでは、仮数におけるエントロピーが低減され、より高い圧縮比を与えるので、仮数におけるN個の最下位ビットを無視することが有利であり得ることが当業者には知られている。先行技術から知られている方法及びそれを行うように構成された関連するデバイスは、単に切り捨てる、すなわち、N個全ての最下位ビットを0(又は同様に1)と見なす。N個のゼロビットの大部分が0(又は1)である場合、切り捨ては、小さな誤差をもたらす。しかしながら、切り捨ては、特にN個の最下位ビットの大部分が非ゼロである場合に、著しい誤差をもたらし得る。
例えば、図18は、4つの浮動小数点値1810,1820,1830及び1840の仮数を示す。各仮数は、24のビットを含む。Nが4に選択される場合、4つの最下位ビットの切り捨ては、ゼロになる。これは、4つの最下位ビットの大部分が1である仮数1810及び1830に対して、大きな誤差をもたらすことになる。
一実施形態は、N個の最下位ビットのゼロの数をカウントするように構成された方法及びデバイスを考慮する。ゼロが多数である場合、N個ビット全ては、ゼロとして表される。一方、非ゼロが多数である場合、N個のビット全ては、0として表される。最後に、結合が存在する場合、N個の最後のビットは、1又は0のいずれかとして符号化され得る。例えば、仮数1810及び1830の最下位ビットは、それぞれ「1」に設定された単一のビット1850及び1870によって表され、最下位ビットは、それぞれ「0」に設定された単一のビット1860及び1880によって表される。さらに、この技法を用いて、また、デルタ値をよりコンパクトに符号化するために、ランレングス符号化を適用する前述の技法と組み合わせた任意の実施形態を企図する。
ここで、差をセットのグローバルベース値に符号化することによって、圧縮されたデータブロックを解凍する方法に注目する。このような方法を図9に示す。この方法は、図8のメタデータを使用して符号化されたデータ値に適用される。データ値が圧縮される場合、メタデータフォーマット860が適用され、フィールド810は、ブロックがC=1によって圧縮されることを指定し、フィールド820,825及び830は、それぞれ、ベースポインタインデックス、符号ビット、及びデルタ値を備える。他方、データ値が圧縮されない場合、メタデータフォーマット870が適用され、フィールド840は、データ値がC=0によって圧縮されないことを指定し、フィールド850は、非圧縮データ値を含む。
図9に戻ると、プロセス900の第一のステップ920は、図8のフィールド810及び840、Cを検査する。データ値が圧縮されていない場合、すなわちC=0である場合、次のステップは、930となり、データ値は、図8のフィールド850から取り出すことができ、その後、プロセスは、960で終了する。データ値が圧縮される場合、プロセスの次のステップは、940である。ここで、グローバルベース値は、グローバルベース値テーブルにインデックス付けするために、図8のフィールド820を使用することによって取り出される。図9の次のステップ940において、グローバルベース値820は、データ値を復元するために、図8の符号ビット825を考慮してデルタ値830に加算される。当業者は、900に描写されるプロセスが、メモリオブジェクト、例えば、ページ、又はデータブロック内に含まれる数のデータ値に対して繰り返され得ることを認識する。
図10は、図9のプロセスに従ってセットのグローバルベース値を使用してデータブロックを解凍するように構成されたデバイスを示す。例示的なデバイス1000は、入力として、図8のメタデータフィールドに従って複数の符号化を使用する。例示的なデバイスでは、図面1000によれば、2つの符号化された値1011(E0)及び1012(E1)がある。ベースポインタインデックスフィールド820は、複数のグローバルベース値エントリのうちの1つを選択する。例示的なデバイス1000では、4つのグローバルベース値エントリ1021(B0)、1022(B2)、1023(B3)、及び1024(B4)がある。エントリのうちの1つが選択され、そのエントリ内のグローバルベースポインタ値がベース値レジスタ1031にコピーされる。図8のデルタ値フィールド830は、デルタ値レジスタ1033にコピーされる。次に、デバイスは、ベース値1031をデルタ値1032に加算するように構成される。その和は、レジスタ1032にロードされ、そこで、元の値が取り出される。
別の実施形態では、高スループットで値を復号化することが望ましい。この目的のために、例示的なパイプラインレジスタが機能ブロック間に配置され、そのようなパイプライン化されたデバイスの例を示すために破線1001として表される。
(エントロピーベースの符号化スキームを使用するデルタ値の圧縮及び解凍)
ここで、グローバルベースを使用するデルタ符号化よりも高い圧縮度を提供することができる実施形態に注目する。あるシナリオでは、複数のデータブロックは、全く同じ値を含むことがある。それらは、同じグローバルベース値を使用して符号化することができ、同じデルタ値を有することができる。しかしながら、異なるグローバルベース値を使用していても、依然として同じデルタ値を使用することができる。次の特許開示の目的は、出現頻度の高いデルタ値を、出現頻度の低いデルタ値よりも少ないビット数で符号化することである。
ここで、グローバルベースを使用するデルタ符号化よりも高い圧縮度を提供することができる実施形態に注目する。あるシナリオでは、複数のデータブロックは、全く同じ値を含むことがある。それらは、同じグローバルベース値を使用して符号化することができ、同じデルタ値を有することができる。しかしながら、異なるグローバルベース値を使用していても、依然として同じデルタ値を使用することができる。次の特許開示の目的は、出現頻度の高いデルタ値を、出現頻度の低いデルタ値よりも少ないビット数で符号化することである。
図11は、エントロピーベースの符号化を使用してデルタ値をコンパクトに符号化することができる方法を示す。プロセスは、ボックス1110で開始する。図8に示すメタデータに従ってグローバルベース値を用いたデルタ符号化を使用して個々の値が符号化されているメモリオブジェクト又はデータブロックを考える。概して、本方法の目的は、メモリオブジェクト又はデータブロック内の複数の符号化値のデルタ値の頻度のヒストグラムを最初に確立することである。この目的のために、1120は、プロセスを開始し、第二のステップ1130で、第一のデルタ値の出現回数がインクリメントされる。このプロセスは、全てのデルタ値が考慮されていない限り、ステップ1140で、繰り返される。全てのデルタ値が考慮されると、プロセスは、ステップ1150に進み、そこで、目的は、デルタ値のエントロピーベースの符号化を確立することである。当業者は、ハフマン符号化及び算術符号化等の選択方法が複数あることを認識する。そのようなエントロピーベースの符号化技法に共通するのは、この場合はデルタ値であり得る各シンボルの相対頻度についてのヒストグラム情報を必要とすることである。
図12は、図11で説明した方法をサポートするために、エントロピーベースの符号化を使用してデルタ値を符号化するように構成されたデバイスを示す。図8のメタデータに従って、デルタ符号化された各データ値は、レジスタ1210(符号化メモリ値)にロードされる。コンピュータは、ロード及び格納命令を用いて、このレジスタにアクセスすることができると仮定する。図8のデルタ値フィールド830は、次に、抽出され、レジスタ1220にコピーされる。デバイス1260は、各デルタ値の頻度、すなわち出現回数をカウントするように構成された多くの実施形態のうちの1つである。レジスタ1220は、キャッシュとして編成されるデバイス1260にインデックスすることができる。例示的なキャッシュ様構造は、N個のエントリを含み、各エントリは、デルタ値タグアレイエントリ、例えば、1232(DVT2)と、デルタ値頻度アレイエントリ、例えば、1242(DVF2)とを含む。当業者は、キャッシュが直接マッピングされるように構成され得ること、すなわち、デルタ値レジスタ1220に含まれるメモリ(データ)値とデバイス1260内のエントリとの間に1対1の対応があることを認識する。
あるいは、キャッシュは、セットアソシアティブであるように構成することができ、すなわち、デルタ値レジスタ1220に含まれるメモリ(データ)値とデバイス1260内のエントリとの間に1対多の対応がある。いずれにせよ、レジスタ1220に含まれるデルタ値は、デバイス1260にインデックス付けする。1260において、レジスタ1220のメモリ値内のタグビットが1つ(ダイレクトマップ構成の場合)又は複数のエントリのうちの1つ(セットアソシアティブ構成の場合)に一致する場合、1260においてヒットがある。ヒットの場合、対応するデルタ値頻度アレイエントリがインクリメントされる。例として、エントリ1232(DVT2)がレジスタ1220のデルタ値と一致すると仮定する。次に、1242(DVF2)が選択される。DVF2が15を含む場合、それは、16にインクリメントされる。レジスタ1220のデルタ値がデバイス1260に含まれない場合、エントリが作成されなければならない。
ダイレクトマップ構成の場合、選択されたエントリに存在する値を置換する。セットアソシアティブ構成の場合、複数のエントリが存在し、そこから選択して置換する。当業者であれば、多くのスキームの中から、例えば、LRU(Least-Recently-Used)又はFIFO(First-In-First-Out)置換スキームを選択できることを認識しているが、このデバイスに特有なものは、最低頻度デルタ値使用と呼ばれるポリシーであり、すなわち、デルタ値頻度アレイ1240内の最も低いカウントを有するエントリが選択される。
メモリオブジェクト内の全ての値がスキャンされたとき、デバイス1260は、デルタ値頻度の推定を含む。デバイス1260は、個々のエントリ、例えば、エントリ1241(DVF1)と関連するエントリ1231(DVT1)が、いわゆるロード命令を通じてコンピュータ命令によって読み取られ得るように構成することができる。これは、コンテンツをデバイス1260からメモリ1250に移動する可能性を開く。図2に見られるように、デバイス420は、メモリコントローラ141(MCTRL1)、142(MCTRL2)又は143(MCTRL3)を介して、メモリデバイス151(M1)、152(M2)又は153(M3)のいずれかに接続されるアナライザ214の一部であり得る。
デルタ値頻度情報がメモリにコピーされると、それをさらに分析し、ハフマン符号化又は算術符号化等の従来技術から知られている任意のエントロピーベースの符号化スキームを使用して符号化を生成することができる。さらに、重複排除ベースの圧縮技法を適用することもできる。
図13は、グローバルベース値を使用するエントロピーベース符号化デルタ値のメタデータを示す。メタデータ1300は、2つのフォーマット1360及び1370があり、それぞれデータ値が圧縮されるときと圧縮されないときに、使用される。圧縮するかどうかは、デルタが事前設定された閾値よりも低いかどうかに基づいても、あるいは何らかの他の基準に従ってもよい。そのような方法及びデバイスも企図される。
データ値が圧縮される場合、第一のフィールド1310(C)は、1に設定される。次の3つのフィールド1320,1325及び1330は、図8のメタデータのように、ベースポインタインデックスを符号化する。フィールド1325は、単一のビットで符号化することができるデルタ値の符号ビットを符号化する。1330は、選択されたエントロピーベースの符号化スキームについてのデルタ値のエントロピーベースの符号化を含む。他方、圧縮されない場合、第一のフィールド1340(C)は、ゼロに設定される。次いで、フィールド1350は、非圧縮データを含む。
ここで、エントロピーベースの符号化を用いて符号化されたデルタ値を復号する方法に注目する。図14は、エントロピーベースの符号化を使用してデルタ値を復号するための方法1400を示す。プロセスは、ボックス1410で開始する。目的は、ボックス1420に示すように、1つ又は複数のデータブロック内の全ての符号化されたデルタ値を復号することである。第一のステップは、デルタ値が圧縮される場合、図13のフィールド1330を抽出することである。次いで、符号化されたデルタ値は、ボックス1430で選択されたエントロピーベースの符号化スキームを使用して利用可能なコードと照合される。デルタ値が復号されると、グローバルベース値は、図13のフィールド1320を使用して、グローバルベース値テーブルから取り出される。値が圧縮されない場合、ステップ1430で、何のアクションも行われない。符号化された値がさらにある限り、決定ボックス1440に示すように、このプロセスは、繰り返される。値がそれ以上ない場合、プロセスは、ボックス1450で終了する。
図15は、図14の方法に従ってエントロピーベースの符号化を使用してデルタ値を復号するように構成されたデバイス1500を示す。例示的なデバイス1500は、入力として、図13のメタデータフィールドに従って符号化された複数の値を使用する。例示的なデバイスでは、図面1500によれば、2つの符号化された値1511(E0)及び1512(E1)がある。デバイス1520は、デルタ値1521のエントロピーベースの符号化を抽出し、そうするように構成されたデバイス1522を使用して、選択されたエントロピーベースの符号化スキームに従ってデルタ値を復号するように構成される。デバイス1522は、当業者に一般によく知られているように、任意の適切なデコンプレッサによって実装され得る。例えば、国際公開第2020/130929号の図3及び図7にそれぞれ開示されるハフマンデコンプレッサ300又は700を参照し、その内容は、参照によりその全体が本明細書に組み込まれる。最終結果は、図8のメタデータフォーマットに従って、デルタ符号化されたデータ値になる。ベースポインタインデックスフィールド820は、複数のグローバルベース値エントリのうちの1つを選択する。例示的なデバイス1500では、4つのグローバルベース値エントリ1531(B0)、1532(B2)、1533(B3)、及び1534(B4)がある。これらのエントリのうちの1つが選択され、そのエントリ内のグローバルベースポインタ値は、ベース値レジスタ1541にコピーされる。図8のデルタ値フィールド830は、デルタ値レジスタ1543にコピーされる。次に、デバイスは、ベース値1541をデルタ値1543に加算するように構成される。その和は、レジスタ1542にロードされ、そこで、元の値が取り出される。
別の実施形態では、高スループットで値を復号することが望ましい。この目的のために、例示的なパイプラインレジスタは、機能ブロック間に配置され、そのようなパイプライン化されたデバイスの例を示すために破線1501として表される。
さらに別の実施形態では、エントロピーベースの符号化を図13の1320におけるベースポインタインデックス値に別々に適用することができる。これによって、あるベース値が別のベース値よりも頻繁に使用されるとき、より高い圧縮をもたらすことができる。図21は、図13のメタデータフォーマットと、本特許に開示されるように構成された方法及びデバイスのいずれかを使用して、ベースポインタ値2115の頻度を分析するように、一実施形態がどのように選択し得るかを示す。
追加の実施形態では、重複排除を適用することができる。これは、ある値又はデータブロック全体が別のデータ値又は別のデータブロックと同じであるとき、より高い圧縮をもたらす。図21は、さらに、図13のメタデータフォーマットと、本特許に開示されるように構成される方法及びデバイスのいずれかを使用して、ベースポインタ値2125の間の重複の出現を分析するために、一実施形態がどのように選択し得るかを示す。同じアプローチをデルタ値に適用することができる。ここで、本特許に開示されるように構成された方法及びデバイスのいずれかを使用して、デルタ値の間の重複の出現を分析することを選択することができる。
図11に示す方法の代替又は追加として、データのブロック内の全てのデータ値が同じである場合、それらのうちのいずれかを単一ビットを伴うベースデータ値として使用し、全ての値が同じであることを描写することができる。図27は、この原理に基づく圧縮方法2700を示す。プロセスは、2710で開始する。第一のステップは、ベースをデータブロック2720内の第一のデータ値と同じ値に設定することである次に、データブロック内に残っているデータ値のそれぞれは、それをベース2740と比較することによって考慮される2730。現在のデータ値がベースと同じである場合、プロセスは、考慮すべき値がさらにある限り2750、次のデータ値を考慮することによって継続する。他方、2740に戻ると、現在のデータ値がベースと同じでない場合、プロセスは終了し、データブロックは圧縮されない2760。全てのデータ値が考慮され、ベースと同じであることが分かった場合、プロセスは終了し2770、データブロックは圧縮される。
図28は、図27の2860に示す方法を使用してデータのブロックがどのように圧縮されるかの例示的なレイアウトを示し、あるいは、それに加えて、前記方法がブロックを圧縮することができないが、代わりに、ブロック内の各値がフォーマット2870を使用して圧縮される図6に示す方法に従ってブロックを圧縮する場合、又はいずれの方法もフォーマット2880を使用して各非圧縮データ値を格納するブロックをそのまま圧縮できない場合を示す。
図27に示す方法を使用して圧縮されるブロックでは、全てのデータ値は、同じである。したがって、ブロックは、同じ値の1つのインスタンス、すなわち、ベース値2820を格納することによって圧縮される。前記方法が使用されることを確立するために、2ビットコードC2810は、10に設定される。他方、図6による方法が使用される場合、各データ値は、選択されたベース値へのデルタを用いて符号化される。選択されたベース値は、フィールド2876において符号化されてもよく、デルタは、フィールド2878において符号化されてもよく、符号ビットは、符号フィールド2877において符号化されてもよい。前記方法が使用されることを確立するために、Cフィールド2875は、11に設定される。最後に、前記方法のいずれもデータブロックを圧縮できない場合、全てのデータ値は、非圧縮フォーマットで格納され、2880のレイアウトが使用される。ここで、各値は、圧縮されずに格納され、Cフィールド2885は、00に設定される。図27の方法のみが使用される場合、考慮すべき最適化は、データブロック全体に対して単一のCフィールドを使用することである。
したがって、データ圧縮方法は、複数のデータブロックの中の個々のデータブロックの全てのデータ値が同じ値を有するかどうかを決定し、同じ値を有する場合、前記同じ値を、グローバルベース値2820及びこれを示す第一の値を有するメタデータ2810として使用して、個々のデータブロック全体を符号化するステップとを含んでもよい。同じ値を有しない場合、個々のデータブロックのデータ値は、第三の値を有するメタデータ2885によって示される非圧縮データ値を除いて、これを示す第二の値を有するメタデータ2875を使用して、本文書に開示されるような方法(すなわち、選択されたグローバルベース値及び結果として生じるデルタ値を伴う、例えば、図6の方法)で符号化されてもよい。
図29は、図27に示す方法及び図28に示すメタデータレイアウトを用いてデータのブロックを圧縮するように構成されたデバイスを示す図である。デバイス2900への入力は、データブロックであり、図29の例示的な実施形態では、データブロックは、4つのデータワード:W1 2910、W2 2920、W3 2930及びW4 2940を含む。デバイス2950は、全てのデータワードが同じ値を含むか否かを確立するように構成される。前記デバイスは、それらが同じであれば、論理1を、同じでなければ、論理0を出力として残す。ワードnのビットiをWn[i]とする。全てのデータワードの意味が同じであるということは、ワード内の全てのビットについて、W1[i]=W2[i]=W3[i]=W4[i]であることを意味する。デバイス2950がXOR及びANDゲートを用いてどのように構築され得るかを、当業者は認識する。出力信号は、2960及び2970で示される2つのラッチのイネーブル入力に接続される。データブロック内の全てのワードが同じである場合、W1 2910の内容は、次のクロック信号2980でベース値ラッチ2960にラッチされる。同様に、全てのデータワードが同じである場合、図28のメタデータフォーマット2860の2つのメタデータビットは、「1」及び「0」でなければならない。「1」及び「0」を2ビットラッチ2970にラッチするために、前記ラッチは、また、次のクロック信号2980で「1」及び「0」にラッチするデバイス2950によって制御されるイネーブル信号を有する。Cが「1」及び「0」ではないが、別の論理2ビット値を有する場合、他の符号化、例えば、図28のメタデータレイアウト2800内の2870又は2880を生成できることを、当業者は認識する。
図30は、図27に示す方法及び図28に示すメタデータレイアウトを用いて、データのブロックを解凍するように構成されたデバイスを示す。デバイス3000への入力は、メタデータC3010及びベース値3090である。図28のレイアウト2860に従ってC=10である場合、ベース値は、ブロック内の全てのデータワードにコピーされる。デバイス3000内の例示的なデータブロックは、4つのデータワードW1 3040、W2 3050、W3 3060、及びW4 3070を含む。それらは、イネーブル信号Eを有するラッチとして構成され、イネーブル信号Eは、次のクロック信号CLK3080において、E信号が論理値1を有する場合、ベース値レジスタ3090の内容を全てのラッチに転送する。E信号は、ANDゲート3030への入力信号の1つに接続されたインバータゲート3020によって確認されるC3010が10である場合にのみ、論理値1を有する。Cが10ではないが別の論理値を有する場合、ワードラッチW1~W4 3040, 3050, 3060 及び3070にそれぞれ異なる値のセット、;例えば、図28のメタデータレイアウト2880に従う非圧縮ワードのセットをロードすることが可能であることを当業者は認識するであろう。
ベース値は、典型的には、ベース値ポインタ(別名、ベース値インデックス)を使用して、N個のベース値が与えられた場合、参照当たりlog2Nビットを使用して、それらの全てを格納するテーブルに符号化される。いくつかのベース値が、他のベース値よりも実質的に頻繁に使用されることが起こり得る。その場合、ハフマン符号化又は算術符号化等のエントロピーベースの符号化スキームを使用して、ベース値ポインタを符号化することが有益である。図31は、エントロピーベースの符号化スキームを使用して、ベース値ポインタを符号化する方法を示す。
図31を参照すると、プロセスは、3110で開始する。全体的なプロセスは、例えば、図5に関連して記載された方法によって確立された全てのベース値を考慮する。各ベース値(又はそのベース値ポインタ)が使用される回数は、3130において各ベース値に対して確立される。全てのベース値が考慮されたとき、プロセスは、決定ボックス3140の後、3150に進む。エントロピーベースの符号化は、全てのベース値が使用される回数に基づいており、より頻繁に使用されるベース値に対して、より頻繁に使用されるベース値よりも短いコードをもたらす。符号化が確立されると、プロセスは、3160で終了する。
図7のように明示的にベース値ポインタを格納するブロックを圧縮するデバイスの教示により、図31に示す方法でデータのブロックを圧縮するように構成されたデバイスを構築することが可能である。図7に戻ると、図20でさらに詳述されるデバイス750のタスクは、選択されたベース値に対するベース値ポインタが明示的に格納される符号化を作成することである。図31に記載される方法は、ベース値ポインタとエントロピーベースの符号化との間の1対1のマッピングを確立する。このテーブルは、圧縮が有効にされたときにロードされるデバイス内の小さなテーブルに格納することができる。したがって、ベース値ポインタが750において確立されると、このポインタは、そのベース値ポインタの対応する符号化をピックアップするために、テーブルにインデックス付けすることができる。
ブロックを解凍し、図8のようにベース値ポインタを明示的に格納するデバイスの教示によって、図31に示す方法でデータのブロックを解凍するように構成されたデバイスを構築することも可能である。図10は、そのような符号化を解凍するためのデバイスの実施形態を示す。ここで、例示的なブロックは、4つのベース値B0 1021、B1 1022、B3 1023及びB4 1024を使用し得る2つの値E0 1011及びE1 1012を有する。これらのベース値は、符号語とベース値との間の1対1のマッピングを有する任意のエントロピーベースの符号化スキームを使用して符号語に符号化される。前述の符号化デバイスにおけるように、ベース値符号化のセットと、ベース値を取り出すために符号化を使用してそれにインデックス付けするベース値とを含む小さいテーブルを有することが可能である。そのようなデバイスは、1020で使用されるベース値を取り出すために、図10のボックス1020の左側に組み込まれ得る。適切なデバイスの一例は、米国特許第10846218号に開示される解凍デバイスであり、その全体は、参照により本明細書に組み込まれる。
一般に、本特許開示はセットのグローバルベース値を決定し、ベースデルタ符号化を使用することによって、それぞれが複数のデータ値を含む複数のデータブロックを圧縮する方法及び圧縮するように構成されたデバイスを教示する。さらに、本特許開示は、デルタ値単体、又はベース値単体、又は一緒に適用される従来技術からのエントロピーベース及び重複排除ベースの符号化技法と組み合わせて圧縮するように構成される方法及びデバイスを教示する。全てのそのような実施形態が企図される。
当業者が前述の説明から理解するように、本発明は、図22の2200で見ることができるデータ圧縮方法を提供する。方法2200は、複数のデータブロックを取得すること2210を含み、各データブロックは、複数のデータ値を含む。方法2200は、取得された複数のデータブロックのベースデルタ符号化を実行するステップ2220をさらに含み、デルタ値は、複数のデータブロックのデータ値の中から、複数のデータブロックに共通のセットのグローバルベース値を決定すること2230によって、データ値とベース値との間の差を意味する。セットのグローバルベース値は、セットのグローバルベース値におけるグローバルベース値に対して複数のデータブロックのデータ値のデルタ値を最小にするように選択される。
方法2200は、次いで、複数のデータブロックの個々のデータ値を符号化するステップ2240を含み、この符号化は、セットのグローバルベース値において、個々のデータ値ごとに、個々のデータ値に数値的に最も近く、したがって、最小のデルタ値をもたらす1つのグローバルベース値を選択するステップ2250と、符号化された個々のデータ値に対して、選択された1つのグローバルベース値及び結果として生じるデルタ値を表すメタデータを生成するステップ2260とによって行われる。
本明細書の教示から当業者には明らかなように、セットのグローバルベース値は、以下のデータ値:
a)デルタ符号化されるべき複数のデータブロックに現れる(「共通」、「グローバル」)データ値と、
b)複数のデータブロックのデータ値が、後続の符号化ステップ2240において定義される方法でセットのグローバルベース値を使用することによってベースデルタ符号化されるとき、最小のデルタ値(最も高い圧縮比)をもたらすデータ値と、
を含む。
a)デルタ符号化されるべき複数のデータブロックに現れる(「共通」、「グローバル」)データ値と、
b)複数のデータブロックのデータ値が、後続の符号化ステップ2240において定義される方法でセットのグローバルベース値を使用することによってベースデルタ符号化されるとき、最小のデルタ値(最も高い圧縮比)をもたらすデータ値と、
を含む。
したがって、複数のデータブロックのグローバル値のセットに対するデルタ値を最小化するグローバル値のセットを決定することは、共通の一般的な知識に属し、クラスタリング方法として知られている。例えば、1つの周知のクラスタリング方法は、Kmeansである(Stuart P.Lloyd,Least Squares Quantization in PCM,IEEE Transactions on Information Theory, Vol. IT-28,No.2,pp.192,1982年3月、参照)。
図4及び図5を特に参照して説明されたように、セットのグローバルベース値を決定するステップ2230は、取得された複数のデータブロックを分析して、複数のデータブロック内のデータ値に関する値頻度情報を確立するステップと、複数のデータブロック内のそれらの値頻度とともにデータ値をソートするステップとを含んでもよい。次いで、N=1,…,Nmax及びB=1,…,N(式中、Nは値ビンの数であり、Bは候補ベース値の数である)の各特定の組合せについて、ソートされたデータ値は、N個のビンに分割される。最も高い累積値頻度を有するB個のビンについて、候補ベース値が、各ビンについて、そのビンにおいて最も高い値頻度を有するデータ値として割り当てられる。次いで、取得された複数のデータブロックのデータ値のベースデルタ符号化が、特定の組合せのためのベースデルタ符号化圧縮比を決定するために、B個のビンのための候補ベース値を使用して実行される。全ての特定の組合せの中で、最大圧縮比をもたらす値ビンと候補ベース値との組合せが特定される。特定された組合せの候補ベース値は、セットのグローバルベース値として選択される。
開示された実施形態から明らかなように(例えば、図6の説明を参照)、各グローバルベース値は、好ましくは、セットのグローバルベース値における一意のベース値インデックスを有する。複数のデータブロックの個々のデータ値を符号化するステップ2240は、次いで、生成されたメタデータ内の選択されたグローバルベース値をそのベース値インデックスによって表すステップを含む。
さらに、複数のデータブロックの個々のデータ値を符号化するステップ2240は、各データブロック内の各データ値について、選択されたベース値から生じるデルタ値が閾値を超えるかどうかを決定するステップと、閾値を超える場合、選択されたグローバルベース値及び結果として生じるデルタ値によってメタデータを表す代わりに、それが非圧縮であるという表示とともに、データ値そのものを含むようにメタデータを生成するステップを含んでもよい。
上記で説明したように、本発明の実施形態は、デルタ値のランレングス符号化を含んでもよい。したがって、データ圧縮方法2200は、最上位バイナリ0:s又は1:sのストライクを含むベースデルタ符号化されたデータ値のデルタ値をランレングス符号化するステップを、生成されたメタデータ内のデルタ値をa)最上位バイナリ0:s又は1:sのストライクの長さを示すデータと、b)デルタ値の残り(非ストライク部分)との組合せで表すことによって行うことを、さらに含んでもよい。
同様に、本発明の実施形態は、デルタ値のビットプレーン圧縮を含んでもよい。この目的のために、データ圧縮方法2200は、デルタ値のシーケンス内の各デルタ値が特定の最小長の最上位バイナリ0:s又は1:sのストライクを含むことを識別し、生成されたメタデータ内のデルタ値のシーケンス内のデルタ値を、a)識別された最小長を示すデータと、b)デルタ値のシーケンスにおけるデルタ値の残り(非ストライク部分)との組合せによって表すことによって、ベースデルタ符号化されたデータ値のデルタ値のシーケンスにビットプレーン圧縮を適用するステップをさらに含んでもよい。
上記で説明したように、本発明の有利な実施形態は、デルタ値及び/又はベース値インデックスを圧縮することを含む。したがって、データ圧縮方法2200は、ベースデルタ符号化されたデータブロックのうちの1つ以上のデータブロックのベースデルタ符号化されたデータ値のデルタ値/ベース値インデックスを取得するステップと、次いで、取得されたデルタ値/ベース値インデックスの間の値冗長性を利用することによって、ベースデルタ符号化された前記1つ以上のデータブロックの第二段階のデータ圧縮を実行するステップと、をさらに含んでもよい。
第二段階のデータ圧縮は、ハフマン符号化又は算術符号化等のように、エントロピーベースの符号化を実行するステップを含むことが好ましく、これは、取得されたデルタ値/ベース値インデックスの相対頻度情報を確立し、確立された相対頻度情報に基づいて、取得された各デルタ値/ベース値インデックスに対するコードを選択し、ベースデルタ符号化されたデータ値ごとに生成されたメタデータにおいて、選択されたコードによってデルタ値/ベース値インデックスを表すことによって行われる。ベース値インデックス(又はベース値ポインタ)に対してエントロピーベースの符号化を実行することの代替として、ベース値そのものに対してエントロピーベースの符号化を実行してもよい。これは、ベース値と1対1にマッピングされたベース値インデックスとして使用され得るベース値符号語をもたらす。
あるいは、第二段階のデータ圧縮は、重複排除ベースの圧縮を実行することを含んでもよく、これは、取得されたデルタ値/ベース値インデックスの中の1つ以上の重複を識別することと、生成されたメタデータにおいて、識別された各重複デルタ値/ベース値インデックスを、重複デルタ値/ベース値インデックスと同じデルタ値を有する符号化された個々のデータ値へのポインタ又はその識別子によって表すこととによって行われる。
複数のデータブロックを取得するステップ2210は、典型的には、コンピュータメモリC1~C3、M1~Mk、2410からメモリオブジェクトを読み出すステップを含んでもよく(図24参照)、前述の複数のデータブロックは、メモリオブジェクトに含まれ、方法2200は、生成メタデータをコンピュータメモリに格納するステップをさらに含む。メモリオブジェクトは、例えば、コンピュータメモリC1~C3、M1~Mk、2410内のページであってもよい。あるいは、メモリオブジェクトは、例えば、キャッシュライン又はメモリページとは異なるサイズの別のメモリオブジェクトであってもよい。
関連するコンピュータプログラム製品は、コード命令を含み、コード命令は、処理デバイス(例えば、図2のP1、P2又はP3のようなCPU)によってロードされ実行されると、上述のデータ圧縮方法2200を実行させる。
図23は、(図2のコンピュータメモリ圧縮デバイス205に対応し得る)関連データ圧縮デバイス2300を示し、これは、本明細書で説明するように、取得された複数のデータブロックのベースデルタ符号化を実行するためのものである。各データブロックは、複数のデータ値を含み、デルタ値は、データ値とベース値との間の差を意味することを想起されたい。データ圧縮デバイス2300は、(図2のユニット214に対応し得る)アナライザユニット2310と、(図2のユニット212に対応し得る)エンコーダユニット2320とを備える。
アナライザユニット2310は、複数のデータブロックのデータ値の中から、複数のデータブロックに共通のセットのグローバルベース値を決定するように構成される。セットのグローバルベース値は、セットのグローバルベース値におけるグローバルベース値に対して複数のデータブロックのデータ値のデルタ値を最小にするように選択されることを想起されたい。
エンコーダユニット2320は、複数のデータブロックの個々のデータ値の符号化を、セットのグローバルベース値において、個々のデータ値ごとに、個々のデータ値に数値的に最も近く、したがって最小のデルタ値をもたらす1つのグローバルベース値を選択することと、符号化された個々のデータ値に対して、選択された1つのグローバルベース値及び結果として生じるデルタ値を表すメタデータを生成することによって行うに構成される。
データ圧縮デバイス2300は、そのアナライザユニット2310及びエンコーダユニット2320とともに、データ圧縮方法2200及びその実施形態について上述したような追加又は改良された機能のいずれか又は全部を実行するように構成されてもよい。
関連するデータ解凍方法は、データ圧縮方法2200によって生成されたメタデータを取得するステップと、取得されたメタデータによって表されるグローバルベース値及びデルタ値から、各データブロックが複数のデータ値を含む複数のデータブロックを再構築するステップとを含む。さらに、関連するコンピュータプログラム製品は、処理デバイス(例えば、図2のP1、P2又はP3のようなCPU)によってロードされ実行されると、このデータ解凍方法を実行させるコード命令を含む。
対応して、関連するデータ解凍デバイス2430(図24参照)は、(図2のユニット213に対応し得る)デコーダユニットを備える。デコーダユニット(例えば、205)は、データ圧縮デバイス2300(例えば、205)によって生成されたメタデータを取得し、取得されたメタデータによって表されるグローバルベース値及びデルタ値から、各データブロックが複数のデータ値を含む複数のデータブロックを再構築するように構成される。
図24は、1つ以上のメモリ2410と、データ圧縮デバイス2420(図23のデバイス2300及び/又は図2のデバイス205に対応し得る)と、上で参照したようなデータ解凍デバイス2430とを備えるシステム2400を開示する。
システム2400は、典型的には、コンピュータシステム(例えば、図2のコンピュータシステム200)であってもよく、1つ以上のメモリ2410は、キャッシュメモリ(例えば、C1~C3)、ランダムアクセスメモリ(例えば、M1~Mk)、二次ストレージデバイス、又はデータバッファであってもよい。
本発明について、主に、その異なる実施形態を参照して上記で説明してきた。しかしながら、当業者によって容易に理解されるように、本文書に開示されるもの以外の他の実施形態も、添付の特許請求の範囲によって定義される本発明の範囲内で等しく可能である。
Claims (35)
- データ圧縮方法(2200)であって、
各データブロックが複数のデータ値を含む複数のデータブロックを取得するステップ(2210)と、
取得された前記複数のデータブロックのベースデルタ符号化を実行するステップ(2220)であって、デルタ値は、データ値とベース値との間の差を意味する、ステップと、
を含み、前記実行するステップ(2220)は、
前記複数のデータブロックの前記データ値の中から、前記複数のデータブロックに共通のセットのグローバルベース値を決定するステップ(2230)であって、前記セットのグローバルベース値は、前記セットのグローバルベース値におけるグローバルベース値に対して前記複数のデータブロックの前記データ値のデルタ値を最小化するように選択される、ステップと、
前記複数のデータブロックの個々のデータ値を符号化するステップ(2240)と、によって行われ、前記符号化するステップ(2240)は、
前記セットのグローバルベース値において、各個々のデータ値に、前記個々のデータ値に数値的に最も近く、結果として、最小のデルタ値をもたらす1つのグローバルベース値を選択するステップ(2250)と、
選択された前記1つのグローバルベース値及び結果としてもたらされた前記デルタ値を表すために、符号化された前記個々のデータ値のためのメタデータを生成するステップ(2260)と、
によって行われる、ステップと、を含む、データ圧縮方法。 - 前記セットのグローバルベース値を決定するステップ(2230)は、
取得された前記複数のデータブロックを分析して、前記複数のデータブロック内の前記データ値に関する値頻度情報を確立するステップと、
前記複数のデータブロック内で前記データ値をそれらの値頻度とともに、ソートするステップと、
N=1,…,NmaxとB=1,…,Nとの各特定の組合せであって、Nは値ビンの数であり、Bは候補ベース値の数である、各特定の組合せに対して、
ソートされた前記データ値をN個のビンに分割するステップと、
最も高い累積値頻度を有するB個のビンに対して、各ビンに対する候補ベース値を、そのビンにおいて最も高い値頻度を有する前記データ値として割り当てるステップと、
前記B個のビンについての前記候補ベース値を用いて取得された前記複数のデータブロックの前記データ値のベースデルタ符号化を実行して、前記特定の組合せについてのベースデルタ符号化圧縮比を決定するステップと、
全ての前記特定の組合せの中で、最大圧縮比をもたらす値ビンと候補ベース値との前記組合せを識別するステップと、
識別された前記組合せの前記候補ベース値を前記セットのグローバルベース値として選択するステップと、
を含む、請求項1に記載のデータ圧縮方法。 - 各グローバルベース値は、前記セットのグローバルベース値における一意のベース値インデックスを有し、前記複数のデータブロックの前記個々のデータ値を符号化するステップ(2240)は、
生成された前記メタデータ内の選択された前記1つのグローバルベース値をそのベース値インデックスによって表すステップ
を含む、請求項1又は2に記載のデータ圧縮方法。 - 前記複数のデータブロックの前記個々のデータ値を符号化するステップは、各データブロックについて、
前記データブロック内の各データ値について、選択された前記ベース値から生じるデルタ値が閾値(UB)を超えるかどうかを決定するステップと、
超える場合、選択された前記1つのグローバルベース値及び結果として生じる前記デルタ値によって前記データ値を表す代わりに、前記データ値そのものを、それが非圧縮であることの表示とともに含むようにメタデータを生成するステップと、
を含む、請求項1~3のいずれか一項に記載のデータ圧縮方法。 - 前記閾値(UB)は、nビットを有する最も大きな二進数によって定義される最大デルタ値(MD)以下であり、
n=min_compressed_value_size-log2(B)、
min_compressed_value_sizeは、所与の目標圧縮比から生じる符号化された前記データ値の最小ビットサイズであり、
Bは、前記セットのグローバルベース値における前記ベース値の数である、
請求項4に記載のデータ圧縮方法。 - 前記閾値(UB)は、前記セットのグローバルベース値におけるそれぞれのベース値について、
前記それぞれのベース値に関連する最も大きなデルタ値が前記最大デルタ値(MD)未満である場合、前記最も大きなデルタ値として定義され、
そうでない場合、前記最大デルタ値(MD)として定義される、請求項5に記載のデータ圧縮方法。 - 最上位バイナリ0:s又は1:sのストライクを含むベースデルタ符号化された前記データ値のデルタ値をランレングス符号化するステップを、
最上位バイナリ0:s又は1:sのストライクの長さを示すデータと、
前記デルタ値の残りの部分(非ストライク部分)と
の組合せで表すことによって行うことをさらに含む、請求項1~6のいずれか一項に記載のデータ圧縮方法。 - ビットプレーン圧縮をベースデルタ符号化された前記データ値のデルタ値のシーケンスに適用するステップ
をさらに含み、前記適用するステップは、
デルタ値の前記シーケンスにおける各デルタ値が、特定の最小長の最上位バイナリ0:s又は1:sのストライクを含むことを識別するステップと、
生成された前記メタデータにおけるデルタ値の前記シーケンスの前記デルタ値を、
特定された最小長さを示すデータと、
デルタ値の前記シーケンスにおける前記デルタ値の残りの部分(非ストライク部分)と
の組合せによって、表すステップと、
によって行われる、請求項1~6のいずれか一項に記載のデータ圧縮方法。 - ベースデルタ符号化された前記データブロックのうちの1つ以上のデータブロックのベースデルタ符号化された前記データ値の前記デルタ値を取得するステップと、
取得された前記デルタ値の間の値冗長性を利用することによって、ベースデルタ符号化された前記1つ以上のデータブロックの第二段階のデータ圧縮を実行するステップと、
をさらに含む、請求項1~8のいずれか一項に記載のデータ圧縮方法。 - 前記第二段階のデータ圧縮は、エントロピーベースの符号化を実行するステップを含み、前記実行するステップは、
取得された前記デルタ値の相対頻度情報を確立するステップと、
確立された前記相対頻度情報に基づいて、取得された各デルタ値に対するコードを選択するステップと、
ベースデルタ符号化された各データ値について生成された前記メタデータにおいて、選択された前記コードによって前記デルタ値を表すステップと、
によって行われる、請求項9に記載のデータ圧縮方法。 - 前記エントロピーベースの符号化は、
ハフマン符号化と、
算術符号化と、
からなる群から選択される、請求項10に記載のデータ圧縮方法。 - 前記第二段階のデータ圧縮は、重複排除ベースの圧縮を実行するステップを含み、前記実行するステップは、
取得された前記デルタ値のうちの1つ以上の重複を識別するステップと、
生成された前記メタデータにおいて、各識別された重複デルタ値を、前記重複デルタ値と同じデルタ値を有する符号化された個々のデータ値へのポインタ又はその識別子によって表すステップと、
によって行われる、請求項9に記載のデータ圧縮方法。 - ベースデルタ符号化された前記データブロックのうちの1つ以上のデータブロックのベースデルタ符号化された前記データ値の前記ベース値インデックスを取得するステップと、
取得された前記ベース値インデックス間の値冗長性を利用することによって、ベースデルタ符号化された前記1つ以上のデータブロックの第二段階のデータ圧縮を実行するステップと、
をさらに含む、請求項3、又は請求項3に従属する請求項4~12のいずれか一項に記載のデータ圧縮方法。 - 前記第二段階のデータ圧縮は、エントロピーベースの符号化を実行するステップを含み、前記実行するステップは、
取得された前記ベース値インデックスの相対頻度情報を確立するステップと、
確立された前記相対頻度情報に基づいて、取得された各ベース値インデックスに対するコードを選択するステップと、
各ベースデルタ符号化されたデータ値について生成された前記メタデータにおいて、選択された前記コードによって前記ベース値インデックスを表すステップと、
によって行われる、請求項13に記載のデータ圧縮方法。 - 前記エントロピーベースの符号化は、
ハフマン符号化と、
算術符号化と、
からなる群から選択される、請求項14に記載のデータ圧縮方法。 - 前記第二段階のデータ圧縮は、重複排除ベースの圧縮を実行するステップを含み、前記実行するステップは、
取得された前記ベース値インデックスのうちの1つ以上の重複を識別するステップと、
生成された前記メタデータにおいて、各識別された重複ベース値インデックスを、前記重複ベース値インデックスと同じベース値インデックスを有する符号化された個々のデータ値へのポインタ又はその識別子によって表すステップと、
によって行われる、請求項13に記載のデータ圧縮方法。 - 前記方法は、
前記複数のデータブロックの中の個々のデータブロックの全てのデータ値が同じ値を有するかどうかを決定し、同じ値を有すれば、前記同じ値を、グローバルベース値(2820)及びこれを示す第一の値を有するメタデータ(2810)として使用して、個々のデータブロック全体を符号化するステップと、
同じ値を有しない場合、第三の値を有するメタデータ(2885)によって示される請求項4に記載の非圧縮データ値を除き、これを示す第二の値を有するメタデータ(2875)を使用して、請求項1~16のいずれか一項に記載の方法を用いて、個々のデータブロックのデータ値を符号化するステップと、
を含む、請求項1~16のいずれか一項に記載のデータ圧縮方法。 - 前記複数のデータブロックを取得するステップは、コンピュータメモリ(C1~C3、M1~Mk;2410)からメモリオブジェクトを読み出すステップであって、前記複数のデータブロックが前記メモリオブジェクトに含まれる、ステップを含み、
前記方法は、生成された前記メタデータを前記コンピュータメモリに格納するステップをさらに含む、請求項1~17のいずれか一項に記載のデータ圧縮方法。 - 前記メモリオブジェクトは、前記コンピュータメモリ(C1~C3、M1~Mk;2410)内のページである、請求項18に記載のデータ圧縮方法。
- 取得された複数のデータブロックのベースデルタ符号化を実行するためのデータ圧縮デバイス(2300;205)であって、各データブロックは複数のデータ値を含み、デルタ値はデータ値とベース値との間の差を意味し、前記データ圧縮デバイス(2300;205)は、
前記複数のデータブロックの前記データ値のうち、前記複数のデータブロックに共通するセットのグローバルベース値を決定するように構成されたアナライザユニット(2310;214)であって、前記セットのグローバルベース値は、前記セットのグローバルベース値におけるグローバルベース値に関して、前記複数のデータブロックの前記データ値のデルタ値を最小化するように選択される、アナライザユニット(2310;214)と、
前記複数のデータブロックの個々のデータ値を符号化するように構成されたエンコーダユニット(2320;212)であって、前記符号化は、前記セットのグローバルベース値において、各個々のデータ値に対して、前記個々のデータ値に数値的に最も近く、したがって最小のデルタ値をもたらすグローバルベース値を選択することと、選択された前記グローバルベース値及び結果として生じる前記デルタ値を表すために、符号化された前記個々のデータ値のメタデータを生成することと、によって行われる、エンコーダユニット(2320;212)と、
を備える、データ圧縮デバイス(2300;205)。 - 前記アナライザユニット(2310;214)は、前記セットのグローバルベース値を決定するように構成され、前記セットのグローバルベース値の決定は、
取得された前記複数のデータブロックを分析して、前記複数のデータブロック内の前記データ値に関する値頻度情報を確立するステップと、
前記複数のデータブロック内で前記データ値をそれらの値頻度とともに、ソートするステップと、
N=1,…,NmaxとB=1,…,Nとの各特定の組合せであって、Nは値ビンの数であり、Bは候補ベース値の数である、各特定の組合せに対して、
ソートされた前記データ値をN個のビンに分割するステップと、
最も高い累積値頻度を有するB個のビンに対して、各ビンに対する候補ベース値を、そのビンにおいて最も高い値頻度を有する前記データ値として割り当てるステップと、
前記B個のビンについての前記候補ベース値を用いて取得された前記複数のデータブロックの前記データ値のベースデルタ符号化を実行して、前記特定の組合せについてのベースデルタ符号化圧縮比を決定するステップと、
全ての前記特定の組合せの中で、最大圧縮比をもたらす値ビンと候補ベース値との前記組合せを識別するステップと、
識別された前記組合せの前記候補ベース値を前記セットのグローバルベース値として選択するステップと、
によって行われる、請求項20に記載のデータ圧縮デバイス(2300;205)。 - 各グローバルベース値は、前記セットのグローバルベース値における一意のベース値インデックスを有し、前記エンコーダユニット(2320;212)は、生成された前記メタデータにおいて選択された前記1つのグローバルベース値をそのベース値インデックスによって表すことによって、前記複数のデータブロックの前記個々のデータ値を符号化するように構成される、請求項20又は21に記載のデータ圧縮デバイス(2300;205)。
- 前記エンコーダユニット(2320;212)は、前記複数のデータブロックの前記個々のデータ値を、各データブロック内の各データ値について、選択された前記ベース値から生じる前記デルタ値が閾値を超えるかどうかを決定し、前記閾値を超える場合、選択された前記1つのグローバルベース値及びその結果生じるデルタ値によって表現する代わりに、前記データ値そのものを、それが非圧縮であることの表示とともに含むように前記メタデータを生成することによって符号化するように構成される、請求項20~22のいずれか一項に記載のデータ圧縮デバイス(2300;205)。
- 前記エンコーダユニット(2320;212)は、請求項7に記載の方法で定義されるように、デルタ値をランレングス符号化するようにさらに構成される、請求項20~23のいずれか一項に記載のデータ圧縮デバイス(2300;205)。
- 前記エンコーダユニット(2320;212)は、請求項8の方法で定義されるように、ビットプレーン圧縮を適用するようにさらに構成される、請求項20~23のいずれか一項に記載のデータ圧縮デバイス(2300;205)。
- 前記エンコーダユニット(2320;212)は、請求項9~12のいずれか一項に記載の方法で定義されるように、取得された前記デルタ値の間の値の冗長性を利用することによって、ベースデルタ符号化された前記1つ以上のデータブロックの第二段階のデータ圧縮を実行するようにさらに構成される、請求項20~25のいずれか一項に記載のデータ圧縮デバイス(2300;205)。
- 前記エンコーダユニット(2320;212)は、請求項13~16のいずれか一項に記載の方法で定義されるように、取得された前記ベース値インデックスの間の値の冗長性を利用することによって、ベースデルタ符号化された前記1つ以上のデータブロックの第二段階のデータ圧縮を実行するようにさらに構成される、請求項22又は請求項22に従属する請求項23~26のいずれか一項に記載のデータ圧縮デバイス(2300;205)。
- コンピュータメモリ(C1~C3,M1~Mk;2410)からメモリオブジェクトを読み出すことによって前記複数のデータブロックを取得するように構成されたロケータユニット(211)をさらに備え、前記複数のデータブロックは、前記メモリオブジェクト内に構成され、生成された前記メタデータを前記コンピュータメモリに格納するように構成された、請求項20~27のいずれか一項に記載のデータ圧縮デバイス(2300;205)。
- 前記メモリオブジェクトは、前記コンピュータメモリ(C1~C3、M1~Mk;2410)内のページである、請求項28に記載のデータ圧縮デバイス(2300;205)。
- データ解凍方法であって、
請求項1~19のいずれか一項に記載のデータ圧縮方法によって生成された前記メタデータを取得するステップと、
各データブロックが複数のデータ値を含む複数のデータブロックを、取得された前記メタデータによって表される前記グローバルベース値及び前記デルタ値から再構築するステップと、
を含む、データ解凍方法。 - デコーダユニット(213)を備えるデータ解凍デバイス(2430)であって、前記デコーダユニット(213)は、請求項20~29のいずれか一項に記載のデータ圧縮デバイス(2300;205)によって生成された前記メタデータを取得し、取得された前記メタデータによって表される前記グローバルベース値及び前記デルタ値から、各データブロックが複数のデータ値を含む複数のデータブロックを再構築するように構成される、データ解凍デバイス(2430)。
- 1つ以上のメモリ(2410)と、請求項20~29のいずれか一項に記載のデータ圧縮デバイス(2300;205;2420)と、請求項31に記載のデータ解凍デバイス(2430)と、を備えるシステム(2400)。
- 前記システムは、コンピュータシステム(200)であり、前記1つ以上のメモリ(2410)は、
キャッシュメモリ(C1~C3)と、
ランダムアクセスメモリ(M1~Mk)と、
二次ストレージデバイスと、
データバッファと、
からなる群から選択される、請求項32に記載のシステム(2400)。 - 処理デバイスによってロードされ、実行されると、請求項1~19のいずれか一項に記載の方法を実行させるコード命令を含む、コンピュータプログラム製品。
- 処理デバイスによってロードされ、実行されると、請求項30に記載の方法を実行させるコード命令を含む、コンピュータプログラム製品。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
SE2051404-8 | 2020-12-01 | ||
SE2051404A SE544557C2 (en) | 2020-12-01 | 2020-12-01 | Systems, methods and devices for exploiting value similarity in computer memories |
PCT/SE2021/051191 WO2022119493A1 (en) | 2020-12-01 | 2021-12-01 | Systems, methods and devices for exploiting value similarity in computer memories |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023553832A true JP2023553832A (ja) | 2023-12-26 |
Family
ID=81854274
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2023532372A Pending JP2023553832A (ja) | 2020-12-01 | 2021-12-01 | コンピュータメモリにおける値類似性を利用するためのシステム、方法、及びデバイス |
Country Status (8)
Country | Link |
---|---|
US (1) | US20240028510A1 (ja) |
EP (1) | EP4256710A1 (ja) |
JP (1) | JP2023553832A (ja) |
KR (1) | KR20230124941A (ja) |
CN (1) | CN116529705A (ja) |
CA (1) | CA3203482A1 (ja) |
SE (1) | SE544557C2 (ja) |
WO (1) | WO2022119493A1 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12093573B2 (en) * | 2021-01-29 | 2024-09-17 | Intel Corporation | Low-complexity coverage-based compression |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016186563A1 (en) * | 2015-05-21 | 2016-11-24 | Zeropoint Technologies Ab | Methods, devices and systems for hybrid data compression and decompression |
CN108702160B (zh) * | 2016-01-29 | 2022-05-17 | 零点科技公司 | 用于压缩和解压缩数据的方法、设备和系统 |
SE544272C2 (en) * | 2018-11-14 | 2022-03-22 | Zeropoint Tech Ab | Accessing compressed computer memory |
EP3900340A4 (en) * | 2018-12-21 | 2022-08-17 | Zeropoint Technologies AB | EFFECTIVE COMPRESSION AND DECOMPRESSION METHODS, DEVICES AND SYSTEMS TO ACHIEVE HIGHER THROUGHPUT |
SE543186C2 (en) * | 2019-01-11 | 2020-10-20 | Zeropoint Tech Ab | Systems, methods and devices for eliminating duplicates and value redundancy in computer memories |
-
2020
- 2020-12-01 SE SE2051404A patent/SE544557C2/en unknown
-
2021
- 2021-12-01 EP EP21899311.1A patent/EP4256710A1/en active Pending
- 2021-12-01 US US18/254,651 patent/US20240028510A1/en active Pending
- 2021-12-01 CN CN202180080779.0A patent/CN116529705A/zh active Pending
- 2021-12-01 CA CA3203482A patent/CA3203482A1/en active Pending
- 2021-12-01 KR KR1020237022365A patent/KR20230124941A/ko unknown
- 2021-12-01 JP JP2023532372A patent/JP2023553832A/ja active Pending
- 2021-12-01 WO PCT/SE2021/051191 patent/WO2022119493A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2022119493A1 (en) | 2022-06-09 |
CN116529705A (zh) | 2023-08-01 |
SE544557C2 (en) | 2022-07-12 |
US20240028510A1 (en) | 2024-01-25 |
CA3203482A1 (en) | 2022-06-09 |
KR20230124941A (ko) | 2023-08-28 |
SE2051404A1 (en) | 2022-06-02 |
EP4256710A1 (en) | 2023-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107925418B (zh) | 用于混合式数据压缩和解压缩的方法、设备和系统 | |
US7982636B2 (en) | Data compression using a nested hierachy of fixed phrase length static and dynamic dictionaries | |
US6885319B2 (en) | System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms | |
US10862507B2 (en) | Variable-sized symbol entropy-based data compression | |
US20060106870A1 (en) | Data compression using a nested hierarchy of fixed phrase length dictionaries | |
US20140104085A1 (en) | Optimizing compression engine throughput via run pre-processing | |
US11868615B2 (en) | Compression device and control method | |
JP2023553832A (ja) | コンピュータメモリにおける値類似性を利用するためのシステム、方法、及びデバイス | |
US8373584B2 (en) | Compressing and decompressing data | |
US12001237B2 (en) | Pattern-based cache block compression | |
Shaila et al. | Block encoding of color histogram for content based image retrieval applications | |
EP3908938A1 (en) | Systems, methods and devices for eliminating duplicates and value redundancy in computer memories | |
Franaszek et al. | Data compression with restricted parsings | |
Oswald et al. | Text and image compression based on data mining perspective | |
US12124420B2 (en) | Systems, methods and devices for eliminating duplicates and value redundancy in computer memories | |
JP7571026B2 (ja) | コンピュータメモリにおける重複および値冗長性を排除するためのシステム、方法、および装置 | |
US12108064B2 (en) | Memory system | |
US20230403027A1 (en) | Dictionary compressor, data compression device, and memory system | |
Sardashti et al. | Compression Algorithms | |
Yan et al. | A Power and Area Efficient Lepton Hardware Encoder with Hash-based Memory Optimization | |
JP2024046000A (ja) | 圧縮装置及び圧縮方法 | |
Loloeyan et al. | Iabc: An Approximate Cache Block Compressor for Application/Domain-Specific Data Processing | |
Vyas et al. | DCT-based scheme to accelerate multimedia search in NAND Flash memories |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20230727 |