SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
世界最速の正規表現
                        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

Mais conteúdo relacionado

Mais procurados

Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
【HinemosWorld2014】B1-2_Hinemos徹底解剖~監視編~
【HinemosWorld2014】B1-2_Hinemos徹底解剖~監視編~【HinemosWorld2014】B1-2_Hinemos徹底解剖~監視編~
【HinemosWorld2014】B1-2_Hinemos徹底解剖~監視編~Hinemos
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす増田 亨
 
【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"
【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"
【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"Deep Learning JP
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所Ryo Sasaki
 
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat ModelsDeep Learning JP
 
JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 )
JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 ) JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 )
JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 ) Hironobu Isoda
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
BigQuery で 150万円 使ったときの話
BigQuery で 150万円 使ったときの話BigQuery で 150万円 使ったときの話
BigQuery で 150万円 使ったときの話itkr
 
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略祐司 伊藤
 
Python製BDDツールで自動化してみた
Python製BDDツールで自動化してみたPython製BDDツールで自動化してみた
Python製BDDツールで自動化してみたKeijiUehata1
 
10分でわかるOpenAPI V3
10分でわかるOpenAPI V310分でわかるOpenAPI V3
10分でわかるOpenAPI V3Kazuchika Sekiya
 
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...Deep Learning JP
 
KDD2021 論文読み会: Markdowns in e commerce fresh retail a counterfactual predict...
KDD2021 論文読み会: Markdowns in e commerce fresh retail  a counterfactual predict...KDD2021 論文読み会: Markdowns in e commerce fresh retail  a counterfactual predict...
KDD2021 論文読み会: Markdowns in e commerce fresh retail a counterfactual predict...Haruka Matsuzaki
 
位置データもPythonで!!!
位置データもPythonで!!!位置データもPythonで!!!
位置データもPythonで!!!hide ogawa
 
人が注目する箇所を当てるSaliency Detectionの最新モデル UCNet(CVPR2020)
人が注目する箇所を当てるSaliency Detectionの最新モデル UCNet(CVPR2020)人が注目する箇所を当てるSaliency Detectionの最新モデル UCNet(CVPR2020)
人が注目する箇所を当てるSaliency Detectionの最新モデル UCNet(CVPR2020)Shintaro Yoshida
 
ChatGPT の現状理解と 2023年7月版 LLM情報アップデート
ChatGPT の現状理解と 2023年7月版 LLM情報アップデートChatGPT の現状理解と 2023年7月版 LLM情報アップデート
ChatGPT の現状理解と 2023年7月版 LLM情報アップデートSatoshi Kume
 

Mais procurados (20)

Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
【HinemosWorld2014】B1-2_Hinemos徹底解剖~監視編~
【HinemosWorld2014】B1-2_Hinemos徹底解剖~監視編~【HinemosWorld2014】B1-2_Hinemos徹底解剖~監視編~
【HinemosWorld2014】B1-2_Hinemos徹底解剖~監視編~
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
 
【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"
【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"
【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所
 
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
 
JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 )
JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 ) JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 )
JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 )
 
画像処理の高性能計算
画像処理の高性能計算画像処理の高性能計算
画像処理の高性能計算
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
BigQuery で 150万円 使ったときの話
BigQuery で 150万円 使ったときの話BigQuery で 150万円 使ったときの話
BigQuery で 150万円 使ったときの話
 
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
 
Python製BDDツールで自動化してみた
Python製BDDツールで自動化してみたPython製BDDツールで自動化してみた
Python製BDDツールで自動化してみた
 
10分でわかるOpenAPI V3
10分でわかるOpenAPI V310分でわかるOpenAPI V3
10分でわかるOpenAPI V3
 
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...
 
KDD2021 論文読み会: Markdowns in e commerce fresh retail a counterfactual predict...
KDD2021 論文読み会: Markdowns in e commerce fresh retail  a counterfactual predict...KDD2021 論文読み会: Markdowns in e commerce fresh retail  a counterfactual predict...
KDD2021 論文読み会: Markdowns in e commerce fresh retail a counterfactual predict...
 
位置データもPythonで!!!
位置データもPythonで!!!位置データもPythonで!!!
位置データもPythonで!!!
 
人が注目する箇所を当てるSaliency Detectionの最新モデル UCNet(CVPR2020)
人が注目する箇所を当てるSaliency Detectionの最新モデル UCNet(CVPR2020)人が注目する箇所を当てるSaliency Detectionの最新モデル UCNet(CVPR2020)
人が注目する箇所を当てるSaliency Detectionの最新モデル UCNet(CVPR2020)
 
ChatGPT の現状理解と 2023年7月版 LLM情報アップデート
ChatGPT の現状理解と 2023年7月版 LLM情報アップデートChatGPT の現状理解と 2023年7月版 LLM情報アップデート
ChatGPT の現状理解と 2023年7月版 LLM情報アップデート
 

Destaque

ラボユース最終成果報告会(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 TheoremRyoma Sin'ya
 
サイボウズ・ラボユース成果報告会
サイボウズ・ラボユース成果報告会サイボウズ・ラボユース成果報告会
サイボウズ・ラボユース成果報告会slankdev
 
サイボウズ・ラボ成果発表会
サイボウズ・ラボ成果発表会サイボウズ・ラボ成果発表会
サイボウズ・ラボ成果発表会Komei Kamiya
 
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 RepresentationsTakanori 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
 

Destaque (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) の紹介
 

Semelhante a 世界最速の正規表現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 9Koichi 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 #11Koichi Hamada
 
"Mahout Recommendation" - #TokyoWebmining 14th
"Mahout Recommendation" -  #TokyoWebmining 14th"Mahout Recommendation" -  #TokyoWebmining 14th
"Mahout Recommendation" - #TokyoWebmining 14thKoichi Hamada
 
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 #HadoopKoichi 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
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネスMie Mori
 

Semelhante a 世界最速の正規表現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解析ビジネス
 

Mais de 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 languageRyoma Sin'ya
 
正規表現入門 星の高さを求めて
正規表現入門 星の高さを求めて正規表現入門 星の高さを求めて
正規表現入門 星の高さを求めてRyoma Sin'ya
 
正規表現++
正規表現++正規表現++
正規表現++Ryoma Sin'ya
 
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜Ryoma Sin'ya
 
並列化と実行時コード生成を用いた正規表現マッチングの高速化
並列化と実行時コード生成を用いた正規表現マッチングの高速化並列化と実行時コード生成を用いた正規表現マッチングの高速化
並列化と実行時コード生成を用いた正規表現マッチングの高速化Ryoma Sin'ya
 

Mais de 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時代の正規表現マッチング 〜半群でぐんぐん!〜
 
並列化と実行時コード生成を用いた正規表現マッチングの高速化
並列化と実行時コード生成を用いた正規表現マッチングの高速化並列化と実行時コード生成を用いた正規表現マッチングの高速化
並列化と実行時コード生成を用いた正規表現マッチングの高速化
 

Último

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 

Último (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

世界最速の正規表現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