我最近将我的 R BLAS 框架更改为 Mac 附带的 vecLib。这样做之后,我在 R 中的并行包遇到了问题。这是一个例子:
library(parallel)
xx1<-matrix(runif(2*70),ncol=2)
mcl.test<-mclapply(1:2,function(i) sum(tcrossprod(xx1[,i])),mc.cores = 2)
mcl.test
[[1]]
NULL
[[2]]
NULL
这个(mclapply 随机返回 NULL)讨论说 mclapply 可能由于内存问题而返回 NULL。虽然 70x70 矩阵不应导致内存问题(否则我的工作区是空的,已被垃圾收集),但请注意,对于 60x60 矩阵,问题就会消失:
xx2<-matrix(runif(2*60),ncol=2)
mcl.test<-mclapply(1:2,function(i) sum(tcrossprod(xx2[,i])),mc.cores = 2)
mcl.test
[[1]]
[1] 754.1371
[[2]]
[1] 889.7769
我什么时候都没有问题mc.cores=1
。如果我将 BLAS 切换回默认值,我也没有问题。此外,当我从终端使用 R 时没有问题。 使多线程 R(通过 vecLib)在终端外与 mclapply 一起工作的正确方法是什么?
sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.6
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] parallel stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.4.3 tools_3.4.3