SlideShare a Scribd company logo
1 of 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

More Related Content

What's hot

できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?naoki koyama
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容sairoutine
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例sairoutine
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Hiro H.
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング佑哉 廣岡
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料直久 住川
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 

What's hot (20)

できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 

Similar to 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 to 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
 

Recently uploaded

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Recently uploaded (10)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

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