SlideShare a Scribd company logo
世界最速の正規表現
                        JITエンジンの実装
                         Ryoma Sin’ya (@sinya8282)
                       サイボウズ・ラボユース最終成果報告会
                         2012/3/26 at 秋葉原ダイビル


Monday, March 26, 12
皆さん
                       正規表現は
                       お好きですか?

Monday, March 26, 12
僕は正規表現が
            好きじゃありません



Monday, March 26, 12
僕は正規表現が
            好きじゃありません
                        愛してます

Monday, March 26, 12
%	 whoami
 • 新屋                  良磨 (@sinya8282)
      • 東京工業大学修士一年
      • 一期生では最年長
           • 精神は林君が最年長説


      • 好きな表現は正規表現
      • 好きな言語は正規言語
      • 好きな曲は




Monday, March 26, 12
%	 whoami
 • 新屋                  良磨 (@sinya8282)
      • 東京工業大学修士一年
      • 一期生では最年長
           • 精神は林君が最年長説


      • 好きな表現は正規表現
      • 好きな言語は正規言語
      • 好きな曲は
            • Regular     Expression
                (by Broken Drum)

Monday, March 26, 12
サイボウズ・ラボユース
                     ではなにを?
             • 正規表現エンジンの実装,             高速化
                       • DFAをJITして高速化 (実行時コード生成)
                       • オートマトンのデータ並列実行による高速化
             • 正規表現を利用したツール/システムの開発
                  • テキスト検索(grep)
                  • 正規表現変換ツール
                  • 正規表現の拡張演算子等
             • エンジンはgithubで公開        → Regen(レーゲン)


Monday, March 26, 12
なぜ正規表現エンジン?
             • 正規表現の歴史は古い。種類(亜種)も多い

            I define UNIX as “30 definitions of regular
              expressions living under one roof.” — Don Knuth

             • 実装も多い(本当に多い)
                  • GNU   grep, Google RE2, 鬼車, PCRE, TRE,,,,
             • 車輪の再発明?




Monday, March 26, 12
なぜ正規表現エンジン?
             • 正規表現の歴史は古い。種類(亜種)も多い

            I define UNIX as “30 definitions of regular
              expressions living under one roof.” — Don Knuth

             • 実装も多い(本当に多い)
                  • GNU   grep, Google RE2, 鬼車, PCRE, TRE,,,,
             • 車輪の再発明?

          そうだね。ただし最速の車輪だ。— Ryoma Sin’ya


Monday, March 26, 12
なにが最速?
             • 「正規表現マッチング」が最速
             • 「DFAの状態遷移」が最速       (Not文字列探索)
                  • DFAをJITすることで状態遷移を高速化
                  • データ並列マッチングをサポート
             • なにと比較して?
                  • GoogleRE2, GNU grep, cgrep 等のDFAベースエン
                       ジンと比較して高速(RE2の6~10倍)




Monday, March 26, 12
なにが最速?
             • 「正規表現マッチング」が最速
             • 「DFAの状態遷移」が最速       (Not文字列探索)
                  • DFAをJITすることで状態遷移を高速化
                  • データ並列マッチングをサポート
             • なにと比較して?
                  • GoogleRE2, GNU grep, cgrep 等のDFAベースエン
                       ジンと比較して高速(RE2の6~10倍)

                          詳細はポスターにも!!
