繁体   English   中英

如何获取程序执行的指令数?

[英]How can I get the number of instructions executed by a program?

我编写并交叉编译了一个小型的c ++程序,我可以在ARM或PC上运行它。 由于ARM和PC具有不同的指令集架构,我想比较它们。 我可以在这个c ++程序中为两个ISA获取执行指令的数量吗?

你需要的是一个分析器。 perf将是一个易于使用。 它将为您提供执行指令数,如果您想比较ISA效率,这是最佳指标。

这里查看教程。

你需要使用: perf stat ./your binary

查找指令指标。 这种方法在CPU的性能监视单元PMU中使用一个寄存器来计算指令数。

您是否尝试获取静态指令或动态指令的数量? 因此,例如,如果您有以下循环(伪代码):

for (i 0 to N):
 a[i] = b[i] + c[i]

静态指令计数将在10个指令之下,根据您的ISA给出或取得,但动态计数将取决于N,在分支预测实现上等等。

因此,对于静态计数,我建议使用objdump,根据评论中的建议。 您可以找到子例程的入口和出口标签,并计算两者之间的指令数。

对于动态指令计数,我建议使用以下两种方法之一:

  • 您可以使用指令集模拟器模拟运行该代码(有ARM和x86的开源ISA模拟器 - 例如Gem5实现它们两者,还有其他支持一个或另一个。
  • 您的第二个选择是在目标系统上本机运行并在CPU中设置性能计数器以报告动态指令计数。 您可以在执行代码之前重置,然后再读取它(此处可能存在一些与调用子程序和退出相关的噪声,但您应该能够将其隔离出来)

希望这可以帮助 :)

objdump -dw mybinary | wc -l

在Linux和朋友中,这给出了可执行文件,库或目标文件中指令数量的良好近似值。 这是一个静态计数,当然与运行时行为完全不同。

Linux: valgrind --tool=callgrind ./program 1 > /dev/null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM