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

What does frame_dummy mean in the context of profiling?

本文关键字:上下文 意味着 什么 dummy frame      更新时间:2023-10-16

在使用gprof评测我编写的C++程序的过程中,我注意到绝大多数执行时间都花在了函数"frame_dummy"上。更准确地说,gprof输出的平面配置文件中的第一个条目显示了76.38%的样本时间,以及对名为frame_dummy的函数的24611191次调用。

简而言之,我试图理解frame_dummy指的是什么——因为我没有任何这样命名的函数——以及这对我的优化工作意味着什么。

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

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

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

另外,你能确认这是crtbbegin.o中的frame_dummy,而不是其他frame_dumny吗?

这是crtbeargin.c中frame_dummy的源代码——根据我对代码的阅读,它应该只被调用一次。

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

我遇到了同样的问题,以下是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