User`s guide

2 Parallel for-Loops (parfor)
2-48
Convert Nested for-Loops to parfor
A typical use case for nested loops is to step through an array using one loop variable to
index through one dimension, and a nested loop variable to index another dimension. The
basic form looks like this:
X = zeros(n,m);
for a = 1:n
for b = 1:m
X(a,b) = fun(a,b)
end
end
The following code shows an extremely simple example, with results you can easily view.
M1 = magic(5);
for x = 1:5
for y = 1:5
M2(x,y) = x*10 + y + M1(x,y)/10000;
end
end
M2
Although you can parallelize either of the nested loops, you cannot run both in parallel.
This is because the workers in a parallel pool cannot start or access further parallel
pools.
If the loop counted by x is converted to a parfor-loop, then each worker in the pool
executes the nested loops using the y loop counter, and the y loops themselves cannot run
as a parfor on each worker. So if you convert only the outer loop to a parfor, it looks
like this:
M1 = magic(5);
parfor a = 1:5
for b = 1:5
M2(a,b) = a*10 + b + M1(a,b)/10000;
end
end
M2
Should you consider converting only the inner loop to a parfor? While it might be
programmatically simpler in your case to do this, it might not be advisable. The
converted code looks like this: