我对以下空程序进行了性能分析,
#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(使用前将#替换为@)