ファイルマッピングによるレンダリング

メモリを増設して合計1.5Gになったのでxyzrgb_dragon(asian dragon)をレンダリングした。
環境:CPU pentium4 2.4GHz RAM 1536MB
モデル:7219045頂点 3609600三角形
レンダリング:1200*1200 一時レイのみ 1点光源 レイトレーシングシャドウ
レンダリング時間:読み込み+構造構築 25秒, レンダリング 5秒

モリーが多いとやっぱり速い。昨日まではxyzrgb_dragonをレンダリングしようとすると、やたらとガリガリなってなかなかレンダリングが始まらなかった。

この自作のレンダラではメモリにはファイルマッピングを使っているんだけど、こいつは実メモリでバッファリングしてて、実メモリが足りなくなるとおそくなる。つまり事実上実メモリを使うのと大差ない。裏でスワッピングを起こされるとどうしようもなく遅くなるが、逆に総サイズが実メモリにも十分載るときは十分速く、速度の劣化は感じられない。
windowsの場合、ファイルマッピングを使わなくてもメモリが足りなくなると自動でスワッピングしてくれるからメモリ不足で落ちるということはまずない。よってファイルマッピングを使う意味はほとんどないようだが、実はメモリ確保の時間がファイルマッピングの方が断然早い。
一方linuxの場合、大きなメモリをファイルマッピング(mmap)を使わず直に確保しようとすると落ちることがある。C++の場合、メモリの確保が失敗したときには例外が送出されなければならないはずだが、例外が出されないので、適切なエラー処理が出来ない。ファイルマッピングでは、実メモリのサイズにそぐわないサイズをマッピングしようとするとすぐにエラーを返してくれる。
というわけでファイルマッピングでメモリを確保するのは得られるメリットは少ないが、意味がないわけじゃない。デメリットは途中で落ちるとテンポラリが残ってしまうこと。
どっちにしても結局実メモリは多くしなければならない。