Skip to content

Виняйкина Екатерина. Технология SEQ | MPI. Умножение матрицы на вектор(Вертикальная ленточная схема). Вариант 12#118

Open
EkaterinaVin wants to merge 1 commit intolearning-process:masterfrom
EkaterinaVin:vinyaikina_e_vert_ribbon_scheme
Open

Виняйкина Екатерина. Технология SEQ | MPI. Умножение матрицы на вектор(Вертикальная ленточная схема). Вариант 12#118
EkaterinaVin wants to merge 1 commit intolearning-process:masterfrom
EkaterinaVin:vinyaikina_e_vert_ribbon_scheme

Conversation

@EkaterinaVin
Copy link

@EkaterinaVin EkaterinaVin commented Feb 28, 2026

Описание

  • Задача: Умножение матрицы на вектор(Вертикальная ленточная схема)
  • Вариант: 12
  • Технология: SEQ, MPI.
  • Описание
    Реализованы последовательный и параллельный алгоритмы умножения квадратной матрицы на вектор с использованием вертикальной ленточной схемы распределения данных.
    Последовательный алгоритм (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 процессах. Это свидетельствует о том, что для данной задачи и размера данных последовательный алгоритм является более эффективным, и параллелизация становится целесообразной только при работе с матрицами существенно большего размера.

Чек-лист

  • Статус CI: Все CI-задачи (сборка, тесты, генерация отчёта) успешно проходят на моей ветке в моем форке
  • Директория и именование задачи: Я создал директорию с именем <фамилия>_<первая_буква_имени>_<короткое_название_задачи>
  • Полное описание задачи: Я предоставил полное описание задачи в теле pull request
  • clang-format: Мои изменения успешно проходят clang-format локально в моем форке (нет ошибок форматирования)
  • clang-tidy: Мои изменения успешно проходят clang-tidy локально в моем форке (нет предупреждений/ошибок)
  • Функциональные тесты: Все функциональные тесты успешно проходят локально на моей машине
  • Тесты производительности: Все тесты производительности успешно проходят локально на моей машине
  • Ветка: Я работаю в ветке, названной точно так же, как директория моей задачи
    (например, nesterov_a_vector_sum), а не в master
  • Правдивое содержание: Я подтверждаю, что все сведения, указанные в этом pull request, являются точными и
    достоверными

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants