新旧VM比較 - Scheme VM を書く
新旧VMで速度が大分違うのでいろいろ比較する。
compiler.scm で wiki.scm のコンパイルをする。
項目 | 旧VM | 新VM |
---|---|---|
実行時間 | 1.9sec | 3.1sec |
実行命令数 | 1339557 | 1159274 |
最大スタック使用量 | 409 | 930 |
FRAME作成回数 | 36921 | 34271 |
ENTER(let)作成回数 | 13888 | 0 |
これ以外に各命令の実行回数、Gaucheのプロファイル結果(gosh -ptime)を利用していろいろ調べた。
結論としては let のために導入した ENTER/LEAVE のスタック操作コスト、let を維持するために増えたレジスタ退避/復帰のスタック操作コストがそのまま動作速度に影響している模様。
これはつまり let の仕組みの部分はなくそうってことだな。