# Лабораторная работа №3 ## ПИбд-42 Машкова Маргарита ## Задание Требуется сделать два алгоритма: обычный и параллельный (задание со * - реализовать это в рамках одного алгоритма). В параллельном алгоритме предусмотреть ручное задание количества потоков (число потоков = 1 как раз и реализует задание со *), каждый из которых будет выполнять умножение элементов матрицы в рамках своей зоны ответственности. ## Запуск программы Запустить файл `Main` ## Описание работы программы В методе `main` вызывается метод `run`, для которого в качестве параметра передается размер квадратной матрицы `n`. Создается пул потоков `executorService` с использованием `Executors.newFixedThreadPool`, где количество потоков равно количеству доступных процессоров. Генирируются две матрицы `a` и `b` заданного размера `n`. Вызываются соответсвующие методы вычисления произведения матриц и измеряется время. Результаты выполнения выводятся в консоль. ## Тесты ![Вывод в консоли](console.png) ### Выводы По оценки времени выполнения можно сделать вывод, что параллельный алгоритм позволяет ускорять процесс на больших размерах матриц. Для маленьких матриц лучше использовать обычный алгоритм. Для размера матрицы 100*100 быстрее выполнился обычный алгоритм. При последующем увеличении размера матрицы параллельный алгоритм позволяет ускорить вычислительный процесс. Ссылка на видео: https://youtu.be/Vy6kO2mA8Fs