Monday, March 26, 12
並列化と実行時コード生成を用いた                                                                                                                                                                                                                                                             正規表現エンジン「Regen」
                                                                                                                                                                                                                                                                                                                    :
                             正規表現マッチングの高速化                                                                                                                                                                                                                                                                &そのツール群の紹介
                                                                                新屋 良磨 †                                光成 滋生 †† 佐々 政孝 †                                                                                                                                                                   Regen でサポートしてる正規表現の拡張演算子, 及びツール群を紹介する.
                                                                                † 東京工業大学 †† サイボウズ・ラボ株式会社                                                                                                                                                                                                  課題や機能についてなど, 多くの意見が聞きたい.

                                   我々は並列化と実行時コード生成を用いた高速な正規表現エンジン Regen を開発した.                                                                                                                                                                                                                拡張演算子
                                   Regen における設計方針や特長を紹介し, 既存実装との違いを説明する.
                                                                                                                                                                                                                                                                                                  ✦ 積集合                               ✦ 弱後方参照
                  Regenのマッチング内部動作                                                                                                                                                                                                                                                                  •   /R1 &R2 /→ R1とR2両方にマッチ          •PCRE等で使える後方参照の制限版
                                                                                                                                                                                                                                                                                                  ✦ 対称差                                •有限パターンの参照なら区別できる.
                                                                                                                                                                                                                                                                                                   •/R1&&R2/→R1かR 一方のみにマッチ             •/(1|2|30?) = (1)/ → 恒等式
                                                                                       [01]                       1                                                                          0                               1
                                                                                                  NFA                                                                                                   DFA
                                                                                                                                                                                                                                                                                                                                       •無限パターン(繰り返し)は区別しない.
                                                                                                                                                                                                                                                                                                                      2
                                                                                                       1
                                                                                                                                        変換
                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                                                  ✦ 補集合
                                                                                                                                                                                                                                                                                                   •/!(R1)/→R1 にマッチしない列にマッチ            •/(1|2+) = (1)/ →/1 = 1|2+ = 2 + /
                                                                                        q0                        q1                                                                         q0                              q1
                                                                                                       0                                                                                                  0

                                                                パース&変換                                                                                                                                                                   JIT (Χbyak)
                                           正規表現                                                                   変換                                                     変換                                                                                                                       ✦ 逆順                                ✦ 上限付き再帰
                   /(0 ⇤ 1) + /
                                                                                                                                                    0
                                                                                                                                                                                                                                                                                                   •/ ⇠ (R1)/→R1のマッチ文字列の逆文字列 •PCRE等で使える再帰(?R)の制限版
                                                                                                                                                                                                                                                                                                                             •/a@b@c/→“aabcbabcc”
                                                                                                                                                                               1
                                                                                                                                                                                                                                        文字列に対して                                                   ✦ 置換, シャッフル, 非強欲な繰り返し...
                                                                                                                                                                                                                                                                                                   •紹介してる演算全てDFAで実現          •/(@{0, 2})/→ “()”, “(())”, “((()))”
                                                                                                                                                    q1       1
                                                                                                                         0                                   0                 q2                      JIT                              マッチング開始
                                                                                                                                                    1                                                (Χbyak)
                                入力: 正規表現&文字列
                                                                                                                  q0
                                                                                                                               SSFA (並列実行可能なDFA)                                                                                                                                         正規表現から受理文字列出力                               正規表現からDFA(図)出力
                                                                                                                                                                                                                                                                                                                                                                        1

                   Regen内部のコード生成(JIT)部抜粋                                                                                                    コード生成(JIT)による性能向上                                                                                                                                     Example: 論理式を充足する解を全列挙                                          q7
                                                                                                                                                                                                                                                                                                                                                              0         2
                                                                                                                                                                 Google RE2                                            Regen                     Regen JIT                                             (x1 _ x2 _ x3 ) ^ (x1 _ x2 _ x3 )                      1
                                                                                                                                                                                                                                                                                                                                                              3   q9
                                                                                                                                                                                                                                                                                                                                                                        0
                                                                                                                                                                                                                                                                                                                                                                            q12
                                                                                                                                                                                                                                                                                                                                                         q4
                                                                                                                                                         3GB/sec                                                                                                                                                                                                        3
                                                                                                                                                                                                                              Fast                                                                                                                            2
                                                                                                                                                                                                                                                                                                                                                                                  2
                                                                                                                                       Throughput




                                                                                                                                                    2.5GB/sec                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                                                                     3
                                                                                                                                                         2GB/sec                                                                                                                                                                                              3   q10
                                                                                                                                                                                                                                                                                                                                                                        0
                                                                                                                                                                                                                                                                                                                                                                            q13
                                                                                                                                                                                                                                                                                                                                                                                  1
                                                                                                                                                    1.5GB/sec                                                                                                                                                                                        0
                                                                                                                                                                                                                                                                                                                                                         q1
                                                                                                                                                                                                                                                                                                                                                              1         3             q15
                                                                                                                                                                                                                                                                                                                                                                                  0
                                                                                                                                                         1GB/sec                                                                                                                                                                                q0   1        0   q5    1
                                                                                                                                                                                                                              Slow                                                                                                                       q2
                                                                                                                                                                                                                                                                                                                                                                            q14
                                                                                                                                                    0.5GB/sec                                                                                                                                                                                                 2                   3

                                                                                                                                                                                                                                                                                                                                正規表現で
                                                                                                                                                                                                                                                                                                                                                     2                  2
                                                                                                                                                                                                                                                                                                                                                              3
                                                                                                                                                         0GB/sec                                                                                                                                                                                                        3
                                                                                                                                                                               最適化が効かないパターン                                             最適化が効くパターン                                                                              SATを解く!                           q6
                                                                                                           C++ JIT Library                                                      /(([02468][13579]){5})*/                                 /(0123456789)*/                                                                                                 q3   2
                                                                                                                                                                                                                                                                                                                                                                            q11
                                                                                                                                                                                                                                                                                                                                                                        1
                                                                                                             Χbyak                                                                                                                                                                                                                                            0   q8
                                                                                                                                                                                                                                                                                                                                                                        0


                   並列マッチングによる性能向上                                                                                                              並列化のオーバーヘッド                                                                                                                                                                                                    1


                                                 正規表現: /([0-4]{5}[5-9]{5})*/, 入力: 1GB                                                                       正規表現: /(([02468][13579]){5})*/, 入力: 100KB~1000KB
                                                                                                                                                                                                                                                                                             実装済みツール群                                今後の課題
                           [GB/sec]
                                                                                                                                                                                                                                                                                                  ✦ 正規表現Lib: Regen                   ✦ 他アーキテクチャ対応
                                                                                                                                                                                                                                                                                                   •                                  • 今はX86-64のみ(Χbyak)
                                20                                                                                                                         Slow          ベンチマークA                     ベンチマークB                                                2.40 msec
                                                                                                                                         8,000K
                                                                                                                                                                                                                                                                                                     Google RE2 を参考
                                                                                                                                                                                                                                                                                                   •                                  • LLVM? (抽象化で性能落ちない?)
                                                                                                                  Fast
                                                                                                                                       Google RE2                0.263                       0.264
                               17.5                                                                                                      7,200K
                                                                                                                         Clock Cycle




                                                                                                                                                                                                                                                                                                     Submatch 未対応
                                                                                                                                       Regen O0                                      0.449                     0.448
                                                                                                                                                                                                                                                            1.92 msec
                  Throughput




                                15                                                                                                       6,400K
                                                                                                                                       Regen O3                                      1.521                     2.761

                                                                                                                                           5,600K
                                                                                                                                                                                                                                                                                                  ✦ 正規表現変換系: recon                   ✦ Submatch(キャプチャ)の対応
                                                                                                                                                                                                                                                                                                   •                                  • 現在でもマッチした文字列全体の取得は可能.
                               12.5                                                                                                                                                                                                                         1.44 msec
                                                                                                                                           4,800K
                                10                                                                                                                                                                                                                                                                   正規表現 to 正規表現
                                                                                                                                                                                                                                                                                                   •                                  • マッチした文字列の部分的な取得は未対応
                                                                                                                                           4,000K
                                                                                                                                                                                                                                                            0.96 msec
                                                                                                                                                            Fast
                                                                                                                                                                                                                                                                                                     正規表現 to DFA(図)
                                7.5                                                                                                        3,200K



                                                                                                                                                                                                                                                                                                   •
                                                                                                                                           2,400K

                                                                                                                                                                                                                                                                                                     正規表現 to 受理文字列                   ✦ 性能を生かしたツール/システムの考案
                                   5                                                                                                                                                                                                                        0.48 msec
                                                                                                                                           1,600K
                                2.5
                                                                                                                  Slow                         800K
                                                                                                                                                                                                                                                                                                    grep: regengrep
                                                                                                                                                                                                                                                                                                  ✦
                                                                                                                                                                                                                                                                                                   •
                                   0                                                                                                                0K
                                                                                                                                                                                                                                                            [KB]
                                                                                                                                                                                                                                                                                                     JIT版は高速.
                                                                                                                                                           100           200        300          400      500          600        700    800   900   1000
                                       1                2           3            4                5           6


                                                                                                                                                                                                                                                                                                   •
                                                                                                                                                                                                        Input size
                                                             Number of Threads
                                                       Regen              Regen JIT                   Read only
                                                                                                                                                                                    1スレッド
                                                                                                                                                                                    1スレッドJIT
                                                                                                                                                                                                                             2スレッド
                                                                                                                                                                                                                             2スレッドJIT
                                                                                                                                                                                                                                                                                                     まだ開発中(速度,機能)

                                                                                                                                                                                                                                                                        Thursday, January 5, 12
      Thursday, January 5, 12




                       1                   2            3           4            5            6

gen                        0.449               0.897        1.327       1.759        2.236        2.681



      Monday, March 26, 12
gen JIT                    2.321               4.550        6.917       9.167        11.27
                                                                                     Text         13.59

ad                         6.041               12.11        16.60       18.37        18.89        19.17
実装の詳細は色々なとこで
             • 「並列化と実行時コード生成を用いた正規表現
                 マッチングの高速化」
                  •    日本ソフトウェア科学会第28回大会 (書き直し中)
                  •    第53回プログラミング・シンポジウム - 予稿, ポスター

             • 「正規表現とJITと並列化とベンチマーク」
                  •    x86/x64最適化勉強会1 - スライド

             • 「正規表現の限界」
                  •    Shibuya.pm ~夏の正規表現祭り~ - スライド




Monday, March 26, 12
実装の詳細は色々なとこで
             • 「並列化と実行時コード生成を用いた正規表現
                 マッチングの高速化」
                  •    日本ソフトウェア科学会第28回大会 (書き直し中)
                  •    第53回プログラミング・シンポジウム - 予稿, ポスター

             • 「正規表現とJITと並列化とベンチマーク」
                  •    x86/x64最適化勉強会1 - スライド

             • 「正規表現の限界」
                  •    Shibuya.pm ~夏の正規表現祭り~ - スライド

                        じゃあ今日はなにを喋る?
Monday, March 26, 12
オリジナルな成果
  • DFA-JITによる正規表現マッチングの高速化
       • JIT特有の最適化等
  • データ並列マッチングによる高速化
       • オートマトンを拡張


  • 正規表現の拡張演算の提案/実装
       • 弱後方参照,        上限付き再帰, 非強欲繰り返し(DFAver)




