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

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

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