どうにも NVIDIA のメモリ消費について、メモリ消費しすぎな感じがあったので追加調査してみることにしました。
32MB VBOの場合(前回の結果)
状態 | メモリ(MB) | Dedicate(MB) | 共有メモリ(MB) |
---|---|---|---|
初期化終了後 | 999.8 | 36 | 13 |
元データ準備 | 1031.7 | 36 | 13 |
glBufferData実行後 | 1114.7 | 68 | 32 |
元データ破棄 | 1082.7 | 68 | 32 |
初回描画後 | 1082.9 | 70 | 32 |
そこで今回はサイズを変化させた VBO 2つでどのように変化するか、しないかを見ていきたいと思います。
4MB VBO x2
状態 | メモリ(MB) | Dedicate(MB) | 共有メモリ(MB) |
---|---|---|---|
初期化終了後 | 1023.0 | 36 | 14 |
元データ準備(4MB x2) | 1037.9 | 36 | 14 |
glBufferData (1)実行後 | 1050.8 | 40 | 16 |
glBufferData (2)実行後 | 1054.8 | 44 | 24 |
元データ破棄 | 1043.4 | 44 | 24 |
初回描画後 | 1043.4 | 45 | 25 |
BufferData2回分の内部データとして 16.9MB を消費、定常的には 20.6 MB の消費という結果になりました。VRAM のリソースとしては 4MB x2 = 8MB = 44-36 と想定に合うサイズが使用されています
16MB VBO x2
状態 | メモリ(MB) | Dedicate(MB) | 共有メモリ(MB) |
---|---|---|---|
初期化終了後 | 1019.1 | 36 | 14 |
元データ準備(16MB x2) | 1048.2 | 36 | 14 |
glBufferData (1)実行後 | – | 52 | 32 |
glBufferData (2)実行後 | 1133.2 | 68 | 36 |
元データ破棄 | 1101.2 | 68 | 36 |
初回描画後 | 1101.4 | 70 | 37 |
BufferData2回分の内部データとして 85MB を消費、定常的には 82.2 MB ほどメモリを使用する結果になりました。 VRAM リソースとしては 70-36 = 34 MB となりおおよそ想定の範囲の結果に。
。
64MB VBO x2
状態 | メモリ(MB) | Dedicate(MB) | 共有メモリ(MB) |
---|---|---|---|
初期化終了後 | 1023.9 | 36 | 14 |
元データ準備(64MB x2) | 1156.0 | 36 | 14 |
glBufferData (1)実行後 | 1302.1 | 100 | 32 |
glBufferData (2)実行後 | 1433.2 | 164 | 36 |
元データ破棄 | 1304.9 | 164 | 36 |
初回描画後 | 1309.3 | 165 | 37 |
BufferData 2回分の内部データとして 277.2MB, 定常状態として 285MB の消費となっています。
まとめ
サイズを変更させて実験してみましたが、元データサイズの倍以上は消費されると考えて良さそうです。
これらの内容をグラフ化すると以下のようになります。なかなか作業メモリ(というかバッキングストア)分がひどいことに。
追加
別視点から実験してみました。OpenGL @NVIDIAでのメモリ調査