2

有谁知道任何装配循环级分析器?

我一直在使用 gprof,但 gprof 隐藏了循环,它是函数级别的分析,但是为了优化我的代码,我想要一些东西进入循环级别。我希望它是自动化的,只给我像 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 中,它会说 main 执行了 1 次,而 foo 执行了 100 次。但是我想知道 L2 或 L3 是否执行了 1M 次,那么我将专注于优化。如果我的问题含糊不清,请让我解释更多谢谢

4

4 回答 4

4

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

于 2011-01-04T10:26:02.417 回答
1

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

于 2011-01-04T10:20:02.977 回答
1

如果您使用的是 Linux,Zoom是一个绝佳的选择。

如果您使用的是 Windows,LTProf或许可以做到。

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

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

于 2011-01-04T13:03:48.970 回答
0

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

然而,在分析器中运行代码非常慢(比本机慢几十倍)。

于 2011-01-04T10:18:50.093 回答