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

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

Вариант 5: Нужно определить максимальный элемент матрицы

**Необходимо:**
1. Разработать параллельный вариант алгоритма с применением MPI, где должны быть две копии приложения,
которые соединяются между собой по сети.
2. Замерить время работы алгоритма

**Используемые технологии**
1. MPJ Express - библиотека, реализующая MPI для Java.

**Запуск лабораторной работы**
1. `mpjdaemon -boot 192.168.5.107` - включение демона mpj-express на первом контейнере
2. `mpjdaemon -boot 192.168.5.106` - включение демона mpj-express на втором контейнере
3. `mpjrun.sh -np 2 -dev niodev Main` - запуск приложения

**Что делает программа**
1. Генерирация матрицы
2. Матрица разделяется на две половины. Половина матрицы отправляется во второй контейнер
3. Обработка матрицы и поиск локального максимального элемента в каждой половине
4. Определение глобального максимума

**Тесты**
```
mpjrun.sh -np 2 -dev niodev Main
MPJ Express (0.44) is started in the cluster configuration with niodev
Starting process <0> on <CT107>
Starting process <1> on <secondcontainer>
New max 36703 in container 0
New max 40049 in container 0
New max 93370 in container 1
New max 95505 in container 0
New max 97047 in container 0
New max 99536 in container 0
New max 99823 in container 0
New max 99875 in container 0
New max 99896 in container 0
New max 99901 in container 0
New max 99988 in container 0
New max 94820 in container 1
New max 98237 in container 1
New max 99825 in container 1
New max 99929 in container 1
New max 99965 in container 1
New max 99966 in container 1
New max 99975 in container 1
New max 99981 in container 1
New max 99996 in container 1
New max 99998 in container 1
New max 99999 in container 1
New max 99996 in container 0
New max 99998 in container 0
New max 99999 in container 0
Process 1 local max: 99999
Process 0 local max: 99999
Global max element: 99999
Time: 485045144
Stopping Process <0> on <CT107>
Stopping Process <1> on <secondcontainer>
```

**Вывод**
С помощью MPI можно реализировать паралельный алгоритм некоторой программы. Если сравнивать время поиска максимального элемента с алгоритмами, реализованными в прошлой лабораторной работе(ForkJoinPool и ThreadPoolExecutor), то на одних и тех же значения алгоритм с MPI работает быстрее.
