linux – 如何在使用mpirun时使分析器(valgrind,perf,pprof)使用调试符号来获取使用本地版本的库?

linux – 如何在使用mpirun时使分析器(valgrind,perf,pprof)使用调试符号来获取使用本地版本的库?,第1张

概述编辑:添加重要说明,它是关于调试MPI应用程序 系统安装的共享库没有调试符号: $readelf -S /usr/lib64/libfftw3.so | grep debug$ 因此我在我的主目录中编译并安装了我的版本,启用了调试(–with-debug CFLAGS = -g): $$readelf -S ~/lib64/libfftw3.so | grep debug [26] .deb 编辑:添加重要说明,它是关于调试MPI应用程序

系统安装的共享库没有调试符号:

$readelf -S /usr/lib64/libfftw3.so | grep deBUG$

因此我在我的主目录中编译并安装了我的版本,启用了调试(–with-deBUG CFLAGS = -g):

$$readelf -S ~/lib64/libfftw3.so | grep deBUG  [26] .deBUG_aranges    PROGBITS         0000000000000000  001d3902  [27] .deBUG_pubnames   PROGBITS         0000000000000000  001d8552  [28] .deBUG_info       PROGBITS         0000000000000000  001ddebd  [29] .deBUG_abbrev     PROGBITS         0000000000000000  003e221c  [30] .deBUG_line       PROGBITS         0000000000000000  00414306  [31] .deBUG_str        PROGBITS         0000000000000000  0044aa23  [32] .deBUG_loc        PROGBITS         0000000000000000  004514de  [33] .deBUG_ranges     PROGBITS         0000000000000000  0046bc82

我已将LD_liBRARY_PATH和LD_RUN_PATH都设置为首先包含〜/ lib64,而ldd程序确认应使用本地版本的库:

$ldd a.out | grep fftw        libfftw3.so.3 => /home/narebski/lib64/libfftw3.so.3 (0x00007f2ed9a98000)

所讨论的程序是使用MPI(消息传递接口)的并行数值应用程序.因此,要运行此应用程序,必须使用mpirun包装器(例如mpirun -np 1 valgrind –tool = callgrind ./a.out).我使用OpenMPI实现.

尽管如此,各种分析器:Valgrind,CPU profiling google-perfutils和perf中的callgrind工具都找不到那些调试符号,导致或多或少的无用输出:

> calgrind:

$callgrind_annotate --include=~/prog/src --inclusive=no  --tree=none[...]--------------------------------------------------------------------------------            Ir  file:function--------------------------------------------------------------------------------32,765,904,336  ???:0x000000000014e500 [/usr/lib64/libfftw3.so.3.2.4]31,342,886,912  /home/narebski/prog/src/nonlinearity.F90:__nonlinearity_MOD_calc_nonlinearity_kxky [/home/narebski/prog/bin/a.out]30,288,261,120  /home/narebski/gene11/src/axpy.F90:__axpy_MOD_axpy_ij [/home/narebski/prog/bin/a.out]23,429,390,736  ???:0x00000000000fc5e0 [/usr/lib64/libfftw3.so.3.2.4]17,851,018,186  ???:0x00000000000fdb80 [/usr/lib64/libmpi.so.1.0.1]

> Google-perftools:

$pprof --text a.out prog.profTotal: 8401 samples     842  10.0%  10.0%      842  10.0% 00007f200522d5f0     619   7.4%  17.4%     5025  59.8% calc_nonlinearity_kxky     517   6.2%  23.5%      517   6.2% axpy_ij     427   5.1%  28.6%     3156  37.6% nl_to_direct_xy     307   3.7%  32.3%     1234  14.7% nl_to_fourIEr_xy_1d

> perf事件:

$perf report --sort comm,dso,symbol# Events: 80K cycles## Overhead  Command         Shared Object                                        Symbol# ........  .......  ....................  ............................................#    32.42%  a.out     libfftw3.so.3.2.4     [.]            fdc4c    16.25%  a.out             7fddcd97bb22  [.]     7fddcd97bb22     7.51%  a.out     libatlas.so.0.0.0     [.] ATL_dcopy_xp1yp1aXbX     6.98%  a.out     a.out                 [.] __nonlinearity_MOD_calc_nonlinearity_kxky     5.82%  a.out     a.out                 [.] __axpy_MOD_axpy_ij

编辑已添加11-07-2011:
我不知道它是否重要,但是:

$file /usr/lib64/libfftw3.so.3.2.4/usr/lib64/libfftw3.so.3.2.4: ELF 64-bit LSB shared object,x86-64,version 1 (SYSV),dynamically linked,stripped

$file ~/lib64/libfftw3.so.3.2.4/home/narebski/lib64/libfftw3.so.3.2.4: ELF 64-bit LSB shared object,version 1 (GNU/linux),not stripped
解决方法 如果在callgrind输出中列出了/usr/lib64/libfftw3.so.3.2.4,则LD_liBRARY_PATH =〜/ lib64无效.

再次尝试使用export LD_liBRARY_PATH = $HOME / lib64.还要注意您调用的任何shell脚本,这可能会重置您的环境.

总结

以上是内存溢出为你收集整理的linux – 如何在使用mpirun时使分析器(valgrind,perf,pprof)使用调试符号来获取/使用本地版本的库?全部内容,希望文章能够帮你解决linux – 如何在使用mpirun时使分析器(valgrind,perf,pprof)使用调试符号来获取/使用本地版本的库?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/1018300.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存