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-loop, поскольку значение элемента 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)