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

标签 r parallel-processing mcmc

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

我正在使用 MCMCprobitMCMCpack用于 probit 模型和并行处理的包我正在使用 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

这是我的并行运行代码:
#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))

以及来自 system.time 的结果:
   user  system elapsed 
   0.26    0.53 1097.25 

任何想法为什么并行进程的用户和系统时间会短得多,但耗时却长得多?我在更短的 MCMC 运行(100 和 1000)中尝试过,结果是一样的。我假设我在某个地方犯了错误。

这是我的电脑规范:
  • R 3.1.3
  • 8 GB 内存
  • Windows 7 64 位
  • Intel Core i5 2520M CPU,双核
  • 最佳答案

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

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

    关于r - 并行和串行处理的系统时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30669328/

    相关文章:

    batch-file - 并行运行相同批处理文件的行为

    parallel-processing - 你如何打破并行循环?平行休息

    python - PyMC3 多元混合模型 : Constraining components to be non-empty

    python - pymc 对多个变量进行观察

    r - 如何在 R 中生成向量的所有可能的连续 n 元组?

    r - ifelse 函数中的动态变量名称

    函数可以在主应用程序中独立运行吗? [OpenMP]

    python - 我应该如何在 PyMC 中使用 @pm.stochastic?

    r - 在 data.table 中获取列差异

    r - R中不同的封闭环境、函数环境等