我在我的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工作吗?
谢谢!
最佳答案
您需要使用mpich2来支持生成。如果安装了mpich2,则在安装rmpi时可能仍需要指定--with-Rmpi-type=MPICH2
。如果您改用--with-Rmpi-type=MPICH
,它将禁用mpi.spawn.Rslaves
等功能。
还要注意,除非使用mpiexec等命令启动程序,否则mpich2显然不支持生成工作线程。这基本上意味着您不能使用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启动所有的工作进程。