I want to parallelize block2 for each block1 and parallerlize outer loop too.
previous code:
for i=rangei <block1> for j=rangej <block2> dependent on <block1> end end
changed code:
parfor i=rangei <block1> parfor j=rangej <block2> dependent on <block1> end end
how much efficient can this get and will the changed code do the right thing? Is the changed code valid for my requirements?
In MATLAB, parfor
cannot be nested. Which means, in your code, you should replace one parfor
by a for
(the outer loop most likely). More generally, I advise you to look at this tutorial on parfor.
parfor
cannot be nested. In nested parfor
statements, only the outermost call to parfor
is paralellized, which means that the inner call to parfor
only adds unnecessary overhead.
To get high efficiency with parfor
, the number of iterations should be much higher than the number of workers (or an exact multiple in case each iteration takes the same time), and you want a single iteration to take more than just a few milliseconds to avoid feeling the overhead from paralellization.
parfor i=rangei
<block1>
for j=rangej
<block2> dependent on <block1>
end
end
may actually fit that description, depending on the size of rangei
. Alternatively, you may want to try unrolling the nested loop into a single loop, where you iterate across linear indices.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With