# Лабораторная работа №6 ПИбд-42 Артамоновой Татьяны

## Цель работы

Разработать и сравнить эффективность последовательного и 
параллельного алгоритмов вычисления определителя квадратной матрицы.

## Методика

Для вычисления определителя использовался рекурсивный алгоритм, основанный 
на разложении по первой строке. Параллельная версия алгоритма реализована 
с помощью библиотеки multiprocessing, разделяя вычисление алгебраических 
дополнений между несколькими процессами. Время выполнения каждого алгоритма 
замерялось для матриц различных размеров (100x100, 300x300, 500x500). 
Эксперименты проводились с различным количеством потоков (1, 2, 4).

## Результаты

Результаты бенчмарка представлены на изображении:
[Фото](images/result.png)

## Анализ результатов

Результаты демонстрируют неоднозначную эффективность параллельного подхода. 
Для матрицы 100x100 параллельные версии работают медленнее, чем последовательная. 
Это объясняется значительными накладными расходами на создание и синхронизацию 
процессов, которые преобладают над выигрышем от распараллеливания для небольших 
задач.

Для матриц 300x300 и 500x500 наблюдается неожиданное поведение: параллельные 
версии работают значительно медленнее, чем последовательная. Это указывает на 
наличие проблем в реализации параллельного алгоритма. Скорее всего, проблема 
связана с неэффективным использованием multiprocessing и значительными накладными 
расходами на межпроцессное взаимодействие, которые перевешивают выигрыш от 
распараллеливания. Рекурсивный алгоритм вычисления детерминанта плохо 
масштабируется при распараллеливании, так как большая часть времени тратится 
на рекурсивные вызовы, которые не могут быть эффективно распределены между 
процессами.

## Выводы

Полученные результаты показывают, что для выбранного рекурсивного 
алгоритма и способа распараллеливания, параллельная реализация не эффективна. 
Для эффективного использования параллельных вычислений необходимы более 
подходящие алгоритмы вычисления определителя, например, алгоритмы, основанные 
на LU-разложении, а также более тщательная оптимизация распараллеливания с 
учетом накладных расходов. В данном случае, последовательный алгоритм оказался 
быстрее для всех размеров матриц, кроме 100х100, где разница незначительна.

### [Видео](https://vk.com/video212084908_456239363)