An Experimental Study of Bitmap Compression vs. Inverted List Compression

Takeshi Yamamuro
Takeshi YamamuroR&D Engineer
1	
  
担当:  Takeshi  Yamamuro
SIGMOD’17	
  Session	
  20:	
  Op4miza4on	
  and	
  performance	
  
2	
  
研究概要
•  同様の問題を解いているが、異なる分野で培われてきた
ビットマップ圧縮(DB)と整数圧縮(IR)に関して、本論文で
は以下に回答する:	
  
※以降、特に明示しなければ論文から引用	
  
Inverted	
  List	
  (Integer)	
  Compression	
  	
  
Bitmap	
  Compression	
  
-­‐	
  Which	
  one	
  is	
  be,er	
  between	
  bitmap	
  compression	
  
and	
  inverted	
  list	
  compression?	
  
3	
  
研究概要
•  ビットマップ圧縮9種と整数圧縮12種に対して、様々な分布
の人工データと8種の実データを用いて網羅的に評価	
  
•  上記の結果から、多くの知見や応用・研究における圧縮手
法の選択の指針を提示する	
  
※以降、特に明示しなければ論文から引用	
  
Inverted	
  List	
  (Integer)	
  Compression	
  	
  
Bitmap	
  Compression	
  
4	
  
実験結果から得られた知見
•  Intersec4on(A∩B)の速度が重要ならビットマップ圧縮、そ
れ以外の指標(圧縮率、復元速度、Union(A∪B))が重要
であれば整数圧縮を選択	
  
	
  
•  	
  ビットマップ圧縮はRLEベースの手法ではないRoaringがど
の指標においても性能が良い、RLEベースの他の手法
(WAHやEWAHなど)は検討しなくて良い	
  
•  他の手法は最悪ケースで無圧縮よりサイズ大	
  	
  
•  整数圧縮はベクトル命令に対応しているSIMDPforDeltaか
SIMDBP128が性能が良い、特にSIMDPforDeltaは圧縮率、
SIMDBP128は復元速度が良い	
  	
  
•  	
  SIMDPforDelta/SIMDBP128は実装が複雑であるため、20
行以下で記述できるVBも選択としては有り	
  
•  条件によってVBがPForDeltaに比べ性能が良くなるケースも存在	
  
Study  Details
5	
  
6	
  
共通する解いている問題
•  昇順に並び替えられた整数を少ないbitで表現しつ
つ、高速な問い合わせ(e.g.,	
  A∩B)を実現	
  
ビットマップ圧縮	
  
-­‐	
  	
  ビットが立っている位置は昇順の整数:	
  011001	
  -­‐>	
  1,2,5	
  
-­‐	
  	
  適用例:	
  PostgreSQL/OracleなどのRDBMSやApache	
  Spark/Hiveなど	
  
整数圧縮	
  
-­‐	
  	
  転置インデックスのドキュメントID、昇順に並び替えて保存	
  
-­‐  主な適用例:	
  Apache	
  Lucene/Solr、Elas4csearchなど(近年では	
  
	
  	
  	
  	
  DBMS内部の要素技術としてもよく利用される)	
  
	
  	
  	
  	
  	
  	
  	
  A	
  =	
  1,	
  4,	
  8,	
  10,	
  19,	
  …	
  
	
  	
  	
  	
  	
  	
  	
  B	
  =	
  4,	
  14,	
  18,	
  19,	
  22,	
  …	
  
A	
  ∩ B	
  =	
  4,	
  19,	
  …	
  
特定の問い合わせを高速に処理で
きる効率的なコンピュータ上の表現
(符号化)方法を模索	
  
7	
  
Apache  Sparkにおける適用例
•  Spark	
  SQLでcacheしたデータはカラム構造(型毎の配列)と
してメモリ上に配置され、整数配列はVBで表現	
  
•  SparkのSchedulerが各Task(実行最小単位)の出力サイズ
を追跡、出力が無いTaskをRoaring	
  Bitmapsで管理	
  
•  h`p://roaringbitmap.org	
  
•  Lemire先生が書いた	
  
	
  	
  	
  	
  RoaringのOSS実装	
  
・・・	
  
8	
  
圧縮アルゴリズム紹介(抜粋)
•  ビットマップ圧縮	
  
•  RLEベースの手法:	
  WAH,	
  EWAH,	
  PLWAH,	
  CONCISE,	
  
VALWAH,	
  SBH,	
  BBC	
  
•  Hybridな手法:	
  Roaring	
  
•  整数圧縮	
  
•  	
  VB,	
  PforDelta,	
  [New|Opt|SIMD]PforDelta,	
  Simple16,	
  
GroupVB,	
  Simple8b,	
  PEF,	
  SIMDBP128	
  
9	
  
ビットマップ圧縮:  WAH
•  RLEベースの古典的なビットマップ圧縮手法	
  
•  ビット列を31bitずつのgroupsに分割	
  
•  グループを2種類に分類:	
  fill	
  groups	
  or	
  literal	
  groups	
  
	
  	
  fill	
  groups:	
  ビットが全て同じグループ(0-­‐fill	
  groups	
  or	
  1-­‐fill	
  groups)	
  
	
  	
  literal	
  groups:	
  上記以外のグループ	
  
•  fill	
  groupsのみをRLEで圧縮、分割したgroupsの先頭に1bitの
groups判定フラグ1bitを付与(1の場合fill	
  groups)	
  
•  fill	
  groupsの場合、2bit目でfill	
  groupsの種類(0	
  or	
  1)を表し、残りの
30bitでrunの長さを表現	
  
	
  
具体例) 入力ビット列:	
   1020	
  13	
  0111	
  125	
  (160bit) 	
  
G1(1020	
  13	
  07)	
  G2(031)	
  G3(031)	
  G4(031)	
  G5(011120)	
  G6(02615)	
  
010201307	
   10027011	
   0011120	
   002615	
  
10	
  
ビットマップ圧縮:  SBH
•  WAHの改良版の手法	
  
•  ビット列を7bitずつのgroupsに分割	
  
•  連続するfill-­‐groupsの数k(k	
  <=	
  4093)で表現方法を変える	
  
	
  	
  	
  63	
  >=	
  k:	
  1byteでfill-­‐groupsを表現	
  
	
  	
  	
  63	
  <	
  	
  	
  k	
  <=	
  4093:	
  2byteでfill-­‐groupsを表現	
  
•  具体例) 入力ビット列:	
   1020130501160(532bit) 	
  	
  
G1(106)	
  G2(07)	
  G3(07)	
  G4(1304)G5(07)...G76(07)G78(160)	
  
0106	
   10000010	
  (k	
  =	
  2)	
  	
   01304	
   01304	
  
1031031061	
  (k	
  =	
  72)	
  
11	
  
ビットマップ圧縮:  Roaring
•  2016年に提案された最新のビットマップ圧縮手法	
  
•  RLEベースではなく、ビット密度(Cardinality)に応じて表現
方法を変えるハイブリッドな手法	
  
•  ビット列を上位16bitが共通しているbucketに分割	
  
•  各bucket内のビット数kで表現を変更	
  
 4096	
  >	
  	
  	
  k,	
  dense:	
  65536-­‐bit	
  uncompressed	
  bitmap	
  
	
  	
  	
  4096	
  <=	
  k	
  sparse:	
  sorted	
  16bit	
  ints.	
  	
  
•  実装の詳細は以下のスライドが理解しやすい	
  
•  h`ps://spark-­‐summit.org/east-­‐2017/speakers/daniel-­‐lemire/	
  
