137 lines
9.4 KiB
Markdown
137 lines
9.4 KiB
Markdown
|
Альмухамметов ПИбд-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
|