Rmpi

From FarmShare

Revision as of 00:22, 15 February 2012 by Bishopj (Talk | contribs)
Jump to: navigation, search

Rmpi

Rmpi is R with mpi support. On the barley this means OpenMPI. Rmpi can be installed from CRAN packages if you wish. It is installed on the barley in /mnt/glusterfs/apps/R as a convenience.

setup

grid engine submit script (rmpi.submit)

#
#$ -cwd 
#$ -j y 
#$ -S /bin/bash 
#$ -N rmpi32 
#$ -pe orte 32

tmphosts=`mktemp` awk '{ for (i=0; i < $2; ++i) { print $1} }' $PE_HOSTFILE > $tmphosts 

echo "Got $NSLOTS slots" echo "jobid $JOB_ID"
cat $PE_HOSTFILE 

mpirun -np $NSLOTS -machinefile $tmphosts R --no-save -q < ~/Rmpitest.R

  1. This R profile can be used when a cluster does not allow spawning or a job
  2. scheduler is required to launch any parallel jobs. Saving this file as
  3. .Rprofile in the working directory or root directory. For unix platform, run
  4. mpirexec -n [cpu numbers] R --no-save -q
  5. For windows platform with mpich2, use mpiexec wrapper and specify a working
  6. directory where .Rprofile is inside.
  7. Cannot be used as Rprofile.site because it will not work
  1. Following system libraries are not loaded automatically. So manual loads are
  2. needed.

.libPaths(c("/mnt/glusterfs/apps/R", "/usr/lib/R/library"))

library(utils) library(stats) library(datasets) library(grDevices) library(graphics) library(methods)

if (!invisible(library(Rmpi,logical.return = TRUE))){

   warning("Rmpi cannot be loaded")
 q(save = "no")

}

options(error=quote(assign(".mpi.err", FALSE, env = .GlobalEnv)))

if (mpi.comm.size(0) > 1)

   invisible(mpi.comm.dup(0,1))

if (mpi.comm.rank(0) >0){

   #sys.load.image(".RData",TRUE)
 options(echo=FALSE)
 .comm <- 1
 mpi.barrier(0)
 repeat 

try(eval(mpi.bcast.cmd(rank=0,comm=.comm)),TRUE) #try(eval(mpi.bcast.cmd(rank=0,comm=.comm),env=sys.parent()),TRUE)

   #mpi.barrier(.comm)
 if (is.loaded("mpi_comm_disconnect")) 
     mpi.comm.disconnect(.comm)
 else mpi.comm.free(.comm)
 mpi.quit()

}

if (mpi.comm.rank(0)==0) {

   #options(echo=TRUE)
 mpi.barrier(0)
 if(mpi.comm.size(0) > 1)
     slave.hostinfo(1)

}

.Last <- function(){

   if (is.loaded("mpi_initialize")){
     if (mpi.comm.size(1) > 1){
         print("Please use mpi.close.Rslaves() to close slaves")
         mpi.close.Rslaves(comm=1)
 	}
 }
 print("Please use mpi.quit() to quit R")
 mpi.quit()

}


  1. Tell all slaves to return a message identifying themselves

mpi.remote.exec(paste("I am",mpi.comm.rank(),"of",mpi.comm.size()))

  1. Tell all slaves to close down, and exit the program

mpi.close.Rslaves() mpi.quit()

Personal tools
Toolbox
LANGUAGES