Переменная цикла определяет значение индекса цикла для каждой итерации. Вы устанавливаете его в первой строке parfor заявление.
parfor p=1:12Для значений во всех итерациях переменная цикла должна вычисляться по возрастанию до последовательных целых чисел. Каждая итерация не зависит от всех остальных, и каждая имеет собственное значение индекса цикла.
| Обязательное (статическое) назначение переменной цикла не допускается. |
Это ограничение необходимо, потому что изменение p в parfor тело не может гарантировать независимость итераций.
В этом примере предпринимается попытка изменить значение переменной цикла. p в теле цикла и, таким образом, является недопустимым.
parfor p = 1:n p = p + 1; a(p) = i; end
| Обязательный (статический): индексирование или подстрочная переменная цикла невозможна. |
Это ограничение необходимо, поскольку ссылка на поле переменной цикла не может гарантировать независимость итераций.
Следующий код пытается сослаться на поле (b) переменной цикла (p), как если бы это была структура. Обе строки в цикле недопустимы.
parfor p = 1:n p.b = 3 x(p) = fun(p.b) end
Аналогично, следующий код является недопустимым, поскольку он пытается индексировать переменную цикла как матрицу 1 к 1:
parfor p = 1:n x = p(1) end
Обязательный (статический): нельзя использовать приращение диапазона в for- контуры, вложенные в parfor-луп. |
Рассмотрим следующий пример:
N = 10; T = 3; A = zeros(N,T); B = zeros(N,T);
Следующий код недопустим.
parfor i = 1:1:N for t = 1:1:T A(i,t) = t; end end
Следующий код действителен.
parfor i = 1:1:N for t = 1:T B(i,t) = t; end end