サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
猫
msumimz.hatenablog.com
前回の投稿から期間が空いてしまいました。実装にはいろいろ不十分なところも多いのですが、きりがないので記事にすることにします。 前回のベンチマークでは、JITを実装したものの、単純なJITコンパイラではMRIのインタープリタによる実行速度に勝てないという結果でした。これに対する対処として、基本的な型解析とメソッドのインライン化の最適化を導入したというのが今回の話題です。 https://github.com/msumimz/ruby/tree/rbjit まずは、ベンチマークの結果から。 $vc10/Release/miniruby examples/perf_while.rb user system total real interprited 12.012000 0.000000 12.012000 ( 12.010687) JIT compiled 1.186000 0.000000
JITコンパイルの生成元を、ASTからYARVインストラクションへ変更した話です。 JITコンパイルを行う元となる情報として、プログラムをパースした結果の構文木(AST)と、それをさらにコード化したYARVインストラクションがあります。今まではASTに基づいてCFGを生成していました。 ASTを使うことには、以下の利点があります。 安定している。文法が変わらない限り、ASTが変わることはあまりありません。YARVインストラクションは最適化の対象なので、いつ変更されるかわかりません。 生成されるCFGを最適化しやすい。YARVインストラクションはMRIの実行エンジンで効率的に実行できるように設計されており、JITコンパイラにとって最適とは限りません。ASTを直接変換した方が効率的なCFGを生成しやすいといえます。 疎結合。ASTは文法の表現であるという意味でYARVインストラクションより抽象
このページを最初にブックマークしてみませんか?
『msumimz's diary』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く