Логотип ЛСМ ЮУрГУ
Южно-Уральский государственный университет
Национальный исследовательский университет
ЛАБОРАТОРИЯ СУПЕРКОМПЬЮТЕРНОГО МОДЕЛИРОВАНИЯ ЮУрГУ
Русский язык
О нас
Наши партнеры
Отделы и сотрудники
История
Новости
Информация в СМИ
Эмблема ЛСМ
Экскурсии
Контакты
Вычислительные ресурсы
Суперкомпьютер «Торнадо ЮУрГУ»
Суперкомпьютер «СКИФ-Аврора ЮУрГУ»
Комплекс «GPU»
Кластер «СКИФ Урал»
Пользователям
Правила
Регистрация
Прикладное ПО
Системное ПО
Техническая поддержка
Обучение
Инструкции
Система ПВК
Программное обеспечение
Правила
Инструкции
Коммерческим клиентам
Научная работа
Цели ЛСМ
Проекты
Публикации
Зарегистрированные программы
Городской научный семинар по теории некорректных задач
     
Google

www по сайту
Главная / Пользователям / Инструкции / Базовая инструкция по работе с пакетом MATLAB на "СКИФ Урал"

Базовая инструкция по работе с пакетом MATLAB на суперкомпьютере «Торнадо ЮУрГУ»

Запуск решателя MATLAB

Для запуска решателя MATLAB необходимо подключиться к вычислительному кластеру.

Загрузите модуль MATLAB:

module load simulation/MATLAB/2013b

Стандартная строка запуска программы:

matlab < sample.m
Здесь:
sample.m — файл входных данных (задачи), где создается работа для параллельных агентов.

После выполнения указанной команды задача будет поставлена в очередь задач. Все настройки относительно количества необходимых для расчета вычислительных узлов производятся в файле с исходным кодом программы sample.m.

Обратите внимание, что запуск программы на выполнение должен производиться из папки, где располагается файл с исходным кодом программы!

Пример файла с исходным кодом программы sample.m

В типичном случае файл с исходным кодом программы для расчета на кластере будет выглядеть следующим образом:

% Блок задания параметров очереди
sched = findResource ('scheduler', 'type', 'generic');
set (sched,'SubmitFcn', {@slurmParallelSubmitFcn, 'work'});
set (sched,'ClusterMatlabRoot',matlabroot);

% Блок создания параллельных рабочих и помещения задачи в очередь
myJob = createJob (sched);
task = createTask (myJob, @colsum, 1, {});
submit (myJob);

% Блок завершения параллельной работы и отображения результатов
% Ожидание завершения параллельной работы
waitForState (myJob);

% Вывод полученных результатов на экран
out = getAllOutputArguments (myJob);
celldisp (out);

Текст блока задания параметров очереди в общем случае будет неизменным. Необходимо единожды задать путь к папке в домашней директории пользователя кластера, где будет производиться расчет:

set (scheduler,'DataLocation','/home/имя_пользователя_кластера/имя_папки_с_расчетом');

.

Здесь:
имя_пользователя_кластера — логин пользователя для входа на кластер;
имя_папки_с_расчетом — имя существующей папки, где будет храниться результат расчета.

Текст блока создания параллельных рабочих и помещения задачи в очередь в общем случае будет уникальным для каждого выполняемого расчета. Оператором set (myJob, 'FileDependencies', {'colsum.m'}) необходимо задать файл с функцией, которая будет запускаться на параллельных агентах.

Обратите внимание, что файл с функцией должен располагаться в той же папке, что и запускаемая программа!

Оператор set (myJob, 'MaximumNumberOfWorkers', 8) позволяет задать максимальное количество используемых вычислительных узлов данном примере, их 8), оператор set (myJob, 'MinimumNumberOfWorkers', 8) определяет минимальное количество задействованных вычислительных узлов кластера данном примере, их 8).

Обратите внимание, что минимальное количество используемых узлов не может превышать заявленное максимальное количество узлов!

Далее необходимо назначить параллельным агентам задачу на выполнение оператором

createTask (myJob, @colsum, 1, {})

.

Здесь:
@colsum — имя встроенной или пользовательской функции, которую необходимо выполнить параллельным рабочим;
1 — количество значений, возвращаемых из выполняемой функции;
{} — передаваемые аргументы функции.

Оператор отправки задачи в очередь и блок завершения параллельной работы в общем случае неизменны.

Пример файла функции, выполняемой параллельными узлами (colsum.m)

function partial_sum = colsum

if labindex == 1
    % Широковещательная отправка сгенерированной матрицы с первого узла на все остальные
    A = labBroadcast (1, magic (numlabs));
else
    % Прием сгенерированной матрицы с первого узла на всех остальных
    A = labBroadcast (1);
end

% Подсчет суммы элементов столбца
column_sum = sum (A (:, labindex));

% Объединение полученных на разных узлах результатов суммы в единый массив
partial_sum = gcat (column_sum);

В данной функции на первом вычислительном узле создается магический квадрат (сумма чисел в каждой строке, каждом столбце и на обеих диагоналях одинакова) размерностью numlabs, соответствующей количеству задействованных при расчете вычислительных узлов.

Номер текущего вычислительного узла определяется переменной labindex.

Сформированная матрица отправляется широковещательным сообщением с первого узла на все остальные оператором labBroadcast (1, magic (numlabs));.

Все вычислительные узлы, кроме первого, принимают отправленное сообщение оператором labBroadcast (1);

Далее на каждом i-том узле вычисляется сумма элементов i-того столбца матрицы sum (A (:, labindex));.

Заключительным оператором gcat (column_sum); подсчитанные на разных вычислительных узлах суммы формируются (конкатенируются) в один массив, который реплицируется на каждый задействованный вычислительный узел кластера.

Помимо оператора gcat (column_sum); возможно использование оператора gcat (column_sum);, который выполняет глобальное суммирование результатов, полученных на всех вычислительных узлах. В таком случае, мы получим не массив значений, а одно число.

Логи вывода и метаданные задачи автоматически сохраняются в файле out.log, который по умолчанию создается в папке с исходным текстом программы.

Со всеми функциями, предназначенными для создания параллельных программ MATLAB, можно ознакомиться на официальной странице MATLAB Parallel Computing Toolbox.

Обратите внимание, что исходные файлы программ с расширением .m необходимо подготавливать в редакторе MATLAB Editor во избежание проблем с конвертированием кодировки текста. А также, по возможности, не используйте русскоязычные символы даже в комментариях к коду!

Запустить описанный выше пример на кластере вы можете, скачав архив с исходными текстами программы.

Для запуска примера распакуйте архив в домашнюю директорию на кластере, в файле sample.m измените путь к папке с расчетом:

set (scheduler,'DataLocation','/home/<имя_пользователя_кластера>/<имя_папки_с_расчетом>');

Запустите пример стандартным способом с помощью командной строки.