снова исправила

This commit is contained in:
2025-03-23 12:25:33 +04:00
parent c9921b3c4a
commit 449071c708

View File

@@ -52,62 +52,3 @@ Stopping Process <1> on < ksenia >
### Вывод:
Программа демонстрирует эффективное использование MPI и параллельных вычислений для обработки матриц. Она успешно распределяет задачи между процессами, обрабатывает данные асинхронно. Но MPI требует ручного управления процессами.
## Вариант 3
Разделить элементы матрицы на среднее арифметическое всех ее элементов.
### Как запустить лабораторную работу:
Команда запускает MPJ Daemon:
>mpjdaemon -boot
MPJ Express запускает вашу программу App на двух процессах (-np 2), программа будет распределена в файле machines. Вводится размер входных данных 1000:
>mpjrun.sh -np 2 -dev niodev -machinesfile machines App -- 1000
### Какие технологии использовали:
Используется библиотека MPJ Express, которая используется для написания параллельных программ, способные выполняться на нескольких процессах или узлах, обмениваясь данными через сообщения.
### Как работает программа:
1. Программа инициализирует MPI. Это обязательный шаг для работы с MPI:
>MPI.Init(args);
2. rank — идентификатор текущего процесса (0, 1); size — общее количество процессов:
>int rank = MPI.COMM_WORLD.Rank();
>int size = MPI.COMM_WORLD.Size();
3. Процесс с рангом 0 генерирует матрицу размером matrixSize x matrixSize.
4. Процесс 0 вычисляет среднее значение всех элементов матрицы.
5. Процесс 0 отправляет значение sred процессу 1 с использованием MPI-функций Send и Recv.
6. Процесс 0 разделяет матрицу на две части: im1 — первая часть (остается у процесса 0); im2 — вторая часть (отправляется процессу 1). Процесс 1 получает свою часть матрицы.
7. Каждый процесс обрабатывает свою часть матрицы с помощью метода DoAlgorithm. Внутри DoAlgorithm матрица делится на 4 части, и каждая часть обрабатывается асинхронно с использованием CompletableFuture.
>if (rank == 0) {
> im1 = DoAlgorithm(im1, sred);
>} else if (rank == 1) {
> im2 = DoAlgorithm(im2, sred);
>}
8. Процесс 1 отправляет обработанную часть матрицы обратно процессу 0.
9. Процесс 0 собирает обработанные части матрицы в одну.
10. Все процессы завершают работу с MPI:
>MPI.Finalize();
### Тесты:
Starting process <0> on < kseniya >
Starting process <1> on < ksenia >
Received sred: 4.997216944501581
Matrix processing completed.
Time taken: 89550398 ns
Stopping Process <0> on < kseniya >
Stopping Process <1> on < ksenia >
### Вывод:
Программа демонстрирует эффективное использование MPI и параллельных вычислений для обработки матриц. Она успешно распределяет задачи между процессами, обрабатывает данные асинхронно. Но MPI требует ручного управления процессами.