您需要使用 MPICH2 来获得生成支持。如果您安装了 MPICH2,您可能仍需要在安装 Rmpi 时指定--with-Rmpi-type=MPICH2。如果你改用--with-Rmpi-type=MPICH,它会禁用mpi.spawn.Rslaves等功能。
另外请注意,MPICH2 显然不支持生成worker,除非程序是使用诸如mpiexec 之类的命令启动的。这基本上意味着您不能使用 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 等)启动所有工作程序,使用 mpi.apply、mpi.applyLB 等函数将更加困难,如果不是不可能的话。但如果您只需要要初始化 MPI,以便您可以从 C 或 Fortran 实现的函数中使用 MPI,您可能需要通过 mpirun 启动所有工作程序。