使用doParallel软件包时,registerDoParallel中的群集和内核之间有什么区别?

我的理解是正确的,因为它们在单台机器上是可互换的,并且我将获得以下相同的结果:

cl <- makeCluster(4)
registerDoParallel(cl)




registerDoParallel(cores = 4)


我看到的唯一区别是,必须使用makeCluster()明确停止stopCluster()

最佳答案

doParallel::registerDoParallel(<numeric>)的行为取决于操作系统,有关详细信息,请参见print(doParallel::registerDoParallel)

在Windows计算机上,

doParallel::registerDoParallel(4)


有效地做

cl <- makeCluster(4)
doParallel::registerDoParallel(cl)


即,它设置了四个在后台R会话中运行的(“ PSOCK”)工作程序。然后,%dopar%将基本上利用parallel::parLapply()机制。使用此设置,您确实需要担心全局变量和程序包都附加在每个工作程序上。

但是,在非Windows计算机上,

doParallel::registerDoParallel(4)


结果是%dopar%将利用parallel::mclapply()机械,而该机械又依赖于分叉的过程。由于使用了分叉,因此您不必担心全局变量和程序包。

关于r - doParallel,集群与核心,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28829300/

10-11 23:50