我正在尝试在Linux下安装完全支持MPI
的Valgrind
。根据Valgrind文件。我应该使用已经安装的MPI
进行编译,但根据MPICH和OpenMPI文档,我应该使用已安装的Valgrind
进行编译。这很令人困惑,那么我应该先安装哪个?
这里没有循环依赖关系。相反,您面临着两种不同的方法,将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支持也是如此。
您说要安装带有MPI支持的valgrind。这意味着您可以使用mpicc或其他mpi编译器。valgrind所要求的是,使用相同的编译器构建。如果您打算使用valgrind本身调试任何一个mpi编译器,则需要按照valgrind集成部分的说明进行操作。
没有关于您使用哪个分发版的信息。在Debian系统上,valgrind mpi可能是您正在寻找的包。