我正在寻找一种可靠的方法来确定当前 GPU 内存使用情况,最好是在 C++/C 中。我发现了很多获取用法的方法,例如以下方法:
- 直接抽签
- Dx诊断
- WMI
- DXGI
- D3D9
这些方法不够准确(大多数相差一百兆字节)。我试过 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
(记录在 here 中)只需要 cuda 运行时 API 即可获取当前设备上的可用内存和总内存。
正如 Erik 所指出的,NVML 中也有类似的功能。
关于c++ - 以编程方式获取 GPU 内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16483685/