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

Пупков Алексей ИСЭбд-41

Отчет по умножению матриц

Описание

В данной лабораторной работе реализованы два алгоритма для умножения больших квадратных матриц: последовательный и параллельный. Для параллельного вычисления используется библиотека concurrent.futures в Python. Программа позволяет задавать количество процессов, что позволяет наблюдать за изменением производительности при увеличении числа потоков.

Как работает код:

  1. Импорт библиотек
  • concurrent.futures помогает запускать параллельные задачи с использованием потоков
  • time используется для измерения времени выполнения алгоритмов
  • numpy используется для работы с матрицами и для вычислений
  • argparse для обработки аргументов командной строки
  1. Функция matrix_multiply_sequential(A, B)
  • Выполняет последовательное умножение двух матриц A и B.
  1. Функция worker(A, B, C, start_row, end_row)
  • Выполняет умножение для части строк матрицы, параметры start_row и end_row определяют диапазон строк, которые нужно вычислить
  1. Функция matrix_multiply_parallel(A, B, num_threads)
  • Реализует параллельное умножение матриц
  1. Функция 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

Ссылка на демонстрацию работы программы