以编程方式获取GPU内存使用量

时间:2013-05-10 13:41:31

标签: c++ cuda opencl gpu

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

  • 直接抽奖
  • DXDIAG
  • WMI
  • DXGI
  • D3D9

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

看看GPU-Z的导入,除了:

之外,我没有看到任何有趣的东西
  

kernel32.dll:LoadLibraryA,GetProcAddress,VirtualAlloc,VirtualFree

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

3 个答案:

答案 0 :(得分:10)

cudaMemGetInfo(记录为here)除了cuda运行时API之外,只需要获取当前设备上的可用内存和总内存。

正如Erik所指出的,NVML中有类似的功能。

答案 1 :(得分:2)

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

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

不知道AMD是否有相同的东西。

答案 2 :(得分:2)

D3DKMTQueryStatistics是您所需要的。

此处已提出类似问题:How to query GPU Usage in DirectX?