并行和串行处理的系统时间

rob*_*ers 6 parallel-processing r mcmc

我正在运行贝叶斯MCMC概率模型,我正在尝试并行实现它.在比较并行和串行时,我的机器性能令人困惑.我没有很多做并行处理的经验,所以有可能我做得不对.

我正在使用probit模型MCMCprobitMCMCpack包,以及我parLapplyparallel包中使用的并行处理.

这是我的串行运行代码,结果来自system.time:

system.time(serial<-MCMCprobit(formula=econ_model,data=mydata,mcmc=10000,burnin=100))

   user  system elapsed 
 657.36   73.69  737.82
Run Code Online (Sandbox Code Playgroud)

这是我的并行运行代码:

#Setting up the functions for parLapply:
probit_modeling <- function(...) {
  args <- list(...)
  library(MCMCpack)
  MCMCprobit(formula=args$model, data=args$data, burnin=args$burnin, mcmc=args$mcmc, thin=1)
}

probit_Parallel <- function(mc, model, data,burnin,mcmc) {
  cl <- makeCluster(mc)
  ## To make this reproducible:
  clusterSetRNGStream(cl, 123)
  library(MCMCpack) # needed for c() method on master
  probit.res <- do.call(c, parLapply(cl, seq_len(mc), probit_modeling, model=model, data=data, 
                                        mcmc=mcmc,burnin=burnin))
  stopCluster(cl)
  return(probit.res)
}


system.time(test<-probit_Parallel(model=econ_model,data=mydata,mcmc=10000,burnin=100,mc=2))
Run Code Online (Sandbox Code Playgroud)

结果来自system.time:

   user  system elapsed 
   0.26    0.53 1097.25 
Run Code Online (Sandbox Code Playgroud)

任何想法为什么用户和系统时间对于并行过程来说会短得多,但是经过的时间要长得多?我在较短的MCMC运行(100和1000)上尝试了它,故事是一样的.我假设我在某个地方犯了错误.

这是我的电脑规格:

  • R 3.1.3
  • 8 GB内存
  • Windows 7 64位
  • 英特尔酷睿i5 2520M CPU,双核

Ste*_*ton 2

在我看来,两个工作人员所做的工作与顺序版本中执行的工作一样多。工作人员应该只执行总工作的一小部分,以便比代码的顺序版本执行得更快。mcmc在本例中,这可以通过除以工作人员数量来完成,尽管这可能不是您真正想要做的。

我认为这解释了 报告的漫长的流逝时间system.time。“用户”和“系统”时间很短,因为它们是主进程的时间,在执行时使用很少的 CPU 时间parLapply:真正的 CPU 时间由工作人员使用,而未报告system.time