2013-05-10 28 views
7

C++/Cで現在のGPUメモリ使用量を確認する信頼できる方法を探しています。私は、次の方法のような使い方を得るための多くの方法を発見した:GPUのメモリ使用量をプログラマ的に取得

  • 直接
  • DXDIAG
  • WMI
  • DXGI
  • D3D9

描くこれらの方法は、(十分に正確ではありません大部分は100メガバイト)。私はnvapi.hを試しましたが、私はメモリを照会するのに使える何も見ませんでした。私は上記の方法だけが唯一のオプションだと思っていましたが、OpenCLが私の580GTXにほぼ完全に負荷をかけていても、私はGPU-Zというツールを使って正確なメモリの読みをもっとも近いメガバイトにしました。私は、OpenCLが戻りコードObject_Allocation failを返す前に、私は私のメモリ使用量のピーク時に数メガバイトを割り当てることで確認できます。

GPU-Zからの輸入を見て、私はより興味深い他の何も見えません。

KERNEL32.DLL:LoadLibraryA、GetProcAddressが、VirtualAllocの、VirtualFree

私の推測では、LoadLibraryAを使用する必要がありますGPUのメモリとセンサーに問い合わせるためのDLLをロードする。このDLLが存在する場合、それはどこに住んでいますか?可能であれば、AMDとNVidiaのソリューションを探しています(異なるAPIを使用しても問題ありません)。

+1

を「私の百メガバイトオフ最も」 - あなたが使用している既知の適切な参照は何ですか? –

+0

私はGPU-Zを私のリファレンスとして使用しています。 – roboto1986

+0

そして、GPU-Zが他の人たちが間違っているところに自信を持てるのは何ですか? –

答えて

9

cudaMemGetInfo(文書番号here)は、現在のデバイスの空きメモリと合計メモリを取得するために、cudaランタイムAPI以外は必要ありません。

Erikが指摘しているように、NVMLにも同様の機能があります。

+0

ありがとう!私はこれを試してみる。すぐに正解をマークします。 – roboto1986

+0

私はそれを試してみましたが、この方法は他のSDKをインストールしなくても私が望む精度を提供します:)今、私はまだATIカードの運が足りません。アイデアがあればお知らせください。そうでなければ、私はちょうどDXの方法で行くかもしれない。 – roboto1986

1

はNVIDIA管理ライブラリhttps://developer.nvidia.com/nvidia-management-library-nvmlで機能nvmlDeviceGetMemoryInfoをチェックアウト:

「バイトで、デバイスで利用可能な使用、遊離および総メモリの量を取得します。」

AMDに同等のものがあるかどうかわかりません。

+0

情報ありがとうございます。しかし、nvmlUnitGetCount()を使用してデバイスを0に戻して、適切なデバイス数を取得できませんでした。私はnvmlInit()を呼び出し、戻り値のステータスは成功し、次にnvmlUnitGetCount()をフォローし、返されたステータスも成功しましたが、0のデバイスが返されました。何か案は? – roboto1986

+0

OpenCLでデバイス/プラットフォームが0になったら、通常は動作するディスプレイドライバを再インストールします。それ以外は私には何の提案もありません。ごめんなさい。 –

1

D3DKMTQueryStatisticsが必要です。

同様の質問がここに頼まれました:How to query GPU Usage in DirectX?

+0

私はこれを前に見たことがない、ありがとう。私はそれをテストする時間が必要になります:) – roboto1986

関連する問題