DAS_2024_1/pupkov_alexey_lab_5/README.md
2024-11-16 23:47:02 +03:00

70 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Пупков Алексей ИСЭбд-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)