我正在寻找一种可靠的方法来确定当前的GPU内存使用情况,最好是在C ++ / C中。我找到了很多获取用法的方法,如下面的方法:
这些方法不够准确(大多数是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就可以了)。
答案 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?