Rmpi: 不能使用 MPI_Comm_spawn API
Rmpi: cannot use MPI_Comm_spawn API
我在我的 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'
为了获得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" 对于调试配置和构建问题非常有用。
请注意,您可以在没有 spawn 支持的情况下使用 Rmpi。您需要使用 mpirun(或 mpiexec 等)对所有 worker 进行 star,使用 mpi.apply
、[=19 等函数即使不是不可能,也会更加困难=],等等。但是,如果您只需要初始化 MPI,以便可以从 C 或 Fortran 中实现的函数中使用 MPI,您可能需要通过 mpirun 发送 tart 所有 worker。
我在我的 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'
为了获得spawn支持,在Rmpi中编译C代码时需要定义MPI2
宏。您可以通过在 config.log:
$ grep PKG_CPPFLAGS Rmpi/config.log
PKG_CPPFLAGS='-I/home/steve/mpich-install/include -DMPI2 -DMPICH2'
我发现 "config.log" 对于调试配置和构建问题非常有用。
请注意,您可以在没有 spawn 支持的情况下使用 Rmpi。您需要使用 mpirun(或 mpiexec 等)对所有 worker 进行 star,使用 mpi.apply
、[=19 等函数即使不是不可能,也会更加困难=],等等。但是,如果您只需要初始化 MPI,以便可以从 C 或 Fortran 中实现的函数中使用 MPI,您可能需要通过 mpirun 发送 tart 所有 worker。