exponenta event banner

Программа, сообщающая задания для поддерживаемого планировщика

Планировщики и условия

Можно запустить задание связи с помощью планировщика любого типа. В этом разделе показано, как программировать задания связи для поддерживаемых планировщиков (MATLAB ® Job Scheduler, локальный планировщик, Microsoft ® Windows HPC Server (включая CCS), Platform LSF ®, PBS Pro ® или TORQUE).

Чтобы использовать этот поддерживаемый интерфейс для обмена данными между заданиями, необходимо выполнить следующие условия:

  • Необходимо иметь общую файловую систему между клиентскими и кластерными компьютерами

  • Необходимо иметь возможность отправлять задания непосредственно планировщику с клиентского компьютера

Примечание

При использовании любого стороннего планировщика для выполнения задания связи, если все эти условия не выполнены, необходимо использовать общий интерфейс планировщика. (К сообщающим заданиям также относятся parpool, spmd, и parfor.) См. раздел Сценарии подключаемых модулей для общих планировщиков.

Кодирование функции задачи

В этом разделе простой пример иллюстрирует основные принципы программирования задания связи со сторонним планировщиком. В этом примере - работник, чей labindex значение равно 1 создает магический квадрат, состоящий из ряда строк и столбцов, который равен числу работников, выполняющих задание (numlabs). В этом случае четверо рабочих запускают связное задание с магическим квадратом 4 на 4. Первый работник транслирует матрицу с помощью labBroadcast всем остальным работникам, каждый из которых вычисляет сумму одного столбца матрицы. Все эти суммы столбцов объединяются с gplus для вычисления общей суммы элементов исходного магического квадрата.

Функция для этого примера показана ниже.

function total_sum = colsum
if labindex == 1
    % Send magic square to other workers
    A = labBroadcast(1,magic(numlabs)) 
else
    % Receive broadcast on other workers
    A = labBroadcast(1) 
end

% Calculate sum of column identified by labindex for this worker
column_sum = sum(A(:,labindex))

% Calculate total sum by combining column sum from all workers
total_sum = gplus(column_sum)

Эта функция сохраняется как файл colsum.m на пути клиента MATLAB. Он будет отправлен каждому работнику по заданию AttachedFiles собственность.

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

Код в клиенте

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

Можно создать и настроить объект кластера с помощью следующего кода:

c = parcluster('MyProfile')

где 'MyProfile' - имя профиля кластера для типа используемого планировщика. Управление любыми необходимыми различиями для различных опций кластера осуществляется в профиле. Для каждого типа планировщика можно иметь один или несколько отдельных профилей. Подробные сведения см. в разделах Обнаружение кластеров и Использование профилей кластеров. Создайте или измените профили в соответствии с указаниями системного администратора.

Когда объект кластера определен, создается объект задания с помощью createCommunicatingJob функция. Работа Type свойство должно быть установлено как 'SPMD' при создании задания.

cjob = createCommunicatingJob(c,'Type','SPMD');

Файл функций colsum.m (созданный в окне Код функции задачи) находится на пути клиента MATLAB, но должен быть доступен для работников. Один из способов сделать это с работой AttachedFiles свойство, которое можно задать в используемом профиле или с помощью:

cjob.AttachedFiles = {'colsum.m'}

Здесь можно также задать другие свойства задания, например, задать количество работников для использования. Опять же, профили могут быть полезны в конкретной ситуации, особенно если для большинства заданий требуется много одинаковых настроек свойств. Чтобы выполнить этот пример для четырех работников, можно установить его в профиле или с помощью следующего кода клиента:

cjob.NumWorkersRange = 4

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

t = createTask(cjob, @colsum, 1, {})

Использовать submit чтобы запустить задание.

submit(cjob)

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

wait(cjob)
results = fetchOutputs(cjob)
results = 
    [136]
    [136]
    [136]
    [136]