为MPICH配置valgrind:使用了错误的libmpi * .so文件

时间:2012-05-05 11:28:01

标签: mpi valgrind mpich memcheck

当运行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*".

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

1 个答案:

答案 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