Дорофеев Иван. Технология SEQ|MPI. Умножение разреженных матриц. Элементы типа double. Формат хранения матрицы – столбцовый (CCS). Вариант 5. #306
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.
Описание
Sequential (SEQ)
Последовательная версия умножения разреженных матриц выполняется в одном процессе и не использует межпроцессное взаимодействие. Обе входные матрицы полностью находятся в одном адресном пространстве и хранятся в столбцовом формате CCS (Compressed Column Storage).
Алгоритм последовательно обходит столбцы второй матрицы, извлекает ненулевые элементы и выполняет умножение на соответствующие столбцы первой матрицы. Результаты аккумулируются в выходной структуре, также представленной в формате CCS, при этом нулевые элементы не сохраняются.
SEQ-реализация служит базовым вариантом для проверки корректности и используется для сравнения производительности с параллельной MPI-версией.
Parallel (MPI)
Параллельная версия умножения разреженных матриц реализована с использованием MPI и основана на распараллеливании по столбцам, что естественным образом соответствует формату хранения CCS.
В начале работы столбцы второй матрицы распределяются между процессами. Каждый процесс независимо выполняет умножение выделенной ему части столбцов на первую матрицу и формирует локальный фрагмент результирующей матрицы в формате CCS. Межпроцессные вычисления отсутствуют, так как каждый столбец результата может быть вычислен независимо.
После завершения локальных вычислений частичные результаты передаются корневому процессу и объединяются в итоговую матрицу. Такой подход обеспечивает корректность вычислений и позволяет использовать параллелизм, однако эффективность зависит от плотности матриц и соотношения вычислений и накладных расходов на коммуникации.
Чек-лист
<фамилия>_<первая_буква_имени>_<короткое_название_задачи>clang-formatлокально в моем форке (нет ошибок форматирования)clang-tidyлокально в моем форке (нет предупреждений/ошибок)nesterov_a_vector_sum), а не вmaster