exponenta event banner

Переменные цикла

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

См. также

Связанные темы