Котельникова Анастасия. Технология OMP. Умножение разреженных матриц. Элементы типа double. Формат хранения матрицы – столбцовый (CCS). Вариант 5.#228
Merged
allnes merged 1 commit intolearning-process:masterfrom Mar 7, 2026
Conversation
Ramzan8-88
pushed a commit
to Ramzan8-88/ppc-2026-threads
that referenced
this pull request
Mar 4, 2026
…ло. Вариант 21. (learning-process#228) ## Описание - Задача: Интегрирование – метод Монте-Карло - Вариант: 21 - Технология: SEQ, MPI - Описание: Реализованы последовательная и параллельная (MPI) версии алгоритма численного интегрирования методом Монте-Карло. Алгоритм вычисляет определенный интеграл функции на заданном интервале, используя статистическую выборку случайных точек. --- ## Чеклист - [x] CI успешно выполнен в моем форке (сборка, тесты, документация) - [x] Папка задачи названа `akhmetov_daniil_integration_monte_carlo` и соответствует имени ветки - [x] clang-format пройден локально - [x] clang-tidy пройден локально (не добавлены предупреждения/ошибки) - [x] Функциональные тесты проходят локально - [x] Тесты производительности проходят локально - [x] Отчет (`report.md`) добавлен и следует шаблону - [x] Я подтверждаю, что предоставленная информация является правдивой --------- Co-authored-by: Ваше TheNarhawl <вÐdanah29122003@gmail.om>
SinevArtem
pushed a commit
to SinevArtem/ppc-2026-threads
that referenced
this pull request
Mar 16, 2026
LarisaEgorova
pushed a commit
to LarisaEgorova/ppc-2026-threads
that referenced
this pull request
Mar 17, 2026
GoriachevaKsenia
pushed a commit
to GoriachevaKsenia/ppc-2026-threads
that referenced
this pull request
Mar 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Описание
Описание алгоритма
Реализовано параллельное умножение двух разреженных матриц, хранящихся в столбцовом формате CCS (Compressed Column Storage), с использованием технологий OpenMP. Использование разреженного формата позволяет эффективно работать с матрицами большой размерности, где большинство элементов равны нулю, значительно экономя память и вычислительные ресурсы за счет обработки только ненулевых элементов.
Принцип работы:
Матрица в формате CCS представляется тремя массивами:
values- хранит ненулевые значения матрицы в порядке обхода по столбцамrow_indices- для каждого значения хранит номер строки, где оно находитсяcol_ptrs- массив размера (количество столбцов + 1), гдеcol_ptrs[j]указывает индекс в массивахvalues/row_indices, с которого начинается столбецjВалидация:
Проверяется, что обе входные матрицы имеют корректную CCS структуру:
col_ptrsравенcols + 1;col_ptrs[0]равен 0;col_ptrs[cols]равен общему количеству элементов;Предобработка:
Создается результирующая матрица с размерами a.rows × b.cols. Подготавливаются структуры для параллельного выполнения.
Параллельное умножение:
Алгоритм реализован в два этапа с использованием OpenMP для распределения вычислений между потоками:
Первый этап - подсчет структуры результата:
Результаты подсчета сохраняются в массиве col_start
Второй этап - заполнение значений:
После обработки всех ненулевых элементов столбца:
Постобработка:
Результирующая матрица в формате CCS возвращается как выходные данные. Дополнительной обработки не требуется, так как параллельный алгоритм напрямую формирует корректную CCS структуру.
Тестирование:
Функциональные тесты (5 тестовых случаев):
Каждый тест проверяет полное соответствие результата ожидаемому: размеры матрицы, количество ненулевых элементов, значения элементов, индексы строк и указатели столбцов. Допустимая погрешность для чисел с плавающей точкой -
1e-10.Производительность:
Тесты производительности выполняются на случайных разреженных матрицах размером 450×450 с плотностью 10% (около 16 000 ненулевых элементов в каждой матрице). Для верификации результатов используется умножение матриц с погрешностью
1e-8. Такой размер матрицы позволяет оценить производительность алгоритма в условиях, приближенных к реальным вычислительным задачам.Чек-лист
<фамилия>_<первая_буква_имени>_<короткое_название_задачи>clang-formatлокально в моем форке (нет ошибок форматирования)clang-tidyлокально в моем форке (нет предупреждений/ошибок)(например,
nesterov_a_vector_sum), а не вmasterдостоверными