Добавил:
baraevaliza
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабы по ПарАлг 2024 / Baraeva_Elizaveta_lb6
.pdf
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В. И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра МО ЭВМ
ОТЧЕТ
по лабораторной работе №6
по дисциплине «Параллельные алгоритмы»
Тема: Виртуальные топологии
Студентка гр. 2383
Бараева Е. Н.
Преподаватель
Татаринов Ю. С.
Санкт-Петербург
2024

2
Цель работы.
Изучить, что такое декартовая топология в библиотеке MPI, как ее
создавать, и какие манипуляции с ней можно делать. Написать параллельную
программу с созданием декартовой топологии процессов, с дальнейшим ее
расщеплением и применением коллективной операции. Проанализировать
результаты работы с построением графика ускорения/замедления, а также с
построением сети Петри.
Задание.
Вариант 4
Число процессов К является четным: K = 2N, N > 1 В процессах 0 и 1
дано по одному вещественному числу A. Определить для всех процессов
декартову топологию в виде матрицы размера N × 2, после чего, используя
функцию MPI_Cart_sub, расщепить матрицу процессов на два одномерных
столбца (при этом процессы 0 и 1 будут главными процессами в полученных
столбцах). Используя одну коллективную операцию пересылки данных,
переслать число A из главного процесса каждого столбца во все процессы
этого же столбца и вывести полученное число в каждом процессе (включая
процессы 0 и 1).
Выполнение работы.
Написана программа MPI с замером времени выполнения, в которой
процессы с рангами 0 и 1 генерируют случайное вещественное число в
диапазоне от -1 до 1 и сохраняют его в переменной A. Далее создается
двумерная декартова топология с N строками и 2 столбцами, где N равно
половине общего количества процессов. Затем декартова топология
расщепляется на два одномерных столбца. Для каждого процесса
определяется его ранг в новом коммуникаторе col_comm, который
соответствует столбцу. Главный процесс в каждом столбце распространяет

3
свое значение A на все процессы в этом столбце. В конце каждый процесс
выводит свое значение A, а также свой ранг в столбце.
Время выполнения программы приведено в таблице 1.
Таблица 1 – Время выполнения программы на разном количестве процессов
Кол-во процессов
Время работы, с
Кол-во процессов
Время работы, с
2
0.000048
10
0.000373
4
0.000227
12
0.000438
6
0.000324
14
0.032785
8
0.000348
16
0.075870
Вывод программы на 6 процессах см. рис. 1.
Рисунок 1 – Вывод программы
Анализируя вывод программы, видим, что некоторые строки выведены в
неправильном порядке. Это происходит, скорее всего, потому что объем
вычислительных операций несравнимо мал и поэтому случайные факторы
сильно сказываются на выводе программы.
Сеть Петри см. рис. 2.

4
Рисунок 2 – Сеть Петри
2N – четные процессы, 2N+1 – нечетные процессы. Для 1 и 2N+1
процессов сеть Петри аналогична.
Разработанный программный код см. в приложении А.
Исследование программы.
Построим график времени работы программы в зависимости от числа
запущенных процессов от 2 до 16 см. рис. 3.

5
Рисунок 3 – График времени работы программы в зависимости от числа
запущенных процессов
По графику видно, что время работы программы медленно возрастает
вместе с увеличением количества процессов до 12, а после резко. Это связано
с тем, что в процессоре устройства 12 ядер, и при использовании до 12-ти
процессов программа эффективна, а уже после эффективность теряется.
График ускорения/замедления программы см. на рис. 4.

6
Рисунок 4 – График ускорения/замедления программы
Из графика можно понять, что программа замедляется при увеличении
количества процессов. Это связано с тем, что с каждым дополнительным
процессом время создания декартовой топологии и разделения на группы,
количество отправляемых и обрабатываемых сообщений возрастает, что
приводит к увеличению задержек.
Вывод.
В ходе лабораторной работы было изучено, что такое декартовая
топология в библиотеке MPI, как ее создавать, и какие манипуляции с ней
можно делать. Написана программа на языке C, создающая декартовую
топологию процессов, с дальнейшим ее расщеплением и применением
коллективной операции. Проведены замеры времени работы программы в
зависимости от количества процессов и проанализированы результаты.
Построены графики замедления/ускорения и работы программы, а также
построена сеть Петри. Также было замечено, что программа замедляется при
увеличении числа процессов. Это происходит из-за увеличения объема
коммуникаций и накладных расходов на передачу данных.

7
ПРИЛОЖЕНИЕ А
ИСХОДНЫЙ КОД ПРОГРАММЫ
Название файла: lb6.c
#include <mpi.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
int proc_rank, num_procs;
double time_start = 0.0, time_end;
float A = 0.0;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &proc_rank);
MPI_Comm_size(MPI_COMM_WORLD, &num_procs);
// Проверка, что число процессов четное и больше 1
if (num_procs % 2 == 1 || num_procs == 0) {
if (proc_rank == 0)
printf("Число процессов должно быть четным и больше
1\n");
MPI_Finalize();
return 0;
}
// Генерация вещественного числа в дипазоне от -1 до 1 для 0
и 1 процессов
if (proc_rank == 0 || proc_rank == 1) {
srand(time(NULL) + proc_rank);
A = (float) rand() / RAND_MAX * 2 - 1;
printf("Процесс %d сгенерировал число A = %f\n",
proc_rank, A);
}
if (proc_rank == 0)
time_start = MPI_Wtime();
int K = num_procs, N = K / 2;
// Инициализация декартовой топологии
int dims[] = {N, 2}, periods[] = {0, 0};
MPI_Comm cart_comm;
MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods, 1,
&cart_comm);
// Расщепление декартовой топологии на два одномерных столбца
int remain_dims[] = {1, 0};
MPI_Comm col_comm;
MPI_Cart_sub(cart_comm, remain_dims, &col_comm);
// Выбор главного процесса в каждом столбце

8
int col_rank;
MPI_Comm_rank(col_comm, &col_rank);
// Главные процессы распространяют свое значение A
MPI_Bcast(&A, 1, MPI_FLOAT, 0, col_comm);
if (proc_rank == 0) {
time_end = MPI_Wtime();
printf("The program has taken %lf seconds\n", time_end -
time_start);
}
// Вывод числа A для каждого процесса
printf("Процесс %d, ранг в столбце %d, число A = %f\n",
proc_rank, col_rank, A);
MPI_Finalize();
return 0;
}
Соседние файлы в папке Лабы по ПарАлг 2024
