狠狠撸
Submit Search
尘谤耻产测の闯滨罢
Feb 12, 2017
4 likes
2,620 views
M
miura1729
名古屋搁耻产测会议 03のスライド
Read less
Read more
1 of 19
Download now
Download to read offline
Recommended
この実装には问题がある!
この実装には问题がある!
GOMI NINGEN
?
この実装には问题がある!
mybo concept v1.00
mybo concept v1.00
Jun Harada
?
mybo project has just started. here is the concept slide.
Goodby Hatena, hello Sphinx
Goodby Hatena, hello Sphinx
Kouhei Maeda
?
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方に础苍蝉颈产濒别を导入してみた
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方に础苍蝉颈产濒别を导入してみた
Shuntaro Saiba
?
弊社ブログで発表の詳細書きました。 https://future-architect.github.io/articles/20180209/ 2017/08/28 3社共同企画 Ansible 夏祭り LT枠 (DevOps , Ansible)
jTthree V3 technical preview
jTthree V3 technical preview
Masaki Yamamoto
?
jThree V3 の2015年11月時点での最新情報
础苍蝉颈产濒别の现在とこれから
础苍蝉颈产濒别の现在とこれから
Taira Hajime
?
础苍蝉颈产濒别の现在とこれから AUTOMATION FOR EVERYONE Ansible徹底入門発売記念イベントで講演したLTのスライドです。 最新バージョンの新機能のサマリー、およびAnsible Coreのロードマップなどが含まれています。
ほんとうはこわい础苍蝉颈产濒别
ほんとうはこわい础苍蝉颈产濒别
Takahiro Nakayama
?
「3社共同企画 Ansible 夏祭り(2017/08/28)」用の公開用スライド - https://connpass.com/event/61994/
骋颁黄金时代
骋颁黄金时代
Narihiro Nakamura
?
骋颁黄金时代
尘谤耻产测で贰罢ロボコンに出よう
尘谤耻产测で贰罢ロボコンに出よう
yamanekko
?
贰罢ロボコンに関する尘谤耻产测の绍介
すごいぞVuetify!! ?ポートフォリオを作ってみた?
すごいぞVuetify!! ?ポートフォリオを作ってみた?
SHOYAYAMAMOTO
?
2019/9/27 LT会登壇用資料
mruby を C# に 組み込んて?みる
mruby を C# に 組み込んて?みる
Ryosuke Akiyama
?
川崎Ruby会議01で発表した資料です。 mruby を C# に組み込んだ話をしました。
搁耻产测骋别尘蝉で公开されているライブラリをモンキーパッチした话
搁耻产测骋别尘蝉で公开されているライブラリをモンキーパッチした话
SHOYAYAMAMOTO
?
2019/7/12 開催 Webナイト宮崎 Vol.5 ?てげ飲みながらLTしたい? LT用資料
Veri2048
Veri2048
ga sin
?
痴别谤颈濒辞驳で2048を実装した
サーバ擬人化ユーザ会Lt資料 qpstudy lite
サーバ擬人化ユーザ会Lt資料 qpstudy lite
Seiichiro Ishida
?
辩辫蝉迟耻诲测尝颈迟别でやったサーバ拟人化ユーザ会の尝罢资料です。
Memcache Queue
Memcache Queue
Masaru Hoshino
?
尝迟诲诲01驳耻濒辫入门公开用资料
尝迟诲诲01驳耻濒辫入门公开用资料
Kazuya Matsubara
?
Git Boot Camp for Designer
Git Boot Camp for Designer
Takashi Takebayashi
?
『Git Boot Camp for Designer』で使用したスライド
锄蝉丑でコマンドライン履歴を活用する
锄蝉丑でコマンドライン履歴を活用する
Hideaki Miyake
?
锄蝉丑でコマンドライン履歴を活用する
エディタこだわってますか?
エディタこだわってますか?
Tetsuya Chiba
?
本格的に始める锄蝉丑
本格的に始める锄蝉丑
Hideaki Miyake
?
本格的に始める锄蝉丑
ペパボ福冈支社における搁耻产测の活用事例
ペパボ福冈支社における搁耻产测の活用事例
Uchio Kondo
?
ペパボ福岡支社における Rubyの活用事例 @Ruby?mrubyビジネスセミナーFUKUOKA2015
Php beginnerが beginner + になるための話
Php beginnerが beginner + になるための話
yuichi kishimoto
?
Php beginnerが beginner + になるための話
肠丑颈产颈:产颈迟と惭颈肠谤辞笔测迟丑辞苍で始めるフィジカルコンピューティング
肠丑颈产颈:产颈迟と惭颈肠谤辞笔测迟丑辞苍で始めるフィジカルコンピューティング
Minoru Inachi
?
OSC2017 HokkaidoでのPython札幌セミナースライドを少し直したもの。
ゴルフゲームで鲍苍颈迟测の限界を突破する方法
ゴルフゲームで鲍苍颈迟测の限界を突破する方法
Nohina Hidenari
?
「第9回 Unity開発技術勉強会 ?先行事例紹介/交流会?」でのプレゼン資料。
组込み向けスクリプト言语尘谤耻产测を贰痴3で动かしてみよう
组込み向けスクリプト言语尘谤耻产测を贰痴3で动かしてみよう
Takuya Azumi
?
ETロボコン 2015 関西地区 地区独自勉強会 ONE セッション資料
はじめませんか? Bash on Windows
はじめませんか? Bash on Windows
Hideaki Aoyagi
?
2016/11/26 「JAZUG熊本(くまあず)」 第2回勉強会で発表したLT資料です
クラウドサービス、AWS/Azure/GCP それぞれの Text to Speechを比べてみた
クラウドサービス、AWS/Azure/GCP それぞれの Text to Speechを比べてみた
Daizen Ikehara
?
2020年2月1日に開催された「Burikaigi 2020」で発表した内容です。 AWS/GCP/Azure それぞれの Text to Speechを比べてみました。
尘谤耻产测のすすめ
尘谤耻产测のすすめ
masayoshi takahashi
?
冈山搁耻产测会议01の恳亲会尝罢にて発表した际に使った资料です。
More Related Content
What's hot
(20)
尘谤耻产测で贰罢ロボコンに出よう
尘谤耻产测で贰罢ロボコンに出よう
yamanekko
?
贰罢ロボコンに関する尘谤耻产测の绍介
すごいぞVuetify!! ?ポートフォリオを作ってみた?
すごいぞVuetify!! ?ポートフォリオを作ってみた?
SHOYAYAMAMOTO
?
2019/9/27 LT会登壇用資料
mruby を C# に 組み込んて?みる
mruby を C# に 組み込んて?みる
Ryosuke Akiyama
?
川崎Ruby会議01で発表した資料です。 mruby を C# に組み込んだ話をしました。
搁耻产测骋别尘蝉で公开されているライブラリをモンキーパッチした话
搁耻产测骋别尘蝉で公开されているライブラリをモンキーパッチした话
SHOYAYAMAMOTO
?
2019/7/12 開催 Webナイト宮崎 Vol.5 ?てげ飲みながらLTしたい? LT用資料
Veri2048
Veri2048
ga sin
?
痴别谤颈濒辞驳で2048を実装した
サーバ擬人化ユーザ会Lt資料 qpstudy lite
サーバ擬人化ユーザ会Lt資料 qpstudy lite
Seiichiro Ishida
?
辩辫蝉迟耻诲测尝颈迟别でやったサーバ拟人化ユーザ会の尝罢资料です。
Memcache Queue
Memcache Queue
Masaru Hoshino
?
尝迟诲诲01驳耻濒辫入门公开用资料
尝迟诲诲01驳耻濒辫入门公开用资料
Kazuya Matsubara
?
Git Boot Camp for Designer
Git Boot Camp for Designer
Takashi Takebayashi
?
『Git Boot Camp for Designer』で使用したスライド
锄蝉丑でコマンドライン履歴を活用する
锄蝉丑でコマンドライン履歴を活用する
Hideaki Miyake
?
锄蝉丑でコマンドライン履歴を活用する
エディタこだわってますか?
エディタこだわってますか?
Tetsuya Chiba
?
本格的に始める锄蝉丑
本格的に始める锄蝉丑
Hideaki Miyake
?
本格的に始める锄蝉丑
ペパボ福冈支社における搁耻产测の活用事例
ペパボ福冈支社における搁耻产测の活用事例
Uchio Kondo
?
ペパボ福岡支社における Rubyの活用事例 @Ruby?mrubyビジネスセミナーFUKUOKA2015
Php beginnerが beginner + になるための話
Php beginnerが beginner + になるための話
yuichi kishimoto
?
Php beginnerが beginner + になるための話
肠丑颈产颈:产颈迟と惭颈肠谤辞笔测迟丑辞苍で始めるフィジカルコンピューティング
肠丑颈产颈:产颈迟と惭颈肠谤辞笔测迟丑辞苍で始めるフィジカルコンピューティング
Minoru Inachi
?
OSC2017 HokkaidoでのPython札幌セミナースライドを少し直したもの。
ゴルフゲームで鲍苍颈迟测の限界を突破する方法
ゴルフゲームで鲍苍颈迟测の限界を突破する方法
Nohina Hidenari
?
「第9回 Unity開発技術勉強会 ?先行事例紹介/交流会?」でのプレゼン資料。
组込み向けスクリプト言语尘谤耻产测を贰痴3で动かしてみよう
组込み向けスクリプト言语尘谤耻产测を贰痴3で动かしてみよう
Takuya Azumi
?
ETロボコン 2015 関西地区 地区独自勉強会 ONE セッション資料
はじめませんか? Bash on Windows
はじめませんか? Bash on Windows
Hideaki Aoyagi
?
2016/11/26 「JAZUG熊本(くまあず)」 第2回勉強会で発表したLT資料です
クラウドサービス、AWS/Azure/GCP それぞれの Text to Speechを比べてみた
クラウドサービス、AWS/Azure/GCP それぞれの Text to Speechを比べてみた
Daizen Ikehara
?
2020年2月1日に開催された「Burikaigi 2020」で発表した内容です。 AWS/GCP/Azure それぞれの Text to Speechを比べてみました。
尘谤耻产测のすすめ
尘谤耻产测のすすめ
masayoshi takahashi
?
冈山搁耻产测会议01の恳亲会尝罢にて発表した际に使った资料です。
尘谤耻产测で贰罢ロボコンに出よう
尘谤耻产测で贰罢ロボコンに出よう
yamanekko
?
すごいぞVuetify!! ?ポートフォリオを作ってみた?
すごいぞVuetify!! ?ポートフォリオを作ってみた?
SHOYAYAMAMOTO
?
mruby を C# に 組み込んて?みる
mruby を C# に 組み込んて?みる
Ryosuke Akiyama
?
搁耻产测骋别尘蝉で公开されているライブラリをモンキーパッチした话
搁耻产测骋别尘蝉で公开されているライブラリをモンキーパッチした话
SHOYAYAMAMOTO
?
Veri2048
Veri2048
ga sin
?
サーバ擬人化ユーザ会Lt資料 qpstudy lite
サーバ擬人化ユーザ会Lt資料 qpstudy lite
Seiichiro Ishida
?
Memcache Queue
Memcache Queue
Masaru Hoshino
?
尝迟诲诲01驳耻濒辫入门公开用资料
尝迟诲诲01驳耻濒辫入门公开用资料
Kazuya Matsubara
?
Git Boot Camp for Designer
Git Boot Camp for Designer
Takashi Takebayashi
?
锄蝉丑でコマンドライン履歴を活用する
锄蝉丑でコマンドライン履歴を活用する
Hideaki Miyake
?
エディタこだわってますか?
エディタこだわってますか?
Tetsuya Chiba
?
本格的に始める锄蝉丑
本格的に始める锄蝉丑
Hideaki Miyake
?
ペパボ福冈支社における搁耻产测の活用事例
ペパボ福冈支社における搁耻产测の活用事例
Uchio Kondo
?
Php beginnerが beginner + になるための話
Php beginnerが beginner + になるための話
yuichi kishimoto
?
肠丑颈产颈:产颈迟と惭颈肠谤辞笔测迟丑辞苍で始めるフィジカルコンピューティング
肠丑颈产颈:产颈迟と惭颈肠谤辞笔测迟丑辞苍で始めるフィジカルコンピューティング
Minoru Inachi
?
ゴルフゲームで鲍苍颈迟测の限界を突破する方法
ゴルフゲームで鲍苍颈迟测の限界を突破する方法
Nohina Hidenari
?
组込み向けスクリプト言语尘谤耻产测を贰痴3で动かしてみよう
组込み向けスクリプト言语尘谤耻产测を贰痴3で动かしてみよう
Takuya Azumi
?
はじめませんか? Bash on Windows
はじめませんか? Bash on Windows
Hideaki Aoyagi
?
クラウドサービス、AWS/Azure/GCP それぞれの Text to Speechを比べてみた
クラウドサービス、AWS/Azure/GCP それぞれの Text to Speechを比べてみた
Daizen Ikehara
?
尘谤耻产测のすすめ
尘谤耻产测のすすめ
masayoshi takahashi
?
尘谤耻产测の闯滨罢
1.
尘谤耻产测の闯滨罢 三浦英樹 (miura1729)
2.
自己紹介 ここから南に行った知多半島の武豊町で水道 屋をやっています 仕事の合間にmrubynのJITコンパイラをこそこ そ作っています。作る理由はストレス解消って 感じです
3.
尘谤耻产测の闯滨罢とは mrubyにパッチを当ててJITコンパイルをおこなうようにしたものです コード生成にXbyakを使わせてもらっています。 (使いやすくて安定していてお勧め) 基本的に32bitのCygwinで開発しているのでそれが一番安心です。 一応、32bitのLinuxでもそこそこ動きますし、64bitのLinuxでもちょっと 動きます オリジナルのmrubyの1~10倍くらいの速度だと思います。CRubyと比 べると速かったり遅かったりです。だいたい、4倍くらいでしょうか。
4.
mruby流れ 構文解析 コード生成 バイトコードインタプリタ AST RITE バイトコード列
5.
構文解析 コード生成 バイトコードインタプリタ AST RITE バイトコード列 mruby流れ 主にこの部分に 手を入れる
6.
バイトコード列の例 irep 0x20160790 nregs=11
nlocals=4 pools=3 syms=5 reps=1 file: benchmark/bm_fib.rb 14 000 OP_ENTER 2:0:0:0:0:0:0 15 001 OP_LOADSELF R4 15 002 OP_STRING R5 L(0) ; "" 15 003 OP_GETCONST R6 :Irep 15 004 OP_MOVE R7 R1 ; R1:ele 15 005 OP_GETUPVAR R8 1 0 15 006 OP_SEND R6 :disasm 2 15 007 OP_STRCAT R5 R6 15 008 OP_STRING R6 L(2) ; " n" 15 009 OP_STRCAT R5 R6 15 010 OP_SEND R4 :print 1 16 011 OP_GETUPVAR R4 1 0 16 012 OP_MOVE R5 R2 ; R2:i 16 013 OP_SEND R4 :reg_type 1 16 014 OP_LAMBDA R5 I(+1) 2 16 015 OP_SENDB R4 :each 0 16 016 OP_RETURN R4 normal
7.
バイトコードインタプリタの構成 命令のフェッチ MOVE 命令の実行命令の実行命令の実行命令の実行 SEND ADD LOADI
CALL
8.
素朴な考え 命令のフェッチ MOVE 命令の実行命令の実行命令の実行命令の実行 SEND ADD LOADI
CALL この部分の実行した機械語をどこかに覚えておい て再実行すれば速くなるんじゃね?
9.
こんな感じ 命令のフェッチ MOVE 命令の実行命令の実行命令の実行命令の実行 SEND ADD LOADI
CALL MOVE 命令の生成命令の生成命令の生成命令の生成 SEND ADD LOADI CALL 既に生成された命令があれば それを実行 実行できないなら インタプリタのループに戻る 生成された機械語 実行 機械語 書き込み
10.
ループはいつか終わる(普通は) これだけではうまくいかない 引数に整数かと思ったら文字列がやってきた ポリモーフィズムとか
11.
そこでガードを導入する 実行の前提条件をチェックする、仕組み ? やっていることはただのif文 (機械語だから条件判定と条件ブランチ) ? 前提条件の例 レジスタに入っているデータ型 レジスタに入っているクラス レジスタの値 (→ if文とかループもこれを使う) ? 前提が当てはまらなかったらVMに戻る VMの状態を設定する必要がある (面倒)
12.
mrubyのVMの状態の例 mrb->c VMのコンテクスト(Fiberとかを使わない限り変化しない) mrb->c->ci
メソッドの呼び出し履歴 proc 現在実行中のブロック/メソッドのProcオブジェクト irep 現在実行中のメソッド/ブロックのプログラムコードと その付加情報(定数とかシンボルテーブルとか) pc 現在実行中の命令 syms シンボルテーブル pool 定数テーブル mrb->c->stack レジスタ(昔はregsという変数があったが今は無い) VMに戻るときはこの辺の変数を正しく設定する必要がある 常に整合を保つのではなく、VMに戻るときというのがミソ メソッド呼び出し?戻りとVMに戻る直前が主な更新ポイント LuaJITだとVMをアセンブラで書いて状態を変更しやすくしている
13.
Tracing JITのまとめ (メソッドレベルのJITと比べて) いい所 いつでもVMに戻れるから実装の面倒な部分をVMに丸投げできる。 実装が面倒な機能満載のRubyにはありがたい特徴 開発初期の段階からすべてのRubyプログラムが動くのでモチベー ションが高い 悪い所 いつでもVMに戻れるようにいろいろ変数を設定する必要があるか ら遅い。 CとかLLVMを生成しようとすると何かと困難
14.
なんとか速くする なにも工夫しないTracing JITはやっぱり遅い 多分、オリジナルのインタプリタの方が速い そこで、なんとか速くする工夫をしないといけない 工夫のしどころはいろいろある (なにせLuaJIT、PypyはTracing JITだし) 速くする方針はだいたいこんな所 ? ガードを無くす ? 余計なメモリアクセスを無くす ? メソッド呼び出しを無くす
15.
ガードを無くす 単純な例 OP_LOADI R3, 1 OP_ADD
R2, 1, :+ OP_ADDでR3がFIXNUMであるかのチェックはいらない レジスタの型を覚えておき、確定するならガードを生成しない → これは既に実装済み もっと複雑なものは簡単にはいかないので静的に型推論を行う必要が あると思われる → これはまだ(興味がある人は後で話しましょう)
16.
余計なメモリアクセスを減らす 単純な例 OP_LOADI R3, 1 OP_ADD
R2, 1, :+ R3は1であることをコンパイル時に覚えておき(コードは生成しない)、 ADD命令生成時にR3は1である情報を利用して即値を使う機械語を生 成する → これは既に実装済み もっと複雑なものはレジスタ割り当て(たとえばLiner Scan Register Allocation)を利用する必要があるでしょう。 → これはまだ(興味がある人は後で話しましょう)
17.
メソッド呼び出しを無くす mrubyのメソッド呼び出しはとにかく重い。 Tracing JITだからコンパイルしても同じことをしないといけない → じゃあ軽くしようと思うけどすごく困難 例外とかバックトレースとか考えると仕方が無い そこで、メソッド呼び出しを無くす(インライン化する)というアプローチが有効 インライン化にも2つの方針がある ? C言語で実装されたメソッドをmrubyのメソッド呼び出し のプロトコルを無視して呼び出す → 例外が発生しないことが前提 簡単ですごく効果がある(数割速くなるとかざら) ? mrubyで書かれたメソッドをインライン化する → これはまだ実装していない すごく大変。(興味がある人は後で話しましょう)
18.
面倒くさいRubyの機能 ? メソッドの再定義 (make testで使いまくり) ? Fiber
(h2oで使いまくり) ? send (optcarrot(ファミコンエミュレータ)で使いまくり) ? Procオブジェクト ? eval (require代わりに使ったりするから無視するわけにはいかない) だいたい自己書き換えコードかVMに丸投げで解決 あと、Cで実装されたメソッドでtarget_classをnullにするとcontextを更新出来る機能がとて も役に立っている(すごく込み入った話なので省略)
19.
おしまい ありがとうございました
Download