Программная коммуникация заданий для поддерживаемого планировщика

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

Можно запустить задание связи с помощью любого типа планировщика. Этот раздел иллюстрирует, как запрограммировать задания связи для поддерживаемых планировщиков (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 (созданный в коде Task Function) находится в клиентском пути 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]
Для просмотра документации необходимо авторизоваться на сайте