使用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/