.. | ||
lab_6_implementation/ConsoleAppLab6 | ||
pic | ||
.gitignore | ||
README.md |
Отчет по лабораторной работе №6
Выполнила студентка гр. ИСЭбд-41 Зиновьева А. Д.
Создание приложения
Было выбрано консольное приложение, язык программирования - c#.
Обычный алгоритм:
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;
}
Параллельный алгоритм:
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, поскольку для матриц больших размеров детерминант вычисляется слишком долго.
Вывод
: Обычный (последовательный) алгоритм работает быстрее, если количество элементов не слишком много. Параллельный же алгоритм работает быстрее только при наличии большого количества операций и данных.