Files
SSPR_25/pokladov_nikita_lab_2
никита покладов 8a8a4593f0 lab 2 is ready
2025-03-08 01:56:50 +04:00
..
2025-03-08 01:56:50 +04:00
2025-03-08 01:56:50 +04:00

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

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

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

17 Упорядочить строки матрицы по убыванию суммы элементов.

Как запустить лабораторную работу

  • Скачать MPJ Express на два (или более) контейнера
  • Добавить переменные окружения MPJ_HOME

    export MPJ_HOME=/path/to/mpj/ export PATH=$MPJ_HOME/bin:$PATH

  • При компиляции программы нужно использовать скачанные классы, скомпилировать во всех контейнерах

    javac -cp ~$MPJ_HOME/lib/mpj.jar MatrixSortMPI.java

  • Запустить MPJ Daemon в каждом контейнере (используется файл macines с IP)

    mpjboot machines

  • Запуск программы (с отключением всего вывода кроме консольного)

    mpjrun.sh -np 2 -dev niodev MatrixSortMPI 2>/dev/null mpj для кластерного режима использует использует ssh, поэтому надо настроить его между контейнерами.

Какие технологии использовались

Программа использует MPI (Message Passing Interface) для параллельных вычислений и обмена данными между процессами, Java для реализации алгоритма (работа с массивами, генерация случайных чисел, измерение времени) и LXC-контейнеры для изоляции процессов и эмуляции распределённой системы.

Что она делает

Программа генерирует матрицу, распределяет её части между процессами, вычисляет суммы строк, собирает результаты на главном процессе, сортирует строки по убыванию суммы и переставляет их. В конце выводится время выполнения каждого этапа для анализа производительности.

Результаты работы

MPJ Express (0.44) is started in the cluster configuration with niodev
Starting process <0> on <CT116>
Starting process <1> on <CT118>
Процесс 0 запущен на 192.168.16.116
Процесс 0: генерация матрицы
Процесс 1 запущен на 192.168.16.118
Процесс 0: генерация матрицы
Процесс 1: получение данных через Scatter
Процесс 0: получение данных через Scatter
Процесс 0: вычисление сумм строк
Процесс 1: вычисление сумм строк
Процесс 1: получение отсортированных индексов через Bcast
Процесс 0: сортировка строк по сумме
Процесс 0: получение отсортированных индексов через Bcast
Процесс 0: перестановка строк
Процесс 1: перестановка строк
Процесс 0: отправка данных через Gather
Процесс 1: отправка данных через Gather
Процесс 0: финальные результаты
Время генерации: 117 мс
Время суммирования: 31 мс
Время сортировки: 101 мс
Время перестановки: 58 мс
Общее время: 421 мс
Stopping Process <0> on <CT116>
Stopping Process <1> on <CT118>

Вывод

Программа успешно выполняет параллельную сортировку строк матрицы по убыванию суммы их элементов с использованием MPI. Время выполнения каждого этапа выводится в консоль, что позволяет оценить эффективность работы программы. Контейнеры успешно взаимодействуют между собой, обмениваются данными и выдают результат.