我的目标是记录一个给定的二进制程序在其运行期间执行的处理器指令的数量。虽然很容易(通过gdb或任何其他反汇编程序)从源代码中获得实际的机器码,但这并没有考虑到程序中的函数调用和分支,这些调用和分支会导致指令被多次执行或完全跳过。
有没有一个简单的解决方案?
发布于 2011-02-09 07:36:04
这是非常特定于硬件的,但大多数处理器都提供了一种工具,可以计算流经它们的机器指令(和其他事件)的确切数量。这就是分析器如何通过查询这些内部寄存器来捕获缓存未命中之类的东西。
The PAPI library提供了在各种主要处理器上查询此数据的调用。如果你使用的是Linux+x86,PerfSuite为你提供了一些更高级的工具,这些工具可能更容易上手。
Intel has a monitor app您可以用来实时观察芯片的内部计数器,它们的Performance Analysis Guide描述了芯片上的各种性能监控单元以及如何读取它们。
发布于 2011-02-09 04:12:11
如果你在Linux上,你应该能够通过cachegrind运行你的程序来获得指令计数。
也可以使用ollydbg的运行跟踪功能来获取指令计数,但这可能会受到内存的限制。
或者,也可以编写一个小型调试器,在单个步骤中简单地运行程序。
发布于 2011-02-09 04:18:25
用于跟踪系统调用的原始工具是特定于平台的。
truss或dtracedtracestracetusctruss例如(Solaris):
truss -o ls.truss ls $HOME这将捕获ls执行的所有系统调用,因为它列出了您的主目录。
OTOH,这可能不是你的after...in,在这种情况下它的价值是有限的。
https://stackoverflow.com/questions/4936414
复制相似问题