当运行valgrind来检测mpi应用程序中的错误时,我收到以下错误:
libmpi.so.0: cannot open shared object file: No such file or directory
我发现了以下内容: Valgrind documentation(第4.9.1节)声明“要包装的MPI函数假定在一个ELF共享对象中,其子语名与libmpi.so *匹配。至少对于Open MPI和Quadrics来说,这是正确的。 MPI,如果需要可以轻松更改。“
因为我使用mpich2,它实际上应该使用libmpich.so.1.0。
这可以在libmpiwrap.c中看到:
#include "mpi.h"
/* Where are API symbols?
Open MPI lib/libmpi.so, soname = libmpi.so.0
Quadrics MPI lib/libmpi.so, soname = libmpi.so.0
MPICH libmpich.so.1.0, soname = libmpich.so.1.0
A suitable soname to match with is therefore "libmpi*.so*".
我的问题是:我在哪里以及如何配置?
答案 0 :(得分:1)
我自己有这个问题。希望这可以指出你正确的方向。不幸的是,MPI很难与valgrind和gdb一起工作。
选项1 :找到合适的包。
在Fedora / RHEL /(基于rpm)系统上,您可以在valgrind-openmpi
包中找到OpenMPI共享库。我找不到MPICH版本。我使用MVAPICH,所以这对我没有帮助。如果您找到MPICH / MVAPICH版本,请发表评论,以便我可以在此处添加。
PBone将内容显示为拥有libmpiwrapper共享对象。
选项2 :从源代码构建库。 (我为MVAPICH做了什么)
我求助于从源代码编译valgrind,然后复制共享库。我想保留包管理器的valgrind版本,所以我只是匹配源代码的版本并使用默认的GCC是安全的。你可以使用最新的和最好的,但我怀疑你得到了多少。
构建Valgrind时,需要确保找到正确的MPI安装。检查输出以验证正确的共享库和头文件。我习惯在系统上安装多个MPI,所以这是我学到的难点。花一些时间在autoconf / automake输出上。幸运的是,Valgrind维护人员在保持构建非常简单方面做得很好,所以我没有遇到任何重大问题的编译。
源代码 http://valgrind.org/downloads/
一旦拥有它,关键就是设置env变量,正如他们在文档中提到的那样。
附加说明 - https://wiki.mpich.org/mpich/index.php/Support_for_Debugging_Memory_Allocation - https://fs.hlrs.de/projects/marmot/publications/paralleldebugging-ppt.pdf