distributed-computing/tasks/mironov-eo/lab_5/README.md
2023-12-06 13:58:56 +03:00

66 lines
2.6 KiB
Markdown
Raw 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#, Консольное приложение.
Проверяю правильность работы алгоритма
```c#
public int[][] MultiplicationMatrix(int[,] firstMatrix, int[,] secondMatrix, int threadCount = 1)
{
var resultMatrix = new ConcurrentDictionary<int, int>[firstMatrix.GetLength(0)]
.Select(x => new ConcurrentDictionary<int, int>())
.ToArray();
for (int i = 0; i < firstMatrix.GetLength(0); i++)
{
Parallel.For(0, secondMatrix.GetLength(1), new ParallelOptions()
{
MaxDegreeOfParallelism = threadCount
},
(j) =>
{
for (int k = 0; k < secondMatrix.GetLength(0); k++)
{
resultMatrix[i].AddOrUpdate(
j,
firstMatrix[i, k] * secondMatrix[k, j],
(key, value) => value + firstMatrix[i, k] * secondMatrix[k, j]);
}
});
}
return resultMatrix
.Select(x => x.Values.ToArray())
.ToArray();
}
```
![](pic/1.png)
## Бенчмарки
Делаю 9 пробных запусков
Матрицы 10х10, 100х100, 1000х1000
Количество потоков 1,5,15
![](pic/2.png)
Предполагал что 15 потоков хватит, чтобы показать что бывает когда кол-во потоков в приложении больше кол-ва потоков в процессоре.
Однако этого не произошло, поэтому запускаю следующий тест на 55 потоков
![](pic/3.png)
Наблюдаем увелечение времени обработки. Это связано с с затратами на переключение контекста, синхронизацию потоков и т.п.
Вывод: Параллельный алгоритм работает быстрее чем однопоточный в случае если ресурсы процесора это позволяют.
В случае указания слишком большого числа потоков параллелльный алгоритм будет работать чуть медленее из-за накладных расходов на переключение контекста синхронизации и т.д.