By default mex file cannot be parallel executed in Matlab, which will be a major bottleneck for Matlab program. Fortunately, there is a way to execute loop operations in parallel -- parfor. Matlab provides a good tutorial on parfor: Getting Started with parfor.
One tricky problem with parfor is dealing with reduction assignments, which means the value of some variables are updated by each iteration, such as assignment to an array/matrix indexed by loop index. My suggestion is to separate the loop into two parts: one part deal with non-reduction assignment with parfor
, and the other part do the reduction assignment with traditional for
loop.
If you cannot save all the parfor
-assigned variables in memory, then you must save them into mat file and load them in the next for-loop. In the parfor
-loop, command "save
" cannot be used directly because it violates the transparency(God knows what does it mean!). As an alternative, you can create a wrapper function of save
and call that function instead. FOr example:
Save the following as "parsave.m":
function parsave(fname, x,y)
save(fname, 'x', 'y')
end
Then run it with:
parfor ii = 1:4
x = rand(10,10);
y = ones(1,3);
parsave(sprintf('output%d.mat', ii), x, y);
end
References:
- parfor manual: http://www.mathworks.com/help/distcomp/parfor.html
- Getting Started with parfor: http://www.mathworks.com/help/distcomp/getting-started-with-parfor.html
- How do I use SAVE with a PARFOR loop: http://www.mathworks.com/support/solutions/en/data/1-D8103H/?product=DM&solution=1-D8103H