[R] multicore - shared memory

Rune Schjellerup Philosof rphilosof at health.sdu.dk
Wed Mar 18 09:57:03 CET 2009


I am trying to optimize some calculations using the package multicore.
I have a function that returns three variables of interest in a list.
Normally I would do a for loop over (i in 1:n) but the calculations are
independent so I could use mclapply(1:n, loopbody(i)).

  loopbody <- function(i) { waveletsmooth(resampled[, i]) }
  mclapply(1:n, loopbody, mc.preschedule=FALSE)

Except that I am really not interested in returning a list of n lists
each containing the three variables.
I would like to have three variables each containing the data in n columns.

  base = smooth = matrix(0, l, n)
  loopbody <- function(i) {
    tmp <- waveletsmooth(resampled[, i]);
    base[, i] <<- tmp[["basecorrect"]];
    smooth[, i] <<- tmp[["nobasecorrect"]];
  }
  mclapply(1:n, loopbody, mc.preschedule=FALSE);

Frustratingly, this does not work, as is obvious from help(multicore),
since the child threads use copy-on-write on the memory inherited from
the master.

So my question is:
How do I allow the child threads to work on the variables base and
smooth as shared memory, so that I don't have to use sendMaster or
similar functions that copy the results?

-- 
Med venlig hilsen
Rune Schjellerup Philosof




More information about the R-help mailing list