SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxpsMITSUNARI Shigeo
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenMITSUNARI Shigeo
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 
よくわかるHopscotch hashing
よくわかるHopscotch hashingよくわかるHopscotch hashing
よくわかるHopscotch hashingKumazaki Hiroki
 
「日本語LaTeX」が多すぎる件について
「日本語LaTeX」が多すぎる件について「日本語LaTeX」が多すぎる件について
「日本語LaTeX」が多すぎる件についてTakayuki Yato
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編infinite_loop
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングKohsuke Yuasa
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解MITSUNARI Shigeo
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Preferred Networks
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
Deflate
DeflateDeflate
Deflate7shi
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 

Was ist angesagt? (20)

条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
よくわかるHopscotch hashing
よくわかるHopscotch hashingよくわかるHopscotch hashing
よくわかるHopscotch hashing
 
「日本語LaTeX」が多すぎる件について
「日本語LaTeX」が多すぎる件について「日本語LaTeX」が多すぎる件について
「日本語LaTeX」が多すぎる件について
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
Deflate
DeflateDeflate
Deflate
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Kürzlich hochgeladen

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 

Kürzlich hochgeladen (9)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

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