Лабораторные работы

Темы лабораторных работ:

1.      Параллельное программирование для систем с общей памятью с использованием технологии OpenMP.

2.      Параллельное программирование для графического процессора в среде NVidia CUDA.

3.      Параллельное программирование для гетерогенных вычислительных систем с использованием технологии OpenCL.

4.      Параллельное программирование с использованием технологии MPI и библиотеки профилирования MPE.

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

       номера четырех задач из списка, находящегося на сайте дициплины (http://vt.cs.nstu.ru/~malyavko/ParProgrO/Tasks2022.htm);

       IP-адрес и порт сервера;

       логин;

       пароль.

Все лабораторные работы должны быть выполнены с использванием языка программирования C (или C++) в среде Linux без графической оболочки (с использованием компилятора gcc). Предварительную отладку разрабатываемых программ можно вести с использованием MS Visual Studio (или других IDE), однако следует помнить о возможных несовместимостях с компилятором или библиотеками целевой среды, особенно вероятными в случае использования C++. Поэтому рекомендуется ограничиться чистым С.

Студентам, не имеющим опыта работы в систем Linux, рекомендуется предварительно ознакомиться с содержимым файла «Основы работы в Linux.pptx», находящегося на сайте дисциплины.

В каждой лабораторной работе нужно решить одну из задач. Формулировки всех задач находятся на сайте дисциплины в пункте «Список задач». Все задачи, указанные в варианте задания, должны быть решены. По желанию студента задача может быть заменена преподавателем (при этом суммарный балл для аттестации будет уменьшен на 2 балла за первую заменяемую задачу, на 4 балла за вторую, …).

Студент самостоятельно делает выбор, какую из задач решать при выполнении каждой лабораторной работы. Рекомендуется наиболее алгоритмически сложную (с точки зрения студента) задачу решать с использованием наиболее простой технологии (OpenMP), а наиболее простые – с использованием графического процессора (CUDA / OpenCL).

Последовательность выполнения и сдачи работ может не совпадать с их нумерацией в списке тем.

Доступ к указанному в варианте задания узлу кластера выполняется с использованием любого ssh-клиента (например – Putty), для переноса файлов между клиентским компьютером и кластером можно использовать любой scp-клиент (например – WinSCP). Обе программы являются свободно распространяемыми, не требуют установки с администраторскими правами и могут быть скачаны из интернета и запущены с любого носителя.

Для создания проекта на CUDA можно ориентироваться на технологию, описанную в файле /home/samples/readme.txt, скопировать в свой каталог и использовать файл /home/samples/CUDA/Makefile (при необходимости – адаптировать его под свои параметры, например, имена файлов).

Для компиляции проекта на OpenCL можно использовать скрипт createMMul.sh из каталога /home/samples/openCl (скопировать его в свой каталог и при необходимости адаптировать под свои параметры, например, имена файлов). В этом же каталоге находится пример текста программы написанной на OpenCL.

Для компиляции MPI-программ нужно использовать скрипт /usr/lib64/mpich/bin/mpicc (или /usr/lib64/mpich/bin/mpic++). Параметры этому скрипту задаются так же, как и компилятору gcc. Для запуска MPI-программ нужно использовать утилиту /usr/lib64/mpich/bin/mpirun (или /usr/lib64/mpich/bin/mpiexec), задавая следующие ключи и параметры:

-n <кол-во процессов> <путь к запускаемой MPI-программе и ее параметры

Общие требования и рекомендации.

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

Необходимо добиться того, чтобы параллельный вариант работал быстрее последовательного. Для каждой задачи должны быть проведены несколько вычислительных экспериментов (с различной степенью параллелизма или различными входными данными, …), их результаты должны быть отображены в расчетно-графической работе в форме графиков или таблиц с объяснением характера зависимостей времени вычислений от варьируемых параметров.

Для измерения длительности временных интервалов НЕ следует использовать функцию clock(), это слишком грубый инструмент. Вместо нее нужно использовать либо omp_get_wtime() (это требует включения заголовочного файла omp.h), либо MPI_Wtime() (это требует включения заголовочного файла omp.h), либо clock_gettime() или gettimeofday() (имеющиеся в linux, но отсутствующие в MS Windows). Информацию по последним двум функциям студент должен самостоятельно найти в интернете.

Любые исходные данные должны задаваться в командной строке запуска программы и, возможно, считываться из указанного в ней файла (файлов), т.е. они не должны задаваться/определяться как константы в разрабатываемой программе. Для генерации исходных данных большого объема (матрицы, графы, системы коэффициентов уравнений и т.д.) следует использовать утилиту genData.exe, которую можно скачать с сайта дисциплины.

Объемные результаты вычислений должны выводиться в файл/файлы, для них также должно быть реализовано программное сравнение результатов последовательных и параллельных вычислений на совпадение Небольшие по объему результаты могут выводиться на консоль. Выводиться должны все данные, необходимые для проверки полученного результата. Например, если требуется найти два числа, имеющие одинаковое количество простых делителей, то кроме найденных чисел должны быть выведены и перечни их делителей. Для каждой задачи студент должен продумать, что и в каком виде он будет выводить в качестве результата работы программы. Не следует выводить большие избыточные объемы данных.

Каждая параллельная программа должна автоматически настраиваться на максимально доступное (или задаваемое при ее запуске) количество потоков/узлов/ядер/ветвей/…

При решении задач, связанных с целыми числами, следует работать в 64-разрядном диапазоне (использовать типы данных unsigned long long или __int64).

При решении задач, связанных с простыми числами, следует использовать для их нахождения алгоритм "решето Эратосфена" или более производительный, либо использовать в качестве исходных данных файлы с заранее вычисленными простыми числами, например – с сайта http://primes.utm.edu/lists/small/millions/.

Все результаты выполнения лабораторных работ должны сохраняться в личном каталоге студента (/home/stud<N>) в отдельных подкаталогах с именами, соответствующими номеру работы (например /home/stud<N>/lr1, /home/stud<N>/lr2, …). Подкаталоги создаются студентом самостоятельно.

После отладки последовательной и параллельной версий программы решения задачи и проведения серии вычислительных экспериментов студент пишет и загружает в систему diSpace подробную инструкцию по сборке и запуску программы (выполнив сборку и сохранив исполняемую программу/программы в подкаталоге данной работы) в формате MS Word файла. Датой выполнения и сдачи работы считается именно этот момент, после чего преподаватель проверяет работу и формирует оценочный балл согласно балльно-рейтинговой системе аттестации. Инструкция должна содержать постановку задачи и ее номер в списке. Отчеты по отдельным лабораторным работам не готовятся и не сдаются, вместо них после выполнения всех работ студент формирует сводный отчет – расчетно-графическую работу. Пересмотр выставленного балла может производиться преподавателем только в исключительных ситуациях, поэтому студент должен внимательно проверять соответствие предъявляемых для проверки результатов перечисленным здесь требованиям и рекомендациям.

После приема преподавателем каждой работы из соответствующего подкаталога студент должен удалить скомпилированные исполняемые программы, объектные файлы и входные/выходные файлы данных, объем которых превышает единицы килобайт. Оставить в домашнем каталоге следует только исходные коды программ и, возможно, скрипты или makefile’ы. При сдаче зачета преподаватель проверяет степень «очистки» личного каталога студента и может снизить итоговый балл по дисциплине в случае обнаружения лишних файлов.

Невыполнение любого из перечисленных выше требований может привести к снижению балла оценки работы по сравнению с максимальным баллом.

Категорически запрещается загружать на сервер проекты (в виде дерева каталогов) IDE MS Visual Studio (или других IDE системы MS Windows). Загружать можно ТОЛЬКО исходные тексты программ (файлы типов .c .cpp .h .hpp).

Категорически запрещается загружать на сервер отчеты по лабораторным работам в любом формате.

Категорически запрещается даже кратковременно превышать лимит 10 Mb суммарного объема всех файлов личного каталога. Исключения возможны только по согласованию с преподавателем.

Категорически запрещается использовать ресурсы, выделенные для выполнения лабораторных работ, в каких бы то ни было посторонних целях, это может привести не только к снижению баллов при аттестации, но и к лишению доступа к системе, т.е. к невозможности сдачи зачета по дисциплине.

Администратор вычислительного кластера и преподаватель выполняют мониторинг использования ресурсов системы с целью предотвращения нецелевого использования ресурсов или превышения установленных лимитов.

Расчетно-графическая работа

РГР оформляется в электронном виде в качестве сводного отчета по всем выполненным лабораторным работам. Содержанием РГР должно быть:

         постановка задач по теме каждой работы;

         точное описание последовательных и параллельных алгоритмов решения задач (желательно – в графическом, возможно – в структурированном текстовом виде);

         результаты серий вычислительных экспериментов (таблицы и/или графики зависимостей времени вычислений от степени распараллеливания и значений исходных данных) с объяснением характера этих зависимостей.

Коды разработанных программ нужно размещать в приложении к РГР.

Сводный отчет, т.е. РГР, загружается в систему DiSpace или отправляется на электронную почту преподавателя в электронном виде в формате MS Word (отчеты в других форматах не принимаются).