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