首页 > 解决方案 > 如何查询每个进程的 GPU 处理负载?

问题描述

我需要监控每个进程的 GPU 处理负载 (%)。

例如(发明)

csgo - 60%
plasma - 5%
...
grep - 0%

作为替代方案,我可以根据线程使用情况计算:

csgo - 2500 threads  (2500/4096 ~= 61%)
plasma - 204 threads

或者一些类似的启发式。它不需要精确,但可以很好地提示谁在使用 GPU。

为此,我一直在研究几个可能有所帮助的 API:OpenCL、Vulkan、Linux/Unix API。我不是其中任何一个方面的专家,但我还找不到解决方案。

通用(跨供应商)解决方案显然是首选,但 NVidia/AMD/Intel(或它们的某些子集)的每个供应商可能已经是一个很好的结果。

不幸的是,我无法解决这个问题以及如何查询这些数据。

如何查询每个进程的 GPU 负载(处理百分比)?

注意 1:我的尝试是在 root 权限下运行的。
注意 2:出于显而易见的原因,除非不可能,否则我会尽量远离 CUDA。
注 3:我目前正在研究 nvapi,但这只会解决 NVidia 供应商。
注 4:我以 C++ 语言为目标注 5:考虑到我找不到任何相关的 API 条目,共享一个空示例来启动 Vulkan 或 OpenCl 似乎效率不高。


一些相关主题:

如何获取每个进程的 GPU 使用率?
此答案针对 Windows,解决方案专门针对 Tesla/Quatro NVidia 卡,这不是我的情况。此外,Direct3D 不是 Linux 上的解决方案。

标签: linuxgpuopenclmonitoringvulkan

解决方案


推荐阅读