From 20a39fa9a5cb3408327d6941f4b6c8c653fadac9 Mon Sep 17 00:00:00 2001 From: AnnZhimol Date: Tue, 22 Oct 2024 19:30:00 +0300 Subject: [PATCH] lab 6 complete --- zhimolostnova_anna_lab_6/README.md | 87 ++++++++++++++++++++++ zhimolostnova_anna_lab_6/alg/parallel.go | 47 ++++++++++++ zhimolostnova_anna_lab_6/alg/regular.go | 30 ++++++++ zhimolostnova_anna_lab_6/images/img.png | Bin 0 -> 11901 bytes zhimolostnova_anna_lab_6/images/img_1.png | Bin 0 -> 45890 bytes zhimolostnova_anna_lab_6/run.go | 52 +++++++++++++ zhimolostnova_anna_lab_6/util/matrix.go | 36 +++++++++ 7 files changed, 252 insertions(+) create mode 100644 zhimolostnova_anna_lab_6/README.md create mode 100644 zhimolostnova_anna_lab_6/alg/parallel.go create mode 100644 zhimolostnova_anna_lab_6/alg/regular.go create mode 100644 zhimolostnova_anna_lab_6/images/img.png create mode 100644 zhimolostnova_anna_lab_6/images/img_1.png create mode 100644 zhimolostnova_anna_lab_6/run.go create mode 100644 zhimolostnova_anna_lab_6/util/matrix.go diff --git a/zhimolostnova_anna_lab_6/README.md b/zhimolostnova_anna_lab_6/README.md new file mode 100644 index 0000000..791a859 --- /dev/null +++ b/zhimolostnova_anna_lab_6/README.md @@ -0,0 +1,87 @@ +# Отчет по лабораторной работе №5 + +## Описание задачи + +Данная работа нацелена на изучение эффективности параллельных вычислений при нахождении детерминанта +квадратной матрицы. Были реализованы два алгоритма: + +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) \ No newline at end of file diff --git a/zhimolostnova_anna_lab_6/alg/parallel.go b/zhimolostnova_anna_lab_6/alg/parallel.go new file mode 100644 index 0000000..1987928 --- /dev/null +++ b/zhimolostnova_anna_lab_6/alg/parallel.go @@ -0,0 +1,47 @@ +package alg + +import ( + "sync" + "zhimolostnova_anna_lab_6/util" +) + +func DeterminantParallel(matrix [][]float64, workers int) float64 { + size := len(matrix) + + if size == 1 { + return matrix[0][0] + } + + if size == 2 { + return matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0] + } + + det := 0.0 + wg := sync.WaitGroup{} + mu := sync.Mutex{} + chunks := size / workers + if chunks == 0 { + chunks = 1 + } + for j := 0; j < size; j += chunks { + wg.Add(1) + go func(jStart int) { + defer wg.Done() + localDet := 0.0 + for jj := jStart; jj < jStart+chunks && jj < size; jj++ { + subMatrix := util.GetMinor(matrix, jj) + sign := 1 + if jj%2 != 0 { + sign = -1 + } + localDet += float64(sign) * matrix[0][jj] * DeterminantParallel(subMatrix, workers) + } + mu.Lock() + det += localDet + mu.Unlock() + }(j) + } + + wg.Wait() + return det +} diff --git a/zhimolostnova_anna_lab_6/alg/regular.go b/zhimolostnova_anna_lab_6/alg/regular.go new file mode 100644 index 0000000..eec7134 --- /dev/null +++ b/zhimolostnova_anna_lab_6/alg/regular.go @@ -0,0 +1,30 @@ +package alg + +import ( + "zhimolostnova_anna_lab_6/util" +) + +// Determinant Функция для вычисления детерминанта матрицы +func Determinant(matrix [][]float64) float64 { + size := len(matrix) + + if size == 1 { + return matrix[0][0] + } + + if size == 2 { + return matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0] + } + + // Рекурсивное вычисление детерминанта по разложению по первой строке + det := 0.0 + for j := 0; j < size; j++ { + subMatrix := util.GetMinor(matrix, j) + sign := 1 + if j%2 != 0 { + sign = -1 + } + det += float64(sign) * matrix[0][j] * Determinant(subMatrix) + } + return det +} diff --git a/zhimolostnova_anna_lab_6/images/img.png b/zhimolostnova_anna_lab_6/images/img.png new file mode 100644 index 0000000000000000000000000000000000000000..e3ac208befd321e9e8f711c5cfff33a0dfcfe45f GIT binary patch literal 11901 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