perf stat 为每次运行提供不同数量的指令

2024-01-01

我对以下空程序进行了性能分析,

#include <stdio.h>
int main() {
}

编译并运行 perf stat ./a.out 后,我​​得到以下输出(以及其他数据,如周期数、任务时钟等):

418,869 instructions # 0.87 insns per cycle

在同一精灵的每次“性能”分析期间,指令数量都会发生变化。

我的实际需要是找到我编写的特定函数中的指令数量。因此,我将从新程序中的指令数中减去上述数字。(我可以计算在 gcc 中使用 -S 标记创建的 program.s 中的行数,但在查看 perf 行为后我很困惑)

为什么指令数量不一致,确切地说是不相同?

Update我按照中给出的例子进行操作man page http://linux.die.net/man/2/perf_event_open在 C 中使用 perf_event_open()


要测量函数执行的指令数,我建议使用以下命令启动和停止事件计数perf_event_open() http://man7.org/linux/man-pages/man2/perf_event_open.2.html在函数的进入和退出处,而不是在有或没有该函数的情况下运行两次程序。

关于空程序执行的指令数量的不确定性,您可能正在计算用户和内核区域中的事件。我认为用户土地计数在两次运行之间应该保持相同,但对于内核部分,执行该程序的许多事情在幕后发生,所以我猜非确定性来自内核代码中发生的事情。要仅计算用户空间指令,您可以使用:

perf stat -e instructions:u a.out

您能提供有关差异的更多详细信息吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

