Запуск параллельной программы пользователя на кластере организован в соответствии с рекомендациями разработчиков Matlab в разделах
Programming Distributed Jobs и
Programming Parallel Jobs
с учетом используемого в ИММ планировщика (типа Generic Scheduler в терминологии Matlab).
Замечание. Ссылки на сайт разработчика Matlab даны на момент подключения системы Matlab (~2010).
Для осуществления такого запуска необходимо:
Со стороны системы Matlab
1) Обеспечить наличие функций Submit
и Decode
.
Функция Submit
выполняется Matlab клиентом на хосте (управляющей машине) и основное ее назначение - установить необходимые переменные окружения, в том числе для функции Decode
, перед обращением к планировщику (Scheduler
).
Функция Decode
выполняется автоматически Matlab сервером (worker) на каждом узле и основное ее назначение – забрать переданные планировщиком через переменные окружения значения, которые Matlab worker использует для проведения вычислений на узлах кластера.
2) Задать последовательность действий для описания параллельной работы (Job
, точнее ParallelJob
), в рамках которой и будут проводиться программой Matlab вычисления функции пользователя на кластере. Основные действия описаны на сайте Matlab и продемонстрированы, в частности, на примере. В ИММ с учетом пакетной обработки эти действия дополнены перехватом stdout
и stderr
, т.е. установкой свойства CaptureCommandWindowOutput
в значение true
для всех задач (Task
) программируемой работы (Job
) (коротко о Job
и Task
см. в пункте Основные сведения).
С целью дальнейшего многократного использования все необходимые для программирования параллельной работы действия были оформлены в виде служебной функции imm_sch_f
(позднее переименованной в imm_sch
), обозначенной на рисунке ниже как scheme function
. Этой функции в качестве параметров передаются число параллельных процессов, время счета, имя и параметры функции пользователя, предназначенной для распараллеливания вычислений.
Функция imm_sch_f
служит для запуска параллельных программ.
При запуске параллельной программы в окне системы Matlab пользователь явно обращается к этой функции.
3) Для своевременного удаления информации о завершенных работах предоставить в распоряжение пользователя функцию job_destroy
.
Со стороны планировщика
1) Обеспечить пользователя командой запуска параллельной программы из командной строки, аналогичной mpirun
(заменённой впоследствии на mqrun
). Эта команда получила название mlrun
. При вызове mlrun
пользователь указывает число необходимых для счета процессов, максимальное время счета и имя, а при наличии и параметры, программы-функции. Команда mlrun
в интерактивном текстовом режиме (-nodisplay
) вызывает программу matlab
для выполнения функции imm_sch_f
(scheme function
на рисунке), передавая ей все необходимые аргументы.
2) Обеспечить наличие скрипта, реализующего механизм постановки в очередь программы пользователя, сформированной для запуска на кластере в рамках Matlab. Этот скрипт назван matlab_run
.
Используем предлагаемую на сайте Matlab схему запуска программы пользователя на кластере для демонстрации получаемой у нас цепочки вызовов (для определенности на um64 в системе пакетной обработки заданий СУППЗ, 2009 г.).
Источниками для написания собственных функций и скриптов послужили:
1) Ориентированные на Generic Scheduler примеры:
- функций Submit
и Decode
,
- схемы программирования параллельной работы на хосте в клиентской части Matlab и
- действий по удалению (разрушению, destroy
) законченной и ненужной уже работы (Job
).
2) Документация (скрипты типа pbsParallelWrapper
) в каталогах вида:
/opt/matlab-R2009b/toolbox/distcomp/examples/integration/{pbs|ssh|lsf}
где R2009b
- название версии
3) Скрипты запуска, такие как mvarun_p2
из каталога
/common/runmvs/bin
Список наших служебных функций и скриптов приведен в таблице:
При переходе на новую версию Matlab, например R2010a
, следует
- добавить одноименные ссылки в каталог /opt/matlab-R2010a/toolbox/local
на наши служебные Matlab функции, хранящиеся в каталоге /opt/matlab-imm
, а именно: imm_sch_f.m, imm_submitfunc.m, imm_decode.m, job_destroy.m
;
- скорректировать файл /etc/profile.d/matlab.sh
.