c-编译带有MPI支持的Valgrind



我正在尝试在Linux下安装完全支持MPIValgrind。根据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可能是您正在寻找的包。

最新更新