Search code examples
matlabparformcmc

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


I'm having a trouble doing MCMC(Monte Carlo Markov Chain). So for MCMC, say I will run 10000 iterations, then within each iteration, I will draw some parameters. But in each iteration, I have some individual data which are independently, so I can do parfor. However, the problem is, it seems the time to finish one iteration just grows quickly as MCMC goes on. Soon, it's extremely time consuming. My question is: is there any efficient way to combine parfor and while loop?

I have the following pseudo-code:

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

Solution

  • Launching lots of separate parfor loops can be inefficient if each loop duration is small. Unfortunately, as you are probably aware, you cannot break out of a parfor loop. One alternative might be to use parfeval. The idea would be to make many parfeval calls (but not too many), and then you can terminate when you have sufficient results.

    This (fairly long) blog article shows an example of using parfeval in a situation where you might wish to terminate the computations early.