Лабораторно-практические работы
Темы работ:
1.
Методы параллельного программирования
для систем с общей памятью с использованием технологии OpenMP.
2.
Методы параллельного программирования
для графического процессора в среде NVidia CUDA.
3.
Методы параллельного программирования для гетерогенных
вычислительных систем с использованием технологии OpenCL.
4.
Методы параллельного программирования
с использованием технологии MPI и библиотеки профилирования MPE.
Студент получает от преподавателя на
первом лабораторном занятии свой индивидуальный вариант задания на цикл
лабораторных работ, содержащий номера четырех задач из списка, находящегося на
сайте дициплины (http://vt.cs.nstu.ru/~malyavko/hpc/Tasks2-2023.htm);
Все
лабораторные работы должны быть выполнены с использванием языка
программирования C (или C++) в среде Linux без графической оболочки (с использованием
компилятора gcc версии
не выше 11). Предварительную отладку разрабатываемых программ можно вести с
использованием MS Visual Studio (или других IDE), однако следует помнить о возможных
несовместимостях с компилятором или библиотеками целевой среды, особенно вероятными
в случае использования C++. Поэтому рекомендуется
ограничиться чистым С.
Студентам,
не имеющим опыта работы в систем Linux, рекомендуется предварительно
ознакомиться с содержимым файла «Основы работы в Linux.pptx», находящегося на
сайте дисциплины.
В каждой
лабораторной работе нужно решить одну из задач. Формулировки всех задач находятся
на сайте дисциплины в пункте «Список задач». Все задачи, указанные в варианте
задания, должны быть решены. По желанию студента задача может быть заменена
преподавателем (при этом суммарный балл для аттестации будет уменьшен на 2
балла за первую заменяемую задачу, на 4 балла за вторую, …).
Студент самостоятельно
делает выбор, какую из задач решать при выполнении каждой лабораторной работы.
Рекомендуется наиболее алгоритмически сложную (с точки зрения студента) задачу
решать с использованием наиболее простой технологии (OpenMP), а наиболее
простые – с использованием графического процессора (CUDA / OpenCL).
Последовательность
выполнения и сдачи работ может не совпадать с их нумерацией в списке тем.
Общие требования и
рекомендации.
В каждой работе
должны быть разработаны и последовательный и параллельный вариант программы
решения задачи. Не должна требоваться перекомпиляция для запуска
программы/программ для различных вариантов исходных данных. Должно быть реализовано
программное сравнение результатов последовательных и параллельных вычислений на
совпадение и измерены временные затраты на каждый вариант для различных
степеней распараллеливания и, возможно, с разными входными данными.
Необходимо
добиться того, чтобы параллельный вариант работал быстрее последовательного.
Для каждой задачи должны быть проведены несколько вычислительных экспериментов
(с различной степенью параллелизма или различными входными данными, …), их
результаты должны быть отображены в расчетно-графической работе в форме
графиков или таблиц с объяснением характера зависимостей времени вычислений от
варьируемых параметров.
Для измерения
длительности временных интервалов НЕ
следует использовать функцию 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/.
После отладки
последовательной и параллельной версий программы решения задачи и проведения
серии вычислительных экспериментов студент загружает в систему diSpace или отправляет преподавателю по почте архив,
содержащий исходные тексты программ и подробную инструкцию по их сборке и
запуску (нельзя включать в этот архив полные проекты в виде дерева каталогов IDE MS Visual Studio или других оболочек). Инструкция должна содержать
постановку задачи и ее номер в списке.
Датой выполнения и
сдачи работы считается именно этот момент, после чего преподаватель проверяет
работу и формирует оценочный балл согласно балльно-рейтинговой
системе аттестации. Пересмотр выставленного балла может производиться
преподавателем только в исключительных ситуациях, поэтому студент должен
внимательно проверять соответствие предъявляемых для проверки результатов перечисленным
здесь требованиям и рекомендациям.
Отчеты по
отдельным лабораторным работам не готовятся и не сдаются, вместо них после
выполнения всех работ студент формирует сводный отчет – расчетно-графическую
работу.