Задание на лабораторные работы

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

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

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

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

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

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

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

Все работы должны быть выполнены на языке программирования C ( или C++) в среде Linux, основной компилятор – gcc. С основами работы в Linux можно познакомиться, скачав этот файл с сайта дисциплины: http://vt.cs.nstu.ru/~malyavko/ParProgr/LinuxBasics.zip.

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

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

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

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

Доступ к указанному в варианте задания серверу выполняется с использованием любого ssh-клиента (например – Putty), для переноса файлов между клиентским компьютером и кластером можно использовать любой scp-клиент (например – WinSCP). Обе программы являются свободно распространяемыми, не требуют установки с администраторскими правами и могут быть скачаны из интернета и запущены с любого носителя.

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

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

Для компиляции 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-программы>

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

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

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

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

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

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

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

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

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

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

РГР оформляется в электронном виде в качестве сводного отчета по всем выполненным лабораторным работам. Содержанием РГР является детальное описание последовательных и параллельных алгоритмов (желательно – в графическом, возможно – в структурированном текстовом виде) решения задач и результаты серий вычислительных экспериментов, т.е. таблицы и/или графики зависимостей времени вычислений от степени распараллеливания и значений исходных данных. Коды разработанных программ нужно размещать в приложении.

Порядок сдачи лабораторных работ и РГР описан на сайте дисциплины в «Балльно-рейтинговой системе аттестации»:

http://vt.cs.nstu.ru/~malyavko/ParProgr/Rating.htm