在使用 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 万次,如果是,那么它是从哪里调用的。
此外,您能否确认这是 crtbegin.o 中的 frame_dummy,而不是其他 frame_dummy?
这是 the source for frame_dummy in crtbegin.c -- 根据我对代码的阅读,它应该只被调用一次。
此外,我假设您的程序运行并产生了正确的结果? (特别是,如果您的程序中存在内存错误,那么您可能会遇到一些非常奇怪的行为。)
关于c++ - frame_dummy 在分析上下文中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11444847/