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