[R-sig-hpc] Using rstream for reproducible parallel computations

Renaud Gaujoux renaud at mancala.cbio.uct.ac.za
Wed Feb 9 10:21:36 CET 2011


Hi Dirk,

I checked for the possibility of me using snow instead of multicore.
Currently I make use of mutexes (package synchronicity) to modify an 
object in shared memory (package bigmemory), and this mechanism might 
not work with snow and doSNOW. I will investigate this with the the 
packages' authors.

Renaud


On 08/02/2011 17:01, Dirk Eddelbuettel wrote:
> On 8 February 2011 at 16:13, Renaud Gaujoux wrote:
> | Hi Dirk,
> |
> | I had first chosen the multicore package for simplicity (though
> | reproducibility was an issue), but I might switch to snow and doSNOW as
> | you suggest.
> | I would also make multicore computation possible under Windows, am I
> | correct?
>
> Nope. multicore uses facilities not exposed by Windoze.
>
> Revolution helped by writing and even open-sourcing doSMP.
>
> snow and sockets is probably still the best bet for "simple and cross-platform".
>
> Dirk
>
> | Thank you.
> |
> | Renaud
> |
> | On 08/02/2011 16:02, Dirk Eddelbuettel wrote:
> |>  On 8 February 2011 at 15:28, Renaud Gaujoux wrote:
> |>  | Hi,
> |>  |
> |>  | I want to use the package rstream in order to ensure reproducibility of
> |>  | parallel independent computations.
> |>  |
> |>  | To implement the computation I use a foreach loop, which should work
> |>  | with both parallel backends doMC and doMPI. The idea I follow to ensure
> |>  | reproducibility and flexibility is to create all the required random
> |>  | streams before starting loop and pass them to the workers, one by one as
> |>  | these complete their tasks. I saw pieces of code around the web that
> |>  | does this using the package rlecuyer. I like the unified approach of
> |>  | rstream though, so I would like to use this package (that also provides
> |>  | L'Ecuyer's RNGstream generator). Parallel stuff can get tricky with
> |>  | hidden side effects, that's why I'd like to have some comments on the
> |>  | following code.
> |>
> |>  It's tricky and important to get this stuff right: The foreach and do*
> |>  families do not support it out of the box.
> |>
> |>  You could try to make your life easier by switching to the snow package. With
> |>  the doSNOW plugin and by using the MC and/or MPI backends supported by snow
> |>  you would get the snow integration to rlecuyer and rsprng for free.
> |>
> |>  That said, it would be awfully nice if someone could work similar logic into
> |>  do* as a general solution.
> |>
> |>  Dirk
> |>
> |>  | Thank you.
> |>  |
> |>  | Renaud
> |>  |
> |>  | # this function creates n streams, starting with a given seed (<=>
> |>  | rlecuyer::.lec.CreateStream)
> |>  | createStream<- function(n, seed){
> |>  |
> |>  |      # check parameters
> |>  |      if( n<= 0 )
> |>  |          stop("NMF::createStream - invalid value for 'n' [positive value
> |>  | expected]")
> |>  |
> |>  |      s<- new('rstream.mrg32k3a', seed=seed, force.seed=TRUE)
> |>  |      rstream.packed(s)<- TRUE
> |>  |      s<- list(s)
> |>  |      if( n>   1 )
> |>  |          s<- c(s, replicate(n-1,{ s<- new('rstream.mrg32k3a');
> |>  | rstream.packed(s)<- TRUE; s} ))
> |>  |
> |>  |      invisible(s)
> |>  | }
> |>  |
> |>  | library(rstream)
> |>  | library(doMC)
> |>  |
> |>  | registerDoMC()
> |>  | dummy<- foreach(i=1:10, s=createStream(10, 1:6)) %dopar% {
> |>  |      print(s)
> |>  |      # do stuff
> |>  | }
> |>  |
> |>  |
> |>  |
> |>  |
> |>  |
> |>  | ###
> |>  | UNIVERSITY OF CAPE TOWN
> |>  |
> |>  | This e-mail is subject to the UCT ICT policies and e-mai...{{dropped:5}}
> |>  |
> |>  | _______________________________________________
> |>  | R-sig-hpc mailing list
> |>  | R-sig-hpc at r-project.org
> |>  | https://stat.ethz.ch/mailman/listinfo/r-sig-hpc
> |>
> |
> |
> |
> | ###
> | UNIVERSITY OF CAPE TOWN
> |
> | This e-mail is subject to the UCT ICT policies and e-mail disclaimer published on our website at http://www.uct.ac.za/about/policies/emaildisclaimer/ or obtainable from +27 21 650 9111. This e-mail is intended only for the person(s) to whom it is addressed. If the e-mail has reached you in error, please notify the author. If you are not the intended recipient of the e-mail you may not use, disclose, copy, redirect or print the content. If this e-mail is not related to the business of UCT it is sent by the sender in the sender's individual capacity.
> |
> | ###
> |
> |
>

 

###
UNIVERSITY OF CAPE TOWN 

This e-mail is subject to the UCT ICT policies and e-mai...{{dropped:5}}



More information about the R-sig-hpc mailing list