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