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

标签 c++ cuda opencl gpu

我正在寻找一种可靠的方法来确定当前 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/

相关文章:

c++ - 获取 unordered_set 中最右边的元素(或反向打印内容)

opencl - 可以跨越 OpenCL 内核在 CPU 和 GPU 上同时运行

c++ - 如何在主机 C++ 函数之间传递 cl::Buffer 对象?

c++ - 在 opengl c++ 中禁用窗口调整大小

c++ - Windows __stdcall DLL 的 DEF 文件格式? (*.def -> lib.exe -> *.lib)

sdk - 如何编译CUDA SDK示例?

c++ - nvcc 致命 : Visual Studio configuration file 'vsvars32.bat' could not be found (VS 2017)

c++ - 用于 openmp 4.5 卸载到 (gpu) 设备的 nvptx gcc (9.0.0/trunk) 找不到 libgomp.spec

c - 非 GPU 硬件上是否会发生 Bank 冲突?

c++ - 动态 3D 阵列上的 OpenGL glDrawPixels