Monday, March 26, 12
オリジナルな成果
  • DFA-JITによる正規表現マッチングの高速化
       • JIT特有の最適化等
  • データ並列マッチングによる高速化
       • オートマトンを拡張


  • 正規表現の拡張演算の提案/実装
       • 弱後方参照,        上限付き再帰, 非強欲繰り返し(DFAver)


                        全部喋りたい...
Monday, March 26, 12
正規表現エンジン
                       開発過程を時系列で




Monday, March 26, 12
正規表現エンジン
                       開発過程を時系列で


 2011年
       3月 4            5   6   7   8   9   10   11   12


Monday, March 26, 12
上京。
                          正規表現エンジン
                         この時、正規表現(DFA)をJIT
                       開発過程を時系列で
                        する方法で悩んでいた。
                       (自前, gcc, asm, llvm, libjit, gnu lightning...)


 2011年
       3月 4               5      6      7     8      9     10     11    12


Monday, March 26, 12
ラボユース採択(神タイミング)。
                        正規表現エンジン
                       開発過程を時系列で


 2011年
       3月 4             5   6   7   8   9   10   11   12


Monday, March 26, 12
C++製JITライブラリXbyakで
                        正規表現エンジン
                         正規表現JIT。動いた。

                       開発過程を時系列で
                       ・X86最適化の権化、光成さんの
                        熱血指導の賜物?


 2011年
       3月 4             5   6   7   8   9   10   11   12


Monday, March 26, 12
DFA-JIT
                       C++製JITライブラリXbyakで
                        正規表現エンジン
                         正規表現JIT。動いた。

                       開発過程を時系列で
                       ・X86最適化の権化、光成さんの
                        熱血指導の賜物?


 2011年
       3月 4             5   6   7   8   9   10   11   12


Monday, March 26, 12
DFA-JIT
                         エントリー
           (レジスタ調整,初期状態へジャンプ)
                                      状態コード詳細 (24 Byte)
                        C++製JITライブラリXbyakで
                       状態0のコー
                           正規表現エンジン
                           正規表現JIT。動いた。
                       状態1のコー     cmp	 	 	 	 rdi,rsi	 #終端判定
                        je	 	 	 	 	 0x120005030
                         開発過程を時系列で
                        movzx	 	 r10,BYTE	 PTR	 [rdi]
               ・X86最適化の権化、光成さんの
                        inc	 	 	 	 rdi
             状態遷移テーブル
                熱血指導の賜物?jmp	 	 	 	 QWORD	 PTR	 [rdx
                        +r10*8]

    •コード生成は JIT ライブラリ Χbyak を使用.
 2011年
   3月
      •4 5 サイボウズ・ラボ 光成氏が開発.12
       Χbyak:
              6 7 8 9 10 11


Monday, March 26, 12
C++製JITライブラリXbyakで
                        正規表現エンジン
                         正規表現JIT。動いた。

                       開発過程を時系列で
                       ・X86最適化の権化、光成さんの
                        熱血指導の賜物?


 2011年
       3月 4             5   6   7   8   9   10   11   12


Monday, March 26, 12
正規表現のデータ並列マッチン
                        正規表現エンジン
                       グを実装。(オートマトンを拡張)

                       開発過程を時系列で
                       ・巨大なテキストの全体マッチング
                        では台数効果が見込める。
                           (詳細はポスターで)

 2011年
       3月 4             5   6   7   8   9   10   11   12


Monday, March 26, 12
データ並列マッチング
                       正規表現のデータ並列マッチン
                        正規表現エンジン
                       グを実装。(オートマトンを拡張)

                       開発過程を時系列で
                       ・巨大なテキストの全体マッチング
                        では台数効果が見込める。
                           (詳細はポスターで)

 2011年
       3月 4             5   6   7   8   9   10   11   12


Monday, March 26, 12
データ並列マッチング
                       マッチングの並列化 = 状態遷移の並列化
                   a q1 b q3 a q1 a q2
                 正規表現のデータ並列マッチン
                q0
                   正規表現エンジン
                 グを実装。(オートマトンを拡張)
                •このような状態遷移を
                       開発過程を時系列で
                       ・巨大なテキストの全体マッチング
                                  a
                          a ? b 結果1  a
                        では台数効果が見込める。
                        ?
                           (詳細はポスターで)   q2
                         ?   ?   結果2
 2011年
     •のように文字単位で並列に実行
   3月 4 5  6 7 8  9 10                   11   12


Monday, March 26, 12
正規表現のデータ並列マッチン
                        正規表現エンジン
                       グを実装。(オートマトンを拡張)

                       開発過程を時系列で
                       ・巨大なテキストの全体マッチング
                        では台数効果が見込める。
                           (詳細はポスターで)

 2011年
       3月 4             5   6   7   8   9   10   11   12


Monday, March 26, 12
最適化、議論、実装、
                           正規表現エンジン
                           イベント、論文、学会....。

                         開発過程を時系列で
                       ・Shibuya.pm「夏の正規表現祭り」(thanks! 竹迫さん)
                       ・x86/x64最適化勉強会1  (thanks! 光成さん)

                       ・日本ソフトウェア科学会第28会大会@沖縄



 2011年
       3月 4                5    6   7    8     9     10   11   12


Monday, March 26, 12
最適化、議論、実装、
                           正規表現エンジン
                           イベント、論文、学会....。
                       ・夏休み(学生)ということで、週3で
                         開発過程を時系列で
                       ・Shibuya.pm「夏の正規表現祭り」(thanks! 竹迫さん)
                        サイボウズ・ラボに出勤。開発。
                       ・x86/x64最適化勉強会1 (thanks! 光成さん)
                       ・ラボメンバーさんとの議論が楽しい!!!
                       ・日本ソフトウェア科学会第28会大会@沖縄
                       ・最適化/並列化/新機能等々,,, 色々 る。


 2011年
       3月 4                5    6   7    8   9    10   11    12


Monday, March 26, 12
ひたすら正規表現
                       正規表現エンジン
                         と戯れる。
                       開発過程を時系列で


 2011年
       3月 4            5   6   7   8   9   10   11   12


Monday, March 26, 12
ひたすら正規表現
                         正規表現エンジン
                          と戯れる。
                        開発過程を時系列で
                       ・正規表現の新しい演算を考える等(ポスター)



 2011年
       3月 4               5   6   7   8   9   10   11   12


Monday, March 26, 12
✦ 弱後方参照
           •有限パターンの参照なら区別できる.
                ひたすら正規表現
           •/(1|2|30?) = (1)/ → 恒等式
                 正規表現エンジン
           •無限パターン(繰り返し)は区別しない.
                     と戯れる。 = 2 + /
               開発過程を時系列で
           •/(1|2+) = (1)/ →/1 = 1|2+
                       ・正規表現の新しい演算を考える等(ポスター)
     ✦ 上限付き再帰
    •/a@b@c/→“aabcbabcc”
 2011年
    •/(@{0, 2})/7→ “()”, 9 10 “((()))”
   3月 4  5    6       8    “(())”, 11 12

Monday, March 26, 12
ひたすら正規表現
                         正規表現エンジン
                          と戯れる。
                        開発過程を時系列で
                       ・正規表現の新しい演算を考える等(ポスター)



 2011年
       3月 4               5   6   7   8   9   10   11   12


Monday, March 26, 12
2012年
       1月 2            3


