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-loop выполняется в параллельном пуле с использованием нескольких работников MATLAB в недетерминированном порядке. Следовательно, вы должны соответствовать этим требованиям для тела parfor-loop:
Тело parfor-loop должен быть независимым. Одна итерация цикла не может зависеть от предыдущей итерации, поскольку итерации выполняются параллельно в недетерминированном порядке. В примере:
A(y) = A(y-1) + y;
parfor. Дальнейшие шаги по решению проблем независимости см. в разделе Обеспечение независимости итераций Parfor-Loop.Нельзя вложить parfor-закольцовывание внутри другого parfor-луп. В примере есть два вложенных for-циклы, поэтому можно заменить только один for-закольцовывание с помощью parfor-луп. Вместо этого можно вызвать функцию, использующую parfor-закольцовывание внутри тела другого parfor-луп. Однако такие вложенные parfor-циклы не дают вычислительной выгоды, так как все работники используются для параллелизма самого внешнего цикла. Дополнительные сведения о вложенных контурах см. в разделах Вложенные контуры для и для контуров и Другие контуры для требований.
parforПеременные -loop должны быть последовательными увеличивающимися целыми числами. В примере:
parfor x = 0:0.1:1parfor здесь. Эту проблему можно решить, изменив значение переменной цикла на целочисленные значения, требуемые алгоритмом. Для выполнения следующих действий по устранению неполадок parfor-loop переменные, см. раздел Убедитесь, что переменные parfor-Loop являются последовательными увеличивающимися целыми числами.Вы не можете вырваться из parfor-закольцовывать рано, как можно в for-луп. Не включать оператор возврата или разрыва в тело parfor-луп. Без связи другие экземпляры MATLAB, выполняющие цикл, не знают, когда следует остановиться. В качестве альтернативы рассмотрим parfeval.
Если по-прежнему возникают проблемы с преобразованием for-закольцовывает в parfor-контуры см. в разделе Устранение неполадок переменных в элементах parfor-Loops.
Совет
Можно профилировать parfor-циклы с использованием tic и toc для измерения ускорения по сравнению с соответствующим for-луп. Использовать ticBytes и tocBytes для измерения объема данных, переносимых к работникам и от них в параллельном пуле. Дополнительные сведения и примеры см. в разделе Профилирование циклов parefor.