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

More Related Content

What's hot (20)

Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
Hideki Tsunashima
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Motonori Shindo
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
Kohsuke Yuasa
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
Preferred Networks
 
Google Cloud でアプリケーションを動かす.pdf
Google Cloud でアプリケーションを動かす.pdfGoogle Cloud でアプリケーションを動かす.pdf
Google Cloud でアプリケーションを動かす.pdf
Google Cloud Platform - Japan
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
 
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
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
 
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter
maruyama097
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
Yuichi Ito
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
Hideki Tsunashima
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Motonori Shindo
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
Kohsuke Yuasa
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
Preferred Networks
 
Google Cloud でアプリケーションを動かす.pdf
Google Cloud でアプリケーションを動かす.pdfGoogle Cloud でアプリケーションを動かす.pdf
Google Cloud でアプリケーションを動かす.pdf
Google Cloud Platform - Japan
 
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
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
 
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter
maruyama097
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
Yuichi Ito
 

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
Hiro Yoshioka
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
Hiro Yoshioka
 
Deep learning Libs @twm
Deep learning Libs @twmDeep learning Libs @twm
Deep learning Libs @twm
Yuta 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 hacks
yaegashi
 
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
 
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
Yahoo!デベロッパーネットワーク
 
HBase×Impalaで作るアドテク 「GMOプライベートDMP」@HBaseMeetupTokyo2015Summer
HBase×Impalaで作るアドテク「GMOプライベートDMP」@HBaseMeetupTokyo2015SummerHBase×Impalaで作るアドテク「GMOプライベートDMP」@HBaseMeetupTokyo2015Summer
HBase×Impalaで作るアドテク 「GMOプライベートDMP」@HBaseMeetupTokyo2015Summer
Michio 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 #3
moai kids
 
Osc2008 Opensuse Moonlinx
Osc2008 Opensuse MoonlinxOsc2008 Opensuse Moonlinx
Osc2008 Opensuse Moonlinx
Kazuhisa Hara
 
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 reading
Hiro Yoshioka
 
Deep learning Libs @twm
Deep learning Libs @twmDeep learning Libs @twm
Deep learning Libs @twm
Yuta 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 hacks
yaegashi
 
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」@HBaseMeetupTokyo2015Summer
Michio 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 #3
moai kids
 
Osc2008 Opensuse Moonlinx
Osc2008 Opensuse MoonlinxOsc2008 Opensuse Moonlinx
Osc2008 Opensuse Moonlinx
Kazuhisa Hara
 
Ad

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