Переменная цикла задает индексное значение цикла для каждой итерации. Вы устанавливаете его в первой строке оператора 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