Tag: gprof

如何比较几个Gprof分析器报告?

在我的C程序的多次运行中使用不同的参数值,我得到多个分析报告文件。 这很难阅读和比较。 有没有办法可以得到一个比较文件,最好是用图表来表示,随着尺寸(我在运行时传递的参数)的增加,性能如何增加或减少。

是GNU gprof越野车吗?

我有一个C程序通过函数pi_calcPiItem()调用函数pi_calcPiItem() 600000000次。 因此,要分析我使用GNU gprof的函数所花费的时间。 结果似乎是错误的,因为所有调用都归因于main() 。 此外,调用图没有任何意义: Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls Ts/call Ts/call name 61.29 9.28 9.28 pi_calcPiItem 15.85 11.68 2.40 pi_calcPiBlock 11.96 13.49 1.81 _mcount_private 9.45 14.92 1.43 __fentry__ 1.45 15.14 0.22 pow 0.00 15.14 0.00 600000000 0.00 0.00 main Call graph granularity: […]

使用gprof进行奇怪的分析输出

我目前正在使用gprof分析我的代码,它符合C99标准。 我的程序是递归定义的 。 我正在使用带有-pg标志的gcc编译并启用了一些警告,并且没有优化标志。 然后我运行代码后跟命令: gprof ./myProgram > outputFile.txt 不过,我对输出告诉我的内容感到非常困惑。 这是说我花了很多时间在一个我知道的函数中,我不会花很多时间。这个函数有一个循环内部并执行一定次数的任务。 但这是一项微不足道的任务,并且通过增加完成任务的次数,例如5到100,我的程序执行所花费的总时间没有明显变化。 但是,gprof告诉我,我已经花费了近50%的执行时间。 我不知道这里的问题是什么。 有没有人遇到过这样的事情? 我可以自己解决吗? 我正在使用CentOS的Linux发行版。 我曾尝试将OProfile安装为不同的分析器,但没有对/ usr / local的写访问权限,因此make install失败,所以不确定这是否只是gprof的一个问题 以下是输出文件的相关部分。 奇怪的输出是针对函数nl_jacobi_to_converge : 从我的平面轮廓 % cumulative self self total time seconds seconds calls s/call s/call name 49.02 7.50 7.50 1562 0.00 0.01 calculate_resid_numeric_jac_diags_tc41 16.41 10.01 2.51 323878716 0.00 0.00 c 14.97 12.30 2.29 […]

如何为使用SCons构建的程序构建gprof支持?

问候, 这是我的SConstruct文件: env = Environment() env.Append(CCFLAGS=[‘-g’,’-pg’]) env.Program(target=’program1′, source= [‘program1.c’]) 这里还有编译的输出: scons: Reading SConscript files … scons: done reading SConscript files. scons: Building targets … gcc -o program1.o -c -g -pg program1.c gcc -o program1 program1.o scons: done building targets. 如您所见,我将“-pg”选项传递给构建环境。 在我构建之后,我运行程序来生成“gmon.out”但它没有生成。 谁能证实这个问题? 还是有解决方案? 谢谢。 更新: 感谢此处给出的建议,更新的工作SConstruct文件如下所示。 链接器需要标志,因此要通过scons传递它,必须使用“LINKFLAGS”选项。 env = Environment() env.Append(CCFLAGS=[‘-g’,’-pg’], LINKFLAGS=[‘-pg’]) env.Program(target=’program1′, source= [‘program1.c’]) […]

为什么gprof明显低估了程序的运行时间?

我有这个程序需要2.34秒才能运行,gprof表示它只需要1.18秒。 我已经读过其他地方的答案,建议如果例如程序受I / O限制,gprof可能会出错,但这个程序显然不是。 这也适用于我试图描述的有用程序。 这不是特定于这个琐碎的测试用例。 (同样在这种情况下,gprof表示main()占用了程序运行时间的100%以上,这是一个非常愚蠢的错误但不会给我带来麻烦。) $ cat test.c int main() { int i; for (i=0;i<1000000000;i++); } $ gcc test.c -o test $ time ./test real 0m2.342s user 0m2.340s sys 0m0.000s $ gcc test.c -o test -pg $ time ./test real 0m2.342s user 0m2.340s sys 0m0.000s $ gprof test |head Flat profile: Each sample […]

如何在Mac OS X上从命令行进行配置?

我正在尝试使用命令行工具在Mac OS X上分析C / C ++代码,我在gcc上使用-pg选项在Linux上运行gprof ,但我似乎无法在Mac上找到gprof ,即使我有一个描述在此页面中: 其他命令行工具(iOS)或其他命令行工具(mac) 。 gprof:Produces execution profiles based on an execution analysis of a program. 我安装了命令行工具,因此可以使用其他命令行工具,如otool和otool 。 我搜索了这个页面( https://apple.stackexchange.com/questions/154289/installing-gprof-on-mac ),说gprof不受支持,但我不确定我什么时候有Apple doc描述工具; 无论如何,我尝试使用brew来下载gprof ,但它没有用。 我发现尝试在Mac上使用带有C ++代码的gprof ,但我没有使用instruments -t输出。 我还在mac os x上发现了profiling c ++ ,但我不想打开Instruments,因为我想自动化一些进程并尝试保持跨平台系统。 如何在Mac OS X上使用gprof? 我使用OS X 10.10。 如何使用或不使用gprof从命令行进行配置文件?

替代-pg与Clang?

我想分析CPU(如果可能的样本),尽可能小的性能影响(因此类似于GCC的-pg ),用Clang编译的二进制文件。 是否有替代方法使用代码检测,或产生类似于gprof的输出?

为什么矩阵乘法算法中的循环次序会影响性能?

我有两个函数来查找两个矩阵的乘积: void MultiplyMatrices_1(int **a, int **b, int **c, int n){ for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) c[i][j] = c[i][j] + a[i][k]*b[k][j]; } void MultiplyMatrices_2(int **a, int **b, int **c, int n){ for (int i […]

gprof:如何为链接到主程序的共享库中的函数生成调用图

我正在研究Linux环境。 我有两个’C’源包train和test_train。 编译时训练包生成libtrain.so test_train链接到libtrain.so并生成可执行的train-test 现在我想用gprof生成一个调用图,它显示了主程序中函数的调用顺序以及libtrain.so中的函数调用顺序。 我正在使用-pg选项编译和链接两个包,调试级别为o0。 在我执行./train-test之后,生成gmon.out。 然后我做: $ gprof -q ./train-test gmon.out 这里,输出显示列车测试中的函数调用图,但不显示libtrain.so中的调用图 可能是什么问题呢 ?