perf stat 为每次运行提供不同数量的指令 的相关文章

  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a
  • 如何构建任务“gems:install”

    我正在将 Rails 应用程序部署到 Linux 服务器 并且缺少一些 rake 任务 包括 rake gems install 和 rake db 我正在运行来自 GEM 的 Rails 2 3 4 为什么是这样 我该如何解决 我可以以某
  • Fortran gfortran linux 中的“分段错误(核心转储)”错误

    我正在创建一个程序 该程序将分析目录中的文件 fits 然后它将在另一个目录中创建另一个文件 txt 它只是一个转换器 当我尝试执行该程序 编译正常 时 它给了我一条错误消息 程序收到信号 SIGSEGV 分段错误 无效的内存引用 此错误的
  • 在 C++ linux 中将 STRINGS 写入串口

    我知道这个问题遍布互联网 但仍然没有任何东西能让我完全解决这个问题 我想用 C linux 将数据写入 Propeller 板的串行端口 从控制台获取输入时程序运行良好 但是当我向它写入字符串时总是返回 ERROR Invalid comm
  • 标志寄存器中保留/未定义位的用途是什么?

    在 Z80 8080 8085 和 8086 处理器的标志寄存器中 被记录为 保留 或 未定义 的位 1 3 5 的用途是什么 这些位未使用 也就是说 没有指令明确地将它们设置为任何值 设计人员认为 5 6 个标志就足够了 他们只是将标志寄
  • git 错误:无法处理 https

    当我尝试使用 git clone 时https xxx https xxx我收到以下错误我不处理协议 https 有人可以帮我吗 完整消息 dementrock dementrock A8Se git 克隆https git innosta
  • Mcrt1.o和Scrt1.o有什么用?

    我坚持使用以下两个文件 即 Mcrt1 o 和 Scrt1 o 谁能帮我知道这两个文件的用途 如何使用它 我们以 gcrt1 o 为例 在使用 pg 选项编译进行性能测试时非常有用 谢谢 表格的文件 crt o总是 C 运行时启动代码 大部
  • 当用户按下打印时运行脚本,并且在脚本结束之前不开始假脱机(linux,cups)

    我需要做的是结合用户按下打印来执行 python 程序 脚本 并且在该程序退出之前不要让打印作业假脱机 原因是打印驱动程序不是开源的 我需要更改用户设置 在本例中是部门 ID 和密码 通常是每个用户 但因为这是一个信息亭 具有相同帐户的不同
  • Awk - 计算两个文件之间的每个唯一值和匹配值

    我有两个文件 首先 我尝试获取第 4 列中每个唯一字段的计数 然后匹配第二个文件的第二列中的唯一字段值 File1 第 4 列的每个唯一值和 File2 第 2 列包含我需要在两个文件之间匹配的值 所以本质上 我试图 gt 如果 file2
  • 限制 Imagemagick 使用的空间和内存

    我在 Rails 应用程序上使用 Imagemagick 使用 rmagick 但我的服务器 Ubuntu 不是很大 当我启动转换进程时 Imagemagick 占据了我的服务器 30GB HDD 的所有位置 内存 我想限制内存和 tmp
  • 每个命令都返回“bash:<命令>:找不到命令...”[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我刚刚安装了 Scala 并添加了路径gedit bashrc export SCALA HOME home avijit sca
  • Raspberry 交叉编译 - 执行程序以“分段错误”结束

    我有一个自己编写的程序 我想从我的 x86 机器上为 Raspberry Pi 构建它 我正在使用 eclipse 生成的 makefile 并且无法更改此内容 我已经阅读了 CC for raspi 的教程 Hackaday 链接 htt

随机推荐

  • 批量归一化 - Tensorflow

    我看过一些 BN 的例子 但还是有点困惑 所以我目前正在使用这个函数 它调用这里的函数 https github com tensorflow tensorflow blob master tensorflow g3doc api docs
  • 解压 sys.argv 时 Pylint 误报

    我有一个解压脚本sys argv到一个函数中 像这样 import sys def do something a b It doesn t matter what this function does print a b if name m
  • WPF 链绑定

    我想创建一个像这样的链绑定 我有一个用户控件 在具有类似依赖属性的窗口内具有依赖属性 我想将用户控件的依赖属性绑定到窗口的依赖属性 我创建了一个示例项目来演示我的问题 用户控件1 XAML
  • 打印到终端末尾

    Like this picture of apt get how can I print something at the end of the line just like the speed on the screen Although
  • 是否可以将 Google 服务帐户限制为项目内的特定 BigQuery 数据集?

    我已使用 GCP UI 为特定项目设置了一个服务帐号Project X 之内Project X有3个数据集 Dataset 1 Dataset 2 Dataset 3 如果我分配角色BigQuery Admin to Project X目前
  • 对于同一新对象多次调用 Firebase FEventTypeChildAdded 回调

    我正在开发一个 iOS 应用程序 并且我在 Firebase 的登录演示应用程序之上构建了我的项目 我可以通过 Facebook 进行身份验证 并与 Firebase 进行良好的通信 当我按下注销按钮时 运行的代码如下 void logou
  • 如何使用共享网址和命令行从 Google Colab 获取“原始”ipynb 文件?

    为 Google Colab 获取的 共享 url 链接到一个包含大量额外 HTML 的文件 因此当您尝试使用 wget 或 curl 下载该文件时 您不会获得有效的 Jupyter ipynb 文件 如何使用 wget 或 curl 等命
  • Numpy 平均函数舍入误差

    我觉得这很奇怪 有人能告诉我这是怎么回事吗 gt gt gt a 1 0 1 gt gt gt np mean a 0 66666666666666663 gt gt gt 2 0 3 0 6666666666666666 输出末尾的 3
  • 哈希或其他对象的内存大小?

    在 Ruby 1 9 3 中获取给定散列 或任何对象 的大小 以字节为单位 的最佳方法是什么 解决方案 查找特定哈希在 Ruby 中使用的字节数 https stackoverflow com questions 3687073 find
  • Javascript HTML5 Canvas 绘制透明圆圈

    我需要一个函数来在画布上绘制几个圆圈 从 center x y 处的 mousedown 开始 然后将鼠标拖动到 deltaX deltaY 从而为每个圆圈创建半径 r 圆圈不能填充 需要透明 以便用户可以清楚地看到圆圈相交的位置 我当前的
  • 分裂b+树中的节点

    我试图弄清楚当节点溢出时到底会发生什么 信息 在我的 b 树中 每个块有 4 个指针和 3 个数据部分 问题 我明白 当出现溢出时 我们会分成 2 个节点 每个节点有 2 个节点 键 并将中间值插入父节点 而不从子节点中删除 与 b 树不同
  • 获取列表列表中的最大值列表

    我有一个List
  • Python 字典包含编码值

    我有一个熊猫数据框oParameterData我使用 Hive ODBC 连接在 Hadoop 上构建了查询 我用它来填充一个名为的 Python 字典oParameter import pyodbc import pandas oConn
  • iOS - 如何在更改视图时停止背景音乐

    如何在改变视图时停止背景音乐 我没有任何线索 如果我按下一个按钮 将我带到一个新的视图 就会有新的背景音乐 但旧的背景音乐 无限循环 仍在继续 请帮忙 还请示例一些代码 这是我的 void viewDidLoad NSString path
  • 使用 PDO 获取插入和更新 ID

    我想得到mysql insert id使用 PDO 到目前为止 我还没有找到一个可以同时用于插入和更新的好例子 有人有一段完整的代码作为示例吗 If you need pdo gt lastInsertId 要返回刚刚更新的行的 id 如果
  • 下一次部署仅在 Amplify 上失败

    我尝试在 AWS Amplify 上部署 Next js 应用程序 但始终失败 构建在本地环境中运行得非常好 我什至成功地在 Vercel 上部署 但它只在放大上失败 我能够通过创建一个来部署 babelrc文件 但我正在寻找保留 SWC
  • 没有为与上下文路径 [/Struts2Test] 关联的名称空间 [/] 和操作名称 [login] 映射的操作

    我是 Struts2 的初学者 我知道这个问题在这里被问了很多次 但我试图解决它并在这里阅读了很多线程 花了 6 个小时 但仍然无法让它工作 确实需要更多建议 这是我的包裹 Struts2Test Struts2Test src tw co
  • TeamCity 提供静态 HTML 页面

    我正在寻找一种使用 TeamCity 提供一些静态 HTML 页面的方法 如果不是绝对必要的话 我不想为此设置 apache 有谁知道访问静态 HTML 内容的简单方法 或 URL 方案 我找到了以下插件 但它只在现有页面的某些位置插入 H
  • 从菜单中隐藏应用程序并在需要时显示

    我想从主菜单隐藏我的应用程序 当用户愿意时 他 她可以看到他们的应用程序 为了隐藏应用程序 我删除了启动器类别 现在应用程序被隐藏 但现在我不明白用户如何启动应用程序 我在某处读到 使用组合键 在 DialerPad 上 可以显示活动的主屏
  • perf stat 为每次运行提供不同数量的指令

    我对以下空程序进行了性能分析 include