我有N个任务,希望在R中的M个内核之间并行化。这些任务执行所需的时间差异很大。幸运的是,我粗略地指出了哪些任务将很慢,哪些任务将很快。我还有一个进度条,它以完成的任务数递增。
我想优化任务的顺序,以便:
- 总计算时间最小化
- 进度条代表剩余时间,而不是剩余任务。
举一个更实际的例子:
do_task <- function(x){
Sys.sleep(x ** 2)
}
tasks <- 1:10
cl <- parallel::makecluster(4)
pbapply::pboptions(use_lb = TRUE)
pbapply::pblapply(tasks,do_task,cl = cl)
parallel::stopCluster(cl)
rm(cl)
总处理时间为6分32秒,进度条开始时移动很快,但是随着任务花费的时间越来越长,其移动速度非常慢。
或从最长到最短:
tasks <- 10:1
这需要2分20秒,因此要快得多。但是进度条开始时非常缓慢,然后突然加速。
我还尝试了交错任务。
tasks <- c(10,1,9,2,8,3,7,4,6,5)
这需要3分20秒,不是最快的时间,但是确实提供了更加平衡的进度条。