← Назад к списку материалов

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

Задание по дисциплине «Параллельное программирование»

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

  1. Параллельное программирование для систем с общей памятью с использованием технологии OpenMP.
  2. Параллельное программирование для графического процессора в среде NVIDIA CUDA.
  3. Параллельное программирование для гетерогенных вычислительных систем с использованием технологии OpenCL.
  4. Параллельное программирование с использованием технологии MPI.

Общие положения

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

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

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

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

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

Порядок доступа к вычислительному кластеру

Доступ к указанному в варианте задания узлу кластера выполняется с использованием любого SSH-клиента (например, PuTTY). Для переноса файлов между клиентским компьютером и кластером можно использовать любой SCP-клиент (например, WinSCP) или гибридные решения, например SmarTTY. Все три программы являются свободно распространяемыми, не требуют установки с администраторскими правами и могут быть скачаны из интернета и запущены с любого носителя.

Правила компиляции и запуска программ

CUDA

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

OpenCL

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

MPI

Для компиляции 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() (это требует включения заголовочного файла mpi.h), либо clock_gettime() или gettimeofday() (имеющиеся в Linux, но отсутствующие в MS Windows). Информацию по последним двум функциям студент должен самостоятельно найти в интернете.

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

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

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

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

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

Хранение результатов на сервере

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

Порядок сдачи и защиты работ

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

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

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

Категорически запрещается:

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

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

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

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

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

Оценочный балл за выполненную РГР выставляется в зависимости от полноты и качества проделанной работы. Также стоит учитывать, что при отсутствии в отчете или невыполнении одной из лабораторных работ оценочный балл уменьшается на 4, т. е. максимальный вес каждой работы составляет 4 балла в отчете РГР (подробнее о порядке аттестации можно узнать здесь: http://zelenchuk.vt.cs.nstu.ru/rules.html).