frame_dummy在分析的上下文中意味着什么?

时间:2012-07-12 04:02:29

标签: c++ g++ profiling

在使用gprof配置我编写的C ++程序的过程中,我注意到绝大部分执行时间都花在函数“frame_dummy”上。更确切地说,gprof输出的平面轮廓中的第一个条目显示花费了76.38%的样本时间,并且24611191调用了名为frame_dummy的函数。

简而言之,我试图理解frame_dummy所引用的内容 - 因为我没有任何这样的函数 - 以及这对我的优化工作意味着什么。

虽然它不太可能相关,但我应该补充一点,该程序旨在使用多重网格算法解决泊松方程,并使用MPI来并行化任务。但是,虽然存在MPI函数调用,但上面提到的gprof输出源自仅运行单个进程。我还应该注意,除了MPI之外,我的程序没有依赖关系,并且使用g ++ 4.6.1编译。

2 个答案:

答案 0 :(得分:8)

这里有一个非常好的解释:http://dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html。但我不确定为什么你的程序会在frame_dummy中花费这么多时间,或者为什么会多次调用它。

或许二进制文件中的调试信息在某种程度上是损坏的,或者被gprof误读了?或者gprof可能会受到MPI的质疑?这里有一些尝试:在gdb中运行程序,并在frame_dummy函数上使用断点。看看它是否真的被称为2400万次,如果确实如此,那么它的调用是什么。

另外,你能否确认这是crtbegin.o中的frame_dummy,而不是其他一些frame_dummy?

这是the source for frame_dummy in crtbegin.c - 通过我对代码的阅读,它应该只被调用一次。

另外,我假设您的程序运行并产生正确的结果? (特别是,如果您的程序中存在内存错误,那么您可能会遇到一些非常奇怪的行为。)

答案 1 :(得分:4)

我遇到了同样的问题,这是我的输出来自gprof:

  %   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
 52.00     16.27    16.27   204000     0.08     0.08  frame_dummy
 47.46     31.12    14.85   418000     0.04     0.07  f2
  0.51     31.28     0.16    21800     0.01     1.42  f1
  0.03     31.29     0.01     1980     0.01    14.21  f5

就我而言,当我使用gcc -Os代替gcc -O3进行编译时,它已得到解决:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
 53.12     22.24    22.24   200000     0.11     0.11  f4
 45.65     41.36    19.11   598000     0.03     0.03  f2
  0.69     41.65     0.29    20000     0.01     1.45  f3
  0.45     41.84     0.19    39800     0.00     0.32  f1
  0.10     41.88     0.04                             evaluate

也就是说,gprof误导f4 frame_dummy

相关问题