编译具有 MPI 支持的 Valgrind

标签 c mpi valgrind

我正在尝试在 Linux 下安装完全支持 MPIValgrind。根据 Valgrind documentation 。我应该使用已安装的 MPI 进行编译,但根据 MPICHOpenMPI文档,我应该使用已安装的 Valgrind 进行编译。这很令人困惑,那么我应该先安装哪个?

最佳答案

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

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

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

MPICH 中的 Valgrind 支持也是如此。

关于编译具有 MPI 支持的 Valgrind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14824242/

相关文章:

c - 将 Vala 与 C 结合使用时出现内存泄漏

c - .s 文件在 C 项目中的作用是什么?

在 C 中将立体声 wav 转换为单声道

c++ - MPI - 异步广播/收集

c++ - 如何在 MPI 中传递 std::unique_ptr?

c - 尝试安装 valgrind 但卡在 make valgrind,怎么办?

c - 为什么输出与 %f 参数不同?

c - 十六进制数的异常输出

r - 在 Ubuntu 16.04 VirtualBox 上安装 Rmpi

c++ - 在套接字 : Invalid write of size 1 上通信时出现段错误