我在我的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.apply
, mpi.applyLB
等函数将会更困难,但如果您只是需要要初始化MPI,以便可以使用C或Fortran中实现的函数使用MPI,则可能需要通过mpirun启动所有的工作。