for- Циклы В parfor- ЦиклыВ некоторых случаях необходимо изменить код, чтобы преобразовать for- циклы к parfor- циклы. В этом примере показано, как диагностировать и зафиксировать parfor- проблемы цикла с помощью вложенного простого for- цикл. Запустите этот код в MATLAB® и исследуйте результаты.
for x = 0:0.1:1 for y = 2:10 A(y) = A(y-1) + y; end end
Чтобы ускорить код, попытайтесь преобразовать for- циклы к parfor- циклы. Заметьте, что этот код производит ошибки.
parfor x = 0:0.1:1 parfor y = 2:10 A(y) = A(y-1) + y; end end
В этом случае вы не можете просто преобразовать for- циклы к parfor- циклы без модификации. Чтобы сделать эту работу, необходимо изменить код в нескольких местах. Чтобы диагностировать проблемы, ищите сообщения Анализатора кода в редакторе MATLAB.

Этот код показывает типичные проблемы, когда вы пытаетесь преобразовать for- циклы к parfor- циклы.

Чтобы решить эти задачи, необходимо изменить код, чтобы использовать parfor. Тело parfor- цикл выполняется в параллельном пуле с помощью нескольких работников MATLAB в недетерминированном порядке. Поэтому необходимо удовлетворить эти требования для тела parfor- цикл:
Тело parfor- цикл должен быть независимым. Одна итерация цикла не может зависеть от предыдущей итерации, потому что итерации выполняются параллельно в недетерминированном порядке. В примере,
A(y) = A(y-1) + y;
parfor. Для следующих шагов имея дело с проблемами независимости смотрите Убедитесь, что Итерации цикла parfor Независимы.Вы не можете вложить a parfor- цикл в другом parfor- цикл. Пример имеет два вложенных for- циклы, и поэтому можно заменить только один for- цикл с a parfor- цикл. Вместо этого можно вызвать функцию, которая использует a parfor- цикл в теле другого parfor- цикл. Однако такой вложенный parfor- циклы не приносят вам вычислительной пользы, потому что все рабочие используются, чтобы параллелизировать наиболее удаленный цикл. Для справки, имеющей дело с вложенными циклами, смотрите Вложенный parfor и циклы for и Другие parfor Требования.
parfor- переменные цикла должны быть последовательными увеличивающимися целыми числами. В примере,
parfor x = 0:0.1:1parfor здесь. Можно решить эту задачу путем изменения значения переменной цикла к целочисленным значениям, требуемым алгоритмом. Для следующих шагов в поиске и устранении неисправностей parfor- переменные цикла, смотрите Убедитесь, что Переменные цикла parfor Являются Последовательными Увеличивающимися Целыми числами.Вы не можете убежать из a parfor- цикл рано, как вы можете в a for- цикл. Не включайте возврат или оператор завершения в теле вашего parfor- цикл. Без коммуникации другие экземпляры MATLAB, запускающие цикл, не знают, когда остановиться. Как альтернатива, рассмотреть parfeval.
Если у вас все еще есть проблемы при преобразовании for- циклы к parfor- циклы, смотрите Переменные Поиска и устранения неисправностей в циклах parfor.
Совет
Можно профилировать a parfor- циклы с помощью tic и toc измерять ускорение по сравнению с соответствием for- цикл. Использование ticBytes и tocBytes измеряться, сколько данных передается и от рабочих в параллельном пуле. Для получения дополнительной информации и примеры, смотрите Профильные циклы parfor.