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

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

Можно запустить связывающееся задание с помощью любого типа планировщика. Этот раздел иллюстрирует, как программировать связывающиеся задания для поддерживаемых планировщиков (Планировщик MATLAB® Job, локальный планировщик, Сервер Microsoft® Windows HPC (включая CCS), Platform LSF®, PBS Pro® или КРУТЯЩИЙ МОМЕНТ).

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

  • У вас должна быть совместно используемая файловая система между клиентом и кластерными машинами

  • Необходимо смочь представить задания непосредственно планировщику от клиентской машины

Примечание

При использовании любого стороннего планировщика для выполнения связывающегося задания, если все эти условия не соблюдают, необходимо использовать типичный интерфейс планировщика. (Связывающиеся задания также включают pmode, 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]