# Пупков Алексей ИСЭбд-41 # Отчет по умножению матриц ## Описание В данной лабораторной работе реализованы два алгоритма для умножения больших квадратных матриц: последовательный и параллельный. Для параллельного вычисления используется библиотека concurrent.futures в Python. Программа позволяет задавать количество процессов, что позволяет наблюдать за изменением производительности при увеличении числа потоков. ## Как работает код: 1. Импорт библиотек - concurrent.futures помогает запускать параллельные задачи с использованием потоков - time используется для измерения времени выполнения алгоритмов - numpy используется для работы с матрицами и для вычислений - argparse для обработки аргументов командной строки 2. Функция matrix_multiply_sequential(A, B) - Выполняет последовательное умножение двух матриц A и B. 3. Функция worker(A, B, C, start_row, end_row) - Выполняет умножение для части строк матрицы, параметры start_row и end_row определяют диапазон строк, которые нужно вычислить 4. Функция matrix_multiply_parallel(A, B, num_threads) - Реализует параллельное умножение матриц 5. Функция benchmark(matrix_sizes, num_threads_list) - Выполняет бенчмаркинг (измерение времени выполнения) для обоих методов умножения ## Результаты Размер матриц: 100x100 Последовательное умножение заняло: 0.0558 секунд Параллельное умножение с 2 потоками заняло: 0.0886 секунд Параллельное умножение с 4 потоками заняло: 0.0876 секунд Параллельное умножение с 8 потоками заняло: 0.0868 секунд Параллельное умножение с 16 потоками заняло: 0.0914 секунд Размер матриц: 300x300 Последовательное умножение заняло: 1.6149 секунд Параллельное умножение с 2 потоками заняло: 2.4936 секунд Параллельное умножение с 4 потоками заняло: 2.4383 секунд Параллельное умножение с 8 потоками заняло: 2.4458 секунд Параллельное умножение с 16 потоками заняло: 2.4899 секунд Размер матриц: 500x500 Последовательное умножение заняло: 7.9416 секунд Параллельное умножение с 2 потоками заняло: 11.8896 секунд Параллельное умножение с 4 потоками заняло: 11.8901 секунд Параллельное умножение с 8 потоками заняло: 12.0230 секунд Параллельное умножение с 16 потоками заняло: 11.8548 секунд ## Выводы Во всех случаях параллельный алгоритм выполняется дольше, чем последовательный. На рассматриваемых матрицах (100x100, 300x300, 500x500) последовательное умножение оказывается более выгодным. Это связано с тем, что накладные расходы на параллельное исполнение и синхронизацию между потоками превышают время, которое можно сэкономить за счёт многопоточности. ## Запуск Python main.py – threads 2 4 8 16 [Ссылка на демонстрацию работы программы](https://vk.com/video547368103_456239605?list=ln-ZAsjrYkuwZp6I4ghXC)