在debian build 3.2.0-4-amd64#1 SMP Debian 3.2.68-1 + deb7u1 x86_64 GNU / Linux上使用R版3.1.2和rstudio-server 0.98.113。
我经常使用%dopar%
包中的foreach
运算符来并行运行代码。但是,盒子上唯一的其他用途似乎安装了一些项目并突然%dopar%
将使用远远超过我指定的核心数量,并且似乎在所有这些之间实现负载平衡。这个问题是它实际上似乎根本不再执行非平凡的任务。
这是测试我用于测试%dopar%
循环的代码的示例。
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)
另一个有趣的行为是我现在可以停止应该在slave worker上运行的R代码,而之前我必须使用kill
命令来处理worker。
我检查了系统日志,似乎无法找到已更改的内容,因此我不确定如何继续操作。它几乎让人联想到BLAS库中的更改,但在重新编译R以不使用共享BLAS库后,此行为仍然存在。
这是lsof -p 23618 | grep 'blas\|lapack'
R 39781 mem REG 8,17 3576576 1055038 /usr/local/lib/R/lib/libRlapack.so
R 39781 mem REG 8,17 655336 1572936 /usr/lib/libblas/libblas.so.3.0
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)
是否可以在没有任何共享库的情况下重建R? 我现在对任何建议持开放态度。
感谢您的帮助!