我正在寻找一种可靠的方法来确定当前GPU内存使用情况,最好是用C++/C。我已经找到了许多获取使用情况的方法,比如以下几种方法:
查看GPU-Z的导入项,除了以下内容外,我没有发现其他有趣的东西:
- Direct Draw
- DxDiag
- WMI
- DXGI
- D3D9
nvapi.h
,但没有看到任何可以用于查询内存的东西。我之前认为上述方法是唯一的选择,但后来我遇到了一个称为GPU-Z
的工具,它能够给我准确的内存读数,误差不到1MB,即使我的580GTX运行OpenCL并且负载接近满载。我可以通过分配更多的内存来验证自己是否达到内存使用峰值,此时OpenCL会返回Object_Allocation fail
。查看GPU-Z的导入项,除了以下内容外,我没有发现其他有趣的东西:
我的猜测是必须使用kernel32.dll: LoadLibraryA, GetProcAddress, VirtualAlloc, VirtualFree
LoadLibraryA
来加载一个dll以查询GPU内存和传感器信息。如果这个dll存在,那么它在哪里?如果可能的话,我正在寻找AMD和NVidia的解决方案(使用不同的API也可以)。