Rmpi: 不能使用 MPI_Comm_spawn API

Rmpi: cannot use MPI_Comm_spawn API

我在我的 linux 机器上安装了 Rmpi​​,它在 R 中成功加载。我的机器上有两个版本的 MPICH,我(相信)已经安装了最新版本的 Rmpi​​。我还必须更新我的 LD_LIBRARY_PATH。我主要按照安装说明 here.

在 R 中加载 Rmpi​​ 后,我 运行 mpi.spawn.Rslaves(nslaves=4) 得到以下错误信息:

Error in mpi.spawn.Rslaves(nslaves = 2) : 
You cannot use MPI_Comm_spawn API

有谁知道如何让 Rmpi​​ 工作?

谢谢!

您需要使用 MPICH2 来支持生成。如果你安装了 MPICH2,你可能仍然需要在安装 Rmpi​​ 时指定 --with-Rmpi-type=MPICH2。如果您改用 --with-Rmpi-type=MPICH,它将禁用 mpi.spawn.Rslaves.

等功能

另请注意,除非使用 mpiexec 等命令启动程序,否则 MPICH2 显然不支持生成工作程序。这基本上意味着您不能使用 MPICH2 从交互式 R 会话中执行 mpi.spawn.Rslaves,尽管这可以使用 Open MPI。需要明确的是,这不是您报告的问题,但您可能会在使用 MPICH2 正确安装 Rmpi​​ 后遇到此问题。

我能够使用 MPICH 3.1.3 通过以下命令安装 Rmpi​​ 0.6-5:

$ R CMD INSTALL Rmpi_0.6-5.tar.gz --configure-args='--with-mpi=$HOME/mpich-install --with-Rmpi-type=MPICH2'

要调试配置问题,您应该从目录而不是 tar 文件安装 Rmpi​​。这将允许您随后检查 "config.log" 文件,该文件将提供重要信息。以下是我在 Linux 盒子上的做法:

$ tar xzvf Rmpi_0.6-5.tar.gz 
$ R CMD INSTALL Rmpi --configure-args='--with-mpi=$HOME/mpich-install --with-Rmpi-type=MPICH2'

为了获得spawn支持,在Rmpi中编译C代码时需要定义MPI2宏。您可以通过在 config.log:

中搜索 "PKG_CPPFLAGS" 来检查是否发生这种情况
$ grep PKG_CPPFLAGS Rmpi/config.log
PKG_CPPFLAGS='-I/home/steve/mpich-install/include  -DMPI2 -DMPICH2'

我发现 "config.log" 对于调试配置和构建问题非常有用。

请注意,您可以在没有 spawn 支持的情况下使用 Rmpi​​。您需要使用 mpirun(或 mpiexec 等)对所有 worker 进行 star,使用 mpi.apply、[=19 等函数即使不是不可能,也会更加困难=],等等。但是,如果您只需要初始化 MPI,以便可以从 C 或 Fortran 中实现的函数中使用 MPI,您可能需要通过 mpirun 发送 tart 所有 worker。