Skip to content

Каур Александр. Технология SEQ-MPI. Ленточная вертикальная схема - умножение матрицы на вектор. Вариант 12.#119

Open
kaur41 wants to merge 13 commits into
learning-process:masterfrom
kaur41:kaur_a_vert_ribbon_scheme
Open

Каур Александр. Технология SEQ-MPI. Ленточная вертикальная схема - умножение матрицы на вектор. Вариант 12.#119
kaur41 wants to merge 13 commits into
learning-process:masterfrom
kaur41:kaur_a_vert_ribbon_scheme

Conversation

@kaur41

@kaur41 kaur41 commented Feb 28, 2026

Copy link
Copy Markdown

Задание

Задача: Ленточная вертикальная схема - умножение матрицы на вектор
Вариант: 12
Технология: MPI (с поддержкой SEQ для последовательной версии)

Описание

В рамках работы реализованы последовательная и параллельная версии алгоритма умножения матрицы на вектор с использованием вертикальной ленточной схемы распределения данных.

Последовательная версия (SEQ) выполняет умножение матрицы на вектор с хранением матрицы в column-major порядке и служит эталоном для проверки корректности.

Параллельная версия (MPI) распределяет столбцы матрицы и соответствующие элементы вектора между процессами, каждый процесс выполняет локальное умножение своей части, после чего результаты собираются с помощью MPI_Reduce и финальный результат рассылается всем процессам.

Ключевые особенности

  • Реализованы SEQ и MPI версии алгоритма
  • Хранение матрицы в column-major порядке для эффективного доступа к данным
  • Использование MPI_Scatterv для неравномерного распределения столбцов при неполном делении
  • Использование MPI_Reduce для сбора частичных результатов и MPI_Bcast для рассылки финального результата
  • Корректная обработка граничных случаев (нулевые размеры, несоответствие размеров)
  • Полное покрытие функциональными тестами (крайние случаи: матрица 1x1, единичная матрица, нулевая матрица, прямоугольные матрицы, отрицательные значения)
  • Тесты производительности для 1, 2, 4, 6 и 8 процессов

Тестирование и производительность

Добавлены функциональные тесты для проверки корректности умножения на различных входных данных, а также тесты производительности для оценки времени работы MPI-версии на матрице размером 8000×8000.

Результаты производительности (task_run режим)

Процессов Время, с Ускорение Эффективность
1 (seq) 0.687 1.00 N/A
1 (mpi) 0.877 0.78 78.3%
2 0.618 1.11 55.6%
4 0.635 1.08 27.1%
6 1.120 0.61 10.2%
8 0.604 1.14 14.2%

Результаты производительности (pipeline режим)

Процессов Время, с Ускорение Эффективность
1 (seq) 0.744 1.00 N/A
1 (mpi) 1.036 0.72 71.8%
2 0.823 0.90 45.2%
4 0.646 1.15 28.8%
6 0.669 1.11 18.5%
8 0.667 1.12 13.9%

  • Статус 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