frame_dummy在分析的上下文中意味着什么
What does frame_dummy mean in the context of profiling?
在使用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
。
- #为""定义宏;静态";针对不同的上下文
- 与互斥锁相比,旋转锁可以保证上下文切换
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 这行代码在C++类中意味着什么
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 错误"Could not find Boost"(缺少:上下文标头)
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- 寻找地理和伤害意味着超载
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- 安排带有上下文的协同程序
- 我的文件无法正常工作,无法从C++文件中读取上下文
- DCMTK 了解"DIMSE 没有有效的演示上下文 ID"错误
- 在C++标准中做格式好意味着代码可以编译
- 具有std::initializer_list参数的非成员函数(/non构造函数上下文)的重载解析
- antlr 规则上下文是否可以独立于目标
- 生成文件"relink"意味着什么?