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

R 并行和串行处理的系统时间,r,parallel-processing,mcmc,R,Parallel Processing,Mcmc,我正在运行一个贝叶斯MCMC概率模型,并试图并行实现它。在比较并行和串行时,我得到了关于我的机器性能的令人困惑的结果。我没有很多做并行处理的经验,所以我可能做得不对 对于probit模型,我在mcmcpcpack包中使用MCMCprobit,对于并行处理,我在parallel包中使用parlappy 这是我的串行运行代码,以及来自system.time的结果: system.time(serial<-MCMCprobit(formula=econ_model,data=mydata,mcm

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

对于probit模型,我在
mcmcpcpack
包中使用
MCMCprobit
,对于并行处理,我在
parallel
包中使用
parlappy

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

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

   user  system elapsed 
 657.36   73.69  737.82
   user  system elapsed 
   0.26    0.53 1097.25 
你知道为什么并行进程的用户和系统时间会短得多,但运行时间却长得多吗?我在较短的MCMC运行(100和1000)中尝试了它,故事是一样的。我想我在什么地方犯了个错误

以下是我的电脑规格:

  • R 3.1.3
  • 8GB内存
  • Windows 7 64位
  • Intel Core i5 2520M CPU,双核

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


我认为这解释了
system.time
报告的长时间运行。“用户”和“系统”时间很短,因为它们是主进程的时间,在执行
parlappy
时使用很少的CPU时间:实际CPU时间由工作人员使用,而
system.time
没有报告。谢谢,我没有意识到我必须做mcmc/cores.@robin.datadrivers我不确定这是否会给你想要的结果,但你需要某种方法将问题分解成更小的部分,否则并行执行没有任何好处。我正在尝试进行10000次运行,并希望更快。我想你给每个核心发送5000的解决方案就是我想要的,除非我解释错了,或者我应该知道还有其他事情发生。
   user  system elapsed 
   0.26    0.53 1097.25