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:1
parfor
здесь. Можно решить эту задачу путем изменения значения переменной цикла к целочисленным значениям, требуемым алгоритмом. Для следующих шагов в поиске и устранении неисправностей parfor
- переменные цикла, смотрите Убедитесь, что Переменные цикла parfor Являются Последовательными Увеличивающимися Целыми числами.Вы не можете убежать из a parfor
- цикл рано, как вы можете в a for
- цикл. Не включайте возврат или оператор завершения в теле вашего parfor
- цикл. Без коммуникации другие экземпляры MATLAB, запускающие цикл, не знают, когда остановиться. Как альтернатива, рассмотреть parfeval
.
Если у вас все еще есть проблемы при преобразовании for
- циклы к parfor
- циклы, смотрите Переменные Поиска и устранения неисправностей в циклах parfor.
Совет
Можно профилировать a parfor
- циклы с помощью tic
и toc
измерять ускорение по сравнению с соответствием for
- цикл. Использование ticBytes
и tocBytes
измеряться, сколько данных передается и от рабочих в параллельном пуле. Для получения дополнительной информации и примеры, смотрите Профильные циклы parfor.