Я последовал инструкциям здесь «http://math.acadiau.ca/ACMMaC/Rmpi/sample.html». Вот мой код RRmpi не может вызвать процесс по узлам
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 процессов (основной номер процессора главного узла).
Кластер - кластер sge, и я установил пакет Rmpi с openmpi версии 1.4.3. Так в чем причина?
Я также попытался прокомментировать строку mpi.spawn.Rslaves() в коде R и изменил параметр mpiexec на «-np $ NSLOTS», но не дал никакой ошибки подчиненного процесса.
-np останется 1. R должен получить количество слотов из файла хоста, которое передается ему автоматически, когда все работает правильно. – russellpierce