前回AMDのドライバでVRAM情報取得が出来なくなった状態だったのと、Vista以降でVRAM情報が正しくとれなくなったのとのコンボで再度ちょっと実験してみました。
NVIDIAのドライバでは、GL_NVX_gpu_memory_info という拡張がOpenGLで使える可能性があります。
これを用いてみて、どのような挙動になるか確かめてみたいと思います。AMDも本来なら実験したいのですが、先日の通りなぜか使えなくなっている状態でしたのでここでは諦めておきます・・・。
NVIDIAの拡張のほうで、搭載メモリを取得するのには、GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX を用い、使用可能メモリを取得するのに、GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX を用いて値を得ます。これらの詳しい説明はこちらに。
自分の環境は以下の通りです。
- Windows7SP1
- NVIDIA GeForce650Ti
- NVIDIAドライバ 314.07
- 1920×1200モニタ
これで値の取得を試みたところこうなりました。
- 搭載メモリ 1023MB
- 使用可能メモリ 805352 KB
ここから計算すると、約200MB ほど使用中という感じになります。他にもいくつかのアプリケーションが動いていたため、それらで消費されている分も考慮されているということでしょう。
そこでこの値の変動を、他のアプリケーションの起動によって変動するかを確かめてみます。エクスプローラーを他にも立ち上げたり、画像処理系のプログラムを動かしてみたりと。これで値が変動するのを確認できました。つまりここで取得される値というのはシステムトータルの使用量を考慮の上ということのようです。
ここから、このOpenGL APIによる値取得でVRAMの使用量をモニタリングするアプリケーションが作れそうです。
気になる点
ただ気になる点が1つあります。最新のProcessExplorerではGPUのメモリ使用量もグラフ化することができるのですが、ここと結構値が違います。特に搭載メモリ量の部分で違うところからちょっと驚きです。(1023 vs 950 MB) ここが違うためか、使用中メモリ量を計算するとずれてきます。この差分を考慮して下駄を履かせると両者で同じくらいにはなりそうですが・・・この差異が出てくる理由はちょっとわかりません。