forked from Alexey/DAS_2024_1
36 lines
4.1 KiB
Markdown
36 lines
4.1 KiB
Markdown
|
# Лабораторная работа 6: Определение детерминанта матрицы с помощью параллельных вычислений
|
|||
|
|
|||
|
## Описание
|
|||
|
|
|||
|
В лабраторной работе программа вычисляет определитель матрицы двумя способами: параллельным методом с использованием нескольких процессов и последовательным методом, а также сравнивает их производительность. Функция determinant_block вычисляет детерминант переданного блока матрицы с помощью функции np.linalg.det из библиотеки NumPy. Функция determinant_parallel разделяет исходную матрицу на блоки (строго по строкам и столбцам) в зависимости от количества процессов, заданного аргументом num_processes. После этого каждый блок обрабатывается отдельным процессом в пуле процессов (Pool), и вычисленные детерминанты блоков перемножаются, чтобы получить общий детерминант матрицы. Функция benchmark генерирует случайную квадратную матрицу заданного размера, измеряет время выполнения параллельного и последовательного вычисления детерминанта, а затем выводит результаты. Основная часть программы запускается, если файл выполняется напрямую. Используется модуль argparse для получения аргумента командной строки --processes, который задает количество процессов для параллельного вычисления (по умолчанию 4). В цикле for функция benchmark выполняется для матриц размеров 100x100, 300x300 и 500x500, сравнивая производительность последовательного и параллельного подходов.
|
|||
|
|
|||
|
## Результаты
|
|||
|
|
|||
|
В процессе тестирования были получены следующие результаты:
|
|||
|
|
|||
|
### Скриншоты результатов
|
|||
|
|
|||
|
#### Результат бенчамарка при 1 процессе:
|
|||
|

|
|||
|
|
|||
|
#### Результат бенчамарка при 2 процессах:
|
|||
|

|
|||
|
|
|||
|
#### Результат бенчамарка при 3 процессах:
|
|||
|

|
|||
|
|
|||
|
#### Результат бенчамарка при 4 процессах:
|
|||
|

|
|||
|
|
|||
|
|
|||
|
|
|||
|
## Выводы
|
|||
|
|
|||
|
1. **Производительность**: Для небольших матриц (например, 100x100) параллельное вычисление демонстрирует замедление по сравнению с последовательным методом из-за накладных расходов на создание и управление процессами.
|
|||
|
|
|||
|
2. **Эффективность**: С увеличением размера матриц (300x300 и 500x500) время выполнения параллельного алгоритма также растёт, что свидетельствует о снижении его эффективности при использовании большего числа процессов. В некоторых тестах, например, для матрицы 500x500 при использовании 3 и 4 процессов, параллельный алгоритм оказался медленнее последовательного.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
## Ссылка на видео
|
|||
|
https://vkvideo.ru/video286865610_456239229?list=ln-59QwPscwM3KZRLxg1E
|