Выполните 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 В циклы parfor.
Итерации цикла должны быть последовательными, увеличив целочисленные значения.
Тело parfor
- цикл должен быть независимым. Одна итерация цикла не может зависеть от предыдущей итерации, потому что итерации выполняются в недетерминированном порядке. Для большего количества справки смотрите Убедитесь, что Итерации цикла parfor Независимы.
Вы не можете использовать parfor
- цикл в другом parfor
- цикл. Для большего количества справки смотрите Вложенный parfor и циклы for и Другие 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
- цикл, когда итерация в вашем цикле зависит от результатов других итераций.
Сокращения являются одним исключением к этому правилу. Переменная reduction накапливает значение, которое зависит от всех итераций вместе, но независимо от порядка итерации. Для получения дополнительной информации смотрите Переменные Сокращения.
Когда вы используете parfor
, необходимо ожидать цикла, чтобы завершиться, чтобы получить результаты. Ваш клиент MATLAB блокируется и вы не можете убежать из цикла рано. Если вы хотите получить промежуточные результаты или убежать из a for
- цикл рано, попробовать parfeval
вместо этого.
Если вы не задаете кластерный объект, parfor
- цикл работает на существующем параллельном пуле. Если никакой пул не существует, parfor
запускает новый параллельный пул, если автоматический запуск пулов не отключен в ваших параллельных настройках. Если нет никакого параллельного пула и parfor
не может запуститься один, цикл запускается последовательно на клиентском сеансе.
Если AutoAttachFiles
свойство в кластерном профиле для параллельного пула установлено в true
, MATLAB выполняет анализ a parfor
- цикл, чтобы определить, какие файлы кода необходимы для его выполнения, смотрите listAutoAttachedFiles
. Затем MATLAB автоматически присоединяет те файлы к параллельному пулу так, чтобы код был доступен для рабочих.
Вы не можете вызвать скрипты непосредственно в a parfor
- цикл. Однако можно вызвать функцию, которая вызывает скрипты.
Не используйте clear
внутри a parfor
цикл, потому что это нарушает прозрачность рабочей области. Смотрите Гарантируют Прозрачность в циклах parfor или spmd Операторах.
Можно запустить модели Simulink® параллельно с parsim
команда вместо использования parfor
- циклы. Для получения дополнительной информации и примеры использования Simulink параллельно, смотрите Запуск Несколько Симуляций (Simulink).
afterEach
| for
| gcp
| listAutoAttachedFiles
| parfeval
| parforOptions
| parpool
| send
| ticBytes
| tocBytes