Skip to content

Conversation

@Korobokkk
Copy link

Описание

  • Задача: Нахождение максимальных значений по строкам матрицы- Вариант: 15
  • Технология: SEQ, MPI
  • Описание
    SEQ:
    Алгоритм проходит по каждой строке матрицы и находит максимальный элемент в каждой строке. Найденные значения добавляются в результирующий вектор. В реализации предусмотрена обработка рваной матрицы, пустой матрицы и матрицы с пустыми строками. SEQ-решение представляет собой последовательное выполнение строк кода и не поддерживает параллельные вызовы.
    MPI:
    Алгоритм вычисляет максимальное значение для каждой строки матрицы с использованием параллельных вычислений. Главный процесс преобразует матрицу в плоский массив, затем определяет, сколько строк выделяется каждому процессу, вычисляет размеры передаваемых данных и их смещения в плоском массиве. После получения данных процессы выполняют параллельную обработку строк и находят максимальные значения. Главный процесс собирает результаты, формируя итоговый вектор. Аналогично SEQ-версии реализована корректная обработка рваных матриц, пустых матриц и матриц с пустыми строками.
    Отчет оформлен в соответствии с примером из учебных материалов, включает в себя более подробное описание реализованных алгоритмов и сравнение MPI | SEQ решений на больших данных.

Чек-лист

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

@codecov-commenter
Copy link

codecov-commenter commented Dec 2, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 95.03%. Comparing base (ab67334) to head (cb7be54).

Additional details and impacted files
@@            Coverage Diff             @@
##           master     #124      +/-   ##
==========================================
+ Coverage   94.03%   95.03%   +1.00%     
==========================================
  Files          15       17       +2     
  Lines         486      584      +98     
  Branches      181      225      +44     
==========================================
+ Hits          457      555      +98     
  Partials       29       29              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

"seq": "enabled"
}
}
//disabled No newline at end of file
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please, remove this line

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed it

Использование `Gatherv` оправдано тем, что разные процессы могут обрабатывать разное количество строк.

**Единообразие буферов**
Для унификации логики передачи данных длины строк передаются отдельно, что снимает необходимость создавать выровненные массивы и удаляет потенциальную проблему с PAD-значениями.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What are PAD values?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PAD-(padding values)-то есть дополнительные заполняющие элементы.
При передаче через Gather, если длина передаваемой строки меньше указанной в методе Gather, PAD значения передаются в индексы вектора, которые не затрагиваются передаваемой строкой( условно Gather ожидает строки длинной 3 элемента, но получает строку с 1 элементом, значит оставшиеся 2 элемента будут заполняющими). PAD values подаются вынужденно и могут привести к неожиданным результатам, т.к. могут быть мусором, nullptr, 0, \n и вообще чем угодно. Как раз поэтому я ранее упоминаю использование метода Gatherv, корректно обрабатывающего случаи с передачей векторов разной длины.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed it

4. https://habr.com/ru/articles/121235/
5. https://disk.yandex.ru/d/NvHFyhOJCQU65w

## Приложения (код параллельной реализации)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please, optimize the appendix. There is no need to copy-paste the whole file. Please, copy only the relevant parts

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed it

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.

3 participants