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.