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