高速化チューニング その1 - Scheme VM を書く

予想されていたことだが死ぬほど VM が遅い。(特にコンパイラが)

以下のコードの実行時間を基準に高速化チューニング

(library (rnrs io simple (6))
         (export display)
         (import)
         (define (display x . port)
           (if (null? port)
               (sys-display x)
               (sys-display x (car port)))))

(library (hige)
         (export greeting)
         (import (rnrs io simple (6)))
         (define (greeting) (display "hige")))

(import (hige))

(greeting)

現在の CFLAGS -Wall -g -D GC_DEBUG -D MONA_SCHEME -D USE_BOEHM_GC

現時点のスコア

  • 0.49s user 0.00s system 96% cpu 0.515 total ← チューニング前
  • 0.31s user 0.02s system 100% cpu 0.332 total ← symbolの初期化をちょっと工夫 + vector の quasiquote をあらかじめ展開
  • 0.15s user 0.00s system 95% cpu 0.159 total ← symbol のインターン改善

シンボルのインターン改善

シンボルのインターン時に std::map なマップに記録していたが、これをやめて std::mapにしたら大分速くなった。
key_compare 始めて使った!

プロファイル的なスクリプト

手続きの実行前後で get-timeofday を記録するようなスクリプトを書いたので明日はこれを利用して高速化を試みよう。

高速化のテクニックとか

高速化のテクニックとかボトルネックを特定するノウハウがありましたらぜひ教えてください。_(__)_
今のところ gprof ぐらいしか使っていません。