ひとり勉強会

ひとり楽しく勉強会

2007-01-26から1日間の記事一覧

まとめ

今日はYARVの最適化フェーズについてでした。 ピープホール最適化 特化命令 (オペランド融合) (命令融合) (スタックキャッシング) 専用命令を新しく作る系の最適化に関しては、定義ファイルから新しい命令を自動生成という形になっているのが面白いなーと思…

set_sequence_stackcaching

YARV Maniacs【第8回】 によると「性能上の問題から、現時点では有効にできないようにしてあります」とのことです。一応ソースだけ読んでみました。スタックの先頭付近最大2個分だけ特別な領域(AレジスタとBレジスタ)に持っておいて、スタック操作命令の…

iseq_insns_unification

命令融合。こちらも同じく現在はOFFになってるみたいです。一応ソースだけ読んでみました。さっき見たオペランド融合は、よくある「命令+オペランド」の組を1個の専用融合命令に置き換えてしまう最適化でした。こっちの命令融合というのは、よく連続する命…

insn_operands_unification

オペランド融合。この最適化は現在はOFFになってるみたいです。一応ソースだけ読んでみました。この関数は、ビルド時に定義ファイル"opt_operand.def"から自動生成されます。(自動生成スクリプトは"tool/insns2vm.rb"。)定義ファイルの中身はこんな感じで…

iseq_specialized_instruction

こちらについては YARV Maniacs 【第9回】 で丸々1回をさいて解説されています。引用させていただくと、 すでに述べたように「1 + 2」のようなプログラムは Ruby では「1.+(2)」と解釈されますが、コンパイル時にチェックして、 呼び出すメソッドが "+" 引…

iseq_peephole_optimize

コンパイル結果を局所的に見て、ちょこちょこっと命令列を効率の良いものに書き換えていく最適化を、ピープホール最適化(覗き穴最適化)と言います。現在のYARVでは、無駄なジャンプ命令を見つけては書き換えるというピープホール最適化を行っています。 st…

最適化の流れ

だいぶ間が空いてしまったので、まずは流れのおさらいから。 yarvcore_eval_parsed @ yarvcore.c th_compile_from_node @ yarvcore.c yarv_iseq_new_with_opt @ iseq.c iseq_compile @ compile.c iseq_compile_each @ compile.c iseq_setup @ compile.c 第3…

YARVソースコード勉強会(10)

今日から、最適化の部分を読みにかかります。の、前に。 元旦にRuby本家にYARVがマージされたそうです([ruby-dev: 30061])。今年からはこちらを読んでいこうと思います。レポジトリのURLは http://svn.ruby-lang.org/repos/ruby/trunk で、今週はさっきチ…