2013-02-12 145 views

回答

1

你说你打算安装带MPI支持的valgrind。这意味着你可以使用mpicc或其他mpi编译器。 Valgrind所要求的是,用相同的编译器来构建。如果您打算使用valgrind本身调试任何这些mpi编译器,则需要遵循Valgrind Integration部分下的说明。

没有关于您使用哪种分配的信息。在Debian系统上,valgrind-mpi可能是您正在寻找的软件包。

+0

对不起,如果我原来的帖子不够清楚。我打算用Valgrind调试我自己的MPI应用程序,而不是实际的MPI编译器。 Valgrind文档说用--with-mpicc =/path/to/mpicc进行配置,所以这里假定你有一个安装了MPI发行版的版本。但是,例如,在OpenMPI文档中,它说使用--enable-debug --enable-memchecker --with-valgrind =/path/to/valgrind进行配置 - 在安装Valgrind之前,我无法做到这一点。 – user787267 2013-02-12 02:31:38

+0

我原来的理解看起来没问题。你应该没问题,如果你安装mpi编译器,然后用'--with-mpicc =/path/to/mpicc'构建valgrind。这样很难继续下去。如果你有任何问题或错误的形式,这将是非常有益的。 – vpit3833 2013-02-12 03:31:59

2

这里没有循环依赖。相反,您正面临将Valgrind客户端请求置于不同位置的两种不同方法。

开放式MPI可以使用OMPI特有的Valgrind支持来构建。这与构建支持MPI支持的Memchecker不同,它还允许检查OMPI内部(这也是为什么它还要求您在OMPI中启用调试)。 Memchecker客户端请求以OMPI特定的方式成为库代码的一部分。这不需要修改Valgrind代码,也就是说它应该可以与任何Valgrind安装一起工作(假定满足最低版本要求)

另一方面,Open MPI以及任何其他MPI实现提供了PMPI分析界面。这可以被Memchecker用来提供通用MPI支持。如文档中所述,Memchecker构建了一个函数库,用于替换(并包装)原始MPI调用(这是PMPI机制的工作方式 - 所有MPI_*调用都是弱符号,并且可以被其他具有相同名称的符号覆盖,真正的MPI调用实际上是PMPI_*MPI_*被定义为ELF系统上的弱别名)。这不需要更改MPI库代码。它应该适用于任何MPI实现,但只有用户内存才能被正确调试,即在MPI库代码中可能检测到误报(尽管这些不一定是误报,并且可能意味着库本身很麻烦)。

对于MPICH中的Valgrind支持也是如此。