C++如何获取系统的当前GPU占用率(调用API)

轻丽吖_1180

轻丽吖_1180

2026-06-11

528人浏览

原创

windows平台用wmi查询gpu使用率最可靠,推荐使用win32_perfformatteddata_gpuperformancecounters_gpuadapterengine类的percentbusy字段(win10 2004+),需com多线程初始化、rootwmi命名空间,并确保wmi服务运行及性能计数器已启用。

c++如何获取系统的当前gpu占用率(调用api)

Windows平台用WMI查询GPU使用率最可靠

Windows没有公开的、跨厂商的GPU占用率API,DXGI和Direct3D本身不暴露实时GPU引擎负载。WMI(Windows Management Instrumentation)是目前最稳定、无需驱动SDK、兼容NVIDIA/AMD/Intel通用显卡的方式——前提是系统启用了WMI服务且有管理员权限运行。

关键类是 Win32_PerfFormattedData_GPUPerformanceCounters_GPUAdapterMemory(旧版)或更推荐的 Win32_PerfFormattedData_GPUPerformanceCounters_GPUAdapterEngine(Win10 2004+),后者直接提供 PercentBusy 字段。

  • 必须用 CoInitializeEx(nullptr, COINIT_MULTITHREADED) 初始化COM
  • 查询需指定命名空间:ROOT\CIMV2 或更准确的 ROOT\WMI(部分GPU计数器在此)
  • 若返回空结果,大概率是WMI性能计数器未启用:运行 lodctr /R 重载计数器,或检查 services.msc 中 Windows Management Instrumentation 是否启动
  • NVIDIA驱动较新时,PercentBusy 可能始终为0——这是已知WMI兼容性问题,此时需降级到 Win32_PerfFormattedData_GPUPerformanceCounters_GPUAdapterMemory 并计算 UsedMemory / TotalMemory 作为间接指标

Linux下用sysfs读取NVIDIA GPU利用率

Linux原生不提供统一GPU占用接口,NVIDIA驱动通过 /proc/driver/nvidia/gpus/*/information 和 /proc/driver/nvidia/gpus/*/utilization 暴露基础数据;AMD GPU(ROCm)走 /sys/class/kfd/kfd/topology/nodes/*/properties,但无直接%值;Intel核显则依赖 intel_gpu_top 工具或 /sys/class/drm/card*/gt_boost_freq_mhz 等间接参数。

Jarvis - Chief of AI Staff on NVIDIA GB10
Jarvis - Chief of AI Staff on NVIDIA GB10

在OpenClaw上部署你的首席AI助理贾维斯(JARVIS)。针对Dell Pro Max GB10(NVIDIA DGX Spark)边缘设备优化。用于设置和配置贾维斯。

下载

对NVIDIA最简方案是读取 /proc/driver/nvidia/gpus/0000:01:00.0/utilization(路径中的PCI地址需先枚举):

cat /proc/driver/nvidia/gpus/0000:01:00.0/utilization
Gpu    : 42 %
Memory : 18 %
  • 必须以root权限读取,普通用户会报 Permission denied
  • PCI地址格式为 0000:BB:DD.F,需先从 /proc/driver/nvidia/gpus/ 目录遍历获取有效子目录名
  • 该文件每秒更新一次,频繁读取无性能压力,但不可用于毫秒级监控
  • 注意:当GPU处于P0以外的电源状态(如P8)时,Gpu 行可能消失或返回 N/A,需做容错判断

跨平台方案只能靠第三方库或折中处理

不存在标准C++跨平台GPU占用率API。试图用OpenGL/Vulkan扩展(如VK_EXT_physical_device_diagnostics_config)获取负载,实际只在极少数调试驱动中启用,生产环境不可用。

  • nvml.h(NVIDIA Management Library)是最实用的方案,但仅限NVIDIA,且需链接 nvidia-ml-py 或 C API 的 libnvidia-ml.so/nvidia-ml.dll,不自带于系统
  • AMD提供 ADL SDK,但已停止维护,新版RDNA显卡支持极差;ROCm的 hipRuntime.h 不暴露利用率
  • 折中做法:Windows用WMI,Linux按GPU厂商分支处理(std::string vendor = get_gpu_vendor()),并默认fallback到显存占用率或温度(/sys/class/hwmon/hwmon*/temp1_input)作为代理指标
  • 所有方案都要求程序有足够权限——无权限时返回0或-1是常态,不是代码写错了

