IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ マックス‐プランク‐ゲゼルシャフト・ツア・フェルデルンク・デア・ヴィッセンシャフテン・アインゲトラーゲナー・フェラインの特許一覧

<>
  • 特許-高速ロスレス圧縮のための方法及び装置 図1
  • 特許-高速ロスレス圧縮のための方法及び装置 図2
  • 特許-高速ロスレス圧縮のための方法及び装置 図3
  • 特許-高速ロスレス圧縮のための方法及び装置 図4
  • 特許-高速ロスレス圧縮のための方法及び装置 図5
  • 特許-高速ロスレス圧縮のための方法及び装置 図6
  • 特許-高速ロスレス圧縮のための方法及び装置 図7
  • 特許-高速ロスレス圧縮のための方法及び装置 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-04
(45)【発行日】2024-09-12
(54)【発明の名称】高速ロスレス圧縮のための方法及び装置
(51)【国際特許分類】
   H03M 7/40 20060101AFI20240905BHJP
   H03M 7/30 20060101ALI20240905BHJP
   H04N 1/413 20060101ALI20240905BHJP
【FI】
H03M7/40
H03M7/30 A
H04N1/413
【請求項の数】 17
(21)【出願番号】P 2022562540
(86)(22)【出願日】2020-04-14
(65)【公表番号】
(43)【公表日】2023-05-30
(86)【国際出願番号】 EP2020060463
(87)【国際公開番号】W WO2021209119
(87)【国際公開日】2021-10-21
【審査請求日】2023-02-01
(73)【特許権者】
【識別番号】506011249
【氏名又は名称】マックス‐プランク‐ゲゼルシャフト・ツア・フェルデルンク・デア・ヴィッセンシャフテン・アインゲトラーゲナー・フェライン
(74)【代理人】
【識別番号】110001427
【氏名又は名称】弁理士法人前田特許事務所
(72)【発明者】
【氏名】マルクス ラミン
【審査官】鉢呂 健
(56)【参考文献】
【文献】国際公開第2005/079076(WO,A1)
【文献】国際公開第2007/058296(WO,A1)
【文献】中井 真樹 他,セルラ型ハードウェアの ための並列モルフォロジカルウェーブレット変換処理アルゴリズム,平成22年度 情報処理学会関西支部支部大会講演論文集,日本,情報処理学会,2010年09月22日,I-01,pp.1-2,<URL:https://ipsj.ixsq.nii.ac.jp/ej/?action=repository_action_common_download&item_id Y3 27 =70988&item_no=1&attribute_id=1&file_no=1>
(58)【調査した分野】(Int.Cl.,DB名)
H03M 3/00-9/00
H04N 1/413
(57)【特許請求の範囲】
【請求項1】
デジタルデータ値のロスレス圧縮のためにコンピュータによって実現される方法であって、前記方法は、
デジタルデータ値のシーケンスを取得することと、
号語のビット長を選択することと、
前記デジタルデータ値のシーケンスを、符号語のシーケンスにマッピングすることであって、
それぞれの符号語は、前記選択されたビット長のうちの1つを有している、
符号語のシーケンスにマッピングすることと、
前記符号語のシーケンスを、均一なビット長を有し、命令のセット又はプロセッサのハードウェアによって、単位として扱われる固定サイズのデータに対応する記憶語のシーケンスにパックすることと、
前記記憶語のシーケンスを、それぞれの符号語の前記ビット長を示す第1ビットマスクとともに出力することと、
を含み、
前記方法は、ベクトル命令を使用して実行される、方法。
【請求項2】
1つ以上のビット長は、0, 1, 2, 3, 4, 2/5, 5, 3/6, 6, 4/8, 8, 6/12, 12, 6/16, 8/16, 16のビット長又はビット長の組み合わせから選択される、
請求項のいずれか1項に記載の方法。
【請求項3】
前記符号語は、不均一なビット長を有する、
請求項1又は2に記載の方法。
【請求項4】
前記符号語の前記ビット長は、4、6、8及び16ビットのうちの少なくとも2つである、
請求項1-のいずれか1項に記載の方法。
【請求項5】
前記符号語は、2個だけの異なるビット長を有する
請求項3又は4に記載の方法。
【請求項6】
前記符号語の、前記2個の異なるビット長は、2/5ビット、3/6ビット、4/8ビット、6/12ビット、6/16ビット、又は8/16ビットの組み合わせのうちの1つである、
請求項に記載の方法。
【請求項7】
前記符号語のシーケンスをパックすることは、
まず、それぞれの符号語のl1ビットのシーケンスを前記記憶語にパックすることであって、
l1は前記符号語の最小ビット長に対応する、
l1ビットのシーケンスをパックすることと、
次に、l1より大きいビット長を有する前記符号語の残りのビットを、前記残りの記憶語にパックすることと、
を含む
請求項1-のいずれか1項に記載の方法。
【請求項8】
l1より大きいビット長を有する前記符号語の前記残りのビットをパックすることは、
まず、それぞれの残りの符号語のl2-l1ビットのシーケンスを前記残りの記憶語にパックすることであって、
前記l2は前記符号語の2番目に小さいビット長に対応する、
l2-l1ビットのシーケンスをパックすることと、
次に、l2より大きいビット長を有する前記符号語の前記残りのビットを、前記残りの記憶語にその後パックすることと、
を含む、
請求項に記載の方法。
【請求項9】
前記デジタルデータ値の絶対値のみが、符号語にマッピングされる、
請求項1-のいずれか1項に記載の方法。
【請求項10】
それぞれのデジタルデータ値について、その符号を示す情報を出力することをさらに含む、
請求項に記載の方法。
【請求項11】
前記デジタルデータ値を取得することは、
元のデジタルデータのブロックを受け取ることと、
前記デジタルデータ値を取得するために、前記元のデジタルデータのブロックを変換することと、
を含む、
請求項1-10のいずれか1項に記載の方法。
【請求項12】
前記変換は、前記ブロックにおける前記元のデータ値と近似し、残差値を出力し、
前記残差値は、前記元のデータ値とそれらの近似値との違いを表す、
請求項11に記載の方法。
【請求項13】
前記元のデジタルデータのブロックは、ウェーブレット変換を使用して変換される、
請求項11又は12に記載の方法。
【請求項14】
前記ウェーブレット変換は、モルフォロジカルウェーブレット変換である、
請求項13に記載の方法。
【請求項15】
前記ウェーブレット変換は、反復されるウェーブレット変換である、
請求項13又は14に記載の方法。
【請求項16】
前記ウェーブレット変換は、4回反復される、
請求項15に記載の方法。
【請求項17】
前記方法は、AVX2命令を使用して実現される、
請求項1-16のいずれか1項に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データの高速ロスレス圧縮のための方法及び装置に関する。特に、それは16ビット整数の高速ロスレス圧縮に関する。
【背景技術】
【0002】
多くの科学実験では、データを測定し、アナログ信号を12ビットのデジタルデータ(0から4095までの数)に変換し、それは、それから16ビットの符号なし整数として格納される。これは、ほとんどのコンピュータによってサポートされる最小のデータタイプが12ビット以上であるためである。通常、測定されたデータは、不定期の信号によってのみノイズを含むものとなり、サンプル群は強い相関があるため、サンプル群の間の差分は小さい。
【0003】
例えば、FlashCamは、地上の画像化大気チェレンコフ望遠鏡のための、デジタルの高性能カメラである。ヘスガンマ線望遠鏡(H.E.S.S.、high energy stereoscopic system)実験装置又は未来の観測所CTA(Cherenkov telescope array)のような望遠鏡のアレイは、非常に高いエネルギーのガンマ線の、天文物理学的な発生源を探るために使用される。
【0004】
FlashCam設計の機能上の主要な構成要素は、ほぼ4平方メートルの面積、並びに高性能で、完全なデジタルトリガー及び読み出しシステムを持つ光検出面である。光検出面は、それぞれが、ピークの量子効率が40パーセントを上回る12の光電子増倍管(PMT、photomultiplier tube)含む147のモジュールからなる。光電子増倍管のアナログ信号は、12ビット解像度において、1秒あたり2億5000万サンプルのサンプリングレートで、連続的にデジタル化される。デジタル化された信号のデータストリームは、96個のFPGA(field-programmable gate array)ベースのプロセッサが並列に動作することによって、リアルタイムに処理される。FPGA上に実装されているデジタルフィルタ技術を使用して、エアシャワーに起因する、微弱な、ナノ秒の長さの閃光の一致を特定すること、及び対応する画像群のシーケンスを4ナノ秒の繰り返し時間で記録することが可能である。構成次第で、そのような「ナノムービー」は、最大約16マイクロ秒の持続期間で記録され得る。画像データは、それから、イーサネットベースのフロントエンドの読み出しを介して、高性能なサーバに転送される。最適化されたスキームを使用すると、毎秒3ギガバイト以上がパケットロスなく転送され得るので、約100ナノ秒の持続期間で、1秒間に30000以上の画像シーケンスをデッドタイムなしで取得できる。
【0005】
このような実験の巨大なデータレートは、ディスクの空き領域を節約するためだけではなく、入出力(I/O)速度を上げるためにも、圧縮を必要とする。多くの場合、信号の抽出及びノイズの低減はすぐには実行され得ない。これは、完全なデータセットが、その後の較正のために必要とされるからである。較正の後であっても、元のアルゴリズムにおいてエラーが見つかったときに、そのデータを再較正及び再分析するために、できるだけ多くのデータを保持したいという要望がよくある。
【0006】
ディスク容量は安価になったが、データを読み書きする(I/O)のための時間がしばしばボトルネックになる。
【0007】
ハードディスクドライブ(HDD)は、1秒あたり≒0.1ギガバイトの入出力(I/O)速度を提供し、ソリッドステートドライブ(SSD)は、1秒あたり≒1ギガバイトの速度を提供する。これは、大規模な実験のデータストリームを処理するには全く十分ではない。解決策は、ディスクアレイを実現することであり、それは、1秒あたりのギガバイトオーダーのトータルの速度を達成し得る。しかし、これらのアレイが大きくなればなるほど、ネットワークインターフェイスは言うまでもなく、アレイの価格もより高くなる。さらに、特に、宇宙素粒子物理学の実験は、都市から離れている必要があるため、発電所、計算センター及び高速通信回線から遠く離れている必要もあり、効率的なデータ処理の問題がさらに重要になる。
【0008】
データの圧縮は、入出力(I/O)速度の向上を助け得る。それは、ディスクからの読み出し又はディスクへの書き込みのデータ量が、係数rによって減少するからである。ここで、係数rは圧縮比である。しかし、圧縮アルゴリズムを低いrに最適化するとき、圧縮速度vc及び解凍速度vdは無視されるべきではない。もしr×vが、ディスクの入出力(I/O)速度を大きく上回らないなら、圧縮することには利点がないかもしれない。
【0009】
圧縮アルゴリズムはロスレスであることが重要であるが、それは、データ取得の間においては、信号とノイズとの区別が常に可能というわけではないからである。ロッシー圧縮のアルゴリズムを使用するとデータの重要な部分を失う可能性があり危険だからである。
【0010】
ジー・ジップ(gzip)のような、たいていの汎用のロスレス圧縮アルゴリズムは、優れた圧縮比及び解凍速度を達成するが、圧縮速度は十分ではない。しかし、データ取得の間は、高いデータレートのため時間的制約が存在し得るので、速い圧縮速度は非常に有用であろう。
【0011】
例えば、入力ストリームのデータレートが1秒あたり2ギガバイトなら、圧縮比はr=0.3で、圧縮速度は1秒あたり1ギガバイトで、ディスクの書き込み速度は1秒あたり1ギガバイトである。もし圧縮速度が十分に早いなら、入力ストリームは1秒あたり0.6ギガバイトに圧縮され得て、ディスクはそれを容易に保存できるだろう。しかし、圧縮速度が1秒あたり1ギガバイトしかないため、それは可能ではない。加えて、入力ストリーム及びディスクが同じであるが、異なる圧縮アルゴリズムが使用されており、それがより悪く(r=0.4)、しかし高速(1秒あたり3ギガバイト)に圧縮するとき、入力ストリームは1秒あたり0.8ギガバイトに圧縮され、圧縮速度が入力データレートを上回っているので、それをディスクに保存することが可能である。さらに、もし圧縮(解凍)が速く行われるなら、データ分析のための時間がより多く存在する。
【発明の概要】
【0012】
したがって、本発明の目的は、デジタルデータを圧縮するためのより効率的な方法及びシステムを提供することである。
【0013】
この目的は、独立請求項による方法及び装置によって達成される。有利な実施形態は、従属請求項に定義されている。
【0014】
第1局面によれば、本発明は、デジタルデータを圧縮する方法であって、前記方法は、デジタルデータ値のシーケンスを取得することと、前記デジタルデータ値のシーケンスを、符号語のシーケンスにマッピングすることと、前記符号語のシーケンスを、均一な(uniform)ビット長を有する記憶語のシーケンスにパックすること(packing)と、前記記憶語のシーケンスを出力することとを特徴とするコンピュータにより実行される方法を含む。本発明によれば、前記方法は、それぞれの前記符号語の前記ビット長を示す情報を出力することをさらに含む。
【0015】
記憶語は、命令のセット又はプロセッサのハードウェアによって、単位として扱われる固定サイズのデータに対応し得る。1語当たりのビット数(ビット長、語のサイズ、語の幅、又は語の長さ)は、コンピュータの構造及び操作の多くの局面において反映される。プロセッサにおけるレジスタの大部分は、通常、語のサイズである。
【0016】
多くのアーキテクチャでは、単独の操作において、作業メモリに転送され得る及び作業メモリから転送され得るデータの最大のものは、1語である。最も有利には、符号語のビット長は、したがって、パックされた、符号語のシーケンス(の末尾)が、記憶語の語の境界にアラインされるように、すなわち、パックされたシーケンスが、所与の格納領域を完全に使用するように求められる。
【0017】
非常にコンパクトな情報を提供するために、それぞれの符号語のビット長を示す情報は、第1ビットマスクであり得る。前記第1ビットマスクは、それぞれの符号語について、前記符号語の前記ビット長を示す1つ以上のビットを備えてもよい。
【0018】
圧縮をデータに適応させるために、最小限の圧縮速度を犠牲にするが、前記方法は、前記デジタルデータ値のシーケンスに基づいて、符号語の1つ以上のビット長を選択することをさらに含み得て、前記デジタルデータ値のシーケンスは、符号語のシーケンスにマッピングされ、前記符号語は、それぞれが前記選択されたビット長のうちの1つを有する。前記選択は、異なる符号語のビット長又は符号語のビット長の組み合わせに起因する格納領域の要件を比較することによって行われ得る。特に、格納領域の要件に基づく前記選択は、二分探索の手順を使用して行われ得て、それによって、1つ以上の、冗長な明示的な比較を排除する。最も特に、前記1つ以上のビット長は、0ビット, 1ビット, 2ビット, 3ビット, 4ビット, 2又は5ビット, 5ビット, 3又は6ビット, 6ビット, 4又は8ビット, 8ビット, 6又は12ビット, 12ビット, 6又は16ビット, 8又は16ビット, 16ビット又はその任意のサブセットのビット長又はビット長の組み合わせから選択され得て、それは、発明者による実験によって、高い圧縮比と速い圧縮速度とを同時に提供することを示した。
【0019】
前記符号語は、不均一なビット長を有するように制限され得て、それは、所与の、デジタルデータ値のブロックについて、全ての符号語ではなく一部の符号語が、同一のビット長を有することを意味する。符号語の不均一なビット長は、4、6、8及び16ビットのうちの少なくとも2つであり得る。代替として、前記符号語は、2個だけの異なるビット長を有してもよい。特に、前記符号語の、前記2個の異なるビット長は、2/5ビット、3/6ビット、4/8ビット、6/12ビット、6/16ビット、又は8/16ビットの組み合わせのうちの1つであり得る。
【0020】
ビット長の組み合わせを使用するときに、必要とされる格納領域さらに減少させるために、前記符号語のシーケンスをパックすることは、まず、それぞれの符号語のl1ビットのシーケンスを前記記憶語にパックすることであって、l1は前記符号語の最小ビット長に対応する、l1ビットのシーケンスをパックすることと、次に、l1より大きいビット長を有する前記符号語の残りのビットを、前記残りの記憶語にパックすることと、を含み得る。l1より大きいビット長を有する前記符号語の前記残りのビットをパックすることは、まず、それぞれの残りの符号語のl2-l1ビットのシーケンスを前記残りの記憶語にパックすることであって、前記l2は前記符号語の2番目に小さいビット長に対応する、l2-l1ビットのシーケンスをパックすることと、次に、l2より大きいビット長を有する前記符号語の前記残りのビットを、前記残りの記憶語にその後パックすることと、を含み得る。
【0021】
前記デジタルデータ値の絶対値のみが符号語にマッピングされ得て、符号は別々に符号化される。特に、前記方法は、それぞれのデジタルデータ値について、その符号を、好ましくは第2ビットマスクの形式において示す情報を出力することをさらに含み得る。
【0022】
最も有利には、本発明は、いわゆる残差の変換のコンテキストにおいて適用され得て、それは、選択されたデータモデルに基づいて、データの最初のブロックを減少させる。ここで、前記デジタルデータ値を取得することは、元のデジタルデータのブロックを受け取ることと、前記デジタルデータ値を残差として取得するために、前記元のデジタルデータのブロックを変換することと、を含み得る。有利には、前記変換は、選択されたモデルに従って、前記元のデータと近似し、いわゆる残差をもたらし、それは元のデータと近似値との差として理解され得る。例えば、変換は、残差を小さくするために、元のデータブロック(別々に符号化されるべき)の最小値を、元のデータから減算することを含み得る。他の種類の残差は、予測符号化、特に、音声及び画像の符号化の分野で既知である方法によって取得され得て、その場合、信号成分は、画像又は音声モデルに従って予測される。最も特に、前記元のデジタルデータのブロックは、ウェーブレット変換を使用して変換され得る。前記ウェーブレット変換は、モルフォロジカルウェーブレット変換又は反復されるウェーブレット変換であり得る。前記ウェーブレット変換は、4回反復され得る。
【0023】
第2局面によれば、本発明は、ビット長インジケータ(群)及び符号化されたデータに基づいて、前の方法に従って、符号化されたデータをデコードするための方法も提供する。
【0024】
最も有利には、本発明の方法が比較的単純であるため、多くの並列化とともに及び/又はAVX2又は類似の専用のプロセッサ命令を使用して実現される。
【0025】
本明細書に記載されている、本発明のさまざまな実施形態は、速度と圧縮比とのトレードオフを提示する。それらは、最大の可能な圧縮を提供するわけではないが、非常に高速であるため、入出力の速度が大きく向上する。それらは、入力データが、連続する符号なしの16ビットの整数からなり、整数の差分は小さいという仮定に基づいている。さらに、もし入力値のうちのいくつかがこの制約条件に拘束されないとしても、効果的な圧縮は依然として可能である。
【図面の簡単な説明】
【0026】
図1図1は、本発明の実施形態に従って、デジタルデータを圧縮するための方法のフロー図を示す。
図2図2は、図1における、反復されるモルフォロジカルウェーブレット変換のステップ120のより詳細なフロー図を示す。
図3図3は、図4において示されている方法の可能な実現例を示す。
図4図4は、ビット範囲(組み合わせ)を求めるための方法を示す。
図5図5は、ビット範囲(組み合わせ)を求めるための代替となる方法を示す。
図6図6は、本発明の実施形態に従って圧縮されたデジタルデータのブロックのレイアウトを示す。
図7図7は、16個の値の、2/5ビットの符号化の例を示す。符号化されたストリームにおいて、最初にビットマスクが送られて(2バイト)、その後に10個の2ビット値(20ビット→3バイト)、次に6個の5ビット値(30ビット→4バイト)が続く。
図8図8は、本発明の方法と既知の圧縮方法の比較の結果を示す。
【発明を実施するための形態】
【0027】
図1は、本発明のさらなる実施形態による、デジタルデータを圧縮するための方法100のフロー図を示す。
【0028】
符号なしの16ビットの整数のブロック111が、ステップ110において読み出される。ステップ120において、1つ以上の最低値121及び1つ以上の残差122を得るために、図2に関連してより詳細に説明される、1つ以上の、いわゆるモルフォロジカルウェーブレット変換が、ブロック111に適用される。残差122に基づいて、残差の符号化のために使用される1つ以上のビット範囲が、ステップ130で選択される。インジケータ、例えばビットマスク131が出力されるが、それは選択されているビット範囲(群)を示す。ステップ140では、残差は、それから、符号化された残差141を得るために、1つ以上の選択されたビット範囲(群)に基づいて符号化される。ステップ150において、同じく符号化されていたかもしれない最低値121(不図示)、符号化された残差141及びビットマスク(群)131は、それから、組み合わせられ、ステップ106において出力される。
【0029】
その後、もし圧縮する値が256より多い個数残っているなら、本方法は、冒頭のステップ110に戻り(不図示)、そうでない場合には、残りの値を出力にコピーしてステップ110に戻る。
【0030】
このアルゴリズムの並列化は可能である。それは、より大きいブロックは独立して処理され得るからである。
【0031】
図2は、図1における、反復されるモルフォロジカルウェーブレット変換ステップ120のより詳細なフロー図を示す。
【0032】
数理形態学は、幾何学的構造の分析のための理論である。基本的な概念は、構造Xを構造要素Bによってトラバース(traverse)して、所望の演算に従って、それぞれのポイントを修正することである。
【0033】
【数1】
したがって、膨張は、それぞれがBによって定義されている近傍によって拡張されているXにおける全ての点の和集合であり、侵食は、その点に変換されたBが完全にXにおいて存在する、Xにおける全ての点の集合である。膨張は、物体を膨張させ、内部の小さい穴を塞ぎ、物体の境界において張り出し、一方で、侵食は、物体を侵食させ、外部の小さい島部を除去し、物体の境界において突出部を引き込む。
【0034】
この概念は、ビットマスクから、グレースケール画像及び他の信号へ拡張され得る。fを入力信号とし、bを台Bを有する構造関数とする。すると膨張及び侵食は、次のように定義される。
【0035】
【数2】
【0036】
圧縮されるべき、1次元の、16ビットの符号なしの整数入力ストリームの場合、構造要素は、わずか2ピクセル幅になるように選択される。もし侵食がそのときローパスフィルタとして使用され、侵食された信号と元の信号との差分がハイパスフィルタとして使用されるなら、モルフォロジカルウェーブレット変換は以下のように定義され得る。
【数3】
【0037】
逆変換は以下のようになる。
【数4】
【0038】
最低値は、符号なし短整数型の範囲(0, . . . , 65535)に留まることが保証されているが、差分はその範囲を超えてもよく、それらは[-65535, . . . , 65535]の区間にある。差分の符号を抽出及び格納することは、そのようなオーバーフローを防ぐ。加えて、入力データはノイズが多いので、差分の符号はほとんどランダムであり、よって圧縮比に対して悪影響はない。
【0039】
通常はローパスフィルタとして平均値を使用する他のウェーブレットとは対照的に、モルフォロジカルウェーブレットは、スパイクを、サブサンプリングされた信号にマージしないので、それによって次の分解レベルにおいて差分がより小さくなるため、圧縮比が向上する。
【0040】
例えば、入力信号vが、ノイズの多いベースラインに加えて不定期にスパイクがあると仮定すると、M(v)はvのペアワイズ平均値、m(v)はvのペアワイズ最小値、d(v)はvのペアワイズ絶対差である。
【数5】
【0041】
平均値を使用するとき、符号化する残差は、1,2,96,3,2,50,26,14であるが、最小値を使用するとき、符号化する残差は、1,2,96,3,1,3,0,1である。この例を見れば、平均値はスパイクをより低いウェーブレットレベルに伝えるので、その結果全体的な残差が大きくなるのに対して、最小値はスパイク自体を速く取り除くので、その結果残差が小さくなることが分かる。このウェーブレット変換の最悪のケースは、不定期に下降するスパイクを伴う高いベースラインがある場合であり、その場合、ペアワイズサンプルの最大値が、ウェーブレット分解において、より優れたローパスフィルタであることになる。しかし、ほとんどのデータセットにおいて、ベースラインは信号を下回っており、最大値又は最小値のどちらが使用されたかを記録することは、余分なヘッダースペースを消費するだろう。
【0042】
これらの計算は、16の差分又は16の最小値の計算について1つのサイクルのみを使用して、AVX2の命令で効率的に実行され得る。しかし、レジスタ内部でデータの再配列及び準備には、さらに多くの時間が費やされる。
【0043】
図3は、32個の符号なしの短整数がメモリから読み出され、先述のモルフォロジカルウェーブレットを使用して変換される例示的実現例を示す。
【0044】
圧縮アルゴリズムにおいて、256個の値のブロックは、128個の最低値及び128個の差分に変換される。差分は通常は小さいが、64個の最低値及び64個の差分を得るために、最低値は再度変換される必要がある。この再帰的プロセスは、1つのみの最低値及び255個の差分が残るまで続くが、ここでは4番目のレベルにおいて停止し、240個の差分及び16個の最低値が得られる。さらなる分解をしても、AVX2によって提供される並列処理を、完全に活用できないであろう。これは、4番目のレベルにおける最後の16個の最低値は、半分埋められた、2つのAVX2レジスタに分けられなければならないからである。
【0045】
図4は、図1のステップ130において使用され得る、ビットマスクの選択のための方法のフロー図を示す。
【0046】
ウェーブレット変換によって生成される残差は、全て[0, . . . , 65535]の区間にあるが、それは符号が別々に格納されるためである。通常、それらは非常に小さいので、それらは、元の数で使用されていた16ビットよりはるかに少ないビット数を使用して格納され得る。しかし、16個の残差のブロックに対してレンジ符号(range coding)だけを使用すると(第1実施形態におけるように)、大きな値がたった1つ入力されただけでも、ブロックの他の15個の値は、より多くのビット数で符号化せざるを得なくなる。
【0047】
そのような外れ値を処理するために、異なる範囲を識別するためにビットマスクを使用し、それから、必要なビット数で値を格納することが提案される。例えば、2つの範囲が4ビット及び16ビットであり、11個の数が4ビットであり、5個の数が16ビットであるなら、マスクについて16ビットの他に、値について11×4ビット+5×16ビットのオーバーヘッドが存在する。さらなる4ビットが失われるが、4ビット値の44ビットは、バイト境界に並んでいないからである。これによって、元の256ビットと比較して、合計では16+44+80+4=144ビットになる。もし、格納する11×4ビット及び5×12ビットが存在するなら、バイトのアラインメントにより2×4ビットは失われる。それらをメモリに格納する前に、2ビットストリームを連結させることは可能だが、AVX2ではそのようなビット処理は高価であり、複雑である。
【0048】
シングルビットマスクについての問題は、それは2つの範囲についてしか提供せず、選択すべき範囲が明確でないことである。4ビット及び16ビットは、いくつかのデータに対しては正確な値であり得るが、他のデータについては、2ビット及び8ビットがより正確であり得る。異なるノイズレベル及び外れ値に対して柔軟であるために、4,6,8及び16ビットの範囲が選択される。必要とされる範囲をマーキングするには、4,6,8及び16ビットの4つの可能性のために、数ごとに2ビットのオーバーヘッドが必要になる。
【0049】
全ての16の数の下位4ビット(ビット0-3)は、常に格納される。それから、4ビットの範囲に収まらない全ての数について、次の2ビット(ビット4及び5)が格納される。それから、6ビットの範囲に収まらない全ての数について、次の2ビット(ビット6及び7)が格納される。最後に、8ビットの範囲に収まらない全ての数について、最後の8ビット(ビット8-15)が格納される。
【0050】
よって、16の符号なし短整数型のブロックvについて、3つのビットマスクが以下のように生成される。
【数6】
【0051】
ビットマスクがすでに一部の範囲を除外しているという事実を活用することによって、圧縮比の向上が少しながら達成され得る。例えば、もしビットマスクが、数は、格納されるために6ビットを必要とすることを示すなら、0, . . . , 15の数であり得ない。よって、6ビットの数のための範囲は、0, . . . , 15から0, . . . , 79にシフトされ得る。同じことが8ビットの範囲にも当てはまり、それは、0, . . . , 255から80, . . . , 335にシフトされ得る。これらの最適化はアルゴリズムにおいて行われるが、次の例を明瞭にするために、ここでは行われない。
【0052】
この3つのマスクがあると、アルゴリズムにとっては便利だが、そのままの状態で格納することは、それらが冗長になるので適切ではないだろう。それは、それぞれの数は4つの範囲のうちの1つだけに存在するので、数を格納するには2ビットで十分であることから容易に理解できる。次の変換は、3つのマスクを2つのマスクに組み合わせる。
【数7】
【0053】
逆変換は以下のようになる。
【数8】
【0054】
16の符号なし短整数型のブロックvの以下の例について、BiはViを格納するのに必要とされるビット数であり、b4,b6及びb8は、範囲(4,6,8,16)のうちのいずれが数を格納するために使用される必要があるかを定義するビットマスクであり、x及びyは変換されたビットマスクである。
v=(0,20,2,1,19023,550,128,127,255,256,60,70,14,102,22,62)
B=(0,5,2,1,15,10,8,7,8,9,6,7,4,7,5,6)
b4=(0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1)
b6=(0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0)
b8=(0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0)
x=(0,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1)
y=(0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0)
このビットマスクエンコーディングの出力は以下である。
【0055】
・ビットマスクx及びy
・vにおける全ての値のビット0-3
・b4i=1である全てのviのビット4-5
・b6i=1である全てのviのビット6-7
・b8i=1である全てのviのビット8-15
このアルゴリズムは、外れ値及びノイズの多いデータに対して堅牢であり、典型的なデータに対して優れた圧縮比及びコアあたり1.8GB/sの速度を達成する。しかし、異なるデータセットでのいくつかのテストの後、圧縮比は常に期待通りではないことが判明した。
【0056】
圧縮比をさらに向上させるために、本発明のさらなる実施形態は、範囲(4,6,8及び16ビット)をハードコードせず、ダイナミックレンジを代わりに使用することを提案する。
【0057】
図5は、図1のステップ130において使用され得る範囲/ビットマスクの選択についての代替の方法のフロー図を示す。
【0058】
この実施形態によれば、最終的な符号化は、前述の方法において使用されているような、1つの、固定された2ビットのマスクを使用する代わりに、16の異なる範囲及び範囲の組み合わせから、最良の圧縮比をもたらすものを選択する。一方では、16の符号化のうちのどの符号化が最適であったかを示すビットマスクは、追加の4つのヘッダービットを消費するが、他方では、前述の方法の4-6-8-16ビットの符号化のために必要である32ビットのオーバーヘッドはなくなる。しかし、ここで示されるように、16の符号化のうちのいくつかはビットマスクも使用するが、これらのビットマスクは、2つの範囲を区別するだけなので、値につき1ビットしか消費せず、16の値のブロック全体では、わずか16ビットのオーバーヘッドしか失われない。
【0059】
より具体的には、16の符号なしの16ビットの値(すなわち、0から65535までの16個の数)は、メモリに、時間的に効率よく格納される必要がある。この値は残差(ウェーブレット分解の差分限界(difference limits))であるので、それらは、たいていは小さく、ノイズが多いので、それらをさらに圧縮する価値はない。それらは小さいので、それぞれの値について16ビットを使用する必要はなく、より少ないビット数でそれらを圧縮することを試みてもよい。単に16個の数のうち最大の数を見つけて、その数のビット範囲で、全ての値を格納すればよい。しかし、もし数が外れ値であったなら、ほとんどの数をより小さいビット範囲で格納し、外れ値をより大きいビット範囲で分けて格納したほうが良いだろう。
【0060】
最適なビット範囲又はビット範囲の組み合わせを探すとき、以下の局面が考慮されるべきである。
【0061】
1. もしビット範囲が格納されているなら、ヘッダーのみが、選択されているビット範囲を含む必要があり、全ての数はそのビット範囲で格納される。例:1 0 3 2 1 3。この場合、2ビットで十分である。しかし、もし数のうちの多くがより少ないビット数で格納され得るなら、数をビット範囲の組み合わせで格納することが便利かもしれない。例えば、1 0 3 200 1 3の場合、全ての数は2ビットで格納され、200は8ビットで格納される。ビット範囲の組み合わせの欠点は、どこに(この例においては)2ビットの数及び8ビットの数が格納されているかを示すビットマスクが必要なことである。この時のマスクは000100のようになり、16個の数は16ビット長である。「ビット範囲」と「ビットマスク+ビット範囲の組み合わせ」との間の最良なトレードオフが発見されなければならない。
【0062】
2. ビット範囲又はビット範囲の組み合わせは、メモリの空間が無駄にならないように、格納される数とできるだけ一致するべきである。
【0063】
3. 最良のビット範囲の組み合わせについての検索は高速でなければならないため、あまり多くのビット範囲の組み合わせはテストされるべきではない。
【0064】
4. ビット範囲の組み合わせは、保存が速くなるように選択されるべきである。例えば、7ビット及び15ビットをビット範囲の組み合わせだとすると(すなわち16個の数のそれぞれが、7ビット又は15ビットのどちらかで符号化される)、多くのビットは移動されなければならず、ワード(バイト)境界が考慮されなければならない。例えば、8ビット及び16ビットのビット範囲の組み合わせは、はるかに高速である。
【0065】
本発明の実施形態において、以下の16ビットの範囲及びビット範囲の組み合わせが提案される:0, 1, 2, 3, 4, 2/5, 5, 3/6, 6, 4/8, 8, 6/12, 12, 6/16, 8/16, 16。16個の数のそれぞれのブロックについて、2=16のビット範囲(組み合わせ)のどれが使用されたかを示すために、4ビットが使用されなければならない。
【0066】
16個の符号なし短整数型のブロックについては、最初に、それらのうちのいくつが、符号化のために何ビット必要かをチェックされる。必要とされるビット範囲の分布に基づいて、それらの全てはnビットの値として格納されるか、又はビットマスクのエンコーディングが使用され、それらのいくつかはnビットの値として格納され、残りはmビットの値として格納されるかが決定される。
【0067】
0-ビット範囲:全ての値は0、何も書き込まない。
【0068】
1-ビット範囲:それぞれの値は1ビットを使用して符号化され得て、16×1ビットが格納される。
【0069】
2-ビット範囲:それぞれの値は2ビットを使用して符号化され得て、16×2ビットが格納される。
【0070】
3-ビット範囲:それぞれの値は3ビットを使用して符号化され得て、16×3ビットが格納される。
【0071】
4-ビット範囲:それぞれの値は4ビットを使用して符号化され得て、16×4ビットが格納される。
【0072】
2/5ビットマスク:5ビットを超える値はなく、全ての値を5ビットで格納することと比べて、ビットマスク符号化が割に合うのに十分な2ビット値が存在する。ビットマスク、全ての値のうちの最下の2ビット及び全ての5ビット値のうちの上位3ビットを格納する。
【0073】
5-ビット範囲:それぞれの値は5ビットを使用して符号化され得て、16×5ビットが格納される。
【0074】
3/6ビットマスク:6ビットを超える値はなく、全ての値を6ビットで格納することと比べて、ビットマスク符号化が割に合うのに十分な3ビット値が存在する。ビットマスク、全ての値のうちの最下の3ビット及び全ての6ビット値のうちの上位3ビットを格納する。
【0075】
6-ビット範囲:それぞれの値は6ビットを使用して符号化され得て、16×6ビットが格納される。
【0076】
4/8ビットマスク:8ビットを超える値はなく、全ての値を8ビットで格納することと比べて、ビットマスク符号化が割に合うのに十分な4ビットの値が存在する。ビットマスク、全ての値のうちの最下の4ビット及び全ての8ビット値のうちの上位4ビットを格納する。
【0077】
8-ビット範囲:それぞれの値は8ビットを使用して符号化され得て、16×8ビットが格納される。
【0078】
6/12ビットマスク:12ビットを超える値はなく、全ての値を12ビットで格納することと比べて、ビットマスク符号化が割に合うのに十分な6ビットの値が存在する。ビットマスク、全ての値のうちの最下の6ビット及び全ての12ビット値のうちの上位6ビットを格納する。
【0079】
12-ビット範囲:それぞれの値は12ビットを使用して符号化され得て、16×12ビットが格納される。
【0080】
6/16ビットマスク:全ての値を16ビットで格納することと比べて、ビットマスク符号化が割に合うのに十分な6ビットの値が存在し、ビットマスク、全ての値のうちの最下の6ビット及び全ての16ビットの値のうちの上位10ビットを格納する。
【0081】
8/16ビットマスク:全ての値を16ビットで格納することと比べて、ビットマスク符号化が割に合うのに十分な8ビットの値が存在し、ビットマスク、全ての値のうちの最下の8ビット及び全ての16ビットの値のうちの上位8ビットを格納する。
【0082】
16-ビット範囲:16×16ビットが格納される。
【0083】
16個の符号なし短整数型の、それぞれのブロックについて、使用するビットの数が最小になる符号化が選択される。
【0084】
図6は、適切なビット範囲(組み合わせ)を求めるための、二分探索の方法(擬似コードで)を示す。図6の擬似コードにおける、「space」関数は、特定の符号化スキームを使用して、例えば6/16の組み合わせを使用して空間要件(space requirement)を測定する。
【0085】
類似のスキームは、8ビット、32ビット又は64ビットのデータについても構築され得る。例えば、8ビットのデータは、以下のビット範囲を使用して符号化され得る。すなわち0, 1, 2, 4, 2/6, 4/6, 4/8 及び 8のビット範囲である。
【0086】
16の異なる符号化が存在するので、どの符号化が選択されたかを伝えるためには、4つのヘッダービットが必要になる。これらの16より多い可能性から選択することができれば、数をより適切に符号化するのに確実に役立つが、4つより多いヘッダービットが必要となり、さらに、符号化が多くなると、より多くの範囲テストを必要とし、それはアルゴリズムの速度を低下させてしまう。上の組み合わせは、圧縮比とスピードとの間の妥協点である。それは、それらは多くのノイズレベル、信号強度をカバーするが、それでも必要なチェックが多すぎるわけではないからである。最も重要なことは、それらがAVX2の命令でプログラムされるのに十分に単純であることである。これは、より複雑なアルゴリズム、特にハフマンツリー及びビットストリームを使用する場合には、通常は当てはまらない。
【0087】
16×16の値の、圧縮されたブロックの配置は以下のとおりである。
【0088】
【表1】
【0089】
16個の4ビットの範囲指定子は、64ビットの数として連続的に格納されるので、もしデータが圧縮不可能であったなら、1つのif命令だけを使用してチェックすることが可能である。上の符号化のリストに見られるように、もし16の値のブロックが圧縮可能ではなく、それらをコピーすることによってのみ格納され得るなら、その4ビットのヘッダーは15であり、それは2進法では1111である。もし全ての16のブロックがそのように格納されるなら、64ビットの数は全てのビットセットを有し、それはif(x==-1)でチェックされ得て、ここで、xは16個の4ビットの範囲指定子を含む64ビット長の整数である。
【0090】
非圧縮データは通常、全てのヘッダービットが1にセットされている。しかし、もしメモリにおいて16ビットの境界に正確に並んでいないなら、圧縮可能な16ビットのデータも、全てのヘッダービットが1にセットされており、これは、圧縮されるべきデータを持つファイルが奇数個のヘッダーバイトを有する場合に発生する。ここに、16ビットの符号なし整数の圧縮についての、正確なアラインメントの重要性を示す2つの例を示す。
【0091】
【表2】
【0092】
例1において、データは16ビットにアラインされているので、アルゴリズムは、16ビットの値ではなく、少なくとも8ビットの値として数を格納することができるだろう。次の例では、数は同一だがヘッダーバイトが追加されており、それは数がアラインされていない状態を生じさせる。
【0093】
【表3】
【0094】
例2において、データはもはや16ビットにアラインされないので、より低いバイトが上位のバイトになり、データは、その範囲エンコーダについては圧縮不可能になる。
【0095】
そのような場合には、全ての64個のヘッダービットは1にセットされ、データがアラインされていない(又は実際には圧縮可能ではない)ことを示す。256個の値のブロックは、再読み出しされず、その代わりに、圧縮されず単純に書き込まれる。しかし、その後、入力ストリームからの次のバイトは、単純に(出力ストリームに)コピーされるので、入力ストリームは16ビットにアラインされる。もしデータが圧縮不可能なら、これは何も改善させないが、悪化させることもない。
【0096】
図7は、16個の値の、2/5ビットの符号化の例を示す。符号化されたストリームにおいて、最初にビットマスクが送られて(2バイト)、その後に10個の2ビット値(20ビット→3バイト)、次に6個の5ビット値(30ビット→4バイト)が続く。
【0097】
オプションとして、長いシーケンスの定数又は圧縮不可能なデータを捉えるために、最初の読み出しステップ120の間にヒューリスティックチェック(不図示)が実行されてもよい。
【0098】
[ベンチマーク]
図8は、本発明の方法を、既知の圧縮方法と比較した結果を示す。ここで、図1に関連して記載されている方法(以下でfc16として参照される)が、以下の表において、最先端の圧縮プログラムと比較される。
【0099】
【表4】
【0100】
ライブラリデンシティ(libraries density)及びTurboPForが提供するさまざまな圧縮アルゴリズムに比べて、この表において言及されているものが、このベンチマークのデータセットに対しては最高のパフォーマンスを発揮した。
【0101】
いくらかのプログラムは、圧縮速度と引き換えに、圧縮比を制御できる。通常は、これは、コマンドラインスイッチの-1(最高速度)及び-9(最大圧縮)にわたって行われる。このベンチマークは、512ギガバイトのRAM、コアあたり32キロバイトのLIキャッシュ、コアあたり256キロバイトのL2キャッシュ及び1秒あたり≒1ギガバイトのディスクの入出力(I/O)速度を持つ、20コアのIntel(登録商標)Xeon(登録商標)CPU E5-2698 v4@2.20GHz上で実行された。このベンチマークにおける全てのプログラムは、リソースを消費するいかなる他のプログラムもマシン上では実行されていない状態で、単一スレッドで実行された。圧縮速度(解凍速度)は、ディスクの入出力(I/O)速度に近いか、又はそれを上回り得るので、全てのベンチマークは、各作成者によって提供されたプログラムを使用してインメモリで行われるので、ディスクの入出力(I/O)はアルゴリズムの障害にはならない。gzip及びlzmaについては、インメモリベンチマークモードが存在しないが、それらのボトルネックは入出力(I/O)ではないので、それらは単純に、ディスクからテストファイルを読み出し、圧縮された出力を/dev/nullに書き込むだけであり、これは出力が破棄され、ディスクに何かを書き込むのに時間が費やされることはないことを意味する。アルゴリズム1-3は、それらがあらゆる面でアルゴリズム4(fc16)に劣っているため、このベンチマークの一部ではない。多くの他の圧縮プログラムが存在するが、上のリストは、最良の圧縮比から最速の圧縮までの全てをカバーする。lzma,gzip,zstd,snappy及びdensityと比較するのは不公平であるが、それは、これらが汎用の圧縮プログラムだからであり、TurboPFor及びfc16と同様に、整数だけでなく任意の種類のデータを圧縮し得ることを意味する。しかし、多くの科学者は、それらをデータ上で使用するので、もしTurboPFor又はfc16を使用するなら、圧縮比及び速度がどのように変化するかを知ることは、彼らにとって興味深いかもしれない。圧縮スイートのTurboPFor及びdensityは、いつくかの圧縮プログラムを提供するので、最良の3つがこのベンチマークに含まれる。
【0102】
このテストデータのセットは、以下のファイルを備える(ノイズの少ないレベルからノイズの多いレベルに順序付けられる)。hawc.dat(HAWC data),gerda.dat(GERDA data),ctamc.dat(CTA prod3 Monte Carlo simulations),fc_300MHz.dat(300メガヘルツ/ピクセルのフォトンレートで人工的に起動されたデータであるFlashCam),fc_1200MHz.dat(1200メガヘルツ/ピクセルのフォトンレートで人工的に起動されたデータであるFlashCam),chec.dat(16ビットにアラインされていないCHEC-Sデータ)及びchec_aligned.dat(check.data と同じだが、ファイルの最初のバイトが削除されているので、データは16ビットにアラインされている)。
【0103】
[結果]
図8において見られるように、fc16は、最も強力な圧縮アルゴリズム(lzma)とほぼ同じくらい良好に圧縮するが、速度は3桁早い。圧縮速度において最も近い対抗製品(vbzenc16)は、圧縮比がはるかに悪く、解凍が著しく遅い。また、データが圧縮するのにそれほど単純でないとき(CHEC及びctamc)、その圧縮速度はfc16の圧縮速度の半分に低下する。解凍速度及び圧縮比において最も近い対抗製品(p4nzenc16及びp4nzenc128v16)は、fc16より圧縮速度が80%遅い。それらは、fc16よりわずかに優れた圧縮比を有するが、ほとんど全ての場合において、解凍するのが遅い。さらにそれらは、アラインされていないデータを扱うことができない。
【0104】
他の高速整数圧縮アルゴリズムであるp4nzenc16及びp4nzenc128v16と比較するとき、本発明の方法は、ほとんどいつも、最も早い圧縮プログラム及び解凍プログラムである。汎用の圧縮プログラムであるsnappy,chameleon,cheetah,lion及びlz4は、それらの圧縮速度が遅く、圧縮比が悪いので、fc16に対して負ける。他の汎用圧縮プログラムであるlzma,gzip及びzstdは、圧縮比においてfc16に匹敵するが、桁違いに遅い。
【0105】
図8における2つの上のプロットは、全てのデータセットについての、圧縮(解凍)速度及び圧縮比の平均比を示す。これらの数は重要であるが、それは、これらがユーザに、圧縮されていないデータがどれくらい処理され得るか(「書き込まれ圧縮される」又は「読み出され解凍される」)を示すからである。下部のプロットは、圧縮速度、解凍速度及び圧縮比の組み合わせである。それは、圧縮速度及び解凍速度の平均値を圧縮比で割ったものを示し、それは圧縮されていないデータが処理され得る平均速度である。
【0106】
p4nzenc16及びp4nzenc128v16は、同一の圧縮比及び圧縮速度を有するので、統合されている。gzip-1,gzip-9及びzstd-9についても同じことがなされている。
【0107】
[並列処理]
独立して処理されるブロックは、わずか512バイトのサイズなので、本発明の方法は、非常に簡単に並列処理され得る。そのような小さいブロックサイズはまた、ハードウェアにおける実現を単純化する。
【0108】
この並列化可能性は、fc16の実現にも反映される。複数のスレッドを使用するので、入力ストリームは、典型的な約1MBのブロックに分割され、それから、それぞれのブロックは別のスレッドにおいて処理される。スレッドあたり、2-3GB/秒の圧縮速度及び2-3GB/秒の解凍速度が、通常のデスクトップPCで達成される。速度はスレッドの数に応じて向上するが、直線的ではない。インメモリテストにおいて、Xeonプロセッサ上の複数のスレッドは、10GB/秒を超える圧縮速度を達成した。
【0109】
このアルゴリズムも、ベクトル命令を持つCPU群上で高速で実行するように、特別に設計された。AVX2での実現のために、16個の16ビットの数のブロックサイズが使用されたが、これは、AVX2レジスタが256ビットの大きさであるからである。
【0110】
この最も小さいレベルでの並列化は、1つの算術演算を、全ての16個の数に同時に適用することによって機能する。例えば、AVX2レジスタにおいて、そこから1つの数nを減算したい16個の数x[0],x[1], . . . , x[15]がある場合、AVX2は原則として、y=vector_subtract(x,n)のように動作し、1つのプロセッサのクロックサイクルしかかからない。シリアルプログラミングを使用すると、(i=0;i<16;i++){y[i]=x[i]-n}のようにループを使用しなければならず、より多くのクロックサイクルがかかる。本発明のfc16アルゴリズムは、加算、減算、比較等のような単純な演算からしかほとんど構成されないように特別に単純に保たれ、それはベクトル命令として存在し、通常は1つのクロックサイクルしか必要としない。
【0111】
AVX2で並列化されるべきアルゴリズムを設計するとき、アルゴリズムは非常に制限されるが、それは、自由に使用できる算術演算が少なくなり、(さらに重要なことに)レジスタにおける全ての数が等しく扱われるからである。
【0112】
結論として、本発明の方法が並列化に適している理由は下記のとおりである。
【0113】
・アルゴリズムそのもの(及びそれに対応するハードコードされた辞書)が単純な算術演算しか生まず、それらはレジスタ内のどの数についても同じである。
【0114】
・256個の数の小さいブロックサイズ(-->512バイト)であり、これらは独立して処理される。
【0115】
[エネルギー効率]
このアルゴリズムは、最初にハフマンツリー又は類似のものを構築しなければならない従来のアルゴリズムよりエネルギー効率がより良い。
【0116】
[応用例]
このアルゴリズムは、画像圧縮にも適しているので、多くの可能な応用例が存在する。例えば、自走者のテスト走行の間、システムがなぜ、どのように反応したかが後で理解され得るように、全てのセンサーデータ(上のベンチマークでのように、90パーセント以上が12ビットのRGB(赤緑青)の生のストリーム)が記録される。1日1台当たり、50-100テラバイトのデータが、そのようなテスト走行では格納される。全てのデータはロスレスで記録されるので、データ記録が制限する要因となる。このような記録ボックスを自動車メーカーに販売することを専門とする会社が存在する。本発明の方法によって、データ取得速度又はデータ容量は2倍になり得る。
【0117】
さらなる例として、プロの写真家が、一眼レフカメラで、例えばRAWフォーマットで50メガピクセル及び8フレームレートで連続の写真を撮るとき、SDカードは書き込みに追従できず、写真はキャッシュに格納されなければならない。これが、最大連続撮影速度又は写真が連続撮影される時間が、制限される理由である。また、SDカードははすぐにいっぱいになる。カメラにおいて本発明の方法を使用すると(FPGA又はチップにおいて)、2倍以上の連続撮影を行うことができ、SDカードに2倍の画像を格納することができる。
【0118】
さらなる例において、大きい動画がビデオエディターにおいて編集されるとき、ビデオは、そのつどハードディスクに書き込まれ、それから再び読み出されなければならないことがしばしばある。これは、圧縮に時間がかかりすぎるので、RAWフォーマットにおいて行われる。本発明の方法を使用すると、入出力を高速化できるであろう。30Hz及び8ビットの色深度の4k映画の1秒のデータ量は、わずか700MBだが、ほどなく60Hz及び12ビットの色深度の8k映画が登場し、それはもうすでに8GB/秒になる。ビデオエディターのためのプラグインとしてfc16を使用すると、顧客はより早い入出力を獲得できる。
【0119】
最後に、本発明の方法は、グラフィックカードからモニタへ表示ストリームを圧縮するためにも使用され得る。
【0120】
[結論]
圧縮比は、アルゴリズムをステートフルにすることによって向上され得る。可能な符号化のより大きなセットが定義され得て、そこから、サブセットが、256個の値のブロックの符号化のために選択され得る。それぞれの符号化が使用される頻度に応じて、異なるサブセットがより大きいセットから選択され得る。例えば、もしデータのノイズが非常に多いなら、上のリストの最初の8つの符号化を含める必要はないが、代わりに他の符号化に取り替えられてもよく、それは10ビット範囲又は10-14ビットマスク符号化のようなより大きな数に適している。ヘッダーサイズを4ビットから2ビット又は3ビットに減らし、その種類のデータに役立つ符号化のみを含めることも可能である。
図1
図2
図3
図4
図5
図6
図7
図8