【问题标题】:MATLAB: Is it inefficient to use parfor (parallel for loop) within a while loop.MATLAB:在 while 循环中使用 parfor(并行 for 循环)是否效率低下。
【发布时间】:2015-09-15 21:01:58
【问题描述】:

我在执行 MCMC(蒙特卡洛马尔可夫链)时遇到了问题。所以对于 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

【问题讨论】:

  • 这个伪代码没有意义,因为您只需将 while 替换为 for 超过 10000 个条目。此外,除非您的迭代循环非常大,parfor 实际上会减慢您的代码速度,请参阅this answer

标签: matlab parfor mcmc


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-10
    • 2014-09-02
    • 2014-06-10
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    相关资源
    最近更新 更多