常见错误:误用DirectX API查GPU占用

很多开发者尝试用 IDXGIAdapter::GetDesc 或 ID3D12Device::GetNodeMask 获取GPU信息,但这些函数只返回硬件描述、显存大小、设备类型等静态字段,完全不包含任何实时占用率数据。

  • IDXGIAdapter3::QueryVideoMemoryInfo 返回的是显存预算/当前使用量,不是GPU核心计算负载
  • D3D12_QUERY_HEAP_TYPE_TIMESTAMP 可测单个命令列表耗时,但无法换算成“当前GPU占用率”,因为缺乏全局时间基准
  • 试图轮询 Present 调用间隔来估算——这实际反映的是帧率或垂直同步状态,与GPU引擎忙闲无关
  • 错误日志如 DXGI_ERROR_NOT_FOUND 或返回全0的 GPUFrequency 字段,基本可判定你调用了错误的接口
实际部署时,最易被忽略的是权限和驱动版本适配:WMI在Server Core系统上默认禁用,NVIDIA容器环境(如Docker)中/proc/driver/nvidia路径不可见,而ROCm需要显式加载kfd内核模块。这些不是代码问题,但会让整套逻辑静默失效。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++ nvidia

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c++和c语言的区别有哪些
c++和c语言的区别有哪些

c++和c语言的区别:1、面向对象编程(OOP)支持不同;2、新增特性不同;3、标准库不同;4、编译方式不同;5、命名空间不同等等。想了解更多c++的相关内容,可以阅读本专题下面的文章。

2024.03.14

2228

9

c++和python学习顺序推荐
c++和python学习顺序推荐

一般建议先学习C++,再学习Python,因为这样可以逐步从较为底层的编程语言向更高级的语言过渡。想了解更多python的相关内容,可以阅读本专题下面的文章。

2024.03.14

999

6

python和c++学习性价比分析
python和c++学习性价比分析

Python易于学习,广泛应用于Web开发、数据科学和人工智能等领域,但性能较低。C语言性能高,适用于对性能要求较高的场景,如游戏开发和系统编程,但学习曲线陡峭,错误处理复杂。想了解更多python的相关内容,可以阅读本专题下面的文章。

2024.03.14

427

5

c语言和c++一样吗
c语言和c++一样吗

c语言和c++是两种不同的编程语言,虽然有相似之处,但存在显著差异。c语言专注于过程式编程和系统级开发,以简洁、高效著称。c++作为c语言的超集,引入了面向对象编程,增强了代码组织和管理能力,但学习曲线也更陡峭。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.14

307

5

c语言和c++先学哪个好
c语言和c++先学哪个好

初学者选择学习c语言还是c++语言,需要根据个人学习目标、背景以及编程兴趣和预期应用方向来决定。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.14

406

5

c语言和c++的区别和联系
c语言和c++的区别和联系

c语言和c++是计算机科学领域应用广泛的编程语言。虽然它们有着相似的基础,但它们在语言类型、语法功能和内存管理方面存在着显著差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.14

580

5

c++软件中文更改教程
c++软件中文更改教程

对于 ide,可通过打开设置,找到语言设置,选择中文,并保存更改。对于非 ide 应用程序,可查找设置或选项,选择语言设置,更改为中文,并保存更改。想了解更多c++的相关内容,可以阅读本专题下面的文章。

2024.03.21

1389

9

python和java和c++学习性价比分析
python和java和c++学习性价比分析

Python以其易学性、丰富的库和活跃的社区而著称,适合数据科学、人工智能和Web开发。Java以其跨平台性、企业级应用开发和Android应用开发而闻名。C++以其底层控制能力、高效性能和游戏开发而著称。选择哪种语言取决于个人兴趣、职业方向和特定需求。想了解更多python和java和c++的相关内容,可以阅读本专题下面的文章。

2024.03.22

1197

7

c++和c语言学习顺序推荐
c++和c语言学习顺序推荐

对于初学者,建议先学习C语言,掌握编程基础后再转入C++,便于理解面向对象编程概念。有编程经验者可直接学习C++,快速接触高级编程技术。想了解更多c++和c语言的相关内容,可以阅读本专题下面的文章。

2024.03.25

1325

9

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习