【问题标题】:Compiling Valgrind with MPI support使用 MPI 支持编译 Valgrind
【发布时间】:2013-02-13 06:06:24
【问题描述】:

我正在尝试在 Linux 下安装 Valgrind 并完全支持 MPI。根据 Valgrind documentation。我应该使用已经安装的MPI 进行编译,但是根据MPICHOpenMPI 文档,我应该使用已经安装的Valgrind 进行编译。这很混乱,我应该先安装哪个?

【问题讨论】:

    标签: c mpi valgrind


    【解决方案1】:

    这里没有循环依赖。相反,您面临着两种不同的方法,它们将 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 支持也是如此。

    【讨论】:

      【解决方案2】:

      你说你要安装支持 MPI 的 valgrind。这意味着您可能会使用 mpicc 或其他一些 mpi 编译器。 valgrind 要求的是,使用相同的编译器构建。如果您打算使用 valgrind 本身调试任何这些 mpi 编译器,则需要按照 Valgrind 集成部分下的说明进行操作。

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

      【讨论】:

      • 对不起,如果我的原始帖子不够清楚。我打算用 Valgrind 调试我自己的 MPI 应用程序,而不是实际的 MPI 编译器。 Valgrind 文档说要使用 --with-mpicc=/path/to/mpicc 进行配置,所以这里假设您安装了任何 MPI 发行版的版本。但是,例如,在 OpenMPI 文档中,它说要使用 --enable-debug --enable-memchecker --with-valgrind=/path/to/valgrind 进行配置——在我自然安装 Valgrind 之前我无法做到这一点。
      • 我原来的理解好像没问题。如果您安装 mpi 编译器,然后使用 --with-mpicc=/path/to/mpicc 构建 valgrind,您应该没问题。很难继续这样下去。如果您有任何错误形式的问题,这将非常有帮助。
      猜你喜欢
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2011-11-30
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      相关资源
      最近更新 更多