gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:32:13 27 4
gpt4 key购买 nike

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

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

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

418,869 instructions # 0.87 insns per cycle

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

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

为什么指令条数不一致,准确的说是不一样?

更新我遵循了 man page 中给出的示例在 C 中使用 perf_event_open()

最佳答案

为了测量函数执行的指令数,我建议使用 perf_event_open() 开始和停止事件计数在函数的进入和退出处,而不是在有和没有函数的情况下运行你的程序两次。

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

perf stat -e instructions:u a.out

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

关于linux - perf stat 为每次运行提供不同数量的指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26312127/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com