計測の考察 - Scheme VM を書く

一昨日の結果が不可解だったので、Gakuさんにアドバイスをもらいつつ考えてみる。

  • fib.scm が合成命令導入で速くなっていないのはなぜか?
  • この原因が分からないことには進めない。
  • 計測するのは
    • fib.scm で合成命令を OFF にしたとき
    • fib.scm で合成命令を ON にしたとき
    • の全実行時間/命令数/コンパイル時間
    • 結果
      • OFF: 0.35sec|43180169命令|COMPILE = 1492 EVAL=423310|
      • ON: 0.33sec|37798233命令|COMPILE = 1575 EVAL=398039|
      • 命令数 14% down 速度 6%up
    • 今度は速くなった。
      • コンパイラが遅くなったがそれを補って命令数の減少により速くなっている
  • 実行時間が短い sum.scm で同じ事をやってみよう
    • 結果
      • OFF: 0.09sec|19161167命令|COMPILE = 4151 EVAL=119006|
      • ON: 0.09sec|19166124命令|COMPILE = 4415 EVAL=106013|
    • うーむ。これも期待している結果に近い。
  • 前回もっとも動作がおかしかった tak.scm も計測
    • 結果
      • OFF: 0.88sec|119433160命令|COMPILE = 4318 EVAL=921810|
      • ON: 0.90sec|114668599命令|COMPILE = 4530 EVAL=925706|
      • 命令数 4% down 速度 2% down

まとめると

  • 以前おかしかった fib.scm については今は期待通り
  • コンパイラは確かに遅くなっているが全実行時間に占める割合は小さい
  • tak.scm が微妙におかしな動きをしている
    • ただし tak.scm に対してインパクトの大きな命令数の減少がまだ起きていないので見守る程度で良いかも。
    • ためしに REFER_LOCAL1_PUSH という tak 用の合成命令を追加すると速くなる。
    • やはり様子見だな。


あとは一昨日と比べて

などの改善があるのでもう一度合成命令なしから計測してみようと思う。