选项"核心"从包dolab并无用在Windows?

时间:2017-08-22 13:42:01

标签: r doparallel parallel-foreach

在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上运行的原因。

3 个答案:

答案 0 :(得分:6)

包装 doParallel 的维护者的回答,Rich Calaway:

  

Windows不支持分叉,这是并行(和doParallel)包使用“cores”参数的原因。因此,在Windows上,所有“核心”参数都设置为1.要在Windows上使用doParallel使用多个核心,请使用makeCluster创建多个工作集群cl,然后使用registerDoParallel(cl)。

所以这不是一个错误,而是一个非Windows功能,这是一个遗憾。

答案 1 :(得分:0)

您必须同时使用paralleldoParallel包来配置它。

  • 首先创建群集
  • 注册与

    并行
    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)

}