我有一个noob'ish问题。我是Linux新手。
我想计算程序采用的条件跳转次数(即程序占用的if()s,while()s等)。
有人告诉我,我可以用perf来做这件事,我读到了但我完全迷失了。
有人能告诉我该怎么办吗?例如,我有一个C ++程序,如:
...some code...
if(a=5)
x=3;
else
x=5;
...some code...
并假设此代码被编译为名为tmp的文件。
我尝试发出以下内容:
perf stat ./tmp
但我每次获得的分支数量都不同。
我做错了吗?
编辑:我应该提一下,我假设我没有可用的源代码。所以我在看二进制文件。
答案 0 :(得分:0)
由于在main
函数之前执行的代码每次都可以执行不同的操作,因此每次运行程序时分支的数量都会发生变化。 (例如:perf stat true
每次都会报告不同数量的分支。)
perf stat
的有趣之处在于分支未命中的数量,这会对程序执行速度产生负面影响(除非你运行一个100%的分支未命中的程序,否则你不会看到它很长一段时间,所以它不是真正重要的负面影响。)
答案 1 :(得分:0)
好的,我找到了一个解决方案,但忘了在这里发布。 计数分支应始终对应于程序中的分支数(if()s,whiles()s ...)。原来我可以通过使用硬件事件编号+ Umask(参考:软件工程师的英特尔手册)将条件分支指令作为perf stat的参数来实现!