main.cpp: основной код программы на C++. Использует библиотеку OpenMP для распараллеливания вычисленийgen.py: скрипт на Python для генерации двух квадратных матриц заданного размера со случайными значениямиverify.py: скрипт для автоматической сверки результата C++ с эталонным значением (используетсяnumpy.dot)run.sh: bash-скрипт для автоматизации процесса: создание окружения, компиляция, запуск генератора, программы и верификатора
Команда для компиляции с поддержкой OpenMP:
g++ -O3 -fopenmp main.cpp -o matrix_multЗапуск автоматического скрипта:
bash start.sh <THREADS_COUNT> <MATRIX_SIZE>| Размер матрицы ( |
Кол-во потоков | Время выполнения (сек) | Верификация |
|---|---|---|---|
| 200 | 1 | 0.00515293 | Пройдена |
| 200 | 2 | 0.00300008 | Пройдена |
| 200 | 3 | 0.00176918 | Пройдена |
| 200 | 4 | 0.00108796 | Пройдена |
| 400 | 1 | 0.0360259 | Пройдена |
| 400 | 2 | 0.016189 | Пройдена |
| 400 | 3 | 0.0112543 | Пройдена |
| 400 | 4 | 0.00992024 | Пройдена |
| 800 | 1 | 0.377512 | Пройдена |
| 800 | 2 | 0.188626 | Пройдена |
| 800 | 3 | 0.136126 | Пройдена |
| 800 | 4 | 0.101037 | Пройдена |
| 1200 | 1 | 1.47221 | Пройдена |
| 1200 | 2 | 0.879413 | Пройдена |
| 1200 | 3 | 0.658919 | Пройдена |
| 1200 | 4 | 0.38095 | Пройдена |
| 1600 | 1 | 8.91008 | Пройдена |
| 1600 | 2 | 3.71802 | Пройдена |
| 1600 | 3 | 2.19717 | Пройдена |
| 1600 | 4 | 1.66299 | Пройдена |
| 2000 | 1 | 27.1503 | Пройдена |
| 2000 | 2 | 11.4617 | Пройдена |
| 2000 | 3 | 7.42694 | Пройдена |
| 2000 | 4 | 5.69533 | Пройдена |
-
Эффективность параллелизма: На матрице
$N=1000$ переход с 1 на 4 потока сократил время с 0.69 до 0.16 сек (ускорение в ~4 раза). Это говорит о высокой эффективности распараллеливания данного алгоритма на данных мощностях. -
Масштабируемость: При увеличении размера матрицы в 2 раза (с 1000 до 2000) время выполнения на 4 потоках выросло с 0.16 до 5.89 сек. Рост времени составил более чем 30 раз, что объясняется теоретической сложностью алгоритма
$O(N^3)$ и возможным исчерпанием ресурсов кэш-памяти процессора при работе с большими объемами данных. - Верификация: Во всех случаях скрипт верификации подтвердил результаты работы кода на C++.
- Программа на C++ (main.cpp)
- Генератор матриц (gen.py)
- Верификатор (verify.py)
- Скрипт запуска (start.sh)
