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

Get GPU memory usage programmatically

本文关键字:用情 情况 内存 GPU 编程 方式 获取      更新时间:2023-10-16

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

    直接画
  • 一种诊断工具
  • WMI
  • DXGI
  • d3d 9

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

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

kernel32.dll: LoadLibraryA, GetProcAddress, VirtualAlloc, VirtualFree

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

cudaMemGetInfo(在这里记录)只需要cuda运行时API来获取当前设备上的空闲内存和总内存。

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

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

"以字节为单位检索设备上可用的已用、空闲和总内存量。"

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

D3DKMTQueryStatistics是你需要的。

类似的问题已经问过这里:如何查询GPU使用DirectX?

相关文章: