讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

AniShort
AniShort

AI短剧协同制作平台

剧云
剧云

中文短剧剧本制作平台

C++如何测量函数执行的CPU周期?(性能分析)

老墨小哥_6775

老墨小哥_6775

发布时间:2026-01-05 12:43:14

|

240人浏览过

|

来源于php中文网

原创

最可靠方式是用TSC指令(如__rdtsc)配合cpuid串行化、单核绑定、禁用变频,并取多次测量中位数;需验证invariant TSC以确保周期换算准确,实际项目推荐perf等工具替代手动TSC。

c++如何测量函数执行的cpu周期?(性能分析)

在C++中直接测量函数执行的CPU周期,最可靠的方式是使用处理器提供的时间戳计数器(TSC, Time Stamp Counter),配合内联汇编或编译器内置函数读取,再结合CPU频率换算。但要注意:现代CPU存在变频、多核乱序、节能状态等干扰,裸TSC值需谨慎解读。

用rdtsc指令获取高精度周期计数

Intel/AMD x86-64 CPU提供rdtsc指令,返回自上电以来的CPU周期数(非绝对时间)。可通过内联汇编或__rdtsc()(MSVC)/__builtin_ia32_rdtsc()(GCC/Clang)调用:

  • Windows MSVC:#include <intrin.h></intrin.h>,调用__rdtsc()返回unsigned long long
  • Linux GCC/Clang:#include <x86intrin.h></x86intrin.h>或直接用__builtin_ia32_rdtsc()
  • 注意:必须禁用编译器优化对目标函数的重排(如加volatile内存屏障或用asm volatile ("" ::: "rax", "rdx")防止指令重排序)

确保测量结果有意义的关键操作

单纯两次rdtsc相减会受干扰,需控制执行环境:

Linuxdo Application
Linuxdo Application

为 Linux.do 注册撰写高通过率、去 AI 化的中文小作文。进行自适应调查以了解申请人的真实背景,...

下载
  • 用cpuid指令串行化执行流(避免乱序影响起点/终点),例如在rdtsc前后各插一条cpuid
  • 将待测函数绑定到单个物理核心(如Linux用taskset -c 0 ./a.out),避免跨核迁移和频率跳变
  • 关闭CPU动态调频(如Linux运行echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor)
  • 重复多次测量,剔除异常值(如首尾10%),取中位数而非平均值

换算成纳秒或验证是否为“真实周期”

TSC值本身是周期数,但部分CPU启用invariant TSC(推荐启用),此时TSC速率恒定且等于标称基础频率(如3.0 GHz → 每秒30亿次计数)。验证方式:

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

  • 查CPUID:执行cpuid后检查EDX bit 4(TSC invariant)是否置位
  • 用std::chrono::high_resolution_clock同步测一段已知耗时(如std::this_thread::sleep_for(1ms)),反推TSC每秒增量
  • 若需纳秒值:差值 ÷ (CPU主频 × 1e9),例如差值为3000、主频3.0 GHz → 1000 ns

更实用的替代方案:perf + 火焰图

对于真实项目性能分析,不建议手动TSC——易出错且难泛化。推荐组合工具链:

  • Linux下用perf record -e cycles,instructions,uops_issued.any ./myapp采集硬件事件
  • 用perf report -g看函数级cycle占比,或perf script导出供火焰图生成
  • Clang/GCC编译时加-pg(gprof)或-frecord-gcc-switches辅助分析
  • 对短函数,可结合std::chrono::steady_clock(精度通常1–15 ns)做粗略对比,避开TSC复杂性

相关文章

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

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

下载

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

热门AI工具

更多
小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

WorkBuddy

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

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

火山引擎

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

豆包大模型

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

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

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

相关专题

更多
c++中volatile关键字的作用
c++中volatile关键字的作用

本专题整合了c++中volatile关键字的相关内容,阅读专题下面的文章了解更多详细内容。

854

2025.10.23

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3479

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3038

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

1548

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2759

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3370

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1737

2023.08.10

windows boot manager
windows boot manager

windows boot manager无法开机的解决方法:1、系统文件损坏,使用Windows安装光盘或USB启动盘进入恢复环境,选择修复计算机,然后选择自动修复;2、引导顺序错误,进入恢复环境,选择命令提示符,输入命令"bootrec /fixboot"和"bootrec /fixmbr",然后重新启动计算机;3、硬件问题,使用硬盘检测工具进行扫描和修复;4、重装操作系统。本专题还提供其他解决

2537

2023.08.28

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

40

2026.11.12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

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

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