[R] Benefit of Iterators (package iterator)

Thierry Onkelinx
Thu, 08 Dec 2016 15:45:26 -0000

Dear Harold,

I get a different story

library(doParallel)
library(microbenchmark)
cl <- makeCluster(4)
registerDoParallel(cl)
x <- matrix(rnorm(1000000), ncol=1000)
itx <- iter(x, by='row')
microbenchmark(
  iterator = foreach(i=itx, .combine=c) %dopar% mean(i),
  base = foreach(i= 1:nrow(x), .combine=c) %dopar% mean(x[i,])
)

Unit: milliseconds
     expr       min         lq       mean     median         uq      max
neval cld
 iterator   2.11206   2.298507   6.254412   2.540116   2.691283  370.623
100  a
     base 390.21825 442.561737 550.169590 452.729684 466.343894 2554.329
100   b

Best regards,


ir. Thierry Onkelinx
Instituut voor natuur- en bosonderzoek / Research Institute for Nature and
Forest
team Biometrie & Kwaliteitszorg / team Biometrics & Quality Assurance
Kliniekstraat 25
1070 Anderlecht
Belgium

To call in the statistician after the experiment is done may be no more
than asking him to perform a post-mortem examination: he may be able to say
what the experiment died of. ~ Sir Ronald Aylmer Fisher
The plural of anecdote is not data. ~ Roger Brinner
The combination of some data and an aching desire for an answer does not
ensure that a reasonable answer can be extracted from a given body of data.
~ John Tukey

2016-12-08 15:20 GMT+01:00 Doran, Harold <HDoran at air.org>:

> R-Help (and package author)
>
> I'm trying to understand within the context of R what the benefit of
using
> an iterator is. My only goal in using the foreach package is to improve
> computational speed with some embarrassingly parallel tasks I have to
> compute.
>
> I took the example found at the link below to provide a reproducible
> example and ran it in a "conventional" way to iterate in a loop
and the
> timing suggests here (as well as with my actual project) that using an
> iterator generates the same object, but at a much slower speed.
>
> If I can get the same thing faster without using an iterator what would be
> the potential of its use?
>
> https://msdn.microsoft.com/en-us/microsoft-r/foreach
>
> > library(doParallel)
> > cl <- makeCluster(8)
> > registerDoParallel(cl)
> > x <- matrix(rnorm(1000000), ncol=1000)
> > itx <- iter(x, by='row')
> > system.time(r1 <- foreach(i=itx, .combine=c) %dopar% mean(i))
>    user  system elapsed
>    0.40    0.08    0.87
> > system.time(r2 <- foreach(i= 1:nrow(x), .combine=c) %dopar%
mean(x[i,]))
>    user  system elapsed
>    0.41    0.03    0.81
> > all.equal(r1,r2)
> [1] TRUE
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/
> posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]