12	
  
整数圧縮:  VB
•  小さい値を少ないbyte数で表現	
  
•  1byteの先頭1bitを境界を表すヘッダとして扱い7bitで値を表現	
  
•  先頭bitを見て条件分岐をするためCPUペナルティが大きい	
  
	
  
•  Group	
  VB	
  
•  32bitの4つの値をまとめて圧縮	
  
•  復元処理の際の条件分岐をshii/maskを使い削減	
  
	
  
引用:	
  h`ps://www.slideshare.net/parallellabs/building-­‐soiware-­‐
systems-­‐at-­‐google-­‐and-­‐lessons-­‐learned/44-­‐
ByteAligned_Variablelength_Encodings_Varint_encoding	
  
13	
  
整数圧縮:  PforDelta
Super-­‐Scalar	
  RAM-­‐CPU	
  Cache	
  Compression,	
  ICDE’06から引用	
  
復元処理のコード例	
  
•  MonetDB/X100プロジェクト(CWI)の研究の一環で提案され
たCPU最適化された整数圧縮手法	
  
•  128個のd-­‐gapsを1つのブロックとして、ブロック内の大半(e.g.,	
  90%
以上)を表現可能な最小bit数kを決定(右図ではk=3)	
  
•  k-­‐bit以下の値はk-­‐bitの値としてbit-­‐packing(右図のcode	
  selec4on)	
  
•  k-­‐bitを超えた値は例外として圧縮せずにexcep4on	
  sec4onに格納	
  
1:	
  まずk-­‐bit以下の値は条件分岐なしに一括で復元	
  
2:	
  例外値を最後にパッチワーク	
  
14	
  
整数圧縮:  PforDelta
Super-­‐Scalar	
  RAM-­‐CPU	
  Cache	
  Compression,	
  ICDE’06から引用	
  
復元処理のコード例	
  
•  2008〜2015年に様々な亜種の手法が提案	
  
•  例外値も圧縮できるようにしたものがNewPforDelta、kの値を最適
化したものがOptPforDelta、復元処理をSIMDを使ってデータ並列
処理化したものがSIMDPforDelta	
  
1:	
  まずk-­‐bit以下の値は条件分岐なしに一括で復元	
  
2:	
  例外値を最後にパッチワーク	
  
15	
  
整数圧縮:  SIMDBP128
•  復元処理をSIMD命令を使い最適化した手法	
  
•  入力列を128個ずつの整数ブロックに分割、16個のブロッ
ク毎に16byteのメタデータを付与	
  
•  各ブロックをk-­‐bit(表現可能な最小のbit数)でm個ずつbit-­‐packing	
  
•  kとmの値をメタデータ記録	
  
•  復元処理はメタデータから必要な関数(SIMDunpackk_m)
を判断して呼び出す	
  
5bitで表現された値8個をSIMD命令で復元するコード([25]から引用)	
  
16	
  
補足)制御依存からデータ依存への変換
•  アルゴリズムから条件分岐(if-­‐then-­‐else)を排除	
  
•  分岐予測が外れると~20clk程度のペナルティ	
  
•  RoaringやSIMDPforDelta/SIMDBP128などの近代的な手法は考慮	
  
•  参考資料:	
  “条件分岐とcmovとmaxps”	
  
•  h`ps://www.slideshare.net/herumi/cmovmaxps	
  
Super-­‐Scalar	
  RAM-­‐CPU	
  Cache	
  Compression,	
  ICDE’06から引用	
  
•  条件分岐はIPCの敵	
  
•  Xeon/Opteronでは分岐予測が最
も外れる条件でIPC値が低下	
  
17	
  
補足)制御依存からデータ依存への変換
•  簡単な例)2分探索	
  
1	
   2	
   3	
   4	
   5	
   6	
   7	
  探索値:	
  
引用:	
  h`ps://ja.wikipedia.org/wiki/%E4%BA%8C%E5%88%86%E6%8E%A2%E7%B4%A2	
  
18	
  
補足)制御依存からデータ依存への変換
•  簡単な例)2分探索	
  
•  条件分岐を排除するためにデータ配列を再配置、比較
結果から移動オフセットを計算して探索	
  
探索値との比較結果	
   移動オフセット	
  
探索値 <	
  データ値	
   2log(k+1)-­‐1	
  
探索値 >	
  データ値	
   1	
  
4	
   2	
   1	
   3	
   6	
   5	
   7	
  
1回目の探索範囲 k	
  =	
  7	
  
2回目の探索範囲 k	
  =	
  3	
  
再配置したデータ配列:	
  
1回目の移動オフセット 	
  
	
  	
  =	
  2log(7+1)-­‐1	
  =	
  4	
  	
  
2回目の移動オフセット	
  =	
  1	
  
19	
  
補足)制御依存からデータ依存への変換
•  条件分岐除去に着眼した最近の論文(VLDB’17)	
  
	
  
•  FSMに基づいたパーサは条件分岐によるペナルティが大きい	
  
•  SIMD命令を活用して条件分岐を除去、またFilter/ProjectのPush-­‐
downをサポートすることでより効率化	
  
•  Apache	
  Sparkを用いて性能比較、デフォルトで利用しているJSON	
  
Parser(Jackson)と比べて条件によって10~20倍の性能差	
  
20	
  
実験条件
•  CPU:	
  Intel	
  i7-­‐4770	
  w/AVX2を利用	
  
•  全てメモリ上で性能を比較	
  
•  全ての手法をC++で実装して、gcc-­‐4.4.7の-­‐O3でコンパイル	
  
•  比較する4つの指標(圧縮時間に関する言及はなし)	
  
•  Space	
  overhead	
  
•  Decompression	
  4me	
  
•  Intersec4on	
  4me	
  
•  Union	
  4me	
  
•  使用するデータセット	
  
•  人工的に生成したデータ:	
  Uniform,	
  Zipf,	
  Markov	
  process	
  
•  実データ:	
  DBMS(Star	
  Schema	
  Benchmark、TPC-­‐H)、
Web(clueweb12)、グラフ(twi`er)、KDDCup99、温度
(Berkeleyearch)、信号(Higgs)、ゲノム(Kegg)	
  
