Sean Southard
2015-May-11 20:49 UTC
[R-sig-Debian] Foreach %dopar% operator incorrectly load balancing
Dear R-SIG-Debian,
I am using R version 3.1.2 with rstudio-server 0.98.113 on debian build
3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u1 x86_64 GNU/Linux.
I often use the %dopar% operator in from the foreach package to run code in
parallel. However, the only other use on the box seemingly installed a few
items and suddenly %dopar% will use far more than the number of cores I am
specifying and seems to load balance between all of them. The issue with
this is that it doesn't actually seem to perform non-trivial tasks at all
anymore.
This is an example of testing code I've been using for testing the %dopar%
loop.
library(iterators)
library(foreach)
library(doParallel)
library(Parallel)
nCores <- 4
cl <- makeCluster(nCores)
registerDoParallel(cl)
trials = 100000
x <- iris[which(iris[,5] != "setosa"),c(1,5)]
t2 <- system.time({
r2 <- foreach(icount(trials), .combine=cbind) %dopar% {
ind <- sample(100,100,replace= TRUE)
results1 <- glm(x[ind,2]~x[ind,1],family=binomial(logit))
coefficients(results1)
}})[3]
stopCluster(cl)
Another interesting behavior is that I can now stop R code that should be
running on the slave workers where as previously I had to use a kill command
to handle the workers.
I have checked the system logs and can't seem to find what's been
changed
so it's unclear to me exactly how to proceed. It is almost reminiscent of a
change in the BLAS library but this behavior persists after recompiling R
to not use the shared BLAS lib.
here is the output from lsof -p 23618 | grep 'blas\|lapack'
R 39781 smsouthard mem REG 8,17 3576576
1055038 /usr/local/lib/R/lib/libRlapack.so
R 39781 smsouthard mem REG 8,17 655336
1572936 /usr/lib/libblas/libblas.so.3.0
Output from R CMD ldd /usr/local/lib/R/bin/exec/R
linux-vdso.so.1 (0x00007ffca59fd000)
libR.so => /usr/local/lib/R/lib/libR.so (0x00007f15fdc30000)
libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f15fd9f7000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f15fd7da000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f15fd431000)
libblas.so.3 => /usr/lib/libblas.so.3 (0x00007f15fd190000)
libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3
(0x00007f15fce72000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f15fcb71000)
libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0
(0x00007f15fc933000)
libreadline.so.6 => /lib/x86_64-linux-gnu/libreadline.so.6
(0x00007f15fc6e9000)
liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f15fc4c6000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f15fc2bd000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f15fc0b9000)
libicuuc.so.48 => /usr/lib/x86_64-linux-gnu/libicuuc.so.48
(0x00007f15fbd4a000)
libicui18n.so.48 => /usr/lib/x86_64-linux-gnu/libicui18n.so.48
(0x00007f15fb97e000)/lib64/ld-linux-x86-64.so.2 (0x00007f15fe1cf000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f15fb768000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f15fb53d000)
libicudata.so.48 => /usr/lib/x86_64-linux-gnu/libicudata.so.48
(0x00007f15fa1cd000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
(0x00007f15f9ec2000)
Is it possible to rebuild R without any shared library's? I am open to any
suggestions at this point.
Thanks for your help guys!
[[alternative HTML version deleted]]
Dirk Eddelbuettel
2015-May-31 13:17 UTC
[R-sig-Debian] Foreach %dopar% operator incorrectly load balancing
(Sorry for missing this earlier. It has been a busy month...)
On 11 May 2015 at 14:49, Sean Southard wrote:
| Dear R-SIG-Debian,
|
| I am using R version 3.1.2 with rstudio-server 0.98.113 on debian build
| 3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u1 x86_64 GNU/Linux.
|
| I often use the %dopar% operator in from the foreach package to run code in
| parallel. However, the only other use on the box seemingly installed a few
| items and suddenly %dopar% will use far more than the number of cores I am
| specifying and seems to load balance between all of them. The issue with
| this is that it doesn't actually seem to perform non-trivial tasks at all
| anymore.
|
| This is an example of testing code I've been using for testing the %dopar%
| loop.
|
| library(iterators)
| library(foreach)
| library(doParallel)
| library(Parallel)
| nCores <- 4
|
| cl <- makeCluster(nCores)
| registerDoParallel(cl)
| trials = 100000
|
| x <- iris[which(iris[,5] != "setosa"),c(1,5)]
| t2 <- system.time({
| r2 <- foreach(icount(trials), .combine=cbind) %dopar% {
| ind <- sample(100,100,replace= TRUE)
| results1 <- glm(x[ind,2]~x[ind,1],family=binomial(logit))
| coefficients(results1)
| }})[3]
|
| stopCluster(cl)
|
| Another interesting behavior is that I can now stop R code that should be
| running on the slave workers where as previously I had to use a kill command
| to handle the workers.
|
| I have checked the system logs and can't seem to find what's been
changed
| so it's unclear to me exactly how to proceed. It is almost reminiscent of
a
| change in the BLAS library but this behavior persists after recompiling R
| to not use the shared BLAS lib.
|
| here is the output from lsof -p 23618 | grep 'blas\|lapack'
|
| R 39781 smsouthard mem REG 8,17 3576576
| 1055038 /usr/local/lib/R/lib/libRlapack.so
| R 39781 smsouthard mem REG 8,17 655336
| 1572936 /usr/lib/libblas/libblas.so.3.0
Why do you have /usr/local/lib/R/lib/libRlapack.so ?
Dirk
|
| Output from R CMD ldd /usr/local/lib/R/bin/exec/R
|
| linux-vdso.so.1 (0x00007ffca59fd000)
| libR.so => /usr/local/lib/R/lib/libR.so (0x00007f15fdc30000)
| libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f15fd9f7000)
| libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
(0x00007f15fd7da000)
| libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f15fd431000)
| libblas.so.3 => /usr/lib/libblas.so.3 (0x00007f15fd190000)
| libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3
| (0x00007f15fce72000)
| libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f15fcb71000)
| libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0
| (0x00007f15fc933000)
| libreadline.so.6 => /lib/x86_64-linux-gnu/libreadline.so.6
(0x00007f15fc6e9000)
| liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f15fc4c6000)
| librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f15fc2bd000)
| libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f15fc0b9000)
| libicuuc.so.48 => /usr/lib/x86_64-linux-gnu/libicuuc.so.48
(0x00007f15fbd4a000)
| libicui18n.so.48 => /usr/lib/x86_64-linux-gnu/libicui18n.so.48
| (0x00007f15fb97e000)/lib64/ld-linux-x86-64.so.2 (0x00007f15fe1cf000)
| libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f15fb768000)
| libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f15fb53d000)
| libicudata.so.48 => /usr/lib/x86_64-linux-gnu/libicudata.so.48
| (0x00007f15fa1cd000)
| libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
(0x00007f15f9ec2000)
|
| Is it possible to rebuild R without any shared library's? I am open to any
| suggestions at this point.
|
| Thanks for your help guys!
|
| [[alternative HTML version deleted]]
|
| _______________________________________________
| R-SIG-Debian mailing list
| R-SIG-Debian at r-project.org
| https://stat.ethz.ch/mailman/listinfo/r-sig-debian
--
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
Maybe Matching Threads
- dopar parallel assignments
- object not found with %dopar% when using foreach
- . Package gamlss used inside foreach() and %dopar% fails to find an object (Nik Tuzov)
- Package gamlss used inside foreach() and %dopar% fails to find an object
- Package gamlss used inside foreach() and %dopar% fails to find an object