我遵循這裏的指令「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