mclapply与vecLib发生冲突

时间:2018-03-22 23:21:17

标签: r multithreading mclapply rparallel

我最近将我的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

1 个答案:

答案 0 :(得分:0)

我发现这项工作的唯一方法是通过设置环境变量PX.Objects.AR来强制vecLib只使用一个线程(参见this)。这并不完全令人满意,因为BLAS使用的线程总数和export VECLIB_MAXIMUM_THREADS=1使用的核心数仍然可能少于可用核心的总数。

因此,我切换到openBLAS而不是vecLib。似乎openBLAS没有这个问题(虽然它可能在过去)。使用openBLAS,似乎我可以使用mclapply在许多核心上运行某些内容,每个子进程尽可能使用多线程。