Выполните код параллельно на рабочих параллельного пула
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
, смотрите Выполнение Одна Программы на Нескольких Наборах данных.