0

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
Ruby
  • 284
  • 1
  • 5
  • 18
  • This pseudo-code makes no sense, since you'd just replace the `while` with a `for` over 10000 entries. Besides, unless your iterations *within* the loop are very big, `parfor` will actually slow your code down, see [this answer](http://stackoverflow.com/questions/32146555/saving-time-and-memory-using-parfor-in-matlab/32146700#32146700) – Adriaan Sep 15 '15 at 21:13

1 Answers1

0

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.

Edric
  • 23,676
  • 2
  • 38
  • 40