我编写并交叉编译了一个小型c ++程序,我可以在ARM或PC上运行它。由于ARM和PC具有不同的指令集架构,我想比较它们。我可以在这个c ++程序中为两个ISA获取执行指令的数量吗?
答案 0 :(得分:5)
你需要的是一个分析器。 性能将是一个易于使用。它将为您提供执行指令的数量,如果您想比较ISA效率,这是最佳指标。
查看教程 here 。
您需要使用:perf stat ./your binary
查找说明指标。这种方法在CPU的性能监视单元PMU中使用一个寄存器来计算指令数。
答案 1 :(得分:4)
您是否尝试获取静态指令或动态指令的数量?因此,例如,如果您有以下循环(伪代码):
for (i 0 to N):
a[i] = b[i] + c[i]
静态指令计数将在10个指令之下,根据您的ISA给出或取得,但动态计数将取决于N,在分支预测实现上等等。
因此,对于静态计数,我建议使用objdump,根据评论中的建议。您可以找到子例程的入口和出口标签,并计算两者之间的指令数。
对于动态指令计数,我建议使用以下两种方法之一:
希望这会有所帮助:)
答案 2 :(得分:1)
objdump -dw mybinary | wc -l
在Linux和朋友中,这可以很好地逼近可执行文件,库或目标文件中的指令数。这是一个静态计数,当然与运行时行为完全不同。
答案 3 :(得分:0)
Linux:
/Users/username/Documents/cordova/hello2/platforms/ios/build/emulator/HelloWorld2.app/Info.plist file not found.