Monday, March 26, 12
ポスター発表。
                       ・第53回プログラミング・シンポジウム
                        「並列化と実行時コード生成を用いた
                         正規表現マッチングの高速化」
                        → 入り口にあるポスターです。


 2012年
       1月 2               3


Monday, March 26, 12
grepの実装。
                       ・grep高速化のための機能追加
                       ・固定文字列探索の高速化等(未完成)
                       ・ライブラリAPIを整理し始める(ようやく)



 2012年
       1月 2               3


Monday, March 26, 12
なう。




 2012年
       1月 2            3


Monday, March 26, 12
正規表現エンジン
                                Regen
                           githubで開発中!!
                            http://github.com/sinya8282/regen


 2012年
       1月 2            3


Monday, March 26, 12
正規表現エンジン
                                Regen
                           githubで開発中!!
                            http://github.com/sinya8282/regen


 2012年
       1月 2            3
                                 そして伝説へ....
Monday, March 26, 12
サイボウズ・ラボユース
                     ではなにを?(再)
             • 正規表現エンジンの実装,           高速化
                           Regen
                       • 「最速の車輪を。」→
             • 正規表現を利用したツール/システムの開発




Monday, March 26, 12
サイボウズ・ラボユース
                     ではなにを?(再)
             • 正規表現エンジンの実装,           高速化
                           Regen
                       • 「最速の車輪を。」→
             • 正規表現を利用したツール/システムの開発

                       そしてこれからは?
         • 欠点も多い(実装で克服できる?)
              • メモリ使用量,      制限(キャプチャ,,,), 苦手な正規表現,,,

         • ライブラリを完成させにゃ...             (目標: Google RE2)

         • 「文字列探索」以外にも正規表現を。(試行錯誤中)
Monday, March 26, 12

More Related Content

What's hot

Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Yahoo!デベロッパーネットワーク
 
アジャイル開発とメトリクス
アジャイル開発とメトリクスアジャイル開発とメトリクス
アジャイル開発とメトリクス
Rakuten Group, Inc.
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Yahoo!デベロッパーネットワーク
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
Recruit Technologies
 
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
Yuki Morishita
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜Takahiro Inoue
 
Helidon 概要
Helidon 概要Helidon 概要
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
NTT DATA Technology & Innovation
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
Yoshinori Nakanishi
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
 
インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)
Akihiro Kuwano
 
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!デベロッパーネットワーク
 
データ利活用を促進するメタデータ
データ利活用を促進するメタデータデータ利活用を促進するメタデータ
データ利活用を促進するメタデータ
Yahoo!デベロッパーネットワーク
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
 
実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方
Fujishiro Takuya
 

What's hot (20)

Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
 
アジャイル開発とメトリクス
アジャイル開発とメトリクスアジャイル開発とメトリクス
アジャイル開発とメトリクス
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
 
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
 
Helidon 概要
Helidon 概要Helidon 概要
Helidon 概要
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)
 
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
 
データ利活用を促進するメタデータ
データ利活用を促進するメタデータデータ利活用を促進するメタデータ
データ利活用を促進するメタデータ
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Google Cloud で実践する SRE
Google Cloud で実践する SRE  Google Cloud で実践する SRE
Google Cloud で実践する SRE
 
実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方
 

Viewers also liked

ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)Shinichi Awamoto
 
中間成果報告会 発表資料
中間成果報告会 発表資料中間成果報告会 発表資料
中間成果報告会 発表資料sn_monochr
 
Ruby × Arduinoで フィジカルコンピューティング やってみた
Ruby × Arduinoで フィジカルコンピューティング やってみたRuby × Arduinoで フィジカルコンピューティング やってみた
Ruby × Arduinoで フィジカルコンピューティング やってみた
shiftky
 
正規言語でプログラミング
正規言語でプログラミング正規言語でプログラミング
正規言語でプログラミング
Ryoma Sin'ya
 
人が神姫ん感(原文ママ)を感じるコンピュータ
人が神姫ん感(原文ママ)を感じるコンピュータ人が神姫ん感(原文ママ)を感じるコンピュータ
人が神姫ん感(原文ママ)を感じるコンピュータ
haru2036
 
C-HelperでC言語を効率的に学習しよう
C-HelperでC言語を効率的に学習しようC-HelperでC言語を効率的に学習しよう
C-HelperでC言語を効率的に学習しよう
Kota Uchida
 
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
サイボウズ・ラボユース 最終成果報告会プレゼンテーションサイボウズ・ラボユース 最終成果報告会プレゼンテーション
サイボウズ・ラボユース 最終成果報告会プレゼンテーションsn_monochr
 
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
Ryoma Sin'ya
 
サイボウズ・ラボユース成果報告会
サイボウズ・ラボユース成果報告会サイボウズ・ラボユース成果報告会
サイボウズ・ラボユース成果報告会
slankdev
 
サイボウズ・ラボ成果発表会
サイボウズ・ラボ成果発表会サイボウズ・ラボ成果発表会
サイボウズ・ラボ成果発表会
Komei Kamiya
 
Emnlp読み会資料
Emnlp読み会資料Emnlp読み会資料
Emnlp読み会資料
Jiro Nishitoba
 
EMNLP 2015 yomikai
EMNLP 2015 yomikai EMNLP 2015 yomikai
EMNLP 2015 yomikai
Yo Ehara
 
Humor Recognition and Humor Anchor Extraction
Humor Recognition and Humor Anchor ExtractionHumor Recognition and Humor Anchor Extraction
Humor Recognition and Humor Anchor Extraction
裕樹 奥田
 
星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章
Shuyo Nakatani
 
Learning Better Embeddings for Rare Words Using Distributional Representations
Learning Better Embeddings for Rare Words Using Distributional RepresentationsLearning Better Embeddings for Rare Words Using Distributional Representations
Learning Better Embeddings for Rare Words Using Distributional Representations
Takanori Nakai
 
星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章
Shuyo Nakatani
 
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
Shuyo Nakatani
 
A Neural Attention Model for Sentence Summarization [Rush+2015]
A Neural Attention Model for Sentence Summarization [Rush+2015]A Neural Attention Model for Sentence Summarization [Rush+2015]
A Neural Attention Model for Sentence Summarization [Rush+2015]
Yuta Kikuchi
 
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)
lestrrat
 
