Многопоточное и распределенное программирование.

Задание на цикл лабораторно-практических работ.

 

Цели цикла лабораторно-практических работ по дисциплине:

1.    Освоение на практике путем решения конкретных задач технологий многопоточного и распределенного программирования:

1.1.Многопоточное программирование на C/С++ (без использования OpenMP) или на Java или на С# или на … .

1.2.Многопоточное параллельное программирование многоядерных компьютеров с использованием OpenMP.

1.3.Многопоточное параллельное программирование графических процессоров с использованием CUDA или OpenCL

1.4.Распределенное параллельное программирование вычислительных кластеров с использованием MPI

2.    Исследование зависимости затрат времени на разработку и отладку программ решения задачи от используемой технологии.

3.    Исследование зависимостей затрат времени разработанных программ на исполнение от:

– значений или объемов исходных данных;

– степени распараллеливания;

– способов распараллеливания, распределения исходных данных, синхронизации параллельных процессов, способов сбора результатов, …

 

Задача для выполнения пункта 1.1 содержится в списке №1, для выполнения пунктов 1.2, 1.3 и 1.4 – в списке №2. Номера задач указаны в списке вариантов заданий.

Для выполнения пункта 1.1 необходимо:

1.      Спроектировать структуру многопоточного приложения, поставить в соответствие элементам моделируемой системы потоки управления

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

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

4.      Проанализировать результаты моделирования, выявить и объяснить возможные отклонения их от ожидаемых, в том числе такие как возникновение дедлоков.

 

Для выполнения пунктов 1.2, 1.3 и 1.4 необходимо:

1.    Разработать и отладить последовательную программу на языке С или С++.

2.    Исследовать возможные способы распараллеливания алгоритма решения задачи, выбрать и обосновать наиболее эффективный вариант для каждой из технологий OpenMP, CUDA (или OpenCL) и MPI.

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

4.    Разработать и отладить OpenMP-программу решения задачи, добиться совпадения ее результатов с результатами последовательного варианта, исследовать зависимость ее характеристик от параметров запуска (значений или объемов исходных данных, степени распараллеливания, способов распараллеливания, распределения исходных данных, синхронизации параллельных процессов, сбора результатов, …).

5.    Разработать и отладить CUDA- (или OpenCL-) программу решения задачи, добиться совпадения ее результатов с результатами последовательного варианта, исследовать зависимость ее характеристик от параметров запуска.

6.    Разработать и отладить MPI- программу решения задачи, добиться совпадения ее результатов с результатами последовательного варианта, исследовать зависимость ее характеристик от параметров запуска.

 

Результаты работы в виде текстов программ (возможно – программных проектов, но без файлов наподобие .pdb, .tlog, …) должны загружаться в систему DiSpace или присылаться на почту преподавателю для проверки. Рекомендуется использовать MS Visual Studio версии не выше 2019, NetBeans версии не выше 8.2, gcc версии не выше 11.2.1 (Red Hat). При использовании любых других сред разработки необходимо обосновать это и предварительно, до начала работы над программой, согласовать с преподавателем для того, чтобы исключить отказ в приеме работы из-за невозможности проверки.

 

Оформить результаты разработок и исследований в виде сводного отчета в формате MS Word и загрузить его в DiSpace.