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});

Figure contains 3 axes. Axes 1 contains an object of type image. Axes 2 contains an object of type image. Axes 3 contains an object of type image.

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

delete(gcp);

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

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

availableGPUs = gpuDeviceCount("available")
availableGPUs = 3

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

parpool('local',availableGPUs);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 3).

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

spmd
    gpuDevice
end

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

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

delete(gcp('nocreate'));

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

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

[availableGPUs,gpuIndx] = gpuDeviceCount("available")
availableGPUs = 3
gpuIndx = 1×3

     1     2     3

Задайте индексы устройств, которые вы хотите использовать.

useGPUs = [1 3];

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

parpool('local',numel(useGPUs));
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 2).
spmd
    gpuDevice(useGPUs(labindex));
end

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

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

delete(gcp('nocreate'));

Советы

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

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

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

  • Для получения информации об эффективности spmd и другие построения параллельного программирования, смотрите, Выбирают Between spmd, parfor, и parfeval.

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

| | | | | |

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