DAS_2023_1/almukhammetov_bulat_lab_6/README.md
2024-01-07 13:36:54 +04:00

137 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Альмухамметов ПИбд-42
Описание программы:
Эта программа предназначена для расчета детерминанта квадратных матриц с использованием как последовательных, так и параллельных вычислений. Она позволяет оценить и сравнить производительность и использование памяти обоих методов.
Основные функции программы:
Ввод количества потоков: Пользователь может ввести количество потоков, которые будут использоваться для параллельных вычислений. Если введено некорректное значение, по умолчанию используется 4 потока.
Генерация матриц: Программа генерирует квадратные матрицы заданных размеров (6x6, 8x8 и 10x10) со случайными значениями.
Тестирование производительности: Программа выполняет расчет детерминанта для каждой сгенерированной матрицы, используя последовательные и параллельные вычисления. Это повторяется 10 раз для получения средних значений времени выполнения и использованной памяти.
Вывод результатов: После тестирования программа выводит средние значения времени выполнения и использованной памяти для последовательных и параллельных вычислений для каждого размера матрицы.
Основные методы программы:
GenerateMatrix(int rows, int cols): Генерирует матрицу заданного размера с случайными значениями.
TestMatrixOperation(int[,] matrix, int threadCount): Выполняет расчет детерминанта для заданной матрицы обоими методами и измеряет время выполнения и использованную память.
IsSquareMatrix(int[,] matrix): Проверяет, является ли матрица квадратной.
DeterminantParallel(int[,] matrix, int threadCount): Вычисляет детерминант матрицы, используя параллельные вычисления.
DeterminantSequential(int[,] matrix): Вычисляет детерминант матрицы последовательным методом.
CreateSmallerMatrix(int[,] matrix, int excludingRow, int excludingCol): Создает меньшую матрицу путем исключения заданной строки и столбца из исходной матрицы.
Проверка работоспособности:
![Alt text](image.png)
![Alt text](image-1.png)
Результаты:
Введите количество потоков:
2
Прогон #1:
Последовательно: Время: 0 мс, Память: 0 байт
Параллельно: Время: 6 мс, Память: 640 байт
Последовательно: Время: 3 мс, Память: 0 байт
Параллельно: Время: 5 мс, Память: 832 байт
Последовательно: Время: 389 мс, Память: 0 байт
Параллельно: Время: 121 мс, Память: 4744 байт
Прогон #2:
Последовательно: Время: 0 мс, Память: 0 байт
Параллельно: Время: 0 мс, Память: 0 байт
Последовательно: Время: 3 мс, Память: 0 байт
Параллельно: Время: 1 мс, Память: 0 байт
Последовательно: Время: 324 мс, Память: 0 байт
Параллельно: Время: 77 мс, Память: 0 байт
Прогон #3:
Последовательно: Время: 0 мс, Память: 0 байт
Параллельно: Время: 0 мс, Память: 0 байт
Последовательно: Время: 3 мс, Память: 0 байт
Параллельно: Время: 0 мс, Память: 0 байт
Последовательно: Время: 336 мс, Память: 0 байт
Параллельно: Время: 75 мс, Память: 0 байт
Прогон #4:
Последовательно: Время: 0 мс, Память: 0 байт
Параллельно: Время: 0 мс, Память: 0 байт
Последовательно: Время: 3 мс, Память: 0 байт
Параллельно: Время: 1 мс, Память: 0 байт
Последовательно: Время: 317 мс, Память: 0 байт
Параллельно: Время: 75 мс, Память: 0 байт
Прогон #5:
Последовательно: Время: 0 мс, Память: 0 байт
Параллельно: Время: 0 мс, Память: 0 байт
Последовательно: Время: 3 мс, Память: 0 байт
Параллельно: Время: 1 мс, Память: 0 байт
Последовательно: Время: 324 мс, Память: 0 байт
Параллельно: Время: 74 мс, Память: 0 байт
Прогон #6:
Последовательно: Время: 0 мс, Память: 0 байт
Параллельно: Время: 0 мс, Память: 0 байт
Последовательно: Время: 3 мс, Память: 0 байт
Параллельно: Время: 1 мс, Память: 0 байт
Последовательно: Время: 322 мс, Память: 0 байт
Параллельно: Время: 77 мс, Память: 0 байт
Прогон #7:
Последовательно: Время: 0 мс, Память: 0 байт
Параллельно: Время: 0 мс, Память: 0 байт
Последовательно: Время: 3 мс, Память: 0 байт
Параллельно: Время: 1 мс, Память: 0 байт
Последовательно: Время: 341 мс, Память: 0 байт
Параллельно: Время: 74 мс, Память: 0 байт
Прогон #8:
Последовательно: Время: 0 мс, Память: 0 байт
Параллельно: Время: 0 мс, Память: 0 байт
Последовательно: Время: 3 мс, Память: 0 байт
Параллельно: Время: 1 мс, Память: 0 байт
Последовательно: Время: 319 мс, Память: 0 байт
Параллельно: Время: 74 мс, Память: 0 байт
Прогон #9:
Последовательно: Время: 0 мс, Память: 0 байт
Параллельно: Время: 0 мс, Память: 0 байт
Последовательно: Время: 3 мс, Память: 0 байт
Параллельно: Время: 1 мс, Память: 0 байт
Последовательно: Время: 337 мс, Память: 0 байт
Параллельно: Время: 76 мс, Память: 0 байт
Прогон #10:
Последовательно: Время: 0 мс, Память: 0 байт
Параллельно: Время: 0 мс, Память: 0 байт
Последовательно: Время: 3 мс, Память: 0 байт
Параллельно: Время: 0 мс, Память: 0 байт
Последовательно: Время: 348 мс, Память: 0 байт
Параллельно: Время: 78 мс, Память: 0 байт
Среднее время (мс) и расход памяти (байт) для последовательного и параллельного определения детерминанта:
6x6: Последовательно: Время: 0 мс, Память: 0 байт
6x6: Параллельно: Время: 0 мс, Память: 64 байт
8x8: Последовательно: Время: 3 мс, Память: 0 байт
8x8: Параллельно: Время: 1 мс, Память: 83 байт
10x10: Последовательно: Время: 335 мс, Память: 0 байт
10x10: Параллельно: Время: 80 мс, Память: 474 байт
Выводы:
1. Для небольших матриц (6x6 и 8x8) разница во времени выполнения между последовательным и параллельным методами незначительна. Однако при увеличении размера матрицы до 10x10 параллельные вычисления значительно ускоряют процесс.
2. Параллельные вычисления требуют немного больше памяти. Это связано дополнительными затратами на создание и управление потоками.
3. Параллельное выполнение становится более выгодным с увеличением сложности задачи, что видно из значительного уменьшения времени вычислений для 10x10 матрицы.
Видео:
https://vk.com/video228053206_456240783?list=ln-gr1nvdhEV3ZZ74iKE0