Rmpi:不能使用MPI_Comm_spawn API

时间:2015-02-14 16:11:52

标签: linux r parallel-processing mpi

我在我的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工作?

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要使用MPICH2进行生成支持。如果安装了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'

为了获得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”对于调试配置和构建问题非常有用。

请注意,您可以在没有生成支持的情况下使用Rmpi。您需要使用mpirun(或mpiexec等)启动所有工作人员,使用mpi.applympi.applyLB等功能会更加困难,如果不是不可能的话。如果您只需要初始化MPI以便可以使用C或Fortran中实现的函数使用MPI,则可能需要通过mpirun启动所有工作程序。