我最近将我的R BLAS框架改为vecLib,后者随Mac一起提供。在这样做之后,我遇到了R中并行包的问题。这是一个例子:
<div class="navscroll">
<div>Why arent these</div>
<div>Side by side</div>
<div>or sliding across the WHOLE navbar</div>
</div>
这个(Example)讨论说mclapply可能由于内存问题而返回NULL。虽然70x70矩阵不应该导致内存问题(我的工作空间是空的,垃圾收集),请注意60x60矩阵的问题消失了:
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
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
时没问题。如果我将BLAS切换回默认值,我也没有问题。此外,当我从终端使用R时没有问题。 使用多线程R(通过vecLib)在终端外使用mclapply的正确方法是什么?
mc.cores=1
答案 0 :(得分:0)
我发现这项工作的唯一方法是通过设置环境变量PX.Objects.AR
来强制vecLib只使用一个线程(参见this)。这并不完全令人满意,因为BLAS使用的线程总数和export VECLIB_MAXIMUM_THREADS=1
使用的核心数仍然可能少于可用核心的总数。
因此,我切换到openBLAS而不是vecLib。似乎openBLAS没有这个问题(虽然它可能在过去)。使用openBLAS,似乎我可以使用mclapply
在许多核心上运行某些内容,每个子进程尽可能使用多线程。