Использование parfor-Циклы для назначений сокращения

Эти два примера показывают parfor-циклы с использованием назначений сокращений. Уменьшение является накоплением через итерации цикла. Пример слева использует x для накопления суммы через 10 итераций цикла. Пример справа генерирует конкатенированный массив, 1:10. В обоих этих примерах порядок выполнения итераций на работниках не имеет значения: в то время как рабочие вычисляют отдельные результаты для каждой итерации, клиент правильно накапливает и собирает конечный результат цикла.

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

Если итерации цикла работают в недетерминированной последовательности, можно ожидать, что последовательность конкатенации в примере справа будет неконсективной. Однако MATLAB® распознает операцию конкатенации и приводит к детерминированным результатам.

Следующий пример, который пытается вычислить числа Фибоначчи, не является допустимым parfor-цикл, потому что значение элемента f в одной итерации зависит от значений других элементов f вычисляется в других итерациях.

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

Когда вы закончите с примерами цикла, очистите рабочую область и удалите свой параллельный пул работников:

clear
delete(gcp)

Похожие темы