C++側での最適化 - Scheme VM を書く

VM の構造を変えない限りはアルゴリズム的に改善する余地はあまりない。
そこで C++ 実装面での最適化を行う。
Wiki のコードのコンパイルにかかる時間を基準に計測しつつ最適化。

対応 sec
元の状態 0.650
-fomit-frame-pointerをつける 0.400
always inline 0.400
VMスタックの操作を Intオブジェクトではなく native int 0.400
Closureの構造をVectorから nativeクラス 0.370
Pair Pointerを特別扱い 0.370


速くなると読んでいた

  • Pairの構造変更
  • スタック操作

の2つが全く速くならず。
ダメ元の -fomit-frame-pointer と、そこまで速くならないだろうと思った Closure 構造変更が速くなりショック。


そういえば gcc の警告オプションで -Winline を見つけた。
inline 指定されているのに inlined にならなかったら警告が出る。
いつも ON にしていると気が滅入るのでたまに ON が良い。