"Mix Automatic Sequences"(LATA'13) の紹介
"Mix Automatic Sequences"(LATA'13) の紹介"Mix Automatic Sequences"(LATA'13) の紹介
"Mix Automatic Sequences"(LATA'13) の紹介
Ryoma Sin'ya
 

Viewers also liked (20)

ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)
 
中間成果報告会 発表資料
中間成果報告会 発表資料中間成果報告会 発表資料
中間成果報告会 発表資料
 
Ruby × Arduinoで フィジカルコンピューティング やってみた
Ruby × Arduinoで フィジカルコンピューティング やってみたRuby × Arduinoで フィジカルコンピューティング やってみた
Ruby × Arduinoで フィジカルコンピューティング やってみた
 
正規言語でプログラミング
正規言語でプログラミング正規言語でプログラミング
正規言語でプログラミング
 
人が神姫ん感(原文ママ)を感じるコンピュータ
人が神姫ん感(原文ママ)を感じるコンピュータ人が神姫ん感(原文ママ)を感じるコンピュータ
人が神姫ん感(原文ママ)を感じるコンピュータ
 
C-HelperでC言語を効率的に学習しよう
C-HelperでC言語を効率的に学習しようC-HelperでC言語を効率的に学習しよう
C-HelperでC言語を効率的に学習しよう
 
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
サイボウズ・ラボユース 最終成果報告会プレゼンテーションサイボウズ・ラボユース 最終成果報告会プレゼンテーション
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
 
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
 
サイボウズ・ラボユース成果報告会
サイボウズ・ラボユース成果報告会サイボウズ・ラボユース成果報告会
サイボウズ・ラボユース成果報告会
 
サイボウズ・ラボ成果発表会
サイボウズ・ラボ成果発表会サイボウズ・ラボ成果発表会
サイボウズ・ラボ成果発表会
 
Emnlp読み会資料
Emnlp読み会資料Emnlp読み会資料
Emnlp読み会資料
 
EMNLP 2015 yomikai
EMNLP 2015 yomikai EMNLP 2015 yomikai
EMNLP 2015 yomikai
 
Humor Recognition and Humor Anchor Extraction
Humor Recognition and Humor Anchor ExtractionHumor Recognition and Humor Anchor Extraction
Humor Recognition and Humor Anchor Extraction
 
星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章
 
Learning Better Embeddings for Rare Words Using Distributional Representations
Learning Better Embeddings for Rare Words Using Distributional RepresentationsLearning Better Embeddings for Rare Words Using Distributional Representations
Learning Better Embeddings for Rare Words Using Distributional Representations
 
星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章
 
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
 
A Neural Attention Model for Sentence Summarization [Rush+2015]
A Neural Attention Model for Sentence Summarization [Rush+2015]A Neural Attention Model for Sentence Summarization [Rush+2015]
A Neural Attention Model for Sentence Summarization [Rush+2015]
 
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)
 
