Xslate with Direct Threaded Code
Ruby 1.9が採用しているVMの最適化手法に、Direct Threaded Codeというものがあるらしい。
ターゲットコードが大きくなる代わりにVMの実行ループがかなり速くなるようだ。これを、Xslateに採用しない手はない、ということで簡単に実装してみた。
ブランチ:direct_threaded_code
masterにマージした。0.1036からはコンパイラがGCCのときに選択される。
実行ループ*1:http://gist.github.com/446673
従来のVMとパフォーマンスを比較すると、10%ほど高速化している。
従来のVM:
$ perl benchmark/interpolate.pl Perl/5.10.1 i686-linux Text::Xslate/0.1035 Text::MicroTemplate/0.11 Rate mt s///g xslate mt 7314/s -- -3% -78% s///g 7518/s 3% -- -77% xslate 32880/s 350% 337% --
DTC:
$ perl -Mblib benchmark/interpolate.pl (snip) Rate s///g mt xslate s///g 7450/s -- -1% -80% mt 7518/s 1% -- -80% xslate 37236/s 400% 395% --
他のベンチマークをみても10%程度の改善である。場合によっては40-50%程度の改善がみられることもあるというが、ひとまず安定した効果は得られるようなので、とりあえずこれで行く。
*1:ビルド時に自動生成される