| **4000x4000** | 1 | 153.4893 s | 142.6276 s | 1.08 |
| | 2 | 153.4893 s | 72.1959 s | 2.13 |
| | 4 | 153.4893 s | 41.6678 s | 3.68 |
| | 6 | 153.4893 s | 33.3039 s | 4.61 |
| | 8 | 153.4893 s | 30.3821 s | 5.05 |
| | 12 | 153.4893 s | 27.2013 s | 5.64 |
| | 16 | 153.4893 s | 29.0246 s | 5.29 |
| Количество потоков | Загрузка процессора (%) |
|--------------------|-------------------------|
| 1 поток | 12% |
| 2 потока | 22-24% |
| 4 потока | 44-46% |
| 6 потоков | 64-67% |
| 8 потоков | 85-87% |
| 12 потоков | 92-96% |
| 16 потоков | 95-96% |
## Выводы
Из результатов видно, что ускорение при использовании параллельного алгоритма зависит от размера матрицы и количества потоков:
- Для небольших матриц (например, 100x100) параллельный алгоритм не дает значительного ускорения и даже может работать медленнее из-за накладных расходов на создание потоков.
- Для больших матриц (например, 4000x4000) параллельный алгоритм дает существенное ускорение, достигая оптимальных значений на 8–12 потоках.
- Если количество потоков превышает количество ядер процессора, наблюдается ухудшение производительности, так как накладные расходы на управление потоками начинают превышать прирост от параллелизма.
- Загруженность процессора: При увеличении количества потоков наблюдается значительное повышение загрузки процессора. На конфигурации с 16 потоками процессор работает на 95-96%, что указывает на высокую эффективность использования доступных ядер. Однако увеличение числа потоков сверх количества доступных ядер (например, использование 16 потоков на 8-ядерном процессоре) не дает заметного увеличения производительности и может даже привести к ее снижению из-за конкуренции за ресурсы.
- Таким образом, для эффективного параллельного умножения матриц важно учитывать размер данных и правильно подбирать количество потоков.