CVS と Subversion と svk が混じってるとどれを打てばいいのやら混乱してくる。 CVS/ とか .svn があるかどうか見て自動判別するようなラッパーを書くべきか。 しかしコマンドが少し違うから最終的には使い分けなきゃいかんのだよなあ。
(16:48)
やべ、気軽に printf を使ってしまったが GHC 6.2 には printf がなかった。 6.2 と 6.4って意外と違うんだなあ。
Ruby のマイナーバージョンほどじゃないけどね。
(17:12)
struct st_table_entry はいまのところ malloc で普通に割り当ててる。 これをある程度まとまった単位で malloc するようにしたら速くなるんじゃないかと思ってやってみた。
結果
~/c/ruby % ./ruby.normal ../yarv/st-benchmark.rb 1000000 user system total real empty 0.110000 0.000000 0.110000 ( 0.376736) ivar 0.500000 0.000000 0.500000 ( 0.508973) hash/addrm 0.790000 0.000000 0.790000 ( 0.794872) hash/add 0.080000 0.010000 0.090000 ( 0.082135) ~/c/ruby % ./ruby.mempool ../yarv/st-benchmark.rb 1000000 user system total real empty 0.130000 0.000000 0.130000 ( 0.133526) ivar 0.500000 0.000000 0.500000 ( 0.508887) hash/addrm 0.760000 0.000000 0.760000 ( 0.768688) hash/add 0.070000 0.000000 0.070000 ( 0.077429)
差が出ない。Hash の要素を追加してはすぐ削除する hash/addrm あたり、 もうちょっと差がつくかと思ったけどぜんぜん効果なし。 空ループが遅くなっているのも気になる。
なぜか知らないが、YARV のほうがまだ効果が大きい (とある事情によりベンチマークは別コード)。
~/c/yarv % ./miniruby.normal st-benchmark.rb 1000000 user system total real empty 0.230000 0.000000 0.230000 ( 0.234428) ivar 0.510000 0.000000 0.510000 ( 0.510785) hash/addrm 0.690000 0.000000 0.690000 ( 0.699603) hash/add 0.720000 0.030000 0.750000 ( 0.755435) ~/c/yarv % ./miniruby.mempool st-benchmark.rb 1000000 user system total real empty 0.230000 0.000000 0.230000 ( 0.233647) ivar 0.470000 0.000000 0.470000 ( 0.479570) hash/addrm 0.610000 0.000000 0.610000 ( 0.617374) hash/add 0.610000 0.030000 0.640000 ( 0.646592)
かなり有利と思われる操作ばっかりやってこの差では、あんまり意味ないな。
(04:50)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.