Выполните код параллельно на рабочих параллельного пула
spmd
statements
end
spmd,
задает statements
, endspmd
оператор на одной строке. MATLAB® выполняет spmd
тело обозначено statements
на нескольких работниках MATLAB одновременно. Каждый рабочий может работать с различным набором данных или различным фрагментом распределенных данных, и может связаться с другими участвующими рабочими при выполнении параллельных расчетов. spmd
оператор может использоваться, только если у вас есть Parallel Computing Toolbox™. Чтобы выполнить операторы параллельно, необходимо сначала создать пул работников MATLAB, использующих parpool
или имейте свои параллельные настройки, позволяют автоматический запуск пула.
В теле spmd
оператор, у каждого работника MATLAB есть уникальное значение labindex
в то время как numlabs
обозначает общее количество рабочих, выполняющих блок параллельно. В теле spmd
оператор, коммуникация функционирует для передачи заданий (такой как labSend
и labReceive
) может передать данные между рабочими.
Значения, возвращающиеся из тела spmd
оператор преобразован в Composite
объекты на клиенте MATLAB. Составной объект содержит ссылки на значения, сохраненные на удаленных работниках MATLAB, и те значения могут быть получены, использовав индексацию массива ячеек. Фактические данные по рабочим остаются доступными на рабочих для последующего spmd
выполнение, пока Составной объект существует на клиенте и параллельном пуле, остается открытым.
По умолчанию MATLAB использует всех рабочих в пуле. Когда не будет никакого активного пула, MATLAB будет создавать пул и использовать всех рабочих от того пула. Если ваши настройки не позволяют автоматическое создание пула, MATLAB выполняет тело блока локально и создает Составные объекты по мере необходимости. Вы не можете выполнить spmd
блокируйтесь, если какой-либо рабочий занят, выполняя parfeval
запросите, если вы не используете spmd(0)
.
Для получения дополнительной информации о spmd
и Составные объекты, смотрите, Распределяют Массивы и Запуск SPMD.
Примечание
Используйте parfevalOnAll
вместо parfor
или spmd
если вы хотите использовать clear
. Это сохраняет прозрачность рабочей области. Смотрите Гарантируют Прозрачность в циклах parfor или spmd Операторах.
spmd(
использование n
), statements
, endn
задавать точное количество работников MATLAB, чтобы оценить statements
, при условии, что n
рабочие доступны от параллельного пула. Если существует недостаточно доступных рабочих, ошибка выдана. Если n
нуль, MATLAB выполняет тело блока локально и создает Составные объекты, то же самое, как будто нет никакого доступного пула.
spmd(
использует минимум m
,n
), statements, endm
и максимум n
рабочие, чтобы оценить statements
. Если существует недостаточно доступных рабочих, ошибка выдана. m
может быть нуль, который позволяет блоку запускаться локально, если никакие рабочие не доступны.
spmd
блок работает на рабочих существующего параллельного пула. Если никакой пул не существует, spmd
запустит новый параллельный пул, если автоматический запуск пулов не отключен в ваших параллельных настройках. Если нет никакого параллельного пула и spmd
не может запуститься один, код запускается последовательно на клиентском сеансе.
Если AutoAttachFiles
свойство в кластерном профиле для параллельного пула установлено в true
, MATLAB выполняет анализ spmd
блокируйтесь, чтобы определить, какие файлы кода необходимы для его выполнения, затем автоматически присоединяет те файлы к параллельному заданию пула так, чтобы код был доступен для рабочих.
Для получения информации об ограничениях и ограничениях при использовании spmd
, смотрите Запуск Одна Программы на Нескольких Наборах данных.
Для получения информации об эффективности spmd
и другие построения параллельного программирования, смотрите, Выбирают Between spmd, parfor, и parfeval.