Долов Вячеслав. Технология OMP. Умножение разреженных матриц. Элементы типа double. Формат хранения матрицы – строковый (CRS). Вариант 4.#502
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #502 +/- ##
==========================================
+ Coverage 79.16% 79.41% +0.24%
==========================================
Files 267 269 +2
Lines 9325 9442 +117
Branches 3963 4010 +47
==========================================
+ Hits 7382 7498 +116
Misses 1374 1374
- Partials 569 570 +1 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
Изначально рабочая директория была названа dolov_v_crs_mat_mult_seq, из-за чего падали проверки ubuntu/clang-test и ubuntu/gcc-test. В процессе отладки я предполагал, что проблема связана с утечками памяти (по логам Valgrind), поэтому делал несколько дополнительных коммитов и много менял свой код, пытаясь это исправить. Однако позже выяснилось, что причина была в некорректном названии рабочей директории. При этом сам алгоритм и итоговая реализация не поменялись — текущий код полностью совпадает с версией из коммита от 21.03.2026:44a4397, который был сделан до дедлайна и локально все проверки на нем проходили кроме ubuntu. Данный PR отличается от предыдущего закрытого PR (#490) только переименованием рабочей директории, а его я открывал, потому что при похожих проблемах у некоторых студентов CI проходил, хотя падал в форке. Прошу учесть, что задержка сдачи была связана с поиском причины падения CI, а не с доработкой алгоритма. |
Описание
Для решения задачи был использован алгоритм с предварительным транспонированием второй матрицы. Это позволило превратить сложный поиск элементов по столбцам в простое скалярное произведение строк, что гораздо удобнее для формата CRS. Основная работа распараллелена по строкам первой матрицы. Чтобы нагрузка на потоки распределялась равномерно, я использовал динамическое расписание dynamic.
Внутри параллельного блока каждый поток собирает свои данные в локальные векторы, которые потом переносятся в итоговую матрицу. Это помогло избежать лишних блокировок и гонки данных. Я провел функциональные и перформанс-тесты: все проверки проходят успешно, а результаты показывают стабильное ускорение, что подтверждает корректность и эффективность реализации.
Чек-лист
<фамилия>_<первая_буква_имени>_<короткое_название_задачи>clang-formatлокально в моем форке (нет ошибок форматирования)clang-tidyлокально в моем форке (нет предупреждений/ошибок)(например,
nesterov_a_vector_sum), а не вmasterдостоверными