MATLAB:在while循环中使用parfor(parallel for loop)效率低吗?

MATLAB: Is it inefficient to use parfor (parallel for loop) within a while loop.

我在执行 MCMC(Monte Carlo 马尔可夫链)时遇到了问题。所以对于 MCMC,假设我将 运行 10000 次迭代,然后在每次迭代中,我将绘制一些参数。但是在每次迭代中,我都有一些独立的个人数据,所以我可以做 parfor。然而,问题是,完成一次迭代的时间似乎随着 MCMC 的进行而快速增长。很快,这非常耗时。 我的问题是:有什么有效的方法可以结合 parfor 和 while 循环吗?

我有以下伪代码:

r=1;
while r<10000
parfor i=1:I
  make draws from proposal distribution 
  calculate acceptance rate  
  accept or reject current draw
end

r=r+1;
end

如果每个循环持续时间很短,则启动大量单独的 parfor 循环可能效率低下。不幸的是,正如您可能知道的那样,您不能 break 脱离 parfor 循环。一种替代方法可能是使用 parfeval。这个想法是进行多次 parfeval 调用(但不要太多),然后当你有足够的结果时你可以终止。

This (fairly long) blog article 显示了在您可能希望提前终止计算的情况下使用 parfeval 的示例。