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