distributed-computing/tasks/zinoveva-ad/lab_5/README.md
2023-12-18 18:15:41 +04:00

64 lines
2.3 KiB
Markdown
Raw Permalink 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.

# Отчет по лабораторной работе №5
Выполнила студентка гр. ИСЭбд-41 Зиновьева А. Д.
## Создание приложения
Было выбрано консольное приложение, язык программирования - c#.
Обычный алгоритм:
```cs
static int[,] MultiplyMatrices(int[,] matrixA, int[,] matrixB, int size)
{
int[,] result = new int[size, size];
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
result[i, j] = 0;
for (int k = 0; k < size; k++)
{
result[i, j] += matrixA[i, k] * matrixB[k, j];
}
}
}
return result;
}
```
Параллельный алгоритм:
```cs
static int[,] ParallelMultiplyMatrices(int[,] matrixA, int[,] matrixB, int size, int threads)
{
int[,] result = new int[size, size];
Parallel.For(0, size, new ParallelOptions { MaxDegreeOfParallelism = threads }, i =>
{
for (int j = 0; j < size; j++)
{
result[i, j] = 0;
for (int k = 0; k < size; k++)
{
result[i, j] += matrixA[i, k] * matrixB[k, j];
}
}
});
return result;
}
```
![](pic/Screenshot_1.jpg)
В результате обычный алгоритм выполнился за ``0,0003575`` секунды, а паралелльный за ``0,0193432`` секунды.
## Бенчмарки
Протестируем обычный и параллельный алгоритмы на матрицах различных размеров: 100х100, 300х300 и 500х500.
Количество потоков: ``4``
![](pic/Screenshot_2.jpg)
Количество потоков: ``12``
![](pic/Screenshot_3.jpg)
``Вывод``: Последовательный алгоритм работает быстрее, если количество элементов не слишком большое. Параллельный же алгоритм работает быстрее только при наличии большого количества операций и данных. Оптимальное количество потоков для эффективной работы - 12 (так в сравнении с 4 получилось быстрее).