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
的示例。
我在执行 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
的示例。