Многопоточное и
распределенное программирование.
Задание на
цикл лабораторно-практических работ.
Цели цикла лабораторно-практических работ
по дисциплине:
1.
Освоение на
практике технологий многопоточного и распределенного программирования путем
решения конкретных задач:
1.1. Многопоточное программирование на C/С++ (без использования OpenMP) или на Java или на
С# или на … .
1.2. Многопоточное параллельное программирование многоядерных
компьютеров с использованием OpenMP.
1.3. Многопоточное параллельное программирование графических
процессоров с использованием CUDA или OpenCL
1.4. Распределенное параллельное программирование вычислительных
кластеров с использованием MPI
2.
Исследование
зависимостей затрат времени и объемов памяти (количества элементов используемых
структур данных) от:
– значений или объемов исходных данных;
– степени распараллеливания;
– способов распараллеливания, распределения исходных
данных, синхронизации параллельных процессов, сбора результатов, …
Задача для выполнения пункта 1.1
содержится в списке №1, для выполнения пунктов 1.2, 1.3 и 1.4 – в списке №2.
Номера задач указаны в списке вариантов заданий.
Для выполнения пункта 1.1 задания необходимо:
1.
Спроектировать
структуру многопоточного приложения, поставить в соответствие элементам
моделируемой системы адекватные структуры данных и совокупности потоков
управления.
2.
Разработать и
отладить на выбранном языке многопоточную программу моделирования поведения
заданной системы, предусмотреть возможность вывода детальной истории поведения
всех элементов системы.
3.
Промоделировать
поведение спроектированной системы для различных значений ее параметров,
исследовать зависимости результатов моделирования от этих значений.
4.
Проанализировать
взаимосвязи потоков/процессов в моделирующей программе, выявить возможности
возникновения гонок данных, дедлоков и других
специфических проблем. Выбрать способы предотвращения возможности возникновения
таких проблем.
5.
Проанализировать
результаты моделирования заданной системы, выявить и объяснить закономерности
их поведения и, если есть, – возможные отклонения результатов от ожидаемых, в
том числе такие как возникновение дедлоков.
Для выполнения пунктов 1.2, 1.3 и 1.4 необходимо:
1.
Разработать и
отладить последовательную программу на языке С или С++.
2.
Исследовать
возможные способы распараллеливания алгоритма решения задачи, выбрать и
обосновать наиболее эффективный вариант для каждой из технологий OpenMP, CUDA (или OpenCL) и MPI.
2.1. Разработать и отладить OpenMP-программу решения задачи, добиться совпадения ее
результатов с результатами последовательного варианта, исследовать зависимость
ее характеристик от параметров запуска (значений или объемов исходных данных,
степени распараллеливания, способов распараллеливания, распределения исходных
данных, синхронизации параллельных процессов, сбора результатов, …).
2.2. Разработать и отладить CUDA- (или OpenCL-)
программу решения задачи, добиться совпадения ее результатов с результатами
последовательного варианта, исследовать зависимость ее характеристик от
параметров запуска.
2.3. Разработать и отладить MPI- программу решения задачи, добиться совпадения ее
результатов с результатами последовательного варианта, исследовать зависимость
ее характеристик от параметров запуска
Последовательный и параллельный вариант решения задачи
рекомендуется реализовывать в виде одной исполняемой программы. Рекомендуется
также тщательно продумать и обеспечить возможность как можно более простой
проверки правильности результатов вычислений. Объемные результаты (массивы вычисляемых
значений) должны сохраняться в файлах и проверяться на совпадение путем
написания функций или фрагментов, выполняющих сравнение с заданной точностью.
3.
Добиться
устойчивого ускорения решения задачи параллельной программой по сравнению с
последовательной по крайней мере для некоторых значений исходных данных.
4.
Проанализировать
взаимосвязи потоков/процессов, выявить возможности возникновения гонок данных, дедлоков и других специфических проблем параллельных
вычислений. Выбрать способы предотвращения возможности возникновения таких
проблем в параллельных программах для каждой технологии.
Результаты работы в виде:
·
текстовых файлов разработанных программ (в исключительных случаях – заархивированных каталогов
программных проектов, но без объемных файлов наподобие .pdb, .tlog, …)
·
инструкций по
сборке и запуску программ(ы)
·
а также, при
необходимости, файлов исходных данных
должны загружаться в систему DiSpace или
присылаться на почту преподавателю для проверки. Рекомендуется использовать MS Visual Studio версии не выше 2019, NetBeans версии
не выше 23, gcc версии не выше 11.2.1 (Red Hat). Если студент считает целесообразным использование любой
другой среды разработки, то он должен письменно обосновать это и предварительно,
до начала работы над программой, согласовать с преподавателем. Иначе возможен
отказ в приеме работы из-за невозможности ее проверки преподавателем.
После выполнения всех работ оформить
результаты разработок и исследований в виде сводного отчета в формате MS Word и
загрузить его в DiSpace (или прислать на почту преподавателю).