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

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

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

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

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

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

Студент получает от преподавателя свой индивидуальный вариант задания на цикл лабораторных работ, включающий номера четырех задач из списка, находящегося на сайте дициплины (http://vt.cs.nstu.ru/~malyavko/hpc/Tasks2-2023.htm), IP-адрес узла вычислительного кластера кафедры вычислительной техники, логин и пароль.

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

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

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

Студент самостоятельно делает выбор, какую из задач решать при выполнении каждой лабораторной работы. Рекомендуется наиболее сложную (с точки зрения студента) задачу решать с использованием наиболее простой технологии (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. Параметры этому скрипту задаются так же, как и компилятору gcc. Для запуска MPI-программ нужно использовать утилиту /usr/lib64/mpich/bin/mpiexec. Ее параметры:

-n <кол-во ветвей> <имя исполняемой MPI-программы>

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

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

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

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

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

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

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

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

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

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

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

Администратор и преподаватель выполняют мониторинг использования ресурсов системы. Поэтому:

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

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

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

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

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

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

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

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

Сводный отчет в электронном виде сдается преподавателю.