"Mix Automatic Sequences"(LATA'13) の紹介
"Mix Automatic Sequences"(LATA'13) の紹介"Mix Automatic Sequences"(LATA'13) の紹介
"Mix Automatic Sequences"(LATA'13) の紹介
 

Similar to 世界最速の正規表現JITエンジンの実装

R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
Koichi Hamada
 
ソーシャルウェブ と レコメンデーション -第4回データマイニング+WEB勉強会@東京
ソーシャルウェブ と レコメンデーション -第4回データマイニング+WEB勉強会@東京ソーシャルウェブ と レコメンデーション -第4回データマイニング+WEB勉強会@東京
ソーシャルウェブ と レコメンデーション -第4回データマイニング+WEB勉強会@東京
Koichi Hamada
 
ソーシャルデザインパターン -評判と情報収集-
ソーシャルデザインパターン -評判と情報収集-ソーシャルデザインパターン -評判と情報収集-
ソーシャルデザインパターン -評判と情報収集-
Koichi Hamada
 
Mahout Canopy Clustering - #TokyoWebmining 9
Mahout Canopy Clustering - #TokyoWebmining 9Mahout Canopy Clustering - #TokyoWebmining 9
Mahout Canopy Clustering - #TokyoWebmining 9
Koichi Hamada
 
Mahout JP - #TokyoWebmining 11th #MahoutJP
Mahout JP -  #TokyoWebmining 11th #MahoutJP Mahout JP -  #TokyoWebmining 11th #MahoutJP
Mahout JP - #TokyoWebmining 11th #MahoutJP
Koichi Hamada
 
[db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? ...
[db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? ...[db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? ...
[db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? ...
Insight Technology, Inc.
 
『モバゲーの大規模データマイニング基盤におけるHadoop活用』-Hadoop Conference Japan 2011- #hcj2011
『モバゲーの大規模データマイニング基盤におけるHadoop活用』-Hadoop Conference Japan 2011- #hcj2011 『モバゲーの大規模データマイニング基盤におけるHadoop活用』-Hadoop Conference Japan 2011- #hcj2011
『モバゲーの大規模データマイニング基盤におけるHadoop活用』-Hadoop Conference Japan 2011- #hcj2011
Koichi Hamada
 
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR  #11「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR  #11
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11
Koichi Hamada
 
"Mahout Recommendation" - #TokyoWebmining 14th
"Mahout Recommendation" -  #TokyoWebmining 14th"Mahout Recommendation" -  #TokyoWebmining 14th
"Mahout Recommendation" - #TokyoWebmining 14th
Koichi Hamada
 
MVSR Schedulerを作るための指針
MVSR Schedulerを作るための指針MVSR Schedulerを作るための指針
MVSR Schedulerを作るための指針
NTT Software Innovation Center
 
Large Scale Data Mining of the Mobage Service - #PRMU 2011 #Mahout #Hadoop
Large Scale Data Mining of the Mobage Service - #PRMU 2011 #Mahout #HadoopLarge Scale Data Mining of the Mobage Service - #PRMU 2011 #Mahout #Hadoop
Large Scale Data Mining of the Mobage Service - #PRMU 2011 #Mahout #Hadoop
Koichi Hamada
 
Asakusa Framework 演算子の処方箋
Asakusa Framework 演算子の処方箋Asakusa Framework 演算子の処方箋
Asakusa Framework 演算子の処方箋
hmasa
 
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
Koichi Hamada
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展
Recruit Technologies
 
SSII2018TS: 大規模深層学習
SSII2018TS: 大規模深層学習SSII2018TS: 大規模深層学習
SSII2018TS: 大規模深層学習
SSII
 
Blueprintsについて
BlueprintsについてBlueprintsについて
Blueprintsについて
Tetsuro Nagae
 
Remineを活かしたプロセス支援 - 失敗しないプロセス支援 -
Remineを活かしたプロセス支援 - 失敗しないプロセス支援 -Remineを活かしたプロセス支援 - 失敗しないプロセス支援 -
Remineを活かしたプロセス支援 - 失敗しないプロセス支援 -
Makoto SAKAI
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
Koichi Hamada
 
Apache spark 2.3 and beyond
Apache spark 2.3 and beyondApache spark 2.3 and beyond
Apache spark 2.3 and beyond
NTT DATA Technology & Innovation
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネス
Mie Mori
 

Similar to 世界最速の正規表現JITエンジンの実装 (20)

R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
 
ソーシャルウェブ と レコメンデーション -第4回データマイニング+WEB勉強会@東京
ソーシャルウェブ と レコメンデーション -第4回データマイニング+WEB勉強会@東京ソーシャルウェブ と レコメンデーション -第4回データマイニング+WEB勉強会@東京
ソーシャルウェブ と レコメンデーション -第4回データマイニング+WEB勉強会@東京
 
ソーシャルデザインパターン -評判と情報収集-
ソーシャルデザインパターン -評判と情報収集-ソーシャルデザインパターン -評判と情報収集-
ソーシャルデザインパターン -評判と情報収集-
 
Mahout Canopy Clustering - #TokyoWebmining 9
Mahout Canopy Clustering - #TokyoWebmining 9Mahout Canopy Clustering - #TokyoWebmining 9
Mahout Canopy Clustering - #TokyoWebmining 9
 
Mahout JP - #TokyoWebmining 11th #MahoutJP
Mahout JP -  #TokyoWebmining 11th #MahoutJP Mahout JP -  #TokyoWebmining 11th #MahoutJP
Mahout JP - #TokyoWebmining 11th #MahoutJP
 
[db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? ...
[db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? ...[db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? ...
[db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? ...
 
『モバゲーの大規模データマイニング基盤におけるHadoop活用』-Hadoop Conference Japan 2011- #hcj2011
『モバゲーの大規模データマイニング基盤におけるHadoop活用』-Hadoop Conference Japan 2011- #hcj2011 『モバゲーの大規模データマイニング基盤におけるHadoop活用』-Hadoop Conference Japan 2011- #hcj2011
『モバゲーの大規模データマイニング基盤におけるHadoop活用』-Hadoop Conference Japan 2011- #hcj2011
 
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR  #11「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR  #11
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11
 
"Mahout Recommendation" - #TokyoWebmining 14th
"Mahout Recommendation" -  #TokyoWebmining 14th"Mahout Recommendation" -  #TokyoWebmining 14th
"Mahout Recommendation" - #TokyoWebmining 14th
 
MVSR Schedulerを作るための指針
MVSR Schedulerを作るための指針MVSR Schedulerを作るための指針
MVSR Schedulerを作るための指針
 
Large Scale Data Mining of the Mobage Service - #PRMU 2011 #Mahout #Hadoop
Large Scale Data Mining of the Mobage Service - #PRMU 2011 #Mahout #HadoopLarge Scale Data Mining of the Mobage Service - #PRMU 2011 #Mahout #Hadoop
Large Scale Data Mining of the Mobage Service - #PRMU 2011 #Mahout #Hadoop
 
Asakusa Framework 演算子の処方箋
Asakusa Framework 演算子の処方箋Asakusa Framework 演算子の処方箋
Asakusa Framework 演算子の処方箋
 
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展
 
SSII2018TS: 大規模深層学習
SSII2018TS: 大規模深層学習SSII2018TS: 大規模深層学習
SSII2018TS: 大規模深層学習
 
Blueprintsについて
BlueprintsについてBlueprintsについて
Blueprintsについて
 
Remineを活かしたプロセス支援 - 失敗しないプロセス支援 -
Remineを活かしたプロセス支援 - 失敗しないプロセス支援 -Remineを活かしたプロセス支援 - 失敗しないプロセス支援 -
Remineを活かしたプロセス支援 - 失敗しないプロセス支援 -
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
 
Apache spark 2.3 and beyond
Apache spark 2.3 and beyondApache spark 2.3 and beyond
Apache spark 2.3 and beyond
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネス
 

More from Ryoma Sin'ya

形式言語理論への 測度論的アプローチ
形式言語理論への 測度論的アプローチ形式言語理論への 測度論的アプローチ
形式言語理論への 測度論的アプローチ
Ryoma Sin'ya
 
有限モデル理論入門:MSOとオートマトン
有限モデル理論入門:MSOとオートマトン有限モデル理論入門:MSOとオートマトン
有限モデル理論入門:MSOとオートマトン
Ryoma Sin'ya
 
統語的曖昧性・普遍性判定問題の決定可能性
統語的曖昧性・普遍性判定問題の決定可能性統語的曖昧性・普遍性判定問題の決定可能性
統語的曖昧性・普遍性判定問題の決定可能性
Ryoma Sin'ya
 
正規表現に潜む対称性 〜等式公理による等価性判定〜
正規表現に潜む対称性 〜等式公理による等価性判定〜正規表現に潜む対称性 〜等式公理による等価性判定〜
正規表現に潜む対称性 〜等式公理による等価性判定〜
Ryoma Sin'ya
 
A new technique for proving non regularity based on the measure of a language
A new technique for proving non regularity based on the measure of a languageA new technique for proving non regularity based on the measure of a language
A new technique for proving non regularity based on the measure of a language
Ryoma Sin'ya
 
正規表現入門 星の高さを求めて
正規表現入門 星の高さを求めて正規表現入門 星の高さを求めて
正規表現入門 星の高さを求めて
Ryoma Sin'ya
 
正規表現++
正規表現++正規表現++
正規表現++
Ryoma Sin'ya
 
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
Ryoma Sin'ya
 
並列化と実行時コード生成を用いた正規表現マッチングの高速化
並列化と実行時コード生成を用いた正規表現マッチングの高速化並列化と実行時コード生成を用いた正規表現マッチングの高速化
並列化と実行時コード生成を用いた正規表現マッチングの高速化
Ryoma Sin'ya
 

More from Ryoma Sin'ya (9)

形式言語理論への 測度論的アプローチ
形式言語理論への 測度論的アプローチ形式言語理論への 測度論的アプローチ
形式言語理論への 測度論的アプローチ
 
有限モデル理論入門:MSOとオートマトン
有限モデル理論入門:MSOとオートマトン有限モデル理論入門:MSOとオートマトン
有限モデル理論入門:MSOとオートマトン
 
統語的曖昧性・普遍性判定問題の決定可能性
統語的曖昧性・普遍性判定問題の決定可能性統語的曖昧性・普遍性判定問題の決定可能性
統語的曖昧性・普遍性判定問題の決定可能性
 
正規表現に潜む対称性 〜等式公理による等価性判定〜
正規表現に潜む対称性 〜等式公理による等価性判定〜正規表現に潜む対称性 〜等式公理による等価性判定〜
正規表現に潜む対称性 〜等式公理による等価性判定〜
 
A new technique for proving non regularity based on the measure of a language
A new technique for proving non regularity based on the measure of a languageA new technique for proving non regularity based on the measure of a language
A new technique for proving non regularity based on the measure of a language
 
正規表現入門 星の高さを求めて
正規表現入門 星の高さを求めて正規表現入門 星の高さを求めて
正規表現入門 星の高さを求めて
 
正規表現++
正規表現++正規表現++
正規表現++
 
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
 
並列化と実行時コード生成を用いた正規表現マッチングの高速化
並列化と実行時コード生成を用いた正規表現マッチングの高速化並列化と実行時コード生成を用いた正規表現マッチングの高速化
並列化と実行時コード生成を用いた正規表現マッチングの高速化
 

Recently uploaded

FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
CRI Japan, Inc.
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 

Recently uploaded (15)

FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 

世界最速の正規表現JITエンジンの実装

  • 1. 世界最速の正規表現 JITエンジンの実装 Ryoma Sin’ya (@sinya8282) サイボウズ・ラボユース最終成果報告会 2012/3/26 at 秋葉原ダイビル Monday, March 26, 12
  • 2. 皆さん 正規表現は お好きですか? Monday, March 26, 12
  • 3. 僕は正規表現が 好きじゃありません Monday, March 26, 12
  • 4. 僕は正規表現が 好きじゃありません 愛してます Monday, March 26, 12
  • 5. % whoami • 新屋 良磨 (@sinya8282) • 東京工業大学修士一年 • 一期生では最年長 • 精神は林君が最年長説 • 好きな表現は正規表現 • 好きな言語は正規言語 • 好きな曲は Monday, March 26, 12
  • 6. % whoami • 新屋 良磨 (@sinya8282) • 東京工業大学修士一年 • 一期生では最年長 • 精神は林君が最年長説 • 好きな表現は正規表現 • 好きな言語は正規言語 • 好きな曲は • Regular Expression (by Broken Drum) Monday, March 26, 12
  • 7. サイボウズ・ラボユース ではなにを? • 正規表現エンジンの実装, 高速化 • DFAをJITして高速化 (実行時コード生成) • オートマトンのデータ並列実行による高速化 • 正規表現を利用したツール/システムの開発 • テキスト検索(grep) • 正規表現変換ツール • 正規表現の拡張演算子等 • エンジンはgithubで公開 → Regen(レーゲン) Monday, March 26, 12
  • 8. なぜ正規表現エンジン? • 正規表現の歴史は古い。種類(亜種)も多い I define UNIX as “30 definitions of regular expressions living under one roof.” — Don Knuth • 実装も多い(本当に多い) • GNU grep, Google RE2, 鬼車, PCRE, TRE,,,, • 車輪の再発明? Monday, March 26, 12
  • 9. なぜ正規表現エンジン? • 正規表現の歴史は古い。種類(亜種)も多い I define UNIX as “30 definitions of regular expressions living under one roof.” — Don Knuth • 実装も多い(本当に多い) • GNU grep, Google RE2, 鬼車, PCRE, TRE,,,, • 車輪の再発明? そうだね。ただし最速の車輪だ。— Ryoma Sin’ya Monday, March 26, 12
  • 10. なにが最速? • 「正規表現マッチング」が最速 • 「DFAの状態遷移」が最速 (Not文字列探索) • DFAをJITすることで状態遷移を高速化 • データ並列マッチングをサポート • なにと比較して? • GoogleRE2, GNU grep, cgrep 等のDFAベースエン ジンと比較して高速(RE2の6~10倍) Monday, March 26, 12
  • 11. なにが最速? • 「正規表現マッチング」が最速 • 「DFAの状態遷移」が最速 (Not文字列探索) • DFAをJITすることで状態遷移を高速化 • データ並列マッチングをサポート • なにと比較して? • GoogleRE2, GNU grep, cgrep 等のDFAベースエン ジンと比較して高速(RE2の6~10倍) 詳細はポスターにも!! Monday, March 26, 12
  • 12. 並列化と実行時コード生成を用いた 正規表現エンジン「Regen」 : 正規表現マッチングの高速化 &そのツール群の紹介 新屋 良磨 † 光成 滋生 †† 佐々 政孝 † Regen でサポートしてる正規表現の拡張演算子, 及びツール群を紹介する. † 東京工業大学 †† サイボウズ・ラボ株式会社 課題や機能についてなど, 多くの意見が聞きたい. 我々は並列化と実行時コード生成を用いた高速な正規表現エンジン Regen を開発した. 拡張演算子 Regen における設計方針や特長を紹介し, 既存実装との違いを説明する. ✦ 積集合 ✦ 弱後方参照 Regenのマッチング内部動作 • /R1 &R2 /→ R1とR2両方にマッチ •PCRE等で使える後方参照の制限版 ✦ 対称差 •有限パターンの参照なら区別できる. •/R1&&R2/→R1かR 一方のみにマッチ •/(1|2|30?) = (1)/ → 恒等式 [01] 1 0 1 NFA DFA •無限パターン(繰り返し)は区別しない. 2 1 変換 1 ✦ 補集合 •/!(R1)/→R1 にマッチしない列にマッチ •/(1|2+) = (1)/ →/1 = 1|2+ = 2 + / q0 q1 q0 q1 0 0 パース&変換 JIT (Χbyak) 正規表現 変換 変換 ✦ 逆順 ✦ 上限付き再帰 /(0 ⇤ 1) + / 0 •/ ⇠ (R1)/→R1のマッチ文字列の逆文字列 •PCRE等で使える再帰(?R)の制限版 •/a@b@c/→“aabcbabcc” 1 文字列に対して ✦ 置換, シャッフル, 非強欲な繰り返し... •紹介してる演算全てDFAで実現 •/(@{0, 2})/→ “()”, “(())”, “((()))” q1 1 0 0 q2 JIT マッチング開始 1 (Χbyak) 入力: 正規表現&文字列 q0 SSFA (並列実行可能なDFA) 正規表現から受理文字列出力 正規表現からDFA(図)出力 1 Regen内部のコード生成(JIT)部抜粋 コード生成(JIT)による性能向上 Example: 論理式を充足する解を全列挙 q7 0 2 Google RE2 Regen Regen JIT (x1 _ x2 _ x3 ) ^ (x1 _ x2 _ x3 ) 1 3 q9 0 q12 q4 3GB/sec 3 Fast 2 2 Throughput 2.5GB/sec 2 3 2GB/sec 3 q10 0 q13 1 1.5GB/sec 0 q1 1 3 q15 0 1GB/sec q0 1 0 q5 1 Slow q2 q14 0.5GB/sec 2 3 正規表現で 2 2 3 0GB/sec 3 最適化が効かないパターン 最適化が効くパターン SATを解く! q6 C++ JIT Library /(([02468][13579]){5})*/ /(0123456789)*/ q3 2 q11 1 Χbyak 0 q8 0 並列マッチングによる性能向上 並列化のオーバーヘッド 1 正規表現: /([0-4]{5}[5-9]{5})*/, 入力: 1GB 正規表現: /(([02468][13579]){5})*/, 入力: 100KB~1000KB 実装済みツール群 今後の課題 [GB/sec] ✦ 正規表現Lib: Regen ✦ 他アーキテクチャ対応 • • 今はX86-64のみ(Χbyak) 20 Slow ベンチマークA ベンチマークB 2.40 msec 8,000K Google RE2 を参考 • • LLVM? (抽象化で性能落ちない?) Fast Google RE2 0.263 0.264 17.5 7,200K Clock Cycle Submatch 未対応 Regen O0 0.449 0.448 1.92 msec Throughput 15 6,400K Regen O3 1.521 2.761 5,600K ✦ 正規表現変換系: recon ✦ Submatch(キャプチャ)の対応 • • 現在でもマッチした文字列全体の取得は可能. 12.5 1.44 msec 4,800K 10 正規表現 to 正規表現 • • マッチした文字列の部分的な取得は未対応 4,000K 0.96 msec Fast 正規表現 to DFA(図) 7.5 3,200K • 2,400K 正規表現 to 受理文字列 ✦ 性能を生かしたツール/システムの考案 5 0.48 msec 1,600K 2.5 Slow 800K grep: regengrep ✦ • 0 0K [KB] JIT版は高速. 100 200 300 400 500 600 700 800 900 1000 1 2 3 4 5 6 • Input size Number of Threads Regen Regen JIT Read only 1スレッド 1スレッドJIT 2スレッド 2スレッドJIT まだ開発中(速度,機能) Thursday, January 5, 12 Thursday, January 5, 12 1 2 3 4 5 6 gen 0.449 0.897 1.327 1.759 2.236 2.681 Monday, March 26, 12 gen JIT 2.321 4.550 6.917 9.167 11.27 Text 13.59 ad 6.041 12.11 16.60 18.37 18.89 19.17
  • 13. 実装の詳細は色々なとこで • 「並列化と実行時コード生成を用いた正規表現 マッチングの高速化」 • 日本ソフトウェア科学会第28回大会 (書き直し中) • 第53回プログラミング・シンポジウム - 予稿, ポスター • 「正規表現とJITと並列化とベンチマーク」 • x86/x64最適化勉強会1 - スライド • 「正規表現の限界」 • Shibuya.pm ~夏の正規表現祭り~ - スライド Monday, March 26, 12
  • 14. 実装の詳細は色々なとこで • 「並列化と実行時コード生成を用いた正規表現 マッチングの高速化」 • 日本ソフトウェア科学会第28回大会 (書き直し中) • 第53回プログラミング・シンポジウム - 予稿, ポスター • 「正規表現とJITと並列化とベンチマーク」 • x86/x64最適化勉強会1 - スライド • 「正規表現の限界」 • Shibuya.pm ~夏の正規表現祭り~ - スライド じゃあ今日はなにを喋る? Monday, March 26, 12
  • 15. オリジナルな成果 • DFA-JITによる正規表現マッチングの高速化 • JIT特有の最適化等 • データ並列マッチングによる高速化 • オートマトンを拡張 • 正規表現の拡張演算の提案/実装 • 弱後方参照, 上限付き再帰, 非強欲繰り返し(DFAver) Monday, March 26, 12
  • 16. オリジナルな成果 • DFA-JITによる正規表現マッチングの高速化 • JIT特有の最適化等 • データ並列マッチングによる高速化 • オートマトンを拡張 • 正規表現の拡張演算の提案/実装 • 弱後方参照, 上限付き再帰, 非強欲繰り返し(DFAver) 全部喋りたい... Monday, March 26, 12
  • 17. 正規表現エンジン 開発過程を時系列で Monday, March 26, 12
  • 18. 正規表現エンジン 開発過程を時系列で 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 19. 上京。 正規表現エンジン この時、正規表現(DFA)をJIT 開発過程を時系列で する方法で悩んでいた。 (自前, gcc, asm, llvm, libjit, gnu lightning...) 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 20. ラボユース採択(神タイミング)。 正規表現エンジン 開発過程を時系列で 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 21. C++製JITライブラリXbyakで 正規表現エンジン 正規表現JIT。動いた。 開発過程を時系列で ・X86最適化の権化、光成さんの  熱血指導の賜物? 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 22. DFA-JIT C++製JITライブラリXbyakで 正規表現エンジン 正規表現JIT。動いた。 開発過程を時系列で ・X86最適化の権化、光成さんの  熱血指導の賜物? 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 23. DFA-JIT エントリー (レジスタ調整,初期状態へジャンプ) 状態コード詳細 (24 Byte) C++製JITライブラリXbyakで 状態0のコー 正規表現エンジン 正規表現JIT。動いた。 状態1のコー cmp rdi,rsi #終端判定 je 0x120005030 開発過程を時系列で movzx r10,BYTE PTR [rdi] ・X86最適化の権化、光成さんの inc rdi 状態遷移テーブル  熱血指導の賜物?jmp QWORD PTR [rdx +r10*8] •コード生成は JIT ライブラリ Χbyak を使用. 2011年 3月 •4 5 サイボウズ・ラボ 光成氏が開発.12 Χbyak: 6 7 8 9 10 11 Monday, March 26, 12
  • 24. C++製JITライブラリXbyakで 正規表現エンジン 正規表現JIT。動いた。 開発過程を時系列で ・X86最適化の権化、光成さんの  熱血指導の賜物? 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 25. 正規表現のデータ並列マッチン 正規表現エンジン グを実装。(オートマトンを拡張) 開発過程を時系列で ・巨大なテキストの全体マッチング  では台数効果が見込める。     (詳細はポスターで) 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 26. データ並列マッチング 正規表現のデータ並列マッチン 正規表現エンジン グを実装。(オートマトンを拡張) 開発過程を時系列で ・巨大なテキストの全体マッチング  では台数効果が見込める。     (詳細はポスターで) 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 27. データ並列マッチング マッチングの並列化 = 状態遷移の並列化 a q1 b q3 a q1 a q2 正規表現のデータ並列マッチン q0 正規表現エンジン グを実装。(オートマトンを拡張) •このような状態遷移を 開発過程を時系列で ・巨大なテキストの全体マッチング a a ? b 結果1 a  では台数効果が見込める。 ?     (詳細はポスターで) q2 ? ? 結果2 2011年 •のように文字単位で並列に実行 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 28. 正規表現のデータ並列マッチン 正規表現エンジン グを実装。(オートマトンを拡張) 開発過程を時系列で ・巨大なテキストの全体マッチング  では台数効果が見込める。     (詳細はポスターで) 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 29. 最適化、議論、実装、 正規表現エンジン イベント、論文、学会....。 開発過程を時系列で ・Shibuya.pm「夏の正規表現祭り」(thanks! 竹迫さん) ・x86/x64最適化勉強会1 (thanks! 光成さん) ・日本ソフトウェア科学会第28会大会@沖縄 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 30. 最適化、議論、実装、 正規表現エンジン イベント、論文、学会....。 ・夏休み(学生)ということで、週3で 開発過程を時系列で ・Shibuya.pm「夏の正規表現祭り」(thanks! 竹迫さん)  サイボウズ・ラボに出勤。開発。 ・x86/x64最適化勉強会1 (thanks! 光成さん) ・ラボメンバーさんとの議論が楽しい!!! ・日本ソフトウェア科学会第28会大会@沖縄 ・最適化/並列化/新機能等々,,, 色々 る。 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 31. ひたすら正規表現 正規表現エンジン と戯れる。 開発過程を時系列で 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 32. ひたすら正規表現 正規表現エンジン と戯れる。 開発過程を時系列で ・正規表現の新しい演算を考える等(ポスター) 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 33. ✦ 弱後方参照 •有限パターンの参照なら区別できる. ひたすら正規表現 •/(1|2|30?) = (1)/ → 恒等式 正規表現エンジン •無限パターン(繰り返し)は区別しない. と戯れる。 = 2 + / 開発過程を時系列で •/(1|2+) = (1)/ →/1 = 1|2+ ・正規表現の新しい演算を考える等(ポスター) ✦ 上限付き再帰 •/a@b@c/→“aabcbabcc” 2011年 •/(@{0, 2})/7→ “()”, 9 10 “((()))” 3月 4 5 6 8 “(())”, 11 12 Monday, March 26, 12
  • 34. ひたすら正規表現 正規表現エンジン と戯れる。 開発過程を時系列で ・正規表現の新しい演算を考える等(ポスター) 2011年 3月 4 5 6 7 8 9 10 11 12 Monday, March 26, 12
  • 35. 2012年 1月 2 3 Monday, March 26, 12
  • 36. ポスター発表。 ・第53回プログラミング・シンポジウム  「並列化と実行時コード生成を用いた   正規表現マッチングの高速化」  → 入り口にあるポスターです。 2012年 1月 2 3 Monday, March 26, 12
  • 37. grepの実装。 ・grep高速化のための機能追加 ・固定文字列探索の高速化等(未完成) ・ライブラリAPIを整理し始める(ようやく) 2012年 1月 2 3 Monday, March 26, 12
  • 38. なう。 2012年 1月 2 3 Monday, March 26, 12
  • 39. 正規表現エンジン Regen githubで開発中!! http://github.com/sinya8282/regen 2012年 1月 2 3 Monday, March 26, 12
  • 40. 正規表現エンジン Regen githubで開発中!! http://github.com/sinya8282/regen 2012年 1月 2 3 そして伝説へ.... Monday, March 26, 12
  • 41. サイボウズ・ラボユース ではなにを?(再) • 正規表現エンジンの実装, 高速化 Regen • 「最速の車輪を。」→ • 正規表現を利用したツール/システムの開発 Monday, March 26, 12
  • 42. サイボウズ・ラボユース ではなにを?(再) • 正規表現エンジンの実装, 高速化 Regen • 「最速の車輪を。」→ • 正規表現を利用したツール/システムの開発 そしてこれからは? • 欠点も多い(実装で克服できる?) • メモリ使用量, 制限(キャプチャ,,,), 苦手な正規表現,,, • ライブラリを完成させにゃ... (目標: Google RE2) • 「文字列探索」以外にも正規表現を。(試行錯誤中) Monday, March 26, 12