我遵循这里的指令“http://math.acadiau.ca/ACMMaC/Rmpi/sample.html”。这里是我的R代码里面Rmpi不能在节点间产生进程
library("Rmpi")
mpi.spawn.Rslaves()
.Last <- function(){
if (is.loaded("mpi_initialize")){
if (mpi.comm.size(1) > 0){
print("Please use mpi.close.Rslaves() to close slaves.")
mpi.close.Rslaves()
}
print("Please use mpi.quit() to quit R")
.Call("mpi_finalize")
}
}
mpi.remote.exec(paste("I am",mpi.comm.rank(),"of",mpi.comm.size()-1,"on",mpi.get.processor.name()))
mpi.close.Rslaves()
mpi.quit()
而在脚本中,我指定的进程号:
#$ -S /bin/sh
#$ -pe orte 20
#$ -cwd
#$ -V
#$ -o /data1/users/liuyang/R/rmpi.o
#$ -e /data1/users/liuyang/R/rmpi.e
mpiexec -np 1 R --slave CMD BATCH rmpi.R
但是我发现将R代码只在主节点上运行,并且mpi.spawn.Rslaves()只产生12个进程(主节点的CPU核心号)。
该集群是一个sge集群,并且我使用openmpi 1.4.3版安装了Rmpi软件包。那是什么原因?
我也尝试评论R代码中的mpi.spawn.Rslaves()行,并将mpiexec的参数更改为“-np $ NSLOTS”,但它没有给出从属进程错误。
-np将保持为1.当应用程序正常工作时,R应该从hostfile中获取自动传递给它的插槽数。 – russellpierce 2015-03-04 22:01:52