# Лабораторная работа №5 ## Задание Реализовать последовательное и параллельное умножение матриц размером 100x100, 300x300, 500x500 элементов, сравнить результаты. ## Описание алгоритмов ### Последовательное умножение - Реализовано при помощи тройного цикла умножения квадратных матриц с сложностью O(n³), т.е. при увеличении размера матриц увеличится и время работы алгоритма. ### Параллельное умножение - Реализовано при помощи разделения матриц на части в зависимости от количества потоков, а после умножаются две прямоугольные матрицы. - Сложность аналогична последовательному алгоритму, но разделение матриц значительно снижает время работы алгоритма. ### Умножение с использованием библиотеки Numpy - Умножение с ипользованием библиотеки Numpy максимально отпимизировано за счет кэшированияи и использования библиотеки BLAS (Basic Linear Algebra Subprograms) на языке C для выполнения линейной алгребры. ## Результаты ![](report.png "") ### Вывод - Параллельное умножение матриц эффективно при работе с большими матрицами при увеличении потоков. - Последовательное умножение матриц эффективно использовать при меньших размерах матриц, где выйгрыш от управления потоками минимален. - Numpy показал блестящий результат. ## Видеодемонстрация работоспособности [Демонстрация работы](https://files.ulstu.ru/s/4jmPMLK3szdKdWS)