21	
  
実験結果:  圧縮率と復元速度 
•  総合的にビットマップ圧縮に比べて整数圧縮の性能が良い、
特にSIMDPforDeltaとSIMDBP128が良い	
  
•  Sparseな場合、RLEベースのビットマップ圧縮では0-­‐fill	
  wordsを表現
するために必ず32bit必要だが、整数圧縮で用いるd-­‐gapsはより少
ないbitで表現可能	
  
•  Denseな場合、整数圧縮はd-­‐gapsの外れ値に弱いため圧縮率が悪
くなるが、復元性能はビットマップ圧縮より良い	
Sparse	
   Dense	
  
22	
  
実験結果:  圧縮率と復元速度 
•  ビットマップ圧縮の中では断然Roaringの性能が良い	
  
•  意外だが結果からRLEはビットマップの圧縮には向いていないとい
う結論、RLEに頼らないRoaringが性能的に優位	
  
•  ビット密度に応じて表現方法(16bit	
  ints	
  or	
  bitmap)を切り替えるハ
イブリッドな手法が性能に寄与	
  
Sparse	
   Dense	
  
23	
  
実験結果:  圧縮率と復元速度 
•  Zipf分布ではシンプルな手法であるVBの復元速度がCPU最
適化されたPforDeltaより良くなるケースがある	
  
•  先行研究[42]ではPforDeltaはVBに対して復元性能が劣るケース
は報告されていなかった	
  
•  byte-­‐wiseなVBはbit-­‐wiseなPForDeltaには圧縮率では劣るが、byte
単位のアクセス効率の良さが顕在化した?	
  
Sparse	
   Dense	
  
24	
  
実験結果:  IntersecGonの速度
•  Intersec4onは安定してRoaringの性能が良い	
  
	
   Sparse	
   Dense	
  •  各bucket内の表現(16bit	
  
ints	
  or	
  bitmap)はIntersectを
効率的に行うための設計	
  
•  不必要なbucketをskipして、
必要なbucket間で処理を行
うため効率的	
  
•  	
  整数圧縮ではSIMDBP128
とPEFの性能が良い	
  
•  PEFはd-­‐gapsを使わないため
任意部分を復元でき、効率
的にintersec4onが可能	
  
•  PEFは復元性能は低いため、
偏ったデータ(zipf)の場合性
能が悪化	
  
25	
  
実験結果:  Unionの速度
•  	
  整数圧縮がビットマップ圧縮より性能が良い	
  
Sparse	
   Dense	
  •  復元するデータ量が多い為
基本的には復元性能の高
い手法(SIMDPforDeltaと
SIMDBP128)が有利	
  
•  ビットマップ圧縮では圧縮率
と復元速度を含めてRoaring
の性能が最も良い	
  
26	
  
実験結果: 実データ(SSB)
•  選択率の異なる4つのクエリ(Q1.1,	
  Q2.1,	
  Q3.4,	
  Q4.1)を用い
て圧縮率とintersec4onの速度を比較	
  
•  Q1.1,	
  Q2.1,	
  Q4.1はデータがdenseであるためRoaringの
intersec4on性能が良い、Q3.4はsparseよりのデータであるた
め整数圧縮もcompe44ve	
  
•  圧縮率も考慮すると総合的にRoaringを選択するべき	
  
27	
  
実験結果: 実データ(TPC-­‐H)
•  SSBと同様に選択率の異なるクエリ(Q6,	
  Q12)を用いて圧縮
率とintersec4onの速度を比較	
  
•  denseなデータであるQ6ではRoaringが性能が最も良いが、
sparse傾向にあるQ12では圧縮率のみ悪化	
  
28	
  
