【问题标题】:Easiest way to collect dynamic Instruction execution counts?收集动态指令执行计数的最简单方法?
【发布时间】:2015-08-11 00:55:04
【问题描述】:

我想要一种简单快速的方法来收集 LLVM 位码中每个 Instruction 在应用程序的给定运行中执行的次数。据我所知,我可以采取多种方法:

  • 使用PIN。这将需要使用 DWARF 调试信息和指令调试信息来尝试将二进制中的指令映射到位码中的指令;不能 100% 确定这将是多么准确。

  • 使用 llvm-prof。这里有两个问题。首先,我在Stack Overflow 上看到opt 的一个选项称为--insert-edge-profiling。但是,该选项似乎在 3.6 中不可用?其次,这种分析似乎只记录功能级别的执行计数,而不是单个指令级别的执行计数。对吗?

  • 写一个类似于AddressSanitizer的新工具。这可能有效,但似乎有点矫枉过正。

有没有更简单的方法来实现我所缺少的目标?

【问题讨论】:

    标签: profiling llvm dynamic-analysis


    【解决方案1】:

    作为我博士研究的一部分,我写了一个tool 来收集程序执行的基本块的跟踪。该工具还记录了每个基本块中的 LLVM 指令数量,因此对跟踪的分析将给出动态指令执行计数。

    另一个研究工具是Harmony。它将提供程序中每个基本块的动态执行计数,您可以使用静态指令计数进行扩展。

    否则,我建议您编写自己的工具。对于每个基本块,(以原子方式)将全局计数器增加该块中的指令数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      相关资源
      最近更新 更多