1

我有一个菜鸟问题。我对 Linux 完全陌生。

我想计算程序采用的条件跳转的数量(即程序采用的 if()s、while()s 等的数量)。

有人告诉我我可以用 perf 做到这一点,我读了一遍,但我完全迷失了。

谁能告诉我该怎么做?例如,我有一个 C++ 程序,类似于:

...some code...
if(a=5)
  x=3;
else
  x=5;
...some code...

并假设这段代码被编译成一个名为 tmp.txt 的文件。

我尝试发出以下内容:

perf stat ./tmp

但是每次我得到的分支数量都不一样。

难道我做错了什么?

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

4

2 回答 2

0

每次运行程序时分支的数量都会发生变化,这是合乎逻辑的,因为在main函数之前执行的代码每次可能会做不同的事情。(例如:perf stat true每次都会报告不同数量的分支)。

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

于 2012-06-15T18:54:21.103 回答
0

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

于 2014-05-19T14:18:17.957 回答