spmd

Выполните код параллельно на рабочих параллельного пула

Синтаксис

spmd
    statements
end

Описание

пример

spmd, statements, end задает spmd оператор на одной строке. 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, end использование n задавать точное количество работников MATLAB, чтобы оценить statements, при условии, что n рабочие доступны от параллельного пула. Если существует недостаточно доступных рабочих, ошибка выдана. Если n нуль, MATLAB выполняет тело блока локально и создает Составные объекты, то же самое, как будто нет никакого доступного пула.

пример

spmd(m,n), statements, end использует минимум m и максимум n рабочие, чтобы оценить statements. Если существует недостаточно доступных рабочих, ошибка выдана. m может быть нуль, который позволяет блоку запускаться локально, если никакие рабочие не доступны.

Примеры

свернуть все

Создайте параллельный пул и выполните простое вычисление в параллели с помощью spmd. MATLAB выполняет код в spmd на всех рабочих в параллельном пуле.

parpool(3);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 3).
spmd
  q = magic(labindex + 2);
end

Постройте график результатов.

figure
subplot(1,3,1), imagesc(q{1});
subplot(1,3,2), imagesc(q{2});
subplot(1,3,3), imagesc(q{3});

По окончании с расчетами, можно удалить текущий параллельный пул.

delete(gcp);

Если у вас есть доступ к нескольким графическим процессорам, можно выполнить вычисления на нескольких графических процессорах в параллели с помощью параллельного пула.

Начните параллельный пул со стольких же рабочих сколько графические процессоры. Чтобы определить количество доступных графических процессоров, используйте gpuDeviceCount функция. По умолчанию MATLAB присваивает различный графический процессор каждому рабочему для лучшей производительности.

parpool('local',gpuDeviceCount);

Чтобы идентифицировать, который использует графический процессор каждый рабочий, вызовите gpuDevice в spmd блок. spmd блок запускает gpuDevice на каждом рабочем.

spmd
    gpuDevice
end

Используйте функции языка параллельного программирования, такие как parfor или parfeval, распределить ваши расчеты рабочим в параллельном пуле. Если вы используете gpuArray активированные функции в ваших расчетах, эти функции работают на графическом процессоре рабочего. Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре. Для примера смотрите функции MATLAB Запуска на Нескольких графических процессорах.

Когда вы будете сделаны с вашими расчетами, закройте параллельный пул. Можно использовать gcp функция, чтобы получить текущий параллельный пул.

delete(gcp('nocreate'));

Если вы хотите использовать различный выбор графических процессоров, можно использовать gpuDevice выбрать конкретный графический процессор на каждом рабочем. Задайте массив, например, gpuIndices, это содержит индексы графических процессоров, чтобы активироваться на каждом рабочем. Затем начните параллельный пул со стольких же рабочих сколько графические процессоры, чтобы выбрать, и использовать spmd блокируйтесь, чтобы запустить gpuDevice на каждом рабочем. labindex функция идентифицирует каждого рабочего. Используйте эту функцию, чтобы сопоставить рабочего с индексом графического процессора.

gpuIndices = [1 3];
parpool(numel(gpuIndices));
spmd
    gpuDevice(gpuIndices(labindex));
end

Как лучшая практика, и для лучшей производительности, присваивают различный графический процессор каждому рабочему.

Советы

  • spmd блок работает на рабочих существующего параллельного пула. Если никакой пул не существует, spmd запустит новый параллельный пул, если автоматический запуск пулов не отключен в ваших параллельных настройках. Если нет никакого параллельного пула и spmd не может запуститься один, код запускается последовательно на клиентском сеансе.

  • Если AutoAttachFiles свойство в кластерном профиле для параллельного пула установлено в true, MATLAB выполняет анализ spmd блокируйтесь, чтобы определить, какие файлы кода необходимы для его выполнения, затем автоматически присоединяет те файлы к параллельному заданию пула так, чтобы код был доступен для рабочих.

  • Для получения информации об ограничениях и ограничениях при использовании spmd, смотрите Запуск Одна Программы на Нескольких Наборах данных.

Смотрите также

| | | | | |

Представленный в R2008b