[Anthy-dev 2203] r5rs: GC ちょっと最適化

Back to archive index

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 


Anthy-dev メーリングリストの案内
Back to archive index