首页 > 解决方案 > 每次我想在 R 中使用 foreach() 时,是否必须注册 DoParallel() 和 stopCluster()?

问题描述

我读到你必须stopCluster()在运行并行函数后使用:foreach()在 R 中。但是,我可以侥幸逃脱,registerDoParallel()然后在foreach()不使用stopCluster(). 那我需要stopCluster()还是不需要?

使用不stopCluster()意味着你的核心被你当前的任务占用了吗?因此,如果我使用并行编程,其间只有一点点单核顺序任务,那么我不需要stopCluster()吗?我知道设置并行也有大量的开销时间消耗。

标签: rparallel-processingdoparallel

解决方案


parallel::makeCluster()doParallel::registerDoParallel()创建一组并行运行的 R 副本。这些副本称为workers

parallel::stopCluster()并且doParallel::stopImplicitCluster()是关闭工人的安全方法。从帮助页面?stopCluster

通过调用“stopCluster”来关闭工作人员是一种很好的做法:但是一旦他们正在侦听命令的套接字变得不可用,工作人员将自行终止,如果主 R 会话完成(或它的进程终止),它应该这样做.

实际上,未使用的工作人员的 CPU 使用率通常可以忽略不计。但是,如果工作人员加载大型 R 对象,例如大型数据集,他们可能会使用大部分内存,因此会减慢计算速度。在这种情况下,关闭未使用的工作人员会更有效。


推荐阅读