DAS_2024_1/zhimolostnova_anna_lab_6/README.md

87 lines
6.4 KiB
Markdown
Raw Permalink Normal View History

2024-10-22 20:31:03 +04:00
# Отчет по лабораторной работе №6
2024-10-22 20:30:00 +04:00
## Описание задачи
Данная работа нацелена на изучение эффективности параллельных вычислений при нахождении детерминанта
квадратной матрицы. Были реализованы два алгоритма:
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)