r - 通过 mc.cores 与 makePSOCKcluster 设置内核?
问题描述
makePSOCKcluster
我想知道在 foreach 循环中设置 R 使用的核心数量和明确使用之间有什么区别?makePSOCKcluster
我应该在这两种情况下单独设置,还是在足够的时候这样做?
cl <- makePSOCKcluster(max(1, detectCores() - 1))
registerDoParallel(cl)
和
mcoptions <- list( preschedule=FALSE, mc.cores = max(1,detectCores()-1) )
stream = foreach(i=1:NROW(stream_sponsored), .inorder=FALSE,
.combine=rbind,
.options.multicore=mcoptions) %dopar% {
#do something
}
解决方案
来自 [ https://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf][1]
'“核心”选项允许您临时覆盖用于单个 foreach 操作的工人数量。这比必须重新注册 doParallel 更方便。虽然如果注册 doParallel 时没有指定“cores”的值,您也可以使用 options 函数动态更改此值:
options(cores=2)
getDoParWorkers()
options(cores=3)
getDoParWorkers()
如果您在注册 doParallel 时确实指定了内核数,则“cores”选项将被忽略:
registerDoParallel(4)
options(cores=2)
getDoParWorkers()
如您所见,有许多选项可用于控制并行使用的工作人员数量,但默认行为通常会满足您的需求。
因此,简而言之,如果您调用一次 foreach,则无需在 foreach 中指定核心。但是,如果您要调用两个或多个具有不同内核的 foreach,则无需在 registerDoParallel 中指定内核
推荐阅读
- sql-server - SQL Server:在数据库中搜索所有具有 NULL 值的列
- android - AndroidX.Test ActivityScenario: java.lang.AssertionError: Activity 永远不会变为请求状态“[RESUMED]”(上一个生命周期转换 =“STOPPED”)
- pdf - 将 ColorSpace 添加到资源会导致流关闭
- outlook - 如何在邮件中输出 UTF-8 格式和换行符
- netlogo - 如何让海龟在规定的繁殖季节繁殖一次?
- auth0 - 我可以将 checkSession 与 SAML 一起使用吗?
- angular - 角 | Ionic 3:如何根据条件隐藏和更改按钮的宽度?
- c++ - c++异常:抛出std::exception
- c++ - 通过引用传递隐式调用复制ctor以获得不兼容的参数?
- java - ini4j INI 密钥长度 > 80 个字符