自动assembly循环级别分析

有谁知道任何汇编循环级别分析器?

我一直在使用gprof,但gprof隐藏了循环,它是function级别的分析,但为了优化我的代码,我想要一些东西进入循环级别。 我想让它自动化,只需给我输出像gprof。 我被建议去dtrace但我不知道要开始。 无论如何,任何人都可以指导我吗? 例如

main: pushl %ebp movl %esp, %ebp subl $16, %esp movl $5000000, -4(%ebp) movl $0, -12(%ebp) movl $0, -8(%ebp) jmp .L2 .L3: movl -8(%ebp), %eax addl %eax, -12(%ebp) addl $1, -8(%ebp) .L2: movl -8(%ebp), %eax cmpl -4(%ebp), %eax jl .L3 movl $0, %eax leave ret 

例如在gprof中它会说主执行1次而foo执行100次。 但我想知道L2或L3是否执行了1M次,那么我对优化的专注就在这里。 如果我的问题含糊不清,请让我解释一下谢谢

我建议使用Callgrind( Valgrind工具之一,通常随之安装)。 这可以在更精细的级别上收集统计信息,而kcachegrind工具非常适合可视化结果。

这取决于您使用的操作系统,但对于这种分析,您通常希望使用采样分析器而不是仪器化分析器,例如

  • Linux: 缩放
  • Mac OS X: 仪器
  • Windows: VTune

如果你在Linux上, Zoom是一个很好的选择。

如果你在Windows上, LTProf可能会这样做。

在任何平台上,都可以依赖低技术方法随机暂停 。

不要查看指令执行的次数。 寻找在很大一部分时间内找到程序计数器的位置。 (它们不是一回事。)这将告诉您在哪里集中优化工作。

KCachegrind为每行源代码提供了分析信息(参见此截图 ),这包括CPU时间,缓存未命中等等……它节省了我的一天。

但是,在分析器中运行代码的速度非常慢(比原生代慢几十倍)。