当前位置: 首页 > news >正文

统计程序两个点之间执行的指令数量

环境:支持perf

ubuntu安装

apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r`

android

一般自带simpleperf

分析

两个点作差, 求中间结果;

*(int*)nullptr = 0;

案例

断点 1

代码

#define SETPOINT(...)  do { *(int*)nullptr = 0; } while(0)
int main() {SETPOINT(1);int a = 0;for(int i = 0 ; i < 500; i++) a+=i;return 0;
}

执行结果

ch@ch-ubuntu:~/ch/perf_test/exe_count$ sudo perf stat -e instructions:u ./a.out 
[sudo] password for ch: 
./a.out: Segmentation faultPerformance counter stats for './a.out':100064      instructions:u                                              0.111183917 seconds time elapsed0.001217000 seconds user0.000000000 seconds sysch@ch-ubuntu:~/ch/perf_test/exe_count$ sudo perf stat -e instructions:u ./a.out 
./a.out: Segmentation faultPerformance counter stats for './a.out':100064      instructions:u                                              0.104691299 seconds time elapsed0.000875000 seconds user0.000000000 seconds sysch@ch-ubuntu:~/ch/perf_test/exe_count$ sudo perf stat -e instructions:u ./a.out 
./a.out: Segmentation faultPerformance counter stats for './a.out':100064      instructions:u                                              0.111463860 seconds time elapsed0.000931000 seconds user0.000000000 seconds sys

断点 2

代码

#define SETPOINT(...)  do { *(int*)nullptr = 0; } while(0)
int main() {int a = 0;for(int i = 0 ; i < 500; i++) a+=i;SETPOINT(2);return 0;
}

执行结果

ch@ch-ubuntu:~/ch/perf_test/exe_count$ sudo perf stat -e instructions:u ./a.out 
./a.out: Segmentation faultPerformance counter stats for './a.out':102569      instructions:u                                              0.105533002 seconds time elapsed0.000904000 seconds user0.000000000 seconds sysch@ch-ubuntu:~/ch/perf_test/exe_count$ sudo perf stat -e instructions:u ./a.out 
./a.out: Segmentation faultPerformance counter stats for './a.out':102567      instructions:u                                              0.105150980 seconds time elapsed0.000876000 seconds user0.000000000 seconds sysch@ch-ubuntu:~/ch/perf_test/exe_count$ sudo perf stat -e instructions:u ./a.out 
./a.out: Segmentation faultPerformance counter stats for './a.out':102567      instructions:u                                              0.103408851 seconds time elapsed0.000897000 seconds user0.000000000 seconds sys

结果分析

102567 - 100064 == 2503

代码分析

ch@ch-ubuntu:~/ch/perf_test/exe_count$ objdump --disassemble=main ./a.out./a.out:     file format elf64-x86-64Disassembly of section .init:Disassembly of section .plt:Disassembly of section .plt.got:Disassembly of section .text:0000000000001129 <main>:1129:	f3 0f 1e fa          	endbr64112d:	55                   	push   %rbp112e:	48 89 e5             	mov    %rsp,%rbp1131:	c7 45 f8 00 00 00 00 	movl   $0x0,-0x8(%rbp)1138:	c7 45 fc 00 00 00 00 	movl   $0x0,-0x4(%rbp)113f:	eb 0a                	jmp    114b <main+0x22>1141:	8b 45 fc             	mov    -0x4(%rbp),%eax1144:	01 45 f8             	add    %eax,-0x8(%rbp)1147:	83 45 fc 01          	addl   $0x1,-0x4(%rbp)114b:	81 7d fc f3 01 00 00 	cmpl   $0x1f3,-0x4(%rbp)1152:	7e ed                	jle    1141 <main+0x18>1154:	b8 00 00 00 00       	mov    $0x0,%eax1159:	c7 00 00 00 00 00    	movl   $0x0,(%rax)115f:	b8 00 00 00 00       	mov    $0x0,%eax1164:	5d                   	pop    %rbp1165:	c3                   	ret

可以看到1141 - 1152一共有5条指令, 5 * 500差不多2500, perf统计有些许误差属于正常现象;

结论

可以两个点之间的执行共执行了2500条指令; 然后根据指令数量和执行环境推断理论执行性能;
不适用于和多种硬件打交道的环境; 而且不同的syscall耗时不一样;

相关文章:

统计程序两个点之间执行的指令数量

环境:支持perf ubuntu安装 apt-get install linux-tools-common linux-tools-generic linux-tools-uname -randroid 一般自带simpleperf 分析 两个点作差, 求中间结果; *(int*)nullptr 0;案例 断点 1 代码 #define SETPOINT(...) do { *(int*)nullptr 0; } while(0…...

时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价)

时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价) 目录 时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现基于TSO-XGBoost金枪鱼算…...

java- ConcurrentHashMap 并发

1. ConcurrentHashMap 并发 1.1. 减小锁粒度 减小锁粒度是指缩小锁定对象的范围&#xff0c;从而减小锁冲突的可能性&#xff0c;从而提高系统的并发能力。减小锁粒度是一种削弱多线程锁竞争的有效手段&#xff0c;这种技术典型的应用是 ConcurrentHashMap(高性能的 HashMap)…...

java练习8.100m小球落地

题目: 如一个小球从100米高度自由落下&#xff0c;每次落地后就反跳回原高度的一半。 那么求它在第10次落地时&#xff0c;共经过多少米&#xff1f;第10次反弹多高&#xff1f; public static void main(String[] args) {/*假如一个小球从100米高度自由落下&#xff0c;每次落…...

Android JNI系列详解之生成指定CPU的库文件

一、前提 这次主要了解Android的cpu架构类型&#xff0c;以及在使用CMake工具的时候&#xff0c;如何指定生成哪种类型的库文件。 如上图所示&#xff0c;是我们之前使用CMake工具默认生成的四种cpu架构的动态库文件&#xff1a;arm64-v8a、armeabi-v7a、x86、x86_64&#xff0…...

Leetcode每日一题:1448. 统计二叉树中好节点的数目

原题 给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。 「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,3,null,1,5] 输出&#xff1a;4 解…...

华为OD七日集训第2期 - 按算法分类,由易到难,循序渐进,玩转OD(文末送书)

目录 一、适合人群二、本期训练时间三、如何参加四、7日集训第2期五、精心挑选21道高频100分经典题目&#xff0c;作为入门。第1天、逻辑分析第2天、字符串处理第3天、数据结构第4天、递归回溯第5天、二分查找第6天、深度优先搜索dfs算法第7天、动态规划 六、集训总结1、《代码…...

3d max插件CG MAGIC中的蜂窝材质功能可提升效率吗?

工作中能提升效率也都是大家所想的&#xff0c;对于设计师的一个设计过程中&#xff0c;可能想怎么样可以更快呀&#xff0c;是哪个步骤慢了呢&#xff1f; 这样的结果只能说会很多&#xff0c;但是建模这个步骤&#xff0c;肯定是有多无少的。 为了让模型更加逼真&#xff0c…...

一句话木马攻击复现:揭示黑客入侵的实战过程

这篇文章旨在用于网络安全学习&#xff0c;请勿进行任何非法行为&#xff0c;否则后果自负。 准备环境 OWASP虚拟机xfp 7与xshell 7 ​ DVWA系统默认的账号密码均为&#xff1a;admin/admin 1、命令注入中复现 ​ 攻击payload 127.0.0.1 | echo "<?php eval(…...

【游戏开发教程】Unity Cinemachine快速上手,详细案例讲解(虚拟相机系统 | 新发出品 | 良心教程)

文章目录 一、前言二、插件下载三、案例1&#xff1a;第三人称自由视角&#xff0c;Free Look character场景1、场景演示2、组件参数2.1、CinemachineBrain&#xff1a;核心2.2、CinemachineFreeLook&#xff1a;第三人称自由视角相机2.2.1、设置Follow&#xff1a;跟随2.2.2、…...

当图像宽高为奇数时,如何计算 I420 格式的uv分量大小

背景 I420 中 yuv 数据存放在3个 planes 中。 网上一般说 I420 数据大小为 widthheight1.5 但是当 width 和 height 是奇数时&#xff0c;这个计算公式会有问题。 I420 中 u 和 v 的宽高分别为 y 的一半。 但是当不能整除时&#xff0c;是如何取整呢&#xff1f;向上还是向下&…...

结构型模式-代理模式

代理模式* 定义&#xff1a;在代理模式&#xff08;Proxy Pattern&#xff09;中&#xff0c;一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中&#xff0c;我们创建具有现有对象的对象&#xff0c;以便向外界提供功能接口。 意图&#xff1a;为其…...

SpringBoot+Redis BitMap 实现签到与统计功能

最近项目里需要集成签到和统计功能&#xff0c;连续签到后会给用户发放一些优惠券和奖品&#xff0c;以此来吸引用户持续在该品台进行活跃。下面我们一些来聊一聊目前主流的实现方案。 因为签到和统计的功能涉及的数据量比较大&#xff0c;所以在如此大的数据下利用传统的关系…...

P5739 【深基7.例7】计算阶乘

题目描述 求 n ! n! n!&#xff0c;也就是 1 2 3 ⋯ n 1\times2\times3\dots\times n 123⋯n。 挑战&#xff1a;尝试不使用循环语句&#xff08;for、while&#xff09;完成这个任务。 输入格式 第一行输入一个正整数 n n n。 输出格式 输出一个正整数&#xff0c…...

scikit-learn中OneHotEncoder用法

One-Hot编码&#xff0c;又称为一位有效编码&#xff0c;是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值&#xff0c;然后&#xff0c;每个整数值被表示为二进制向量&#xff0c;将整数索引标记为1&#xff0c;其余都标为0。 OneHotEncoder()常用参数解释 …...

linux操作系统的权限的深入学习(未完)

1.Linux权限的概念 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“#”&#xff0c;普通用户…...

C 连接MySQL8

Linux 安装MySQL 8 请参考文章&#xff1a;Docker 安装MySQL 8 详解 Visual Studio 2022 编写C 连接MySQL 8 C源码 #include <stdio.h> #include <mysql.h> int main(void) {MYSQL mysql; //数据库句柄MYSQL_RES* res; //查询结果集MYSQL_ROW row; //记录结…...

福利之舞:员工的心跳与企业的平衡术

引言&#xff1a;员工福利与满意度的关系 在现代企业中&#xff0c;员工福利已经不仅仅是一种待遇&#xff0c;而是与员工满意度、忠诚度和生产力紧密相连的关键因素。一个合理且吸引人的福利制度可以大大提高员工的工作积极性&#xff0c;同时也能够吸引和留住顶尖的人才。但…...

MyBatis动态语句且如何实现模糊查询及resultType与resultMap的区别---详细介绍

前言 前面我们学习了如何使用Mybatis实现简单的增删改查。今天我们来学习如何使用动态语句来根据不同的条件生成不同的SQL语句。这在实际开发中非常有用&#xff0c;因为通常查询条件是多样化的&#xff0c;需要根据实际情况来拼接SQL语句&#xff0c;那什么是MyBatis动态语句呢…...

麒麟OS国产系统身份证阅读器web网页开发使用操作流程

1、打开麒麟软件商店&#xff0c;选择驱动&#xff0c;找到身份证阅读器&#xff0c;找到东信智能身份证社保卡读卡器&#xff0c;点击安装。 2、安装完成后&#xff0c;点击打开 3、进入读卡界面 4、进入代码集成 <script type"text/javascript">var ctnFin…...

清华大学LaTeX论文模板完整路线图:未来发展与功能规划指南

清华大学LaTeX论文模板完整路线图&#xff1a;未来发展与功能规划指南 【免费下载链接】thuthesis LaTeX Thesis Template for Tsinghua University 项目地址: https://gitcode.com/gh_mirrors/th/thuthesis 清华大学LaTeX论文模板&#xff08;thuthesis&#xff09;是清…...

ESP32上拉电阻都接了还是报错?试试检查这3个隐藏坑(实测避雷指南)

ESP32与SD卡通信故障排查&#xff1a;3个易被忽视的关键细节 当你在ESP32项目中使用SD卡时&#xff0c;即使按照官方文档正确连接了上拉电阻&#xff0c;仍然可能遇到各种莫名其妙的挂载失败问题。作为一名经历过无数次SD卡"玄学"故障的开发者&#xff0c;我想分享几…...

03-LlamaIndex节点解析:文本分块策略与NodeParser深度应用

03-LlamaIndex节点解析&#xff1a;文本分块策略与NodeParser深度应用 系列导航 01 核心概念与RAG处理管线02 多源数据加载与Data Connectors03 文本分块策略与NodeParser ← 当前04 向量存储与混合索引策略05 Retriever、Query Engine与Chat Engine06 Agent与Workflow编排07 多…...

5个步骤掌握B站推流码获取与OBS直播系统搭建:从入门到专业的完整指南

5个步骤掌握B站推流码获取与OBS直播系统搭建&#xff1a;从入门到专业的完整指南 【免费下载链接】bilibili_live_stream_code 用于在准备直播时获取第三方推流码&#xff0c;以便可以绕开哔哩哔哩直播姬&#xff0c;直接在如OBS等软件中进行直播&#xff0c;软件同时提供定义直…...

AIVideo GPU算力适配指南:低显存(8G)模式启用、缓存策略与批处理优化

AIVideo GPU算力适配指南&#xff1a;低显存&#xff08;8G&#xff09;模式启用、缓存策略与批处理优化 1. 引言&#xff1a;当AI视频创作遇上“显存焦虑” 如果你尝试过用AI生成视频&#xff0c;大概率遇到过这样的场景&#xff1a;兴致勃勃地输入一个创意主题&#xff0c;…...

罗技鼠标宏:专业级压枪系统构建指南

罗技鼠标宏&#xff1a;专业级压枪系统构建指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在竞技射击游戏中&#xff0c;精准控制武器后坐力…...

ANIMATEDIFF PRO新手避坑指南:常见问题与解决方案全解析

ANIMATEDIFF PRO新手避坑指南&#xff1a;常见问题与解决方案全解析 1. 前言&#xff1a;为什么选择ANIMATEDIFF PRO 如果你正在寻找一款能够生成电影级质量AI视频的工具&#xff0c;ANIMATEDIFF PRO可能是目前最强大的选择之一。基于AnimateDiff架构和Realistic Vision V5.1…...

Kaggle Notebook中文乱码终结者:3分钟搞定Matplotlib字体配置(附Noto Sans CJK全流程)

Kaggle Notebook中文乱码终结者&#xff1a;3分钟搞定Matplotlib字体配置&#xff08;附Noto Sans CJK全流程&#xff09; 在数据可视化过程中&#xff0c;中文显示问题一直是困扰许多Kaggle用户的痛点。当你在Notebook中满怀期待地运行代码&#xff0c;却发现图表中的中文变成…...

Qwen3.5-27B-GPTQ-Int4:超高效多模态AI新体验

Qwen3.5-27B-GPTQ-Int4&#xff1a;超高效多模态AI新体验 【免费下载链接】Qwen3.5-27B-GPTQ-Int4 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3.5-27B-GPTQ-Int4 导语 阿里云推出Qwen3.5-27B-GPTQ-Int4模型&#xff0c;通过4位量化技术实现性能与效率的双…...

4个QtScrcpy键鼠映射技巧实现手游操控精准化

4个QtScrcpy键鼠映射技巧实现手游操控精准化 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy 手游操控一直是移…...