forked from sevastyan_b/SSPR_25
снова исправила
This commit is contained in:
@@ -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 требует ручного управления процессами.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user