Лабораторная работа N 8.
Разработка параллельной программы.
Цель работы: Написать параллельную программу с использованием MPI-интерфейса, разработанного при выполнении лабораторной работы №7. Параллельная программа должна соответствовать требованиям:
- работа в параллельных процессах не дублируется.
- вычислительная нагрузка на каждый процесс примерно одинакова.
- при увеличении числа процессов время решении задачи уменьшается.
Написать параллельную программу нахождения суммы элементов матрицы, для которых I<=J. Элементы матрицы заданы следующим соотношением A(i,j) = Sin( i + Cos( j )) Входные параметры программы: N - размерность матрицы.
Текст программы приведен в приложении 1.
Описание работы программы:
Все ветви программы не имеют различий и могут работать как в режиме клиента, так и в режиме сервера, выполняющего распределение заданий между ветвями и собирающего конечный результат. После запуска программы проверяется наличие файла с заданием work.txt в текущей директории, о его наличии выводится соответствующее сообщений. Файл должен содержать одно число – размерность матрицы N. После этого производится инициализация MPI, ветвь перебирает имена Worker1, Worker2, … пытаясь найти свободное. После регистрации ветвь переходит в режим listen any и вызывает все ветви по свой номер включительно. Параллельно с этим программа переходит в режим receive any и готова получать задания и выполнять вычисления. Если в ветви вызывается функция сервера, то определяется количество объединенных ветвей, подготавливается список участников и раздаются задания, причем сервер также выполняет задание, отправляя задание на свое имя. Затем запоминается текущее время, необходимое для определения продолжительности вычислений. Ветвь, получившая задание производит вычисления и отправляет результат ветви, приславшей задание. Ветвь-сервер работает с полученным заданием аналогично ветви-клиенту, полученные результаты суммирует. После того, как ответят все участники вычисления, она выводит итоговый результат и затраченное время, после чего готова работать дальше как клиент или сервер.
Результаты тестирования:
1. ветвь
Выполняется функция MPI_Init
NetBios обнаружен.
Удалось зарегистрироваться под именем Worker1
Присутствует файл с заданием, могу работать в режиме сервера
Для выполнения задания нажмите Space
Для выхода - любую другую клавишу
----------------- Сервер ---------------------------------------
|Всего участников 1, матрица размерности 200
|Всего элементов 20100, раздаю по 20100 элементов
|Вычисления завершены, сумма равна 185.084717
|Затрачено времени 0.030 cek
2. ветви
----------------- Сервер ---------------------------------------
|Всего участников 2, матрица размерности 200
|Всего элементов 20100, раздаю по 10050 элементов
|Вычисления завершены, сумма равна 185.084717
|Затрачено времени 0.160 cek
3. ветви
----------------- Сервер -----------------------------------------
|Всего участников 3, матрица размерности 200
|Всего элементов 20100, раздаю по 6700 элементов
|Вычисления завершены, сумма равна 185.084717
|Затрачено времени 0.450 cek
4. ветви
----------------- Сервер -----------------------------------------
|Всего участников 4, матрица размерности 200
|Всего элементов 20100, раздаю по 5025 элементов
|Вычисления завершены, сумма равна 185.085007
|Затрачено времени 1.690 cek
Условия об отсутствии дублирования и равномерной нагрузке выполняются в полной мере. Время, за которое производятся вычисления увеличивается, это связно с тем, что объем вычислений небольшой и большая часть времени вычислений отводится на передачу данных.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.