[R-sig-hpc] mclapply: problem writing into a texfile within a loop
Mauricio Zambrano-Bigiarini
mauricio.zambrano at jrc.ec.europa.eu
Tue Jul 10 15:28:01 CEST 2012
Dear list,
While using the mclapply function provided by the multicore package, I
notice that more lines are written than expected when writing the
outputs of the simulations into a textfile, AFTER the call to 'mclapply'.
At the other hand, by using the 'parallel' package I do not have any
"additional" outputs.
Below you can find a reproducible example:
--------START--------
fn <- function(x) {
n <- length(x)
return(1 + (1/4000) * sum(x^2) - prod(cos(x/sqrt(seq(1:n)))))
}
fn1 <- function(i, x) fn(x[i,])
nr <- 50 ; X <- matrix(rnorm(1000), ncol=50, nrow=nr)
#######################
# multicore: mclapply #
fname <- paste("~/logfile_multicore.txt", sep="")
TextFile <- file(fname , "w+")
for (iter in 1:3) {
library(multicore)
set.seed(100)
unlist(multicore::mclapply(1:nr, FUN=fn1, x=X, mc.cores=6))
for (i in 1:2) {
writeLines(c("iter:", as.character(iter), " ; i:",
as.character(i) ), TextFile, sep=" ")
writeLines("", TextFile)
} # FOR i end
} # FOR iter end
close(TextFile)
# output:
#iter: 1 ; i: 1 # it should not be here
#iter: 1 ; i: 2 # it should not be here
#iter: 1 ; i: 1 # it should not be here
#iter: 1 ; i: 2 # it should not be here
#iter: 1 ; i: 1 # it should not be here
#iter: 1 ; i: 2 # it should not be here
#iter: 2 ; i: 1 # it should not be here
#iter: 2 ; i: 2 # it should not be here
#iter: 1 ; i: 1
#iter: 1 ; i: 2
#iter: 2 ; i: 1
#iter: 2 ; i: 2
#iter: 3 ; i: 1
#iter: 3 ; i: 2
############
# parallel #
fname <- paste("~/logfile_parallel.txt", sep="")
TextFile <- file(fname , "w+")
for (iter in 1:3) {
cl <- parallel:::makeCluster(6)
set.seed(100)
parApply(cl=cl,X,1,fn)
stopCluster(cl)
for (i in 1:2) {
writeLines(c("iter:", as.character(iter), " ; i:",
as.character(i) ), TextFile, sep=" ")
writeLines("", TextFile)
} # FOR i end
} # FOR iter end
close(TextFile)
# output:
#iter: 1 ; i: 1
#iter: 1 ; i: 2
#iter: 2 ; i: 1
#iter: 2 ; i: 2
#iter: 3 ; i: 1
#iter: 3 ; i: 2
-----------END-----------------
The same results are obtained if the call to 'multicore::mclapply' is
replaced by 'parallel::mclapply'.
> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: x86_64-redhat-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_GB.utf8 LC_NUMERIC=C
[3] LC_TIME=en_GB.utf8 LC_COLLATE=en_GB.utf8
[5] LC_MONETARY=en_GB.utf8 LC_MESSAGES=en_GB.utf8
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.utf8 LC_IDENTIFICATION=C
attached base packages:
[1] parallel splines stats graphics grDevices utils datasets
[8] methods base
other attached packages:
[1] multicore_0.1-7
Do you know if is it any way of avoiding the writing of additional lines
after calling mclapply ?
Thanks in advance,
Mauricio Zambrano-Bigiarini
--
====================================================
Water Resources Unit
Institute for Environment and Sustainability (IES)
Joint Research Centre (JRC), European Commission
webinfo : http://floods.jrc.ec.europa.eu/
====================================================
DISCLAIMER:\ "The views expressed are purely those of th...{{dropped:10}}
More information about the R-sig-hpc
mailing list