72 lines
2.1 KiB
Markdown
72 lines
2.1 KiB
Markdown
|
# Отчет по лабораторной работе №6
|
|||
|
|
|||
|
Выполнила студентка гр. ИСЭбд-41 Зиновьева А. Д.
|
|||
|
|
|||
|
## Создание приложения
|
|||
|
|
|||
|
Было выбрано консольное приложение, язык программирования - c#.
|
|||
|
|
|||
|
Обычный алгоритм:
|
|||
|
|
|||
|
```cs
|
|||
|
static double CalculateDeterminantSequential(int[,] matrix)
|
|||
|
{
|
|||
|
int size = matrix.GetLength(0);
|
|||
|
double determinant = 0;
|
|||
|
|
|||
|
if (size == 1)
|
|||
|
{
|
|||
|
determinant = matrix[0, 0];
|
|||
|
}
|
|||
|
else if (size == 2)
|
|||
|
{
|
|||
|
determinant = matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0];
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
for (int j = 0; j < size; j++)
|
|||
|
{
|
|||
|
determinant += matrix[0, j] * CalculateMinor(matrix, 0, j) * Math.Pow(-1, j);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return determinant;
|
|||
|
}
|
|||
|
```
|
|||
|
Параллельный алгоритм:
|
|||
|
|
|||
|
```cs
|
|||
|
static double CalculateDeterminantParallel(int[,] matrix, int threads)
|
|||
|
{
|
|||
|
int size = matrix.GetLength(0);
|
|||
|
double determinant = 0;
|
|||
|
|
|||
|
if (size == 1)
|
|||
|
{
|
|||
|
determinant = matrix[0, 0];
|
|||
|
}
|
|||
|
else if (size == 2)
|
|||
|
{
|
|||
|
determinant = matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0];
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Parallel.For(0, size, new ParallelOptions { MaxDegreeOfParallelism = threads }, j =>
|
|||
|
{
|
|||
|
determinant += matrix[0, j] * CalculateMinor(matrix, 0, j) * Math.Pow(-1, j);
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
return determinant;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## Бенчмарки
|
|||
|
|
|||
|
Для примера была взята матрица размерностью 10х10, поскольку для матриц больших размеров детерминант вычисляется слишком долго.
|
|||
|
|
|||
|
|
|||
|
![](pic/pic1.jpg)
|
|||
|
|
|||
|
|
|||
|
``Вывод``: Обычный (последовательный) алгоритм работает быстрее, если количество элементов не слишком много. Параллельный же алгоритм работает быстрее только при наличии большого количества операций и данных.
|