本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

OpenGL API とメモリの消費について NVIDIA特別編

どうにも 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 の消費となっています。

まとめ

サイズを変更させて実験してみましたが、元データサイズの倍以上は消費されると考えて良さそうです。
これらの内容をグラフ化すると以下のようになります。なかなか作業メモリ(というかバッキングストア)分がひどいことに。

nvidia_ogl_working_memory_usage

追加

別視点から実験してみました。OpenGL @NVIDIAでのメモリ調査

OpenGLプログラミング
すらりんをフォローする
すらりん日記
タイトルとURLをコピーしました