讲师中心 微信公众号
AI工具推荐 视频效率加速

c++ 性能计数器pcm c++如何使用intel pcm监控cpu性能

陌敏酱_2389

陌敏酱_2389

发布时间:2026-03-26 20:34:03

|

608人浏览过

|

来源于php中文网

原创

Intel PCM需手动编译安装,编译时需指定-I./cpp -L./build并链接-lpcm,运行前设LD_LIBRARY_PATH=./build;须sudo权限、加载msr模块、禁用虚拟化,且需用pcm-core.x验证硬件支持。

c++ 性能计数器pcm c++如何使用intel pcm监控cpu性能

pcm-core.cpp 编译失败:找不到 pcm-core.h 或链接 libpcm.so

Intel PCM 不是系统自带库,必须手动编译安装后才能在 C++ 项目中调用。常见错误是直接 #include <pcm-core.h> 就编译,结果报“no such file”或“undefined reference to PCM::getInstance”。

  • 先去 GitHub opcm/pcm 克隆最新代码,进入目录后运行 make(需装好 g++、make、cmake)
  • make 成功后,头文件在 ./cpp/ 下,动态库生成在 ./build/libpcm.so(不是系统路径)
  • 编译你的程序时得显式指定路径:g++ -I./cpp -L./build your_app.cpp -lpcm -o your_app
  • 运行前要设 LD_LIBRARY_PATH=./build,否则 libpcm.so 找不到

初始化 PCM::getInstance() 返回 nullptr:权限或内核模块问题

Intel PCM 需要读取 MSR 寄存器,普通用户默认无权访问。即使编译通过,PCM::getInstance() 也可能返回 nullptr,且不报错——这是最隐蔽的坑。

  • 确认已加载 msr 内核模块:lsmod | grep msr;没输出就运行 sudo modprobe msr
  • 运行你的程序必须加 sudo,否则 PCM::getInstance() 内部检测到权限不足会静默失败
  • 某些发行版(如 Ubuntu 22.04+)默认禁用 MSR 访问,需检查 /sys/module/msr/parameters/enabled 是否为 Y
  • 虚拟机里基本不可用——KVM/VirtualBox 默认屏蔽 MSR 读取,别白费时间调试

systemCounter->program() 失败:CPU 型号不支持或计数器被占用

调用 program() 是启动采样的关键一步,失败常表现为返回值非 0,但错误码含义模糊。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • 先用 ./pcm-core.x -v(PCM 自带工具)验证硬件支持:它能跑通,说明 CPU 型号在 PCM 支持列表内(如 Skylake 及更新架构基本 OK,老 Atom 可能不行)
  • 同一台机器上不能多个进程同时调用 program()——PCM 占用固定性能计数器资源,第二个调用会因资源冲突失败
  • 部分笔记本 CPU 在降频/节能状态下可能拒绝编程计数器,可尝试插电 + BIOS 关闭 C-states 测试
  • 返回 -1 通常是权限或模块问题;返回 -2 多为 CPU 不支持或计数器被占;返回 -3 往往是内核版本太旧(PCM 要求 Linux ≥ 3.10)

采样间隔不准、数据跳变:没调用 sleep() 或忽略 getNumOnlineCores()

PCM 本身不提供定时循环,你得自己控制采样节奏。新手常写成“采集一次就退出”,或用 std::this_thread::sleep_for() 但单位搞错,导致数据毫无规律。

立即学习“C++免费学习笔记(深入)”;

  • 采样周期建议 ≥ 100ms,太短会导致计数器溢出或系统开销反超观测目标
  • 别直接用 sleep(1)——sleep() 是秒级,usleep() 已废弃,推荐 std::this_thread::sleep_for(std::chrono::milliseconds(500))
  • 多核场景下,getNumOnlineCores() 返回的是当前在线逻辑核数,不是物理核数;遍历 core ID 时务必用它做上界,硬写 0..31 在笔记本上大概率越界
  • 每次 update() 后,记得用 getCoreCounterState(i) 拿对应核的数据,别复用同一个对象——不同核状态独立
PCM 的核心限制不在 API 复杂度,而在它和硬件、内核、权限的强耦合。哪怕代码完全照文档抄,只要少一个 sudo、漏载 msr 模块、或在 VM 里试,就卡在第一步不动。真要用,先跑通 pcm-core.x,再动自己的 C++ 程序。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

c++

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

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

11985

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

5507

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

2516

2025.12.25

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

8585

2026.01.21

GitHub官网入口版本汇总
GitHub官网入口版本汇总

本专题整合了GitHub入口版本地址汇总,阅读专题下面的文章了解更多详细内容。

898

2026.04.02

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

4170

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

3533

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2753

2023.06.30

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

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

精品课程

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

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

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

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn