R中不等任务和进度条的最优负载平衡
我有N个任务,我希望在R中的M个核之间并行。这些任务在执行所需的时间上有很大差异。幸运的是,我大致了解了哪些任务会比较慢,哪些任务会比较快。我还有一个进度条,它根据完成的任务数量递增 我希望优化任务的顺序,以便:R中不等任务和进度条的最优负载平衡,r,performance,optimization,parallel-processing,load-balancing,R,Performance,Optimization,Parallel Processing,Load Balancing,我有N个任务,我希望在R中的M个核之间并行。这些任务在执行所需的时间上有很大差异。幸运的是,我大致了解了哪些任务会比较慢,哪些任务会比较快。我还有一个进度条,它根据完成的任务数量递增 我希望优化任务的顺序,以便: 总计算时间被最小化 进度条代表剩余的时间,而不是剩余的任务 举一个更实际的例子: do_task <- function(x){ Sys.sleep(x ** 2) } tasks <- 1:10 cl <- parallel::makeCluster(4)
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)
do_task进一步研究发现
这表明pbapply中的负载平衡很差。他们举了一个我已经改编的例子
pb <- utils::txtProgressBar(max = 10, style = 3)
progress <- function(n) utils::setTxtProgressBar(pb, n)
opts <- list(progress = progress)
cl <- parallel::makeCluster(4)
doSNOW::registerDoSNOW(cl)
boot <- foreach::foreach(i = tasks, .options.snow = opts)
res_all <- foreach::`%dopar%`(boot, do_task(i))
parallel::stopCluster(cl)
pb进一步研究发现
这表明pbapply中的负载平衡很差。他们举了一个我已经改编的例子
pb <- utils::txtProgressBar(max = 10, style = 3)
progress <- function(n) utils::setTxtProgressBar(pb, n)
opts <- list(progress = progress)
cl <- parallel::makeCluster(4)
doSNOW::registerDoSNOW(cl)
boot <- foreach::foreach(i = tasks, .options.snow = opts)
res_all <- foreach::`%dopar%`(boot, do_task(i))
parallel::stopCluster(cl)
pb如果你对时间的估计是好的,那么按时间递减排序总是最快的。如果你对时间的估计是好的,那么按时间递减排序总是最快的。
pb <- utils::txtProgressBar(max = 10, style = 3)
progress <- function(n) utils::setTxtProgressBar(pb, n)
opts <- list(progress = progress)
cl <- parallel::makeCluster(4)
doSNOW::registerDoSNOW(cl)
boot <- foreach::foreach(i = tasks, .options.snow = opts)
res_all <- foreach::`%dopar%`(boot, do_task(i))
parallel::stopCluster(cl)