Новообращенный 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-цикл:

  1. Тело parfor-цикл должен быть независимым. Одна итерация цикла не может зависеть от предыдущей итерации, потому что итерации выполняются параллельно в недетерминированном порядке. В примере,

    A(y) = A(y-1) + y;
    не является независимым, и поэтому вы не можете использовать parfor. Для следующих шагов в решении проблем независимости смотрите Убедитесь, что циклы parfor являются Независимыми.

  2. Вы не можете гнездить a parfor-цикл внутри другого parfor-цикл. Пример имеет два вложенных for-циклы, и поэтому можно заменить только один for-цикл с a parfor-цикл. Вместо этого можно вызвать функцию, которая использует parfor-цикл внутри тела другого parfor-цикл. Однако такие вложенные parfor-циклы не дают вам вычислительных преимуществ, потому что все работники используются для параллелизации самого внешнего цикла. Для получения справки по работе с вложенными циклами смотрите Вложенные parfor и for-Loops и Другие требования parfor.

  3. parforЦиклы должны быть последовательными увеличивающимися целыми числами. В примере,

    parfor x = 0:0.1:1
    имеет нецелочисленные переменные цикла, и поэтому вы не можете использовать parfor здесь. Можно решить эту проблему, изменив значение переменной цикла на целочисленные значения, требуемые алгоритмом. Для следующих шагов в поиске и устранении проблем parfor-цикл переменные, см., Гарантируйте, что переменные parfor-Loop являются последовательными увеличивающимися целыми числами.

  4. Вы не можете вырваться из parfor-цикл рано, как вы можете в for-цикл. Не включайте возврат или break в тело своего parfor-цикл. Без связи другие образцы MATLAB, выполняющие цикл, не знают, когда остановить. В качестве альтернативы рассмотрим parfeval.

    Если у вас все еще есть проблемы с преобразованием for-циклы к parfor-циклы, см. «Поиск и устранение проблем с переменными в циклах parfor».

Совет

Вы можете профилировать a parfor-циклы, использующие tic и toc для измерения скорости по сравнению с соответствующим for-цикл. Использовать ticBytes и tocBytes для измерения объема данных, передаваемых работникам параллельного пула. Для получения дополнительной информации и примеров смотрите Профилирование циклов parfor.

См. также

| |

Похожие темы