mc.cores = 1的mclapply()与lapply()是否相同?

时间:2018-06-26 10:22:38

标签: r parallel-processing mclapply

我知道我不应该嵌套并行运算符,但是我必须在代码中基本上嵌套两个mclapply()调用。 这是因为在我的代码中,我有一个函数(我们称其为foo())已经在其中使用了mclapply()。我想要的基本上是运行foo()的顺序版本的并行线程,做这样的事情:

mclapply(X, function(x) {
  foo(x, mc.cores = 1)
},
mc.cores = 4)

我可以仅使用mclapply()运行内部mc.cores = 1还是应该实现foo()的顺序版本?

换句话说:mclapply(..., mc.cores = 1)的行为与lapply(...)完全一样吗?在这种情况下,是否存在并行开销使程序变慢?

1 个答案:

答案 0 :(得分:7)

parallel::mclapply的源代码包含以下代码:

 ... 
 if (cores < 2L) 
        return(lapply(X = X, FUN = FUN, ...))
 ... 

因此,我相信答案是肯定的,您应该获得与直接使用lapply相同的结果,但是还会有一些额外的开销。我怀疑这会严重影响运行时间。

文档还指出:

  

详细信息

     

mclapply是lapply的并行版本,只要mc.cores> 1:   对于mc.cores == 1,它只是调用lapply。