我正在寻找一种可靠的方法来确定当前的 GPU 内存使用情况,最好是在 C++/C 中。我发现了许多获取用法的方法,例如以下方法:
- 直接抽奖
- 诊断诊断
- WMI
- DXGI
- D3D9
这些方法不够准确(大多数相差一百兆字节)。我试过nvapi.h
了,但没有看到任何可以用来查询内存的东西。我原本以为只有上面列出的方法是唯一的选择,但后来我遇到了一个名为的工具GPU-Z
,即使 OpenCL 在我的 580GTX 上几乎满负荷运行,它也能提供精确到最接近兆字节的内存读数。Object_Allocation fail
我可以通过在 OpenCL 返回返回码之前再分配几兆字节来验证我的内存使用量是否达到峰值。
查看从 GPU-Z 导入的内容,除了:
kernel32.dll:LoadLibraryA、GetProcAddress、VirtualAlloc、VirtualFree
我的猜测是LoadLibraryA
必须用于加载 dll 以查询 GPU 内存和传感器。如果这个 dll 存在,它在哪里?如果可能的话,我正在为 AMD 和 NVidia 寻找解决方案(可以使用不同的 API)。