每次我想在R中使用foreach()时都必须注册DoParallel()和stopCluster()吗?

时间:2018-10-25 03:11:52

标签: r parallel-processing doparallel

在运行R中的并行功能:stopCluster()之后,我读到您必须使用foreach()。但是,我可以摆脱registerDoParallel()然后运行foreach()不需要使用stopCluster()就可以了。那我是否需要stopCluster()

不使用stopCluster()意味着您的核心已被当前任务占用吗?因此,如果我使用并行编程,并且它们之间只有一小部分单核顺序任务,那么我不需要stopCluster()吗?我了解通过并行设置还需要大量的开销时间。

1 个答案:

答案 0 :(得分:1)

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

parallel::stopCluster()doParallel::registerDoParallel()是关闭工作人员的安全方法。从帮助页面?stopCluster

  

优良作法是通过调用“ stopCluster”来关闭工作程序:但是,一旦工作程序正在侦听命令的套接字不可用,工作程序将自行终止,如果主R会话完成(或加工模具)。

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