Лабораторная работа №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 все равно остается эффективным.