首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中异构任务的并行化: foreach,doMC,doParallel

R中异构任务的并行化: foreach,doMC,doParallel
EN

Stack Overflow用户
提问于 2016-11-13 21:03:16
回答 1查看 499关注 0票数 3

让我困惑的是:

当您安排一组任务序列,这些任务在内容上是一致的,但在处理时间上(事先不知道)是异构的,那么foreach是如何依次处理这些令人尴尬的并行任务的呢?

例如,我注册了4个线程( registerDoMC(cores=4) ),我有10个任务,第4和第5个任务的长度超过了所有其他线程的总和。第一批明显是第一、第二、第三和第四批。当第一、第二和第三项任务完成时,领班如何按顺序分配其他任务?这是随机的(从我的观察来看)?如果一些任务需要更长的时间来处理,那么什么是加快速度的好方法呢?

我很抱歉没有提供具体的例子,因为我的实际项目/代码涉及更多.

任何经验/指导/指示都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-14 00:49:44

doMC包是围绕mclapply的包装器,默认情况下,mclapply预设任务,这意味着它将任务分成组或块。扭转的是,它预先安排了那些任务--循环往复。因此,如果您有10项任务和4名员工,则任务分配如下:

  • 工作人员1:任务1、5、9
  • 工作人员2:任务2、6、10
  • 工作人员3:任务3、任务7
  • 工作人员4:任务4、8

如果幸运的话,这将提供合理的性能,即使任务的长度非常不同,但您可以在doMC中禁用以下预置操作:

代码语言:javascript
复制
opts <- list(preschedule=FALSE)
results <- foreach(i=1:10, .options.multicore=opts) %dopar% {
    # ...
}

这将导致doMC使用mc.preschedule=FALSE选项调用mclapply,以便在工人完成以前的任务(这是自然的负载平衡)时将任务分配给他们。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40578784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档