Разработка параллельной программы нахождения суммы элементов матрицы, для которых I<=J

Страницы работы

2 страницы (Word-файл)

Содержание работы

Лабораторная работа N 8.

Разработка параллельной программы.

Цель работы: Написать параллельную программу с использованием MPI-интерфейса, разработанного при выполнении лабораторной работы №7. Параллельная программа должна соответствовать требованиям:

- работа в параллельных процессах не дублируется.

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

- при увеличении числа процессов время решении задачи уменьшается.

Вариант №2

Написать параллельную программу нахождения суммы элементов матрицы, для  которых 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

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

Похожие материалы

Информация о работе