2012-05-05 18 views
2

当运行Valgrind的检测MPI应用程序中的错误,我得到以下错误:为MPICH配置的valgrind:错误libmpi * .so文件使用

libmpi.so.0: cannot open shared object file: No such file or directory 

我发现了以下工作: Valgrind documentation(第4.9节.1)指出:“MPI被包装的函数被假定为在与soname匹配的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*". 

我的问题是:在哪里以及如何配置呢?

+1

你是如何配置/安装Valgrind的? MPICH2怎么样?IIRC它只是在你正确指定'--with-mpicc =/path/to/mpicc'到Valgrind的'configure'时起作用。还要确保您的MPICH2安装配置了“--enable-shared”。 –

+0

根据valgrind文档,会自动检测mpi安装。我在哪里可以看到哪些mpi安装valgrind使用?配置只是告诉我,mpicc已被发现。 – mort

+1

然后只要确保检测到正确的MPI安装。 '--with-mpicc ='选项只是帮助Valgrind找到正确的MPI安装。 –

回答

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