Лабораторная №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. Время выполнения каждого этапа выводится в консоль, что позволяет оценить эффективность работы программы. Контейнеры успешно взаимодействуют между собой, обмениваются данными и выдают результат.