【问题标题】:How to find total number instructions of a program?如何查找程序的指令总数?
【发布时间】:2014-01-29 15:48:43
【问题描述】:

我想查找 Android 应用程序的机器指令总数。我已经探索了 Android SDK 的 Debug.InstructionCount 类,但我相信它提供了 Dalvik VM 指令的信息(不是实际在处理器上执行的机器级指令)。 我需要此信息来估计在特定处理器(使用固定频率)上执行 Android 应用程序所需的时间。我知道不同类型的指令需要可变周期,因此无法准确估计计算时间,但我仍然想做一些实验。谢谢

【问题讨论】:

  • 为什么不使用只在特定设备上运行它,然后猜测在另一台设备上可能需要多长时间?

标签: android arm instruments dalvik machine-instruction


【解决方案1】:

我的解决方案包括编写指令集模拟器、运行应用程序并计算指令。那里已经有开源的 avr 模拟器,您可以为此使用/修改。

最终,为了做到这一点,你必须遵循指令流,所以要么你实际模拟它,然后自动解决代码真正通过循环的次数等等,要么你编写一个反汇编程序(这是模拟器的一半)并且基本上按照执行顺序遵循代码流(实际上比完整的反汇编程序或模拟器简单得多),但是当您找到不同的路径并计算时,您必须处理所有可能的代码路径和循环不同的路径。只需最少的工作,您就可以想出最短的路径,并且知道代码永远不会比这更快。

【讨论】:

  • 是的,SIM 必须通过与真实硬件延迟相关的循环来处理真实世界的次数。
  • +1 表示尝试。 Avr 还是 ARM? :)。不幸的是,模拟器的指令计数可能取决于数据;这对于 Java/Davlik 尤其重要,因为某些指令比其他指令昂贵得多(超出范围等)。此外,一条指令可能会影响下一条指令的执行速度,等等。请参阅:Objdump and ARM cycles,您选择了相反的一侧。了解这些限制总是有帮助的。
  • 大声笑,我读过 Android 并想到了 Arduino,但如果你想知道你正在执行多少条指令(这意味着按执行顺序),你必须按执行顺序计算它们,答案是一样的。如果要计算 arm、avr、mips、java 字节码、llvm bitcode、pascal pcode 等,则相同的过程。
  • 张贴者意识到指令的不同性质并且仍然只想要指令计数。
猜你喜欢
  • 2022-08-15
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
相关资源
最近更新 更多