Выполнить for- параллельные итерации цикла на рабочих
parfor выполняет loopVar = initVal:endVal; statements; end for- параллельные итерации цикла для работников в параллельном пуле.
MATLAB ® выполняет команды тела цикла вstatements для значений loopVar между initVal и endVal. loopVar задает вектор целых значений, увеличивающийся на 1. При наличии Toolbox™ параллельных вычислений итерации statements может выполняться на параллельном пуле работников многоядерного компьютера или кластера. Как и в случае for-loop, можно включить одну или несколько строк в statements.
Чтобы узнать, как parfor может помочь увеличить пропускную способность, см. раздел Решение о том, когда использовать Parfor.
parfor отличается от традиционного for-закольцовывание следующими способами:
Итерации цикла выполняются параллельно в недетерминированном порядке. Это означает, что для использования кода может потребоваться изменение parfor. Дополнительные сведения см. в разделе Преобразование циклов for-Loops в контуры parfor-Loops.
Итерации цикла должны быть последовательными, увеличивая целочисленные значения.
Тело parfor-loop должен быть независимым. Одна итерация цикла не может зависеть от предыдущей итерации, поскольку итерации выполняются в недетерминированном порядке. Дополнительные сведения см. в разделе Обеспечение независимости итераций Parfor-Loop.
Нельзя использовать parfor-закольцовывание внутри другого parfor-луп. Дополнительные сведения см. в разделах Вложенная часть для и для петель и Другие части для требований.
parfor (
использование loopVar = initVal:endVal,M); statements; end M чтобы указать максимальное количество работников из параллельного пула для использования при оценке statements в корпусе петли. M должно быть неотрицательным целым числом.
По умолчанию MATLAB использует доступных работников в параллельном пуле. Можно изменить число работников на вкладке Главная (Home) в разделе Среда (Environment), выбрав Параллельный (Parallel) > Параллельные настройки (Parallel Preferences). Можно переопределить количество работников по умолчанию в параллельном пуле с помощью parpool. Если в пуле нет работников или M равно нулю, MATLAB по-прежнему выполняет тело цикла в недетерминированном порядке, но не параллельно. Этот синтаксис используется для переключения между параллельным и последовательным выполнением при тестировании кода.
С помощью этого синтаксиса для параллельного выполнения итераций необходимо иметь параллельный пул работников. По умолчанию при выполнении parforавтоматически создается параллельный пул работников в кластере, определенном профилем кластера по умолчанию. Кластер по умолчанию - локальный. Можно изменить кластер в окне «Настройки параллельной работы». Дополнительные сведения см. в разделе Определение параметров параллели.
parfor ( использование loopVar = initVal:endVal,opts); statements; endopts для указания ресурсов, используемых при оценке statements в корпусе петли. Создание набора parfor с использованием parforOptions функция. С помощью этого подхода можно выполнять parfor в кластере без предварительного создания параллельного пула и управления parfor разбивает итерации на поддиапазоны для рабочих.
Использовать parfor-закольцовывание при:
Имеется много итераций цикла простого вычисления. parfor разделяет итерации цикла на группы, чтобы каждый поток мог выполнять одну группу итераций.
Есть несколько итераций цикла, выполнение которых занимает много времени.
Не использовать parfor- петля, когда итерация в цикле зависит от результатов других итераций.
Сокращения являются одним из исключений из этого правила. Понижающая переменная накапливает значение, которое зависит от всех итераций вместе, но не зависит от порядка итераций. Дополнительные сведения см. в разделе Переменные сокращения.
При использовании parforдля получения результатов необходимо дождаться завершения цикла. Ваш клиент MATLAB заблокирован, и вы не можете выйти из цикла раньше. Если вы хотите получить промежуточные результаты, или выйти из for-loop рано, попробуйте parfeval вместо этого.
Если не указан объект кластера, parfor-loop выполняется в существующем параллельном пуле. Если пул не существует, parfor запускает новый параллельный пул, если автоматический запуск пулов не отключен в настройках параллельного пула. При отсутствии параллельного пула и parfor невозможно запустить один, цикл выполняется последовательно в сеансе клиента.
Если AutoAttachFiles свойство в профиле кластера для параллельного пула имеет значение trueMATLAB выполняет анализ для parfor-loop, чтобы определить, какие файлы кода необходимы для его выполнения, см. listAutoAttachedFiles. Затем MATLAB автоматически присоединяет эти файлы к параллельному пулу, чтобы код был доступен для работников.
Нельзя вызывать сценарии непосредственно в parfor-луп. Однако можно вызывать функции, вызывающие сценарии.
Не использовать clear внутри parfor цикл, поскольку он нарушает прозрачность рабочей области. См. раздел Обеспечение прозрачности в пакетных циклах или инструкциях spmd.
Вы можете запускать модели Simulink ® параллельно с parsim вместо использования команды parfor-контуры. Дополнительные сведения и примеры параллельного использования Simulink см. в разделе Запуск нескольких моделирований (Simulink).
afterEach | for | gcp | listAutoAttachedFiles | parfeval | parforOptions | parpool | send | ticBytes | tocBytes