実験結果: 実データ(グラフ)
•  twi`erの隣接リストのデータから任意の頂点を3つ選択(L1,	
  
L2,	
  L3)して圧縮率とintersec4onの速度を比較	
  
•  Q1:	
  |L1|=960,	
  |L2|=50913,	
  |L3|=507777	
  
•  Q2:	
  |L1|=507777,	
  |L2|=526292,	
  |L3|=779957	
  
•  総合的にビットマップ圧縮に比べて整数圧縮の性能が良い	
  
•  データ密度の言及はないが、これまでの結果からSparseな傾向の
データだと推測される	
  
29	
  
所感
引用:	
  NUMA	
  obliviousness	
  through	
  memory	
  mapping,	
  DaMoN'15	
  
•  SIMDBP128は提案論文[25]によると2,000	
  million	
  int./sを超
える復元性能を達成するらしいが、単スレッドで8GB/s近く
消費する計算になる	
  
•  近年のCPU-­‐メモリ間の最大帯域は
40-­‐60GB/s程度なので8並列以下で
上限を超えてしまう	
  
実際は入力の並列数を考慮して、
帯域の上限を超えない範囲でク
エリ性能を最大化する手法を選
ぶ必要がありそう	
  
30	
  
補足)併せて読みたい論文
	
  
•  同著者のVLDB’17論文	
  
•  圧縮率とクエリ性能の両立す
る整数圧縮MILCを提案	
  
•  性能の観点でd-­‐gapsではなく
offsetを使用	
  
•  圧縮率の観点でブロック長を固
定ではなく、長さを最適化
(VSEncoding-­‐like)	
  
•  キャッシュ考慮&SIMD並列	
  
1 of 30

Recommended

卒業論文「主張と根拠のクラスタを用いた 多様な主張を提示するニュース推薦手法の提案」 by
卒業論文「主張と根拠のクラスタを用いた 多様な主張を提示するニュース推薦手法の提案」卒業論文「主張と根拠のクラスタを用いた 多様な主張を提示するニュース推薦手法の提案」
卒業論文「主張と根拠のクラスタを用いた 多様な主張を提示するニュース推薦手法の提案」Nagi Kataoka
289 views83 slides
整数列圧縮 by
整数列圧縮整数列圧縮
整数列圧縮JAVA DM
8.1K views29 slides
MCMCによる回帰分析@ベイズセミナー by
MCMCによる回帰分析@ベイズセミナーMCMCによる回帰分析@ベイズセミナー
MCMCによる回帰分析@ベイズセミナーTakashi Yamane
12.1K views27 slides
次元の呪い by
次元の呪い次元の呪い
次元の呪いKosuke Tsujino
3.2K views18 slides
PRML輪読#6 by
PRML輪読#6PRML輪読#6
PRML輪読#6matsuolab
5.7K views27 slides
合成経路探索 -論文まとめ- (PFN中郷孝祐) by
合成経路探索 -論文まとめ-  (PFN中郷孝祐)合成経路探索 -論文まとめ-  (PFN中郷孝祐)
合成経路探索 -論文まとめ- (PFN中郷孝祐)Preferred Networks
22.9K views72 slides

More Related Content

What's hot

RでGPU使ってみた by
RでGPU使ってみたRでGPU使ってみた
RでGPU使ってみたKazuya Wada
16.2K views32 slides
LUT-Network ~本物のリアルタイムコンピューティングを目指して~ by
LUT-Network ~本物のリアルタイムコンピューティングを目指して~LUT-Network ~本物のリアルタイムコンピューティングを目指して~
LUT-Network ~本物のリアルタイムコンピューティングを目指して~ryuz88
8.2K views50 slides
Juliaで並列計算 by
Juliaで並列計算Juliaで並列計算
Juliaで並列計算Shintaro Fukushima
22.4K views62 slides
ディープラーニングの2値化(Binarized Neural Network) by
ディープラーニングの2値化(Binarized Neural Network)ディープラーニングの2値化(Binarized Neural Network)
ディープラーニングの2値化(Binarized Neural Network)Hideo Terada
9.1K views36 slides
Stan勉強会資料(前編) by
Stan勉強会資料(前編) Stan勉強会資料(前編)
Stan勉強会資料(前編) daiki hojo
5.9K views60 slides
(公開版)Reconf研2017GUINNESS by
(公開版)Reconf研2017GUINNESS(公開版)Reconf研2017GUINNESS
(公開版)Reconf研2017GUINNESSHiroki Nakahara
8.2K views40 slides

What's hot(20)

RでGPU使ってみた by Kazuya Wada
RでGPU使ってみたRでGPU使ってみた
RでGPU使ってみた
Kazuya Wada16.2K views
LUT-Network ~本物のリアルタイムコンピューティングを目指して~ by ryuz88
LUT-Network ~本物のリアルタイムコンピューティングを目指して~LUT-Network ~本物のリアルタイムコンピューティングを目指して~
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
ryuz888.2K views
ディープラーニングの2値化(Binarized Neural Network) by Hideo Terada
ディープラーニングの2値化(Binarized Neural Network)ディープラーニングの2値化(Binarized Neural Network)
ディープラーニングの2値化(Binarized Neural Network)
Hideo Terada9.1K views
Stan勉強会資料(前編) by daiki hojo
Stan勉強会資料(前編) Stan勉強会資料(前編)
Stan勉強会資料(前編)
daiki hojo5.9K views
(公開版)Reconf研2017GUINNESS by Hiroki Nakahara
(公開版)Reconf研2017GUINNESS(公開版)Reconf研2017GUINNESS
(公開版)Reconf研2017GUINNESS
Hiroki Nakahara8.2K views
単語の分散表現と構成性の計算モデルの発展 by Naoaki Okazaki
単語の分散表現と構成性の計算モデルの発展単語の分散表現と構成性の計算モデルの発展
単語の分散表現と構成性の計算モデルの発展
Naoaki Okazaki35.5K views
PRML 8.2 条件付き独立性 by sleepy_yoshi
PRML 8.2 条件付き独立性PRML 8.2 条件付き独立性
PRML 8.2 条件付き独立性
sleepy_yoshi13.7K views
馬に蹴られるモデリング by Shushi Namba
馬に蹴られるモデリング馬に蹴られるモデリング
馬に蹴られるモデリング
Shushi Namba3K views
量子コンピュータの基礎から応用まで by QunaSys
量子コンピュータの基礎から応用まで量子コンピュータの基礎から応用まで
量子コンピュータの基礎から応用まで
QunaSys2.3K views
クラシックな機械学習入門:付録:よく使う線形代数の公式 by Hiroshi Nakagawa
クラシックな機械学習入門:付録:よく使う線形代数の公式クラシックな機械学習入門:付録:よく使う線形代数の公式
クラシックな機械学習入門:付録:よく使う線形代数の公式
Hiroshi Nakagawa17.5K views
Dynamic Routing Between Capsules by Fujimoto Keisuke
Dynamic Routing Between CapsulesDynamic Routing Between Capsules
Dynamic Routing Between Capsules
Fujimoto Keisuke10.7K views
機械学習による統計的実験計画(ベイズ最適化を中心に) by Kota Matsui
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)
Kota Matsui13.1K views
レプリカ交換モンテカルロ法で乱数の生成 by Nagi Teramo
レプリカ交換モンテカルロ法で乱数の生成レプリカ交換モンテカルロ法で乱数の生成
レプリカ交換モンテカルロ法で乱数の生成
Nagi Teramo13K views
頻度論とベイズ論と誤差最小化について by Shohei Miyashita
頻度論とベイズ論と誤差最小化について頻度論とベイズ論と誤差最小化について
頻度論とベイズ論と誤差最小化について
Shohei Miyashita2.9K views
pymcとpystanでベイズ推定してみた話 by Classi.corp
pymcとpystanでベイズ推定してみた話pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話
Classi.corp1.8K views

Similar to An Experimental Study of Bitmap Compression vs. Inverted List Compression

第5回 配信講義 計算科学技術特論B(2022) by
第5回 配信講義 計算科学技術特論B(2022)第5回 配信講義 計算科学技術特論B(2022)
第5回 配信講義 計算科学技術特論B(2022)RCCSRENKEI
177 views93 slides
研究動向から考えるx86/x64最適化手法 by
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法Takeshi Yamamuro
6K views57 slides
CMSI計算科学技術特論A(14) 量子化学計算の大規模化1 by
CMSI計算科学技術特論A(14) 量子化学計算の大規模化1CMSI計算科学技術特論A(14) 量子化学計算の大規模化1
CMSI計算科学技術特論A(14) 量子化学計算の大規模化1Computational Materials Science Initiative
3.3K views37 slides
第11回 配信講義 計算科学技術特論B(2022) by
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)RCCSRENKEI
160 views69 slides
More modern gpu by
More modern gpuMore modern gpu
More modern gpuPreferred Networks
38.6K views25 slides
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介 by
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介Hiroki Nakahara
6.5K views59 slides

Similar to An Experimental Study of Bitmap Compression vs. Inverted List Compression(20)

第5回 配信講義 計算科学技術特論B(2022) by RCCSRENKEI
第5回 配信講義 計算科学技術特論B(2022)第5回 配信講義 計算科学技術特論B(2022)
第5回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI177 views
研究動向から考えるx86/x64最適化手法 by Takeshi Yamamuro
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法
Takeshi Yamamuro6K views
第11回 配信講義 計算科学技術特論B(2022) by RCCSRENKEI
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI160 views
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介 by Hiroki Nakahara
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
Hiroki Nakahara6.5K views
0から理解するニューラルネットアーキテクチャサーチ(NAS) by MasanoriSuganuma
0から理解するニューラルネットアーキテクチャサーチ(NAS)0から理解するニューラルネットアーキテクチャサーチ(NAS)
0から理解するニューラルネットアーキテクチャサーチ(NAS)
MasanoriSuganuma3.7K views
GPUによる多倍長整数乗算の高速化手法の提案 by Koji Kitano
GPUによる多倍長整数乗算の高速化手法の提案GPUによる多倍長整数乗算の高速化手法の提案
GPUによる多倍長整数乗算の高速化手法の提案
Koji Kitano2.2K views
BA-Net: Dense Bundle Adjustment Network (3D勉強会@関東) by Mai Nishimura
BA-Net: Dense Bundle Adjustment Network (3D勉強会@関東) BA-Net: Dense Bundle Adjustment Network (3D勉強会@関東)
BA-Net: Dense Bundle Adjustment Network (3D勉強会@関東)
Mai Nishimura1.7K views
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter by Morpho, Inc.
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter
Morpho, Inc.2.5K views
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか) by Takeshi Yamamuro
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro10.7K views
(文献紹介)Deep Unrolling: Learned ISTA (LISTA) by Morpho, Inc.
(文献紹介)Deep Unrolling: Learned ISTA (LISTA)(文献紹介)Deep Unrolling: Learned ISTA (LISTA)
(文献紹介)Deep Unrolling: Learned ISTA (LISTA)
Morpho, Inc.6.3K views
2019年7月3日 AITCオープンラボ 量子コンピューティング シリーズ第3回 ~日立製作所様における取り組み紹介~ by aitc_jp
2019年7月3日 AITCオープンラボ 量子コンピューティング シリーズ第3回 ~日立製作所様における取り組み紹介~ 2019年7月3日 AITCオープンラボ 量子コンピューティング シリーズ第3回 ~日立製作所様における取り組み紹介~
2019年7月3日 AITCオープンラボ 量子コンピューティング シリーズ第3回 ~日立製作所様における取り組み紹介~
aitc_jp733 views
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re... by Toru Tamaki
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
Toru Tamaki45 views
畳み込みニューラルネットワークの研究動向 by Yusuke Uchida
畳み込みニューラルネットワークの研究動向畳み込みニューラルネットワークの研究動向
畳み込みニューラルネットワークの研究動向
Yusuke Uchida139.9K views
Chugoku db 17th-postgresql-9.6 by Toshi Harada
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
Toshi Harada791 views
20190418_PGStrom_on_ArrowFdw by Kohei KaiGai
20190418_PGStrom_on_ArrowFdw20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw
Kohei KaiGai2.3K views
Haswellサーベイと有限体クラスの紹介 by MITSUNARI Shigeo
Haswellサーベイと有限体クラスの紹介Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
MITSUNARI Shigeo5.4K views
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4 by Takeshi Yamamuro
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
Takeshi Yamamuro3.9K views

More from Takeshi Yamamuro

LT: Spark 3.1 Feature Expectation by
LT: Spark 3.1 Feature ExpectationLT: Spark 3.1 Feature Expectation
LT: Spark 3.1 Feature ExpectationTakeshi Yamamuro
1K views9 slides
Apache Spark + Arrow by
Apache Spark + ArrowApache Spark + Arrow
Apache Spark + ArrowTakeshi Yamamuro
1.2K views16 slides
Quick Overview of Upcoming Spark 3.0 + α by
Quick Overview of Upcoming Spark 3.0 + αQuick Overview of Upcoming Spark 3.0 + α
Quick Overview of Upcoming Spark 3.0 + αTakeshi Yamamuro
714 views30 slides
MLflowによる機械学習モデルのライフサイクルの管理 by
MLflowによる機械学習モデルのライフサイクルの管理MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理Takeshi Yamamuro
9.6K views20 slides
Taming Distributed/Parallel Query Execution Engine of Apache Spark by
Taming Distributed/Parallel Query Execution Engine of Apache SparkTaming Distributed/Parallel Query Execution Engine of Apache Spark
Taming Distributed/Parallel Query Execution Engine of Apache SparkTakeshi Yamamuro
1.4K views43 slides
LLJVM: LLVM bitcode to JVM bytecode by
LLJVM: LLVM bitcode to JVM bytecodeLLJVM: LLVM bitcode to JVM bytecode
LLJVM: LLVM bitcode to JVM bytecodeTakeshi Yamamuro
1.3K views21 slides

More from Takeshi Yamamuro(20)

Quick Overview of Upcoming Spark 3.0 + α by Takeshi Yamamuro
Quick Overview of Upcoming Spark 3.0 + αQuick Overview of Upcoming Spark 3.0 + α
Quick Overview of Upcoming Spark 3.0 + α
Takeshi Yamamuro714 views
MLflowによる機械学習モデルのライフサイクルの管理 by Takeshi Yamamuro
MLflowによる機械学習モデルのライフサイクルの管理MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理
Takeshi Yamamuro9.6K views
Taming Distributed/Parallel Query Execution Engine of Apache Spark by Takeshi Yamamuro
Taming Distributed/Parallel Query Execution Engine of Apache SparkTaming Distributed/Parallel Query Execution Engine of Apache Spark
Taming Distributed/Parallel Query Execution Engine of Apache Spark
Takeshi Yamamuro1.4K views
LLJVM: LLVM bitcode to JVM bytecode by Takeshi Yamamuro
LLJVM: LLVM bitcode to JVM bytecodeLLJVM: LLVM bitcode to JVM bytecode
LLJVM: LLVM bitcode to JVM bytecode
Takeshi Yamamuro1.3K views
Sparkのクエリ処理系と周辺の話題 by Takeshi Yamamuro
Sparkのクエリ処理系と周辺の話題Sparkのクエリ処理系と周辺の話題
Sparkのクエリ処理系と周辺の話題
Takeshi Yamamuro2.8K views
Introduction to Modern Analytical DB by Takeshi Yamamuro
Introduction to Modern Analytical DBIntroduction to Modern Analytical DB
Introduction to Modern Analytical DB
Takeshi Yamamuro11.7K views
A x86-optimized rank&select dictionary for bit sequences by Takeshi Yamamuro
A x86-optimized rank&select dictionary for bit sequencesA x86-optimized rank&select dictionary for bit sequences
A x86-optimized rank&select dictionary for bit sequences
Takeshi Yamamuro2K views

Recently uploaded

光コラボは契約してはいけない by
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけないTakuya Matsunaga
30 views17 slides
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Hitachi, Ltd. OSS Solution Center.
110 views26 slides
私のMicrosoft Azure 2023 by
私のMicrosoft Azure 2023私のMicrosoft Azure 2023
私のMicrosoft Azure 2023Ryuji Iwata
5 views36 slides
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PC Cluster Consortium
68 views12 slides
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 by
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可Hitachi, Ltd. OSS Solution Center.
13 views22 slides
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PC Cluster Consortium
29 views36 slides

Recently uploaded(6)

光コラボは契約してはいけない by Takuya Matsunaga
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけない
Takuya Matsunaga30 views
私のMicrosoft Azure 2023 by Ryuji Iwata
私のMicrosoft Azure 2023私のMicrosoft Azure 2023
私のMicrosoft Azure 2023
Ryuji Iwata5 views
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by PC Cluster Consortium
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by PC Cluster Consortium
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」

An Experimental Study of Bitmap Compression vs. Inverted List Compression

  • 1. 1   担当:  Takeshi  Yamamuro SIGMOD’17  Session  20:  Op4miza4on  and  performance  
  • 2. 2   研究概要 •  同様の問題を解いているが、異なる分野で培われてきた ビットマップ圧縮(DB)と整数圧縮(IR)に関して、本論文で は以下に回答する:   ※以降、特に明示しなければ論文から引用   Inverted  List  (Integer)  Compression     Bitmap  Compression   -­‐  Which  one  is  be,er  between  bitmap  compression   and  inverted  list  compression?  
  • 3. 3   研究概要 •  ビットマップ圧縮9種と整数圧縮12種に対して、様々な分布 の人工データと8種の実データを用いて網羅的に評価   •  上記の結果から、多くの知見や応用・研究における圧縮手 法の選択の指針を提示する   ※以降、特に明示しなければ論文から引用   Inverted  List  (Integer)  Compression     Bitmap  Compression  
  • 4. 4   実験結果から得られた知見 •  Intersec4on(A∩B)の速度が重要ならビットマップ圧縮、そ れ以外の指標(圧縮率、復元速度、Union(A∪B))が重要 であれば整数圧縮を選択     •   ビットマップ圧縮はRLEベースの手法ではないRoaringがど の指標においても性能が良い、RLEベースの他の手法 (WAHやEWAHなど)は検討しなくて良い   •  他の手法は最悪ケースで無圧縮よりサイズ大     •  整数圧縮はベクトル命令に対応しているSIMDPforDeltaか SIMDBP128が性能が良い、特にSIMDPforDeltaは圧縮率、 SIMDBP128は復元速度が良い     •   SIMDPforDelta/SIMDBP128は実装が複雑であるため、20 行以下で記述できるVBも選択としては有り   •  条件によってVBがPForDeltaに比べ性能が良くなるケースも存在  
  • 6. 6   共通する解いている問題 •  昇順に並び替えられた整数を少ないbitで表現しつ つ、高速な問い合わせ(e.g.,  A∩B)を実現   ビットマップ圧縮   -­‐    ビットが立っている位置は昇順の整数:  011001  -­‐>  1,2,5   -­‐    適用例:  PostgreSQL/OracleなどのRDBMSやApache  Spark/Hiveなど   整数圧縮   -­‐    転置インデックスのドキュメントID、昇順に並び替えて保存   -­‐  主な適用例:  Apache  Lucene/Solr、Elas4csearchなど(近年では          DBMS内部の要素技術としてもよく利用される)                A  =  1,  4,  8,  10,  19,  …                B  =  4,  14,  18,  19,  22,  …   A  ∩ B  =  4,  19,  …   特定の問い合わせを高速に処理で きる効率的なコンピュータ上の表現 (符号化)方法を模索  
  • 7. 7   Apache  Sparkにおける適用例 •  Spark  SQLでcacheしたデータはカラム構造(型毎の配列)と してメモリ上に配置され、整数配列はVBで表現   •  SparkのSchedulerが各Task(実行最小単位)の出力サイズ を追跡、出力が無いTaskをRoaring  Bitmapsで管理   •  h`p://roaringbitmap.org   •  Lemire先生が書いた          RoaringのOSS実装   ・・・  
  • 8. 8   圧縮アルゴリズム紹介(抜粋) •  ビットマップ圧縮   •  RLEベースの手法:  WAH,  EWAH,  PLWAH,  CONCISE,   VALWAH,  SBH,  BBC   •  Hybridな手法:  Roaring   •  整数圧縮   •   VB,  PforDelta,  [New|Opt|SIMD]PforDelta,  Simple16,   GroupVB,  Simple8b,  PEF,  SIMDBP128  
  • 9. 9   ビットマップ圧縮:  WAH •  RLEベースの古典的なビットマップ圧縮手法   •  ビット列を31bitずつのgroupsに分割   •  グループを2種類に分類:  fill  groups  or  literal  groups      fill  groups:  ビットが全て同じグループ(0-­‐fill  groups  or  1-­‐fill  groups)      literal  groups:  上記以外のグループ   •  fill  groupsのみをRLEで圧縮、分割したgroupsの先頭に1bitの groups判定フラグ1bitを付与(1の場合fill  groups)   •  fill  groupsの場合、2bit目でfill  groupsの種類(0  or  1)を表し、残りの 30bitでrunの長さを表現     具体例) 入力ビット列:   1020  13  0111  125  (160bit)   G1(1020  13  07)  G2(031)  G3(031)  G4(031)  G5(011120)  G6(02615)   010201307   10027011   0011120   002615  
  • 10. 10   ビットマップ圧縮:  SBH •  WAHの改良版の手法   •  ビット列を7bitずつのgroupsに分割   •  連続するfill-­‐groupsの数k(k  <=  4093)で表現方法を変える        63  >=  k:  1byteでfill-­‐groupsを表現        63  <      k  <=  4093:  2byteでfill-­‐groupsを表現   •  具体例) 入力ビット列:   1020130501160(532bit)     G1(106)  G2(07)  G3(07)  G4(1304)G5(07)...G76(07)G78(160)   0106   10000010  (k  =  2)     01304   01304   1031031061  (k  =  72)  
  • 11. 11   ビットマップ圧縮:  Roaring •  2016年に提案された最新のビットマップ圧縮手法   •  RLEベースではなく、ビット密度(Cardinality)に応じて表現 方法を変えるハイブリッドな手法   •  ビット列を上位16bitが共通しているbucketに分割   •  各bucket内のビット数kで表現を変更    4096  >      k,  dense:  65536-­‐bit  uncompressed  bitmap        4096  <=  k  sparse:  sorted  16bit  ints.     •  実装の詳細は以下のスライドが理解しやすい   •  h`ps://spark-­‐summit.org/east-­‐2017/speakers/daniel-­‐lemire/  
  • 12. 12   整数圧縮:  VB •  小さい値を少ないbyte数で表現   •  1byteの先頭1bitを境界を表すヘッダとして扱い7bitで値を表現   •  先頭bitを見て条件分岐をするためCPUペナルティが大きい     •  Group  VB   •  32bitの4つの値をまとめて圧縮   •  復元処理の際の条件分岐をshii/maskを使い削減     引用:  h`ps://www.slideshare.net/parallellabs/building-­‐soiware-­‐ systems-­‐at-­‐google-­‐and-­‐lessons-­‐learned/44-­‐ ByteAligned_Variablelength_Encodings_Varint_encoding  
  • 13. 13   整数圧縮:  PforDelta Super-­‐Scalar  RAM-­‐CPU  Cache  Compression,  ICDE’06から引用   復元処理のコード例   •  MonetDB/X100プロジェクト(CWI)の研究の一環で提案され たCPU最適化された整数圧縮手法   •  128個のd-­‐gapsを1つのブロックとして、ブロック内の大半(e.g.,  90% 以上)を表現可能な最小bit数kを決定(右図ではk=3)   •  k-­‐bit以下の値はk-­‐bitの値としてbit-­‐packing(右図のcode  selec4on)   •  k-­‐bitを超えた値は例外として圧縮せずにexcep4on  sec4onに格納   1:  まずk-­‐bit以下の値は条件分岐なしに一括で復元   2:  例外値を最後にパッチワーク  
  • 14. 14   整数圧縮:  PforDelta Super-­‐Scalar  RAM-­‐CPU  Cache  Compression,  ICDE’06から引用   復元処理のコード例   •  2008〜2015年に様々な亜種の手法が提案   •  例外値も圧縮できるようにしたものがNewPforDelta、kの値を最適 化したものがOptPforDelta、復元処理をSIMDを使ってデータ並列 処理化したものがSIMDPforDelta   1:  まずk-­‐bit以下の値は条件分岐なしに一括で復元   2:  例外値を最後にパッチワーク  
  • 15. 15   整数圧縮:  SIMDBP128 •  復元処理をSIMD命令を使い最適化した手法   •  入力列を128個ずつの整数ブロックに分割、16個のブロッ ク毎に16byteのメタデータを付与   •  各ブロックをk-­‐bit(表現可能な最小のbit数)でm個ずつbit-­‐packing   •  kとmの値をメタデータ記録   •  復元処理はメタデータから必要な関数(SIMDunpackk_m) を判断して呼び出す   5bitで表現された値8個をSIMD命令で復元するコード([25]から引用)  
  • 16. 16   補足)制御依存からデータ依存への変換 •  アルゴリズムから条件分岐(if-­‐then-­‐else)を排除   •  分岐予測が外れると~20clk程度のペナルティ   •  RoaringやSIMDPforDelta/SIMDBP128などの近代的な手法は考慮   •  参考資料:  “条件分岐とcmovとmaxps”   •  h`ps://www.slideshare.net/herumi/cmovmaxps   Super-­‐Scalar  RAM-­‐CPU  Cache  Compression,  ICDE’06から引用   •  条件分岐はIPCの敵   •  Xeon/Opteronでは分岐予測が最 も外れる条件でIPC値が低下  
  • 17. 17   補足)制御依存からデータ依存への変換 •  簡単な例)2分探索   1   2   3   4   5   6   7  探索値:   引用:  h`ps://ja.wikipedia.org/wiki/%E4%BA%8C%E5%88%86%E6%8E%A2%E7%B4%A2  
  • 18. 18   補足)制御依存からデータ依存への変換 •  簡単な例)2分探索   •  条件分岐を排除するためにデータ配列を再配置、比較 結果から移動オフセットを計算して探索   探索値との比較結果   移動オフセット   探索値 <  データ値   2log(k+1)-­‐1   探索値 >  データ値   1   4   2   1   3   6   5   7   1回目の探索範囲 k  =  7   2回目の探索範囲 k  =  3   再配置したデータ配列:   1回目の移動オフセット      =  2log(7+1)-­‐1  =  4     2回目の移動オフセット  =  1  
  • 19. 19   補足)制御依存からデータ依存への変換 •  条件分岐除去に着眼した最近の論文(VLDB’17)     •  FSMに基づいたパーサは条件分岐によるペナルティが大きい   •  SIMD命令を活用して条件分岐を除去、またFilter/ProjectのPush-­‐ downをサポートすることでより効率化   •  Apache  Sparkを用いて性能比較、デフォルトで利用しているJSON   Parser(Jackson)と比べて条件によって10~20倍の性能差  
  • 20. 20   実験条件 •  CPU:  Intel  i7-­‐4770  w/AVX2を利用   •  全てメモリ上で性能を比較   •  全ての手法をC++で実装して、gcc-­‐4.4.7の-­‐O3でコンパイル   •  比較する4つの指標(圧縮時間に関する言及はなし)   •  Space  overhead   •  Decompression  4me   •  Intersec4on  4me   •  Union  4me   •  使用するデータセット   •  人工的に生成したデータ:  Uniform,  Zipf,  Markov  process   •  実データ:  DBMS(Star  Schema  Benchmark、TPC-­‐H)、 Web(clueweb12)、グラフ(twi`er)、KDDCup99、温度 (Berkeleyearch)、信号(Higgs)、ゲノム(Kegg)  
  • 21. 21   実験結果:  圧縮率と復元速度 •  総合的にビットマップ圧縮に比べて整数圧縮の性能が良い、 特にSIMDPforDeltaとSIMDBP128が良い   •  Sparseな場合、RLEベースのビットマップ圧縮では0-­‐fill  wordsを表現 するために必ず32bit必要だが、整数圧縮で用いるd-­‐gapsはより少 ないbitで表現可能   •  Denseな場合、整数圧縮はd-­‐gapsの外れ値に弱いため圧縮率が悪 くなるが、復元性能はビットマップ圧縮より良い Sparse   Dense  
  • 22. 22   実験結果:  圧縮率と復元速度 •  ビットマップ圧縮の中では断然Roaringの性能が良い   •  意外だが結果からRLEはビットマップの圧縮には向いていないとい う結論、RLEに頼らないRoaringが性能的に優位   •  ビット密度に応じて表現方法(16bit  ints  or  bitmap)を切り替えるハ イブリッドな手法が性能に寄与   Sparse   Dense  
  • 23. 23   実験結果:  圧縮率と復元速度 •  Zipf分布ではシンプルな手法であるVBの復元速度がCPU最 適化されたPforDeltaより良くなるケースがある   •  先行研究[42]ではPforDeltaはVBに対して復元性能が劣るケース は報告されていなかった   •  byte-­‐wiseなVBはbit-­‐wiseなPForDeltaには圧縮率では劣るが、byte 単位のアクセス効率の良さが顕在化した?   Sparse   Dense  
  • 24. 24   実験結果:  IntersecGonの速度 •  Intersec4onは安定してRoaringの性能が良い     Sparse   Dense  •  各bucket内の表現(16bit   ints  or  bitmap)はIntersectを 効率的に行うための設計   •  不必要なbucketをskipして、 必要なbucket間で処理を行 うため効率的   •   整数圧縮ではSIMDBP128 とPEFの性能が良い   •  PEFはd-­‐gapsを使わないため 任意部分を復元でき、効率 的にintersec4onが可能   •  PEFは復元性能は低いため、 偏ったデータ(zipf)の場合性 能が悪化  
  • 25. 25   実験結果:  Unionの速度 •   整数圧縮がビットマップ圧縮より性能が良い   Sparse   Dense  •  復元するデータ量が多い為 基本的には復元性能の高 い手法(SIMDPforDeltaと SIMDBP128)が有利   •  ビットマップ圧縮では圧縮率 と復元速度を含めてRoaring の性能が最も良い  
  • 26. 26   実験結果: 実データ(SSB) •  選択率の異なる4つのクエリ(Q1.1,  Q2.1,  Q3.4,  Q4.1)を用い て圧縮率とintersec4onの速度を比較   •  Q1.1,  Q2.1,  Q4.1はデータがdenseであるためRoaringの intersec4on性能が良い、Q3.4はsparseよりのデータであるた め整数圧縮もcompe44ve   •  圧縮率も考慮すると総合的にRoaringを選択するべき  
  • 27. 27   実験結果: 実データ(TPC-­‐H) •  SSBと同様に選択率の異なるクエリ(Q6,  Q12)を用いて圧縮 率とintersec4onの速度を比較   •  denseなデータであるQ6ではRoaringが性能が最も良いが、 sparse傾向にあるQ12では圧縮率のみ悪化  
  • 28. 28   実験結果: 実データ(グラフ) •  twi`erの隣接リストのデータから任意の頂点を3つ選択(L1,   L2,  L3)して圧縮率とintersec4onの速度を比較   •  Q1:  |L1|=960,  |L2|=50913,  |L3|=507777   •  Q2:  |L1|=507777,  |L2|=526292,  |L3|=779957   •  総合的にビットマップ圧縮に比べて整数圧縮の性能が良い   •  データ密度の言及はないが、これまでの結果からSparseな傾向の データだと推測される  
  • 29. 29   所感 引用:  NUMA  obliviousness  through  memory  mapping,  DaMoN'15   •  SIMDBP128は提案論文[25]によると2,000  million  int./sを超 える復元性能を達成するらしいが、単スレッドで8GB/s近く 消費する計算になる   •  近年のCPU-­‐メモリ間の最大帯域は 40-­‐60GB/s程度なので8並列以下で 上限を超えてしまう   実際は入力の並列数を考慮して、 帯域の上限を超えない範囲でク エリ性能を最大化する手法を選 ぶ必要がありそう  
  • 30. 30   補足)併せて読みたい論文   •  同著者のVLDB’17論文   •  圧縮率とクエリ性能の両立す る整数圧縮MILCを提案   •  性能の観点でd-­‐gapsではなく offsetを使用   •  圧縮率の観点でブロック長を固 定ではなく、長さを最適化 (VSEncoding-­‐like)   •  キャッシュ考慮&SIMD並列