Jun Inoue
jun.l****@gmail*****
2005年 8月 6日 (土) 12:25:22 JST
sigscheme/ の中は大体読んだので、GC 周りを最適化してみました。 sscm-gcopt.diff を当てると、gc_preprocess() が 40 億回に 1 回しかヒープ を走査しなくなります。ただし gcmark がenum でなくなっています。enum のま までもエラーは出ないでしょうけど、意味的に違う気がしたので。 sscm-gcopt-bench.diff に簡易ベンチマークを含めてあります。(警告されます が、sscm-gcopt.diff と独立に当てられます) sscm n で、cons を作っては破棄、を n 回繰り返す所要時間、 sscm -r n で、cons を作って全部リンク(破棄しない)、を n 回繰り返す所要時間を表示し ます。これで比較すると前者では 14%、この最適化に有利な後者では 43% 時間 が短縮されました。 実際に 2^32 回 GC されたケースも初期値をいじることでテストしてあります……一応 ところで、posix_memalign() についてちょっとググってみたところ、この関数 は一部の BSD variant では用意されていないようです。それどころか posix_memalign(), valloc(), memalign() のいずれも持ってないシステムがあ るそうで、そのシステムでは代わりに malloc() が 1 ページ以上の大きさのブ ロックは必ずページ境界に揃えて返すそうです。(参考: AX_CHECK_PAGE_ALIGNED_MALLOC) よって AX_CHECK_PAGE_ALIGNED_MALLOC を導入するか、少しだけ余分に確保して 自分で align するかしか無いと思います。でもこの malloc_aligned() ってそ もそも要らないのでは? 大抵のシステムでは 8 バイトにあわせたポインタが 返ってきますし、そうでない場合もそれほどパフォーマンスに影響はないと思い ます(そうでなければシステム全体が恐ろしく遅いということになりますから)。 -- Jun Inoue jun0****@users***** -------------- next part -------------- 文字コード指定の無い添付文書を保管しました... 名前: sscm-gcopt.diff 下載 -------------- next part -------------- 文字コード指定の無い添付文書を保管しました... 名前: sscm-gcopt-bench.diff URL: http://lists.sourceforge.jp/mailman/archives/anthy-dev/attachments/20050805/a7ea3232/attachment-0001.txt