Reductions: Cumulative Values Updated by Each Iteration

These two examples show parfor-loops using reduction assignments. A reduction is an accumulation across iterations of a loop. The example on the left uses x to accumulate a sum across 10 iterations of the loop. The example on the right generates a concatenated array, 1:10. In both of these examples, the execution order of the iterations on the workers does not matter: while the workers calculate individual results for each iteration, the client properly accumulates and assembles the final loop result.

x = 0;
parfor i = 1:10
   x = x + i;
end
x
x =

    55
x2 = [];
n = 10;
parfor i = 1:n
   x2 = [x2, i];
end
x2
x2 =

     1     2     3     4     5     6     7     8     9    10

If the loop iterations operate in random sequence, you might expect the concatenation sequence in the example on the right to be nonconsecutive. However, MATLAB® recognizes the concatenation operation and yields deterministic results.

The next example, which attempts to compute Fibonacci numbers, is not a valid parfor-loop because the value of an element of f in one iteration depends on the values of other elements of f calculated in other iterations.

f = zeros(1,50);
f(1) = 1;
f(2) = 2;
parfor n = 3:50
    f(n) = f(n-1) + f(n-2);
end

When you are finished with your loop examples, clear your workspace and delete your parallel pool of workers:

clear
delete(gcp)

Related Examples

More About

Was this topic helpful?