Rmpi:不能使用MPI_Comm_spawn API

我在我的linux机器上安装了Rmpi,并在R中成功加载。在我的机器上有两个版本的MPICH,我相信已经安装了最新版本的Rmpi。 我也不得不更新我的LD_LIBRARY_PATH 。 我主要按照这里的安装说明。

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

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

有谁知道我可以如何让Rmpi工作?

谢谢!

你需要使用MPICH2来产生支持。 如果安装了--with-Rmpi-type=MPICH2在安装Rmpi时可能仍需要指定--with-Rmpi-type=MPICH2 。 如果使用--with-Rmpi-type=MPICH ,则会禁用mpi.spawn.Rslaves等功能。

另外请注意,MPICH2显然不支持产卵工人,除非程序使用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' 

为了获得产卵支持,编译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”对调试配置和构建问题非常有用。

请注意,您可以使用Rmpi而不需要spawn支持。 您需要使用mpirun(或mpiexec等)来启动所有的工作,使用mpi.applympi.applyLB等函数将会更困难,但如果您只是需要要初始化MPI,以便可以使用C或Fortran中实现的函数使用MPI,则可能需要通过mpirun启动所有的工作。