# Лабораторная работа №5
#### ПИбд-42. Мочалов Данила.

#### Выполнение
Были реализованы два алгоритма для перемножения матриц: обычный и паралелльный. Параллельный алгоритм использует multiprocessing.Pool для разделения вычислений между несколькими процессами. 

#### Результаты бенчмарков:

Были проведены тесты для матриц размером 100x100, 300x300 и 500x500 элементов с разным количеством процессов (1, 5, 10). Результаты представлены в таблице:

| Размер матрицы | Алгоритм   | Кол-во процессов |Время (сек.)|
|----------------|------------|------------------|------------|	
| 100x100        |Обычный     |-                 |0.21        |
| 100x100        |Параллельный|1                 |0.59        |
| 100x100        |Параллельный|5                 |0.34        |
| 100x100        |Параллельный|10                |0.32        |
| 300x300        |Обычный     |-                 |6.59        |   
| 300x300        |Параллельный|1                 |7.03        |
| 300x300        |Параллельный|5                 |2.00        |   
| 300x300        |Параллельный|10                |1.54        |   
| 500x500        |Обычный     |-                 |29.81       |  
| 500x500        |Параллельный|1                 |33.83       |   
| 500x500        |Параллельный|5                 |8.57        |   
| 500x500        |Параллельный|10                |5.67        |
---------------------------------------------------------------
#### Анализ
- Для маленьких матриц (100x100) параллельный алгоритм с одним процессом работает медленнее последовательного. Это связано с накладными расходами на создание и управление процессом, которые превышают выигрыш от параллелизма.

- С увеличением размера матрицы эффективность параллельного алгоритма возрастает. Для матриц 300x300 и 500x500 наблюдается значительное ускорение по сравнению с последовательным алгоритмом.

- Количество процессов, обеспечивающее максимальное ускорение, зависит от размера матрицы и аппаратных возможностей системы. В данном случае, для матрицы 300x300 использование 10 процессов дает лучший результат, а для 500x500 - тоже 10. Дальнейшее увеличение количества процессов может привести к снижению производительности из-за увеличения накладных расходов на межпроцессное взаимодействие.

#### Демонстрация
[Доступна по ссылке](https://drive.google.com/file/d/1GxPw9syJVnxb65zP6uQVNYyLjZ-HrfOo/view?usp=sharing)