Files
SSPR_25/gprskov_evgeniu_lab_2
2025-03-09 17:34:32 +04:00
..
2025-03-09 17:34:32 +04:00
2025-03-09 17:34:32 +04:00

Лабораторная работа №2

Разработка параллельного MPI приложения на языке Java.

Необходимо разработать параллельный вариант алгоритма с применением MPI и замерить время его работы. В рамках работы программы должно быть две копии приложения, которые соединяются друг с другом по сети. Сообщения о статусе соединения (например, что соединение установлено) должны выводиться в консоль. Запуск каждого экземпляра MPI происходит в своём LXC контейнере. Такие сервисы, как Docker, использовать нельзя.

Необходимо выполнить следующие задачи:

Разработать параллельный вариант алгоритма с использованием MPI. Замерить время его работы. Обеспечить взаимодействие двух копий приложения через сеть. Выводить сообщения о статусе соединения в консоль. Запускать каждый экземпляр MPI в отдельном LXC контейнере.

Вариант задания

8)Найти максимальный элемент выше главной диагонали

Как запустить программу

Необходимо запустить bash-файл, где уже прописаны необходимые настройки для запуска программы: /root/sspr2.sh

Инструменты

Язык программирования: Java Пакеты: mpi — используется для реализации параллельных вычислений с использованием MPI. Среда разработки: IntelliJ IDEA Версия JDK: 21

Описание работы программы

Генерация матрицы Программа генерирует случайную матрицу заданного размера (количество строк и столбцов передается как аргументы командной строки)

Матрица заполняется случайными целыми числами

Параллельный алгоритм с использованием MPI

Матрица разделяется на две части Каждая часть обрабатывается в отдельном LXC контейнере Каждый контейнер находит максимальный элемент выше главной диагонали в своей части матрицы Результаты передаются между контейнерами, и определяется глобальный максимум

Взаимодействие между контейнерами

Используется MPI для передачи данных между контейнерами Сообщения о статусе соединения (например, "Соединение установлено") выводятся в консоль

Замер времени

Для параллельного алгоритма замеряется время выполнения Результаты выводятся на экран

Результаты работы на матрице 10000 × 10000

Тест Время выполнения Тест №1 520 мс Тест №2 530 мс Тест №3 510 мс

Результаты работы на матрице 5000 × 5000

Тест Время выполнения Тест №1 130 мс Тест №2 135 мс Тест №3 128 мс

Результаты работы на матрице 2000 × 2000

Тест Время выполнения Тест №1 22 мс Тест №2 24 мс Тест №3 21 мс

Вывод

Параллельный алгоритм с использованием MPI показывает значительное ускорение по сравнению с однопоточным и многопоточными подходами (например, ThreadPoolExecutor и ForkJoinPool). Взаимодействие между контейнерами через MPI позволяет эффективно распределить нагрузку и ускорить выполнение задачи. Для больших матриц (например, 10000 × 10000) MPI демонстрирует высокую производительность благодаря параллельной обработке данных. Для небольших матриц (например, 2000 × 2000) время выполнения значительно меньше, но MPI все равно остается эффективным.