高速化 - Scheme VM を書く

Threaded code を試したところ速くなった。
0.400sec前後から 0.300sec前後に。
Direct threaded code は VM の命令列が配列じゃなくて面倒なのでやらなかった。


いろいろ気づいたことがある。
以下の比較を見ると分かるが

Gauche ネイティブで VM用に Wikiコンパイル 0.168 sec
VMVM用に Wikiコンパイル 0.158 sec
Gauche ネイティブで Wiki を実行 0.035 sec
VMコンパイル済みの Wiki を実行 0.024 sec

Gauche ネイティブで Wiki を実行」とは

  1. Scheme のコードを Gauche VM用にコンパイル
  2. VM で実行

と2つであることから
導かれる結論は

Gauche VM 用の Gauche 上のコンパイラ >> 俺 VM 用の Gauche 上のコンパイラ ≒ 俺 VM 用の 俺 VM 上のコンパイラ

つまり Scheme のコードとしてのコンパイラの速度が遅い。
ではどうすれば良いか? compiler.scm の速度を 1/10 にする。


手段は

  • Scheme的コード改善
  • クリティカルな部分は C++ に置き換える

あたり。

C++

いくつかの手続きを C++ で書き直す

チューニング前 0.160
set-member? 0.125
set-union? 0.100
set-minus 0.100
find-sets 0.090

まだまだいけるはず。