Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПРО-432_ЛР3_ПВ

.docx
Скачиваний:
0
Добавлен:
07.04.2025
Размер:
345.47 Кб
Скачать

Министерство науки и образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Уфимский университет науки и технологий»

Кафедра вычислительной математики и кибернетики

ОТЧЁТ

По лабораторной работе №3

«ПАРАЛЛЕЛЬНОЕ ВЫЧИСЛЕНИЕ СУММЫ ЧИСЛОВОГО РЯДА СРЕДСТВАМИ MPI»

по дисциплине «Параллельные вычисления»

Выполнили:

студент группы ПРО-429

Видманов А. А., Ихсанова А. А.,

Мустафин А. А.

Проверила:

проф. каф. ВМИК,

канд. физ.-мат. наук Шерыхалина Н.М.

Уфа — 2024 г.

Цель работы

Для многопроцессорных вычислительных систем с распределенной памятью на примере задачи параллельного вычисления суммы числового научиться программно реализовывать простейшие параллельные вычислительные алгоритмы и проводить анализ их эффективности.

Ход работы

Была выполнена программная реализация на языке С последовательного алгоритма суммирования функционального ряда согласно 9 варианту. Предусмотрели вывод на экран времени работы программы.

#include <stdio.h>

#include <mpi.h>

int main(int argc, char** argv) {

int rank, size;

int N;

double local_sum = 0.0, global_sum = 0.0;

double start_time, end_time;

// Инициализация MPI

MPI_Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &rank);

MPI_Comm_size(MPI_COMM_WORLD, &size);

// Ввод количества членов ряда

if (rank == 0) {

printf("Введите количество членов ряда N: ");

scanf("%d", &N);

start_time = MPI_Wtime(); // Запуск таймера

}

// Рассылка N всем процессам

MPI_Bcast(&N, 1, MPI_INT, 0, MPI_COMM_WORLD);

// Вычисление локальной суммы

for (int i = rank; i < N; i += size) {

local_sum += 1.0 / (i + 1);

}

// Суммирование результатов всех процессов

MPI_Reduce(&local_sum, &global_sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);

// Вывод результата

if (rank == 0) {

end_time = MPI_Wtime(); // Остановка таймера

printf("Сумма ряда 1/n для N = %d равна %.15f\n", N, global_sum);

printf("Время выполнения: %f секунд\n", end_time - start_time);

}

// Завершение MPI

MPI_Finalize();

return 0;

}

Для каждой программы последовательно просчитали варианты запуска на 1, 2, 4, 6, 8 процессорах, выбрали N так, чтобы время работы на одном процессоре T1 в первом случае составляло порядка 15 с (N = N1 = 58 000 000):

на 2-х процессорах:

на 4-х:

на 6-сти:

на 8-ми:

Для второго случая, чтобы время работы последовательной работы одного процессора составляло 30–40 с (N = N2), подобрали значение N = 140 000 000.

По полученным результатам выполнения программы составили таблицу:

p

Tp, c

N1

N2

1

15,322

37,077

2

7,764

20,059

4

3,83

10,086

6

2,56

6,36

8

1,93

4,668

Вычислили ускорение и эффективность и занесли данные в таблицу:

p

S*p

E*p

N1

N2

N1

N2

1

1

1

1

1

2

1,97346728

1,84839723

0,98673364

0,92419861

4

4,00052219

3,67608566

1,00013055

0,91902142

6

5,98515625

5,82971698

0,99752604

0,9716195

8

7,9388601

7,94280206

0,99235751

0,99285026

По данным ускорения был построен график зависимости S*p1 и S*p2:

По данным эффективности E*p1 и E*p2:

Вывод

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

Соседние файлы в предмете Параллельные вычисления