Виняйкина Екатерина. Технология SEQ | MPI. Умножение матрицы на вектор(Вертикальная ленточная схема). Вариант 12#118
Open
EkaterinaVin wants to merge 1 commit intolearning-process:masterfrom
Conversation
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.
Описание
Реализованы последовательный и параллельный алгоритмы умножения квадратной матрицы на вектор с использованием вертикальной ленточной схемы распределения данных.
Последовательный алгоритм (VinyaikinaEVertRibbonSchemeSEQ) выполняет инициализацию матрицы и вектора единицами, вычисляет скалярное произведение для каждой строки и нормализует итоговую сумму.
Параллельная реализация (VinyaikinaEVertRibbonSchemeMPI) использует MPI для распределения вычислений по вертикальной ленточной схеме. Столбцы матрицы и соответствующие элементы вектора делятся между процессами с помощью MPI_Scatterv. Каждый процесс независимо вычисляет частичные результаты для своих столбцов. Финальный вектор результатов собирается на процессе 0 с помощью MPI_Reduce (операция MPI_SUM), после чего процесс 0 вычисляет общую сумму и рассылает её остальным процессам через MPI_Send/MPI_Recv.
Функциональные тесты, проведенные для матриц различных размеров (от 1×1 до 100×100) и разного количества процессов (от 1 до 30), подтвердили полную корректность реализации: итоговый результат всегда равен входному размеру матрицы n. Performance-тесты на матрице размером 4000×4000 показали, что из-за высоких накладных расходов на коммуникации (особенно MPI_Scatterv для матрицы) параллельная версия уступает последовательной по времени выполнения. Ускорение на 2 процессах составило лишь 0.28 (в режиме pipeline), а эффективность упала до 3.8% на 8 процессах. Это свидетельствует о том, что для данной задачи и размера данных последовательный алгоритм является более эффективным, и параллелизация становится целесообразной только при работе с матрицами существенно большего размера.
Чек-лист
<фамилия>_<первая_буква_имени>_<короткое_название_задачи>clang-formatлокально в моем форке (нет ошибок форматирования)clang-tidyлокально в моем форке (нет предупреждений/ошибок)(например,
nesterov_a_vector_sum), а не вmasterдостоверными