在Linux计算机上,doParallel's vignette之后,我使用doParallel::registerDoParallel()
,然后使用options(cores = N)
,其中N
是我要用{{1}的核心数}}。
我可以与foreach
验证当我更改选项foreach::getDoParWorkers()
时,它会自动更改cores
使用的核心数。
然而,在Windows 10(最新版本的R和软件包)上,此选项似乎没有任何效果,因为更改其值并不会更改foreach
的值(这是调用foreach::getDoParWorkers()
时在3
初始化。
可重复的例子:
doParallel::registerDoParallel()
这是一个错误吗?不能在Windows上运行吗?
编辑:我知道如何以不同方式注册并行后端。目标是使用doParallel::registerDoParallel()
options(cores = 1)
foreach::getDoParWorkers()
options(cores = 2)
foreach::getDoParWorkers()
options(cores = 4)
foreach::getDoParWorkers()
注册一次(在加载我的包时),然后使用一个选项来更改使用的核心数。这就是我希望它也能在Windows上运行的原因。
答案 0 :(得分:6)
包装 doParallel 的维护者的回答,Rich Calaway:
Windows不支持分叉,这是并行(和doParallel)包使用“cores”参数的原因。因此,在Windows上,所有“核心”参数都设置为1.要在Windows上使用doParallel使用多个核心,请使用makeCluster创建多个工作集群cl,然后使用registerDoParallel(cl)。
所以这不是一个错误,而是一个非Windows功能,这是一个遗憾。
答案 1 :(得分:0)
您必须同时使用parallel
和doParallel
包来配置它。
注册与
并行library(parallel)
library(doParallel)
cluster <- makeCluster(3)
registerDoParallel(cluster)
foreach::getDoParWorkers()
[1] 3
答案 2 :(得分:0)
如何停止群集并创建新流程?
例如:
stops<-function(cl,n){
stopCluster(cl)
cl<-makeCluster(n)
doParallel::registerDoParallel(cl)
}