# Лабораторная работа №5 - Параллельное вычисление детерминант матриц ## Задание В данной лабораторной работе было необходимо реализовать вычисление детерминанта квадратной матрицы двумя способами: 1. Последовательное вычисление. 2. Параллельное вычисление с возможностью задания количества потоков. Основная цель — изучить эффект параллельных вычислений и оценить прирост производительности при увеличении количества потоков. ## Запуск Для запуска алгоритма вычисления детерминанта потребуется Python и модуль `multiprocessing`. Запуск теста производительности: ``` python main.py ``` ## Результаты Ниже представлены результаты бенчмарков для различных размеров матриц и разного количества потоков: | Размер матрицы | Потоки | Время (последовательное) | Время (параллельное) | Ускорение | |----------------|--------|--------------------------|-----------------------|-----------| | **100x100** | 1 | 0.0100 s | 0.1957 s | 0.05 | | | 2 | 0.0100 s | 0.1805 s | 0.06 | | | 4 | 0.0100 s | 0.2080 s | 0.05 | | | 6 | 0.0100 s | 0.3015 s | 0.03 | | | 8 | 0.0100 s | 0.2370 s | 0.04 | | | 12 | 0.0100 s | 0.2850 s | 0.04 | | | 16 | 0.0100 s | 0.3188 s | 0.03 | | Размер матрицы | Потоки | Время (последовательное) | Время (параллельное) | Ускорение | |----------------|--------|--------------------------|-----------------------|-----------| | **300x300** | 1 | 0.0970 s | 0.2766 s | 0.35 | | | 2 | 0.0970 s | 0.2570 s | 0.38 | | | 4 | 0.0970 s | 0.2360 s | 0.41 | | | 6 | 0.0970 s | 0.2856 s | 0.34 | | | 8 | 0.0970 s | 0.3120 s | 0.31 | | | 12 | 0.0970 s | 0.3692 s | 0.26 | | | 16 | 0.0970 s | 0.5351 s | 0.18 | | Размер матрицы | Потоки | Время (последовательное) | Время (параллельное) | Ускорение | |----------------|--------|--------------------------|-----------------------|-----------| | **500x500** | 1 | 0.3000 s | 0.5301 s | 0.57 | | | 2 | 0.3000 s | 0.3850 s | 0.78 | | | 4 | 0.3000 s | 0.3512 s | 0.85 | | | 6 | 0.3000 s | 0.3000 s | 1.00 | | | 8 | 0.3000 s | 0.3300 s | 0.91 | | | 12 | 0.3000 s | 0.3979 s | 0.75 | | | 16 | 0.3000 s | 0.4740 s | 0.63 | | Размер матрицы | Потоки | Время (последовательное) | Время (параллельное) | Ускорение | |----------------|--------|--------------------------|-----------------------|-----------| | **1000x1000** | 1 | 1.1871 s | 1.3527 s | 0.88 | | | 2 | 1.1871 s | 1.1602 s | 1.02 | | | 4 | 1.1871 s | 0.7971 s | 1.49 | | | 6 | 1.1871 s | 0.6782 s | 1.75 | | | 8 | 1.1871 s | 0.6263 s | 1.90 | | | 12 | 1.1871 s | 0.6636 s | 1.79 | | | 16 | 1.1871 s | 0.7715 s | 1.54 | | Размер матрицы | Потоки | Время (последовательное) | Время (параллельное) | Ускорение | |----------------|--------|--------------------------|-----------------------|-----------| | **1200x1200** | 1 | 1.7012 s | 1.8796 s | 0.91 | | | 2 | 1.7012 s | 1.5037 s | 1.13 | | | 4 | 1.7012 s | 1.0827 s | 1.57 | | | 6 | 1.7012 s | 0.8606 s | 1.98 | | | 8 | 1.7012 s | 0.8093 s | 2.10 | | | 12 | 1.7012 s | 0.8072 s | 2.11 | | | 16 | 1.7012 s | 0.9291 s | 1.80 | ## Выводы Из результатов видно, что ускорение при использовании параллельного алгоритма зависит от размера матрицы и количества потоков: - Для небольших матриц (например, 100x100) параллельный алгоритм не даёт значительного ускорения из-за накладных расходов на создание потоков. - Для больших матриц (например, 1000x1000 и 1200x1200) параллельный алгоритм даёт существенное ускорение, достигая оптимальных значений при использовании 8–12 потоков. - Увеличение количества потоков сверх количества ядер процессора не улучшает производительность и даже может её снижать из-за накладных расходов на управление потоками. Таким образом, для эффективного параллельного вычисления детерминанта матриц важно учитывать размер данных и правильно подбирать количество потоков. ## [Видео](https://disk.yandex.ru/i/Tov7E9dy7Kt5vA)