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

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

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

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

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

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

Примечание

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