Выполните for - итерации цикла параллельно на рабочих
parfor loopVar = initVal:endVal; statements;
end parfor (loopVar = initVal:endVal,M); statements;
end parfor (loopVar = initVal:endVal,opts); statements;
endparfor (loopVar = initVal:endVal,cluster); statements;
endparfor выполняет loopVar = initVal:endVal; statements;
end for - итерации цикла параллельно на рабочих в параллельном пуле.
MATLAB® выполняет команды тела цикла в statements для значений loopVar между initVal и endVal. loopVar задает вектор целочисленных значений, увеличивающихся на 1. Если у вас есть Parallel Computing Toolbox™, итерации statements могут выполниться на параллельном пуле рабочих на вашем многоядерном компьютере или кластере. Как с 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 блокируется и вы не можете убежать из цикла рано. Если вы хотите получить промежуточные результаты или убежать из 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