66 lines
2.8 KiB
Markdown
66 lines
2.8 KiB
Markdown
|
# Отчет по лабораторной работе №5
|
|||
|
|
|||
|
Выполнила студентка гр. ИСЭбд-41 Островская С.Ф.
|
|||
|
|
|||
|
## Создание приложения
|
|||
|
|
|||
|
Было выбрано консольное приложение, язык программирования - c#.
|
|||
|
|
|||
|
Обычный алгоритм:
|
|||
|
|
|||
|
```cs
|
|||
|
static void SequentialDeterminantCalculation(int matrixSize, int lowerLimit, int upperLimit)
|
|||
|
{
|
|||
|
int[][] randomMatrix = GenerateRandomMatrix(matrixSize, lowerLimit, upperLimit);
|
|||
|
|
|||
|
Stopwatch stopwatch = new Stopwatch();
|
|||
|
stopwatch.Start();
|
|||
|
int result = Determinant(randomMatrix);
|
|||
|
stopwatch.Stop();
|
|||
|
TimeSpan elapsedTime = stopwatch.Elapsed;
|
|||
|
Console.WriteLine($"Последовательный детерминант: {result}");
|
|||
|
Console.WriteLine($"Последовательное время: {elapsedTime.TotalSeconds:F7} секунд");
|
|||
|
}
|
|||
|
```
|
|||
|
Параллельный алгоритм:
|
|||
|
|
|||
|
```cs
|
|||
|
static void ParallelDeterminantCalculation(int matrixSize, int lowerLimit, int upperLimit, int numProcesses)
|
|||
|
{
|
|||
|
int[][] randomMatrix = GenerateRandomMatrix(matrixSize, lowerLimit, upperLimit);
|
|||
|
|
|||
|
int[][] matricesToProcess = new int[matrixSize][];
|
|||
|
for (int col = 0; col < matrixSize; col++)
|
|||
|
{
|
|||
|
matricesToProcess[col] = Submatrix(randomMatrix, 0, col)[0];
|
|||
|
}
|
|||
|
|
|||
|
Stopwatch stopwatch = new Stopwatch();
|
|||
|
stopwatch.Start();
|
|||
|
int[] determinants = new int[matrixSize];
|
|||
|
Parallel.For(0, matrixSize, new ParallelOptions { MaxDegreeOfParallelism = numProcesses }, col =>
|
|||
|
{
|
|||
|
determinants[col] = Determinant(new int[][] { matricesToProcess[col] });
|
|||
|
});
|
|||
|
|
|||
|
int result = 0;
|
|||
|
for (int col = 0; col < matrixSize; col++)
|
|||
|
{
|
|||
|
result += ((-1) * col) * randomMatrix[0][col] * determinants[col];
|
|||
|
}
|
|||
|
stopwatch.Stop();
|
|||
|
TimeSpan elapsedTime = stopwatch.Elapsed;
|
|||
|
Console.WriteLine($"Параллельный детерминант: {result}");
|
|||
|
Console.WriteLine($"Параллельное время: {elapsedTime.TotalSeconds:F7} секунд");
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## Бенчмарки
|
|||
|
|
|||
|
Для примера была взята матрица размерностью 10х10, поскольку для матриц больших размеров детерминант вычисляется слишком долго.
|
|||
|
|
|||
|
|
|||
|
![](pic/pic1.jpg)
|
|||
|
|
|||
|
|
|||
|
``Вывод``: Обыный алгоритм работает быстрее, если количество элементов не слишком много. Параллельный же алгоритм работает быстрее только при наличии большого количества операций и данных.
|