我正在尝试在 Linux 下Valgrind
完全支持安装。MPI
根据 Valgrind文档。我应该在MPI
已经安装的情况下进行编译,但是根据MPICH和OpenMPI文档,我应该在Valgrind
已经安装的情况下进行编译。这很令人困惑,那么我应该先安装哪个?
2 回答
这里没有循环依赖。相反,您面临着两种不同的方法,它们将 Valgrind 客户端请求放在不同的位置。
Open 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 可能是您正在寻找的软件包。