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