Можно запустить связывающееся задание с помощью любого типа планировщика. Этот раздел иллюстрирует, как программировать связывающиеся задания для поддерживаемых планировщиков (Планировщик MATLAB® Job, локальный планировщик, Сервер Microsoft® Windows HPC (включая CCS), Platform 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]