Я просмотрел все отчеты, которые были выложены в трекере.
Студенты, чьи задачи были "Закрыты" или "Отклонены", готовятся к устному зачету.
Список вопросов для зачета опубликован в Интернет: http://dvmh.keldysh.ru/attachments/download/7276/Questions2023.pdf
В билете будет 2 вопроса.
Один из вопросов будет по теме OpenMP.
Никакими материалами при подготовке ответа пользоваться нельзя.
Остальные студенты пытаются за оставшееся время исправить указанные замечания (если они есть), приносят с собой распечатанную версию отчета и тексты программ или ноутбук с электронной версией отчета.
График проведения зачета (какая группа в какое время приходит) будет опубликован завтра вечером.
С уважением,
Владимир Бахтин.
По результатам сдачи экзамена, который прошел сегодня, хотелось бы отметить следующее:
1. Мы неоднократно обсуждали на лекциях, что при разработке MPI-программ необходимо распределять данные между процессами.
Ни в одном из процессов массив (массивы) не должны находиться целиком.
В каждом процессе должна находиться лишь часть массива(какое-то подмножество строк/столбцов или блоков массива).
Размер этой части должен определяться с учетом количества MPI-процессов, используемых для выполнения программы.
MPI-программы, в которых массивы не распределены между процессами не принимаются.
2. На лекциях мы обсуждали недостатки централизованных алгоритмов и всегда для решения той или иной задачи старались предложить децентрализованный алгоритм, который бы обладал следующими свойствами:
-ни одна машина не имеет полной информации о состоянии системы;
-машины принимают решения на основе только локальной информации;
-выход из строя одной машины не должен приводить к отказу алгоритма.
Во второй программе необходимо реализовать именно такой алгоритм.
MPI-программы, в которых используется модель master-slave, в которых master-процесс используется для сохранения/чтения данных из контрольной точки, для дальнейшей рассылки, а затем сборки данных от всех процессов не принимаются.
3. В постановке 2 задачи говорится: "Добавить контрольные точки для продолжения работы программы в случае сбоя." На лекциях мы рассматривали средства параллельного ввода/вывода, которые есть в MPI. Контрольные точки должны быть сделаны именно с использованием MPI-IO. Программы без контрольных точек не принимаются.
4. Во многих программах, которые были показаны мне сегодня, было множество лишних барьерных синхронизаций (MPI_Barrier). Просьба внимательно проанализировать Ваши программы и убрать ненужные синхронизации. А если они действительно необходимы, то необходимо учесть их во временных оценках.
По результатам сдачи зачета, который прошел сегодня, хотелось бы отметить следующее:
1. Мы неоднократно обсуждали на лекциях, что при разработке MPI-программ необходимо распределять данные между процессами.
Ни в одном из процессов массив не должен находиться целиком.
В каждом процессе должна находиться лишь часть массива(какое-то подмножество строк/столбцов или блоков массива).
Размер этой части должен определяться с учетом количества MPI-процессов, используемых для выполнения программы.
MPI-программы, в которых массивы не распределены между процессами не принимаются.
2. В рамках курса мы рассматривали множество различных алгоритмов: умножение матриц, умножение матрицы на вектор, а также другие алгоритмы вычислительной математики и линейной алгебры. Ни в одном из рассмотренных нами алгоритмов у нас не было master-процесса, который бы раздавал работу и данные, а затем собирал полученные результаты. Все процессы в наших алгоритмах были равноправными, а алгоритмы - децентрализованными.
MPI-программы, в которых используется модель master-slave не принимаются.
3. Срок сдачи первой части задания прошел еще 2 недели назад. Но до сих пор в трекере есть множество заданий, по которым не было ни одного сообщения/загрузки программ. Все такие задания будут закрыты автоматически вечером 16 декабря. Студентам, чьи задачи будут закрыты, необходимо готовиться к устному зачету по курсу.
Для компиляции и запуска MPI-программ на Poluse можно использовать следующий способ.
При входе на машину необходимо выполнить команду:
source /polusfs/setenv/setup.SMPI
После этого нам станут доступны команды для компиляции (mpicc) и запуска программ (mpirun).
Скомпилировать программу можно при помощи команды:
mpicc <имя_программы>.c -o <имя_программы>
Далее необходимо подготовить файл myrun вида:
#LSBATCH: User input
#BSUB -n 20
#BSUB -W 00:15
#BSUB -o run.%J.out
#BSUB -e run.%J.err
#BSUB -R "span[hosts=1]"
source /polusfs/setenv/setup.SMPI
mpirun -np 1 ./<имя_программы>
mpirun -np 80 --oversubscribe ./<имя_программы>
mpirun -np 100 --oversubscribe ./<имя_программы>
mpirun -np 120 --oversubscribe ./<имя_программы>
mpirun -np 160 --oversubscribe ./<имя_программы>
Далее выполняем команду bsub<myrun
При помощи этой команды/файла мы запрашиваем у системы очередей один узел кластера,
когда этот узел будет выделен нам системой очередей,
на нем будут выполнены запуски нашей программы на нужном числе процессов.
Опция --oversubsribe в данном случае нужна, т.к. мы хотим запустить большее число процессов, чем доступно физических ядер на узле.
С уважением,
Владимир Бахтин.