系统安装的共享库没有调试符号:
$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)使用调试符号来获取/使用本地版本的库?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)