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