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

rob*_*986 11 c++ cuda gpu opencl

我正在寻找一种可靠的方法来确定当前的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是可以的).

Rob*_*lla 12

cudaMemGetInfo(此处记录)除了cuda运行时API之外,只需要获取当前设备上的空闲内存和总内存.

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