Выполните 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).
for | gcp | listAutoAttachedFiles | parpool | parfeval | ticBytes | tocBytes | send | afterEach | parforOptions