计算条件跳转

时间:2012-06-13 14:41:39

标签: linux assembly branch conditional perf

我有一个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

但我每次获得的分支数量都不同。

我做错了吗?

编辑:我应该提一下,我假设我没有可用的源代码。所以我在看二进制文件。

2 个答案:

答案 0 :(得分:0)

由于在main函数之前执行的代码每次都可以执行不同的操作,因此每次运行程序时分支的数量都会发生变化。 (例如:perf stat true每次都会报告不同数量的分支。)

perf stat的有趣之处在于分支未命中的数量,这会对程序执行速度产生负面影响(除非你运行一个100%的分支未命中的程序,否则你不会看到它很长一段时间,所以它不是真正重要的负面影响。)

答案 1 :(得分:0)

好的,我找到了一个解决方案,但忘了在这里发布。 计数分支应始终对应于程序中的分支数(if()s,whiles()s ...)。原来我可以通过使用硬件事件编号+ Umask(参考:软件工程师的英特尔手册)将条件分支指令作为perf stat的参数来实现!