减少在R中运行并行任务时的开销

时间:2019-01-29 16:08:23

标签: r parallel-processing overhead

我正在使用parallel软件包来尝试优化某种算法以节省计算时间(我有8核处理器)。

线性解决方案大约需要18秒,但是由于我已经运行了很多次,因此我们假设它值得优化。而且,该算法可以简化为5个相似任务的描述,因此适合并行化。

不幸的是,并行解决方案与线性解决方案花费的时间相同。

在日志中,我发现5个任务从4.6到4.8秒耗时,因此我不明白为什么并行解决方案如此之慢。

这是并行化算法的代码(对不起,很难提供reprex):

library(parallel)
library(tidyverse)
library(tictoc)

myFunction=function(arg, as.num){
  tic(arg)
  rtn = ... #some computing
  toc() #print around 4.5 secs, whatever the task
  return(rtn)
}

tic("parallel")
parallel.clusters = makeCluster(detectCores() - 1, outfile="parallel.log.txt")
clusterEvalQ(parallel.clusters, library(survival)) %>% invisible
clusterExport(parallel.clusters, c("printZphProblem", "rownames_to_column", 
                                 "%>%", "rcs", "tic", "toc", "extract2", 
                                 "filter"))
x=parSapply(parallel.clusters,
            X=list(q = list(arg="q", as.num=F), 
                   med = list(arg="num", as.num=F),
                   trend = list(arg="q", as.num=T),
                   cont = list(arg="cont", as.num=F),
                   cont.std = list(arg="cont.std", as.num=F)),
            FUN=function(x){myFunction(x$arg, x$as.num)},
            simplify=F)
stopCluster(parallel.clusters)
toc()
# parallel: 18.42 sec elapsed

关于SO的一些答案都在讨论开销(here),但通常会说,如果任务是几秒钟(就是这样),那应该不成问题。

如果减速确实与开销有关,那么如何减少开销呢?否则,我在做什么错了?

0 个答案:

没有答案