14

我正在寻找一种可靠的方法来确定当前的 GPU 内存使用情况,最好是在 C++/C 中。我发现了许多获取用法的方法,例如以下方法:

  • 直接抽奖
  • 诊断诊断
  • WMI
  • DXGI
  • D3D9

这些方法不够准确(大多数相差一百兆字节)。我试过nvapi.h了,但没有看到任何可以用来查询内存的东西。我原本以为只有上面列出的方法是唯一的选择,但后来我遇到了一个名为的工具GPU-Z,即使 OpenCL 在我的 580GTX 上几乎满负荷运行,它也能提供精确到最接近兆字节的内存读数。Object_Allocation fail我可以通过在 OpenCL 返回返回码之前再分配几兆字节来验证我的内存使用量是否达到峰值。

查看从 GPU-Z 导入的内容,除了:

kernel32.dll:LoadLibraryA、GetProcAddress、VirtualAlloc、VirtualFree

我的猜测是LoadLibraryA必须用于加载 dll 以查询 GPU 内存和传感器。如果这个 dll 存在,它在哪里?如果可能的话,我正在为 AMD 和 NVidia 寻找解决方案(可以使用不同的 API)。

4

3 回答 3

13

cudaMemGetInfo在此处记录)只需要 cuda 运行时 API 即可获得当前设备上的可用内存和总内存。

正如 Erik 指出的那样,NVML 中也有类似的功能。

于 2013-05-10T13:54:33.503 回答
2

查看 NVIDIA 管理库https://developer.nvidia.com/nvidia-management-library-nvml中的函数 nvmlDeviceGetMemoryInfo :

“检索设备上已用、可用和总内存的数量,以字节为单位。”

不知道AMD有没有类似的东西。

于 2013-05-10T13:48:46.280 回答
2

D3DKMTQueryStatistics 是您所需要的。

此处提出了类似的问题:如何在 DirectX 中查询 GPU 使用情况?

于 2013-05-10T14:00:05.337 回答