r语言 - mc.cores = 1 的 mclapply() 与 lapply() 相同吗?



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

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

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

换句话说:mclapply(..., mc.cores = 1)的行为是否完全像lapply(...)?在这种情况下,是否有并行开销减慢程序的速度?

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

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

所以我相信答案是肯定的,你应该得到与直接使用lapply相同的结果,但也有一些额外的开销。我怀疑这会对运行时产生非常显着的影响。

该文件还指出:

McLapply是lapply的并行化版本,前提是mc.cores> 1: 对于 mc.cores == 1,它只是调用 lapply。

最新更新