# Отчет по лабораторной работе №6

## Описание задачи

Данная работа нацелена на изучение эффективности параллельных вычислений при нахождении детерминанта 
квадратной матрицы. Были реализованы два алгоритма:

1. **Последовательный алгоритм**: рекурсивное вычисление детерминанта методом разложения по строкам.
2. **Параллельный алгоритм**: вычисление детерминанта с использованием многопоточности, 
   где различные миноры матрицы вычисляются в отдельных потоках.

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

## Структура проекта

Проект состоит из двух файлов с реализацией алгоритмов:

- regular.go (в папке alg) — рекурсивное вычисление детерминанта методом разложения по строкам.
- parallel.go (в папке alg) — вычисление детерминанта с использованием многопоточности,
  где различные миноры матрицы вычисляются в отдельных потоках.
- matrix.go (в папке util) — вспомогательные функции для матриц.
- run.go - запуск бенчмарков.

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

### Последовательный алгоритм

![img.png](images%2Fimg.png)

| Размер матрицы | Время выполнения | 
|----------------|------------------|
| 7x7            | 525.1µs          |
| 8x8            | 5.8494ms         |
| 9x9            | 35.3115ms        |

### Параллельный алгоритм

![img_1.png](images%2Fimg_1.png)

| Размер матрицы | Количество потоков | Время выполнения | 
|----------------|--------------------|------------------|
| 7x7            | 2                  | 2ms              |
| 7x7            | 4                  | 2.0009ms         |
| 7x7            | 6                  | 1.0002ms         |
| 7x7            | 8                  | 1.9989ms         |
| 8x8            | 2                  | 5.0014ms         |
| 8x8            | 4                  | 21.5145ms        |
| 8x8            | 6                  | 16.3851ms        |
| 8x8            | 8                  | 17.9676ms        |
| 9x9            | 2                  | 65.099ms         |
| 9x9            | 4                  | 115.9553ms       |
| 9x9            | 6                  | 161.408ms        |
| 9x9            | 8                  | 117.4747ms       |

## Анализ полученных данных

1. **Последовательный алгоритм**:

   Последовательный алгоритм показал ожидаемую тенденцию: с увеличением размера матрицы, время выполнения 
   увеличивается экспоненциально. Это связано с тем, что сложность рекурсивного алгоритма вычисления 
   детерминанта составляет O(n!), где n — размер матрицы. Даже небольшое увеличение размера матрицы 
   приводит к значительному росту времени вычислений.
2. **Параллельный алгоритм**:
   
   **Матрицы 7x7**:
   - Время параллельного алгоритма оказалось больше, чем последовательного.
     Это связано с тем, что накладные расходы на создание потоков, синхронизацию данных и распределение 
     задач превышают выгоду от параллельного выполнения для небольших задач. Матрица 7x7 слишком мала, 
     чтобы эффективно распределить вычисления между потоками, поэтому многопоточность не дает прироста в 
     производительности.
   
   **Матрицы 8x8**:
   - Параллельное вычисление снова оказалось медленнее последовательного. Время выполнения с увеличением 
     количества потоков увеличивалось вплоть до 4 потоков, что демонстрирует отрицательный эффект от 
     создания избыточного числа потоков для задач такого размера. Наибольшее ускорение удалось достичь с 2 и 6 потоками,
     но даже в этом случае результат (5.0014 и 16.3851 ms) был хуже и менее стабильным последовательного (5.8494 ms).

   **Матрицы 9x9**:
   - Здесь также наблюдается значительное замедление при увеличении количества потоков. Время с 8 потоками
     составило 117.4747 ms, что все равно больше времени последовательного алгоритма (35.3115 ms). Это связано с тем, 
     что при увеличении числа потоков на задаче, где каждая операция по вычислению минора требует больших 
     вычислительных затрат, накладные расходы на управление потоками могут стать слишком велики.

## Демонстрационное видео

Видеозапись доступна по адресу: [https://vk.com/video193898050_456240874](https://vk.com/video193898050_456240874)