SlideShare una empresa de Scribd logo
1 de 93
LZ4 の
速さの秘密に
迫ってみる
DSIRNLP #3 2012.9.30
KOMIYA Atsushi (@komiya_atsushi)




                                   1
Who ?




        2
KOMIYA Atsushi
@komiya_atsushi




                  3
分析力をコアとする
 情報最適化企業




            4
でエンジニアやってます




              5
アルバート
アルベルト
でエンジニアやってます




              6
#TokyoWebmining
      運営




                  7
Agenda
1. What is LZ4 ?
2. Dictionary compression
3. Why fast ?
4. Conclusion




                            8
おことわり
•LZ4 の
 •使い方の話はしません
 •仕様の話もほとんどしません
•速く処理をするための工夫にのみ着目
 してお話しします




                     9
What is LZ4 ?




                10
What is LZ4 ?




 URL : http://fastcompression.blogspot.jp/p/lz4.html
       http://code.google.com/p/lz4/




                                                       11
What is LZ4 ?




 URL : http://fastcompression.blogspot.jp/p/lz4.html
       http://code.google.com/p/lz4/



               非常に高速な
              圧縮アルゴリズム



                                                       12
How fast ?
• snappy_unittest.cc に手を加えて計測
• テストデータ:enwik8 (http://mattmahoney.net/dc/textdata.html)




                                                            13
How fast ?
• snappy_unittest.cc に手を加えて計測
• テストデータ:enwik8 (http://mattmahoney.net/dc/textdata.html)




                                                 [MB/s]

    slow                                      fast




                                                            14
How fast ?
• snappy_unittest.cc に手を加えて計測
• テストデータ:enwik8 (http://mattmahoney.net/dc/textdata.html)




               vs. snappy
               x1.73 faster (comp.)
               x1.23 faster (decomp.)



                                                 [MB/s]

    slow                                      fast




                                                            15
Compression ratio




                          [%]

  good              bad




                                16
Compression ratio




                            [%]

  good                bad

 速度重視の他ライブラリ(snappy / lzo)と
     比較しても遜色ない圧縮率




                                  17
Dragon Quest X and LZ4




                                                                                    18
引用元 (Gigazine):http://gigazine.net/news/20120824-dragonquest-backstage-cedec2012/
Hadoop and LZ4




                                                          19
引用元 : https://issues.apache.org/jira/browse/HADOOP-7657
… and some features
•Scalability : multi-threading
•Support ARM processors
•BSD License
•Bindings
  •C# / Java / Python / Perl / JS / PHP / Ruby
   / LUA / Go / Haskell / Erlang




                                                 20
Dictionary
compression



              21
Dictionary compression
•gzip (zlib) などど同じスライド窓ベース
 の辞書式圧縮アルゴリズムを採用




                             22
Dictionary compression
•gzip (zlib) などど同じスライド窓ベース
 の辞書式圧縮アルゴリズムを採用




                             23
Dictionary compression
•gzip (zlib) などど同じスライド窓ベース
 の辞書式圧縮アルゴリズムを採用
【例】
おまえのものはおれのもの、おれのものもおれのもの




                             24
Dictionary compression
•gzip (zlib) などど同じスライド窓ベース
 の辞書式圧縮アルゴリズムを採用
【例】
おまえのものはおれのもの、おれのものもおれのもの


        原則として、1文字ずつ
         左から右へ読み進める




                             25
Dictionary compression
•gzip (zlib) などど同じスライド窓ベース
 の辞書式圧縮アルゴリズムを採用
【例】
おまえのものはおれのもの、おれのものもおれのもの


  いま着目している文字列(右側)が、
  過去(左側)のどの場所にどの長さで
     出現したのか? を求める




                             26
Dictionary compression
•gzip (zlib) などど同じスライド窓ベース
 の辞書式圧縮アルゴリズムを採用
【例】           ここに着目

おまえのものはおれのもの、おれのものもおれのもの


  いま着目している文字列(右側)が、
  過去(左側)のどの場所にどの長さで
     出現したのか? を求める




                             27
Dictionary compression
•gzip (zlib) などど同じスライド窓ベース
 の辞書式圧縮アルゴリズムを採用
【例】                  ここに着目

おまえのものはおれのもの、おれのものもおれのもの


  いま着目している文字列(右側)が、
  過去(左側)のどの場所にどの長さで
     出現したのか? を求める




                             28
Dictionary compression
•gzip (zlib) などど同じスライド窓ベース
 の辞書式圧縮アルゴリズムを採用
【例】                      ここに着目

おまえのものはおれのもの、おれのものもおれのもの


  いま着目している文字列(右側)が、
  過去(左側)のどの場所にどの長さで
     出現したのか? を求める




                                 29
Dictionary compression
•gzip (zlib) などど同じスライド窓ベース
 の辞書式圧縮アルゴリズムを採用
【例】
おまえのものはおれのもの、おれのものもおれのもの


  一致情報(場所、長さ)を符号化する




                             30
Dictionary compression
•gzip (zlib) などど同じスライド窓ベース
 の辞書式圧縮アルゴリズムを採用
【例】
おまえのものはおれのもの、おれのものもおれのもの



      おまえのものはおれ(6,3)、(6,5)も(6,5)




                                   31
Dictionary compression
•gzip (zlib) などど同じスライド窓ベース
 の辞書式圧縮アルゴリズムを採用
【例】
おまえのものはおれのもの、おれのものもおれのもの



      おまえのものはおれ(6,3)、(6,5)も(6,5)
              6つ前の3文字と
              一致しているよ!




                                   32
Pattern matching problem
•辞書式圧縮アルゴリズムは
    「文字列照合問題」
    「文字列探索問題」
 と捉えることができる




                           33
Why fast ?




             34
Why fast ?
•機能をちょっと制限する
•泥臭い努力をする
•探索を端折る
•一致長をすばやく算出する
•細かいことはしない




                35
機能をちょっと
 制限する



          36
API 構成




         37
API 構成
•ブロック単位での圧縮・伸長のみをサポート




                        38
API 構成
•ブロック単位での圧縮・伸長のみをサポート

         データ




                        39
API 構成
•ブロック単位での圧縮・伸長のみをサポート

                データ



  ブロック   ブロック         ブロック   ブロック




   ライブラリ利用者がブロックに分割する




                                    40
API 構成
•ブロック単位での圧縮・伸長のみをサポート

                              データ



    ブロック             ブロック             ブロック             ブロック



 LZ4_compress()   LZ4_compress()   LZ4_compress()   LZ4_compress()




     それぞれのブロックごとに API を呼び出す




                                                                     41
API 構成
•ブロック単位での圧縮・伸長のみをサポート

                              データ



    ブロック             ブロック             ブロック             ブロック



 LZ4_compress()   LZ4_compress()   LZ4_compress()   LZ4_compress()



    圧縮済み             圧縮済み             圧縮済み             圧縮済み




                                                                     42
API 構成
•ブロック単位での圧縮・伸長のみをサポート
 • ブロックごとに API を呼び出す
 • ブロックの大きさは任意(<1.9GB)に指定できる
•デメリット
 • zlib のようなストリーム処理ができない
•メリット
 • API 側の実装がシンプルになる(co-routine 的な
   実装をしなくていい)
 • API 呼び出しをマルチスレッド化できる




                                    43
泥臭い努力をする




           44
2/4/8 バイト単位でまとめてアクセス




                       45
2/4/8 バイト単位でまとめてアクセス
•バイト列をまとめて処理したいことが
 よくあります
 •2つのバイト列の比較
 •バイト列のコピー(memcpy())
 •ハッシュ値の計算
  • 連続する4バイトをハッシュ値計算に使う
•バイト列のまま、1バイトずつ処理し
 ていては効率がよくない…




                          46
2/4/8 バイト単位でまとめてアクセス
•byte のポインタを
 word / dword / qword のポインタと
 してアクセスすれば、複数バイトを
 まとめて処理できるようになる!
•アライメントの境界をまたいで
 アクセスすると怒られる CPU 向けに、
 ちょっと工夫が必要




                               47
2/4/8 バイト単位でまとめてアクセス




 アライメントの境界を超えてメモリアクセスすると
 エラーとなってしまう環境のために、構造体経由で
 アクセスする




                           48
利用例
•バイト列の比較


•バイト列のコピー


•ハッシュ値の計算




            49
探索を端折る




         50
ハッシュ表による探索




             51
ハッシュ表による探索
•ハッシュ表で4バイトの一致がある場所を
 検出する
 • 連続する4バイトをハッシュして key とする
 • value はその4バイトの出現位置
•デメリット
 • ハッシュ衝突により、一致を検出できない
   ことがある(衝突したら諦める)
•メリット
 • 定数オーダーで一致があるかないかを判別
   することができる




                             52
ハッシュ表による探索


圧縮対象の文字列
GrapeAppleGrapefruit
今着目しているこの文字列に
                                         ハッシュ表
一致する場所を探そう   hashTable[ 0]   : 7   “pleGrapefr...”
             ・・・
             hashTable[12]   : 2   “apeAppleGr...”
             hashTable[13]   : 5   “AppleGrape...”
             ・・・
             hashTable[27]   : 1   “rapeAppleg...”
             ・・・
             hashTable[33]   : 0   “GrapeApple...”
             ・・・
             hashTable[36]   : 3   “peAppleGra...”




                                                     53
             ・・・
ハッシュ表による探索


圧縮対象の文字列
GrapeAppleGrapefruit
“eGra” のハッシュ値は 27
                                                ハッシュ表
                    hashTable[ 0]   : 7   “pleGrapefr...”
                    ・・・
                    hashTable[12]   : 2   “apeAppleGr...”
                    hashTable[13]   : 5   “AppleGrape...”
                    ・・・
                    hashTable[27]   : 1   “rapeAppleg...”
                    ・・・
                    hashTable[33]   : 0   “GrapeApple...”
                    ・・・
                    hashTable[36]   : 3   “peAppleGra...”




                                                            54
                    ・・・
ハッシュ表による探索


圧縮対象の文字列
 GrapeAppleGrapefruit
                                                  ハッシュ表
                      hashTable[ 0]   : 7   “pleGrapefr...”
                      ・・・
                      hashTable[12]   : 2   “apeAppleGr...”
hashTable[27] のエントリ
                      hashTable[13]   : 5   “AppleGrape...”
とは文字列が一致しないの          ・・・
で、エントリを上書きして
                      hashTable[27]   : 9   “eGrapefrui...”
次に進む                  ・・・
                      hashTable[33]   : 0   “GrapeApple...”
                      ・・・
                      hashTable[36]   : 3   “peAppleGra...”




                                                              55
                      ・・・
ハッシュ表による探索


圧縮対象の文字列
GrapeAppleGrapefruit
次の “eGra” のハッシュ値
                                               ハッシュ表
は 33               hashTable[ 0]   : 7   “pleGrapefr...”
                   ・・・
                   hashTable[12]   : 2   “apeAppleGr...”
                   hashTable[13]   : 5   “AppleGrape...”
                   ・・・
                   hashTable[27]   : 9   “eGrapefrui...”
                   ・・・
                   hashTable[33]   : 0   “GrapeApple...”
                   ・・・
                   hashTable[36]   : 3   “peAppleGra...”




                                                           56
                   ・・・
ハッシュ表による探索


圧縮対象の文字列
GrapeAppleGrapefruit
次の “eGra” のハッシュ値
                                               ハッシュ表
は 33               hashTable[ 0]   : 7   “pleGrapefr...”
                   ・・・
                   hashTable[12]   : 2   “apeAppleGr...”
                   hashTable[13]   : 5   “AppleGrape...”
                   ・・・
                   hashTable[27]   : 9 一致
                                        “eGrapefrui...”
                   ・・・
                   hashTable[33]   : 0   “GrapeApple...”
                   ・・・
                   hashTable[36]   : 3   “peAppleGra...”




                                                           57
                   ・・・
ハッシュ表による探索


圧縮対象の文字列
 GrapeAppleGrapefruit
                                                   ハッシュ表
                      hashTable[ 0]   : 7    “pleGrapefr...”
                      ・・・
                      hashTable[12]   : 2    “apeAppleGr...”
                      hashTable[13]   : 5    “AppleGrape...”
hashTable[33] のエントリ   ・・・
と文字列が5文字一致する          hashTable[27]   : 9    “eGrapefrui...”
ので圧縮する(&エントリ          ・・・
を上書きする)               hashTable[33]   : 10   “Grapefluit...”
                      ・・・
                      hashTable[36]   : 3    “peAppleGra...”




                                                               58
                      ・・・
探索位置をスキップする




              59
探索位置をスキップする
•圧縮しにくい(=一致するものがない)
 文字列の並びを読み飛ばす仕組み
 •snappy でも採用されている
 •スキップの幅を少しずつ広げる




                      60
探索位置をスキップする
 •圧縮しにくい(=一致するものがない)
  文字列の並びを読み飛ばす仕組み
  •snappy でも採用されている
  •スキップの幅を少しずつ広げる

hogelNieafhInknQVS4Swk2QwOZmzSOthogehogehoge




                                           61
探索位置をスキップする
 •圧縮しにくい(=一致するものがない)
  文字列の並びを読み飛ばす仕組み
  •snappy でも採用されている
  •スキップの幅を少しずつ広げる

hogelNieafhInknQVS4Swk2QwOZmzSOthogehogehoge

最初は
1文字ずつ




                                           62
探索位置をスキップする
 •圧縮しにくい(=一致するものがない)
  文字列の並びを読み飛ばす仕組み
  •snappy でも採用されている
  •スキップの幅を少しずつ広げる

hogelNieafhInknQVS4Swk2QwOZmzSOthogehogehoge

        なかなか一致が
        見つからないなら、
        2文字おきに探す




                                           63
探索位置をスキップする
 •圧縮しにくい(=一致するものがない)
  文字列の並びを読み飛ばす仕組み
  •snappy でも採用されている
  •スキップの幅を少しずつ広げる

hogelNieafhInknQVS4Swk2QwOZmzSOthogehogehoge

                        それでも見つからなければ
                        4文字おきにする




                                           64
探索位置をスキップする
 •圧縮しにくい(=一致するものがない)
  文字列の並びを読み飛ばす仕組み
  •snappy でも採用されている
  •スキップの幅を少しずつ広げる
                                 一致

hogelNieafhInknQVS4Swk2QwOZmzSOthogehogehoge

                            一致する文字列が見つかった
                            ところでリセットする




                                            65
探索位置をスキップする
•圧縮しにくい(=一致するものがない)
 文字列の並びを読み飛ばす仕組み
 •snappy でも採用されている
 •スキップの幅を少しずつ広げる
•デメリット
 •圧縮できる文字列を取りこぼしてしまう
•メリット
 •無駄な比較の回数を減らすことができる




                       66
【参考】スキップされた一致の回収




                   67
【参考】スキップされた一致の回収
•スキップにより取りこぼされてしまっ
 た文字列の一致をちょっとだけ回収す
 るしくみ
 •後方方向だけでなく、前方にも向かって
  一致を確認する




                       68
【参考】スキップされた一致の回収
•スキップにより取りこぼされてしまっ
 た文字列の一致をちょっとだけ回収す
 るしくみ
 •後方方向だけでなく、前方にも向かって
  一致を確認する
                        一致

  hogefugalNi … ZmzSOthogefugahoge

                    4文字の一致が見つかった




                                     69
【参考】スキップされた一致の回収
•スキップにより取りこぼされてしまっ
 た文字列の一致をちょっとだけ回収す
 るしくみ
 •後方方向だけでなく、前方にも向かって
  一致を確認する
                        後に続く ga が一致している

  hogefugalNi … ZmzSOthogefugahoge




                                          70
【参考】スキップされた一致の回収
•スキップにより取りこぼされてしまっ
 た文字列の一致をちょっとだけ回収す
 るしくみ
 •後方方向だけでなく、前方にも向かって
  一致を確認する
                  さらには前に続く ho も一致
                  している(計8文字の一致)

  hogefugalNi … ZmzSOthogefugahoge




                                     71
【参考】スキップされた一致の回収
•スキップにより取りこぼされてしまっ
 た文字列の一致をちょっとだけ回収す
 るしくみ
 •後方方向だけでなく、前方にも向かって
  一致を確認する
•メリット
 •時間性能に大きな影響を与えることなく
  圧縮性能を改善できる




                       72
一致長をすばやく
  算出する



           73
一致長の算出

2つの文字列の一致長を高速に求めたい…

 きみがためはるののにいでてわかなつむ …



 きみがためをしからざりしいのちさへ …




                        74
一致長の算出

2つの文字列の一致長を高速に求めたい…

 きみがためはるののにいでてわかなつむ …



 きみがためをしからざりしいのちさへ …

  1文字ずつ比較すれば
  確実! (けど遅い…)




                        75
一致長の算出
•概要
 • ハッシュ表により検出された4文字の一致に
   続く、後続の一致文字数を算出する
•戦略
 1. 4 or 8 バイトの単位でざくざく一致を確認
  •   32bit 環境は 4 バイト、64bit 環境は 8 バイト
      単位
 2. 上記単位での不一致が見つかったところで、
    厳密な一致長を確定する




                                        76
ざっくりと一致を確認する




               77
ざっくりと一致を確認する
•2つの文字列を4or8バイトずつずら
 しながら XOR をとる
 •XOR の結果が 0 なら一致しているよね
 •XOR の結果が 0 でなければ一致してない
  よね
  • 後述する処理により、何バイトの一致があっ
    たのかを厳密に算出する




                           78
ざっくりと一致を確認する



            一致

 FooBarBarBarFooBarBarBaz




    最初の4バイトの一致が見つかった状態




                            79
ざっくりと一致を確認する




 FooBarBarBarFooBarBarBaz

            ‘arBa’ ⊕ ‘arBa’=0

続く4バイトの XOR の結果が 0 なら次の4バイトへ




                                80
ざっくりと一致を確認する




 FooBarBarBarFooBarBarBaz

                ‘rBar’ ⊕ ‘rBaz’!=0

       XOR の結果が 0 でないところで
       ざっくり一致長の算出を終える




                                     81
一致長を厳密に確認する




              82
一致長を厳密に確認する
•早い話が、LSB を求める問題になる
•4or8バイトの XOR の結果(!=0)から以下
 の方法で算出
 • x86 の bsr 命令を利用する
  • [VC] _BitScanReverse/_BitScanReverse64()
  • [gcc] __builtin_clzll()
 • 頑張って計算する
  • 二分探索
  • De Bruijn 数列を利用




                                               83
一致長を厳密に確認する
•De Bruijn 数列を使った LSB ぽい計算
•条件分岐を一切排除することができる
   • 補数
   • ビット積
   • 乗算
   • ビットシフト
   • ルックアップテーブル参照



詳細は右記URLを参照:http://fastcompression.blogspot.jp/2011/12/fast-sequence-comparison.html




                                                                                       84
細かいことは
 しない



         85
辞書式圧縮アルゴリズムの出力
•出力されるもの
 •リテラル文字列(圧縮できない文字列)
 •リテラルの長さ
 •一致した場所の情報
 •一致した長さ
•圧縮率を高めるにはビット単位で出力
 したいところ
 •Huffman 符号/算術符号などを利用




                         86
ビット演算・出力を極力しない
•LZ4 ではバイト単位で出力する
•ビットマスクの演算も非常に少ない




図:http://fastcompression.blogspot.jp/2011/05/lz4-explained.html




                                                                  87
ビット演算・出力を極力しない
•LZ4 ではバイト単位で出力する
•ビットマスクの演算も非常に少ない




ビット演算が必要
 なのはここだけ

図:http://fastcompression.blogspot.jp/2011/05/lz4-explained.html




                                                                  88
Conclusion




             89
Conclusion
•機能をちょっと制限する
•泥臭い努力をする
•探索を端折る
•一致長をすばやく算出する
•細かいことはしない




                90
ご清聴
ありがとうござい
 ました!!!


           91
We’re hiring !!!
 分析力をコアとする情報最適化企業




  では、一緒に楽しくお仕事できる
    エンジニアを募集しています!




                     92
こちらも募集中!


 データマイニング+WEB勉強会@
 東京(#TokyoWebmining)では
  スピーカーを大絶賛募集中です!
https://groups.google.com/forum/?fromgroups=#!forum/webmining-tokyo




                                                                      93

Más contenido relacionado

La actualidad más candente

機械学習 / Deep Learning 大全 (4) GPU編
機械学習 / Deep Learning 大全 (4) GPU編機械学習 / Deep Learning 大全 (4) GPU編
機械学習 / Deep Learning 大全 (4) GPU編Daiyu Hatakeyama
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)NTT DATA Technology & Innovation
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いota42y
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)Mikiya Okuno
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)NTT DATA Technology & Innovation
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについてmoai kids
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計増田 亨
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計Yoshinori Matsunobu
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 

La actualidad más candente (20)

機械学習 / Deep Learning 大全 (4) GPU編
機械学習 / Deep Learning 大全 (4) GPU編機械学習 / Deep Learning 大全 (4) GPU編
機械学習 / Deep Learning 大全 (4) GPU編
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
WiredTigerを詳しく説明
WiredTigerを詳しく説明WiredTigerを詳しく説明
WiredTigerを詳しく説明
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 

Similar a DSIRNLP #3 LZ4 の速さの秘密に迫ってみる

Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Hiro Yoshioka
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code readingHiro Yoshioka
 
Deep learning Libs @twm
Deep learning Libs @twmDeep learning Libs @twm
Deep learning Libs @twmYuta Kashino
 
HBaseを用いたグラフDB「Hornet」の設計と運用
HBaseを用いたグラフDB「Hornet」の設計と運用HBaseを用いたグラフDB「Hornet」の設計と運用
HBaseを用いたグラフDB「Hornet」の設計と運用Toshihiro Suzuki
 
CRF を使った Web 本文抽出
CRF を使った Web 本文抽出CRF を使った Web 本文抽出
CRF を使った Web 本文抽出Shuyo Nakatani
 
刊行記念セミナー「HBase徹底入門」
刊行記念セミナー「HBase徹底入門」刊行記念セミナー「HBase徹底入門」
刊行記念セミナー「HBase徹底入門」cyberagent
 
Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Hokkaido.cap#1 Wiresharkの使い方(基礎編)Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Hokkaido.cap#1 Wiresharkの使い方(基礎編)Panda Yamaki
 
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったかm2ym
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacksyaegashi
 
Logをs3とredshiftに格納する仕組み
Logをs3とredshiftに格納する仕組みLogをs3とredshiftに格納する仕組み
Logをs3とredshiftに格納する仕組みKen Morishita
 
Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方MITSUNARI Shigeo
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺MITSUNARI Shigeo
 
HBase×Impalaで作るアドテク 「GMOプライベートDMP」@HBaseMeetupTokyo2015Summer
HBase×Impalaで作るアドテク「GMOプライベートDMP」@HBaseMeetupTokyo2015SummerHBase×Impalaで作るアドテク「GMOプライベートDMP」@HBaseMeetupTokyo2015Summer
HBase×Impalaで作るアドテク 「GMOプライベートDMP」@HBaseMeetupTokyo2015SummerMichio Katano
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までMasahiro Wakame
 
高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応marsee101
 
Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Kazuki Ohta
 
第9回ACRiウェビナー_日立/島田様ご講演資料
第9回ACRiウェビナー_日立/島田様ご講演資料第9回ACRiウェビナー_日立/島田様ご講演資料
第9回ACRiウェビナー_日立/島田様ご講演資料直久 住川
 
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3moai kids
 
Osc2008 Opensuse Moonlinx
Osc2008 Opensuse MoonlinxOsc2008 Opensuse Moonlinx
Osc2008 Opensuse MoonlinxKazuhisa Hara
 

Similar a DSIRNLP #3 LZ4 の速さの秘密に迫ってみる (20)

Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
 
Deep learning Libs @twm
Deep learning Libs @twmDeep learning Libs @twm
Deep learning Libs @twm
 
HBaseを用いたグラフDB「Hornet」の設計と運用
HBaseを用いたグラフDB「Hornet」の設計と運用HBaseを用いたグラフDB「Hornet」の設計と運用
HBaseを用いたグラフDB「Hornet」の設計と運用
 
CRF を使った Web 本文抽出
CRF を使った Web 本文抽出CRF を使った Web 本文抽出
CRF を使った Web 本文抽出
 
刊行記念セミナー「HBase徹底入門」
刊行記念セミナー「HBase徹底入門」刊行記念セミナー「HBase徹底入門」
刊行記念セミナー「HBase徹底入門」
 
Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Hokkaido.cap#1 Wiresharkの使い方(基礎編)Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Hokkaido.cap#1 Wiresharkの使い方(基礎編)
 
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacks
 
Logをs3とredshiftに格納する仕組み
Logをs3とredshiftに格納する仕組みLogをs3とredshiftに格納する仕組み
Logをs3とredshiftに格納する仕組み
 
Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
HBase×Impalaで作るアドテク 「GMOプライベートDMP」@HBaseMeetupTokyo2015Summer
HBase×Impalaで作るアドテク「GMOプライベートDMP」@HBaseMeetupTokyo2015SummerHBase×Impalaで作るアドテク「GMOプライベートDMP」@HBaseMeetupTokyo2015Summer
HBase×Impalaで作るアドテク 「GMOプライベートDMP」@HBaseMeetupTokyo2015Summer
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
 
高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応
 
Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方
 
第9回ACRiウェビナー_日立/島田様ご講演資料
第9回ACRiウェビナー_日立/島田様ご講演資料第9回ACRiウェビナー_日立/島田様ご講演資料
第9回ACRiウェビナー_日立/島田様ご講演資料
 
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3
 
Osc2008 Opensuse Moonlinx
Osc2008 Opensuse MoonlinxOsc2008 Opensuse Moonlinx
Osc2008 Opensuse Moonlinx
 

DSIRNLP #3 LZ4 の速さの秘密に迫ってみる