she*_*lih 2 parallel-processing foreach multithreading r
这就是令我困惑的事情:
当您根据内容安排一系列内容同质但在处理时间(事先未知)方面异质的任务时,foreach如何按顺序处理这些令人尴尬的并行任务?
例如,我注册了4个线程registerDoMC(cores=4),我有10个任务,第4个和第5个每个结果比其他所有组合更长.然后第一批显然是第1,第2,第3和第4批.当完成第1,第2和第3次时,foreach如何按顺序分配其他任务?这是随机的(从我的观察来看似乎如此)?如果事实证明某些任务需要花费更长的时间来处理,那么加速的好方法是什么?
我很抱歉没有提供具体的例子,因为我的实际项目/代码涉及更多......
任何经验/指导/指针都非常感谢!
所述DOMC包是一个包装周围mclapply,并且默认mclapply preschedules任务,这意味着它将该任务成组,或组块.扭曲是它预先安排这些任务循环.因此,如果您有10个任务和4个工作人员,则将按如下方式分配任务:
如果你很幸运,即使任务的长度非常不同,这也会给出合理的性能,但你可以在doMC中禁用预先调度,如下所示:
opts <- list(preschedule=FALSE)
results <- foreach(i=1:10, .options.multicore=opts) %dopar% {
# ...
}
Run Code Online (Sandbox Code Playgroud)
这将导致doMC使用该mc.preschedule=FALSE选项调用mclapply,以便在完成上一个任务时将任务分配给工作人员,这自然是负载平衡.