Nahajate se tukaj

R

R je programski jezik za statistično računanje in grafiko.

Vzporedno računanje z R omogoča paket Rmpi, ki je nameščen s podporo OpenMPI. Delo pričnemo z namestivijo modula r in kopiranjem inicializacijskega profila (samo ob prvi uporabi)

 $ module load r
  Loading intel/12.1.3
  Loading openmpi/1.4.4 for compiler intel-12.1
  Loading r/2.15.0

$ cp /usr/local/r/2.15.0/lib64/R/library/Rmpi/Rprofile $HOME/.Rprofile

Za primer bomo pokazali osnovno komunikacijo s programom mpi.R

 # Load the R MPI package if it is not already loaded.
if (!is.loaded("mpi_initialize"))
    {
        library("Rmpi")
    }
# Spawn as many slaves as possible
mpi.spawn.Rslaves()
# In case R exits unexpectedly, have it automatically clean up
# resources taken up by Rmpi (slaves, memory, etc...)
.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")
    }
}
# Tell all slaves to return a message identifying themselves
mpi.remote.exec(paste("I am",mpi.comm.rank(),"of",mpi.comm.size()))
# Tell all slaves to close down, and exit the program
mpi.close.Rslaves()
mpi.quit()

Pripravimo še datoteko rmpi-demo.lsf za poganjanje v čakalni vrsti na šestih procesorjih

 #BSUB -n 6
#BSUB -J R-demo

mpirun R --slave CMD BATCH mpi.R

ki ob zagonu z ukazom

 bsub < rmpi-demo.ls

izpiše v datoteko mpi.Rout naslednji izpis

 R version 2.15.0 (2012-03-30)
Copyright (C) 2012 The R Foundation for Statistical Computing
ISBN 3-900051-07-0                                           
Platform: x86_64-unknown-linux-gnu (64-bit)                  

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.   

R is a collaborative project with many contributors.
Type 'contributors()' for more information and      
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.      
Type 'q()' to quit R.                                      

master (rank 0, comm 1) of size 6 is running on: cn52 
slave1 (rank 1, comm 1) of size 6 is running on: cn52 
slave2 (rank 2, comm 1) of size 6 is running on: cn52 
slave3 (rank 3, comm 1) of size 6 is running on: cn52 
slave4 (rank 4, comm 1) of size 6 is running on: cn52 
slave5 (rank 5, comm 1) of size 6 is running on: cn52 
> # Load the R MPI package if it is not already loaded.
> if (!is.loaded("mpi_initialize"))                    
+     {                                                
+       library("Rmpi")                                
+     }
> # Spawn as many slaves as possible
> mpi.spawn.Rslaves()
Error in mpi.spawn.Rslaves() :
  It seems there are some slaves running on comm  1
> # In case R exits unexpectedly, have it automatically clean up
> # resources taken up by Rmpi (slaves, memory, etc...)
> .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")
+     }
+ }
> # Tell all slaves to return a message identifying themselves
> mpi.remote.exec(paste("I am",mpi.comm.rank(),"of",mpi.comm.size()))
$slave1
[1] "I am 1 of 6"

$slave2
[1] "I am 2 of 6"

$slave3
[1] "I am 3 of 6"

$slave4
[1] "I am 4 of 6"

$slave5
[1] "I am 5 of 6"

> # Tell all slaves to close down, and exit the program
> mpi.close.Rslaves()
[1] 1
> mpi.quit()

Na večjem številu procesorjev in brez LSF skriptne datoteke lahko poženemo R z ukazom

 bsub -n 48 mpirun R --slave CMD BATCH mpi.R

S tem da dobimo obvestilo o poteku v poštni predal.

Za enostavnejše programiranje lahko uporabimo še knjižnico snowfall.