Skip to content

Пылаева Светлана. Технология SEQ-MPI. Максимальное значение элементов матрицы. Вариант 13.#62

Merged
allnes merged 51 commits intolearning-process:masterfrom
Svetlana-plv:pylaeva_s_max_elem_matrix
Dec 10, 2025
Merged

Пылаева Светлана. Технология SEQ-MPI. Максимальное значение элементов матрицы. Вариант 13.#62
allnes merged 51 commits intolearning-process:masterfrom
Svetlana-plv:pylaeva_s_max_elem_matrix

Conversation

@Svetlana-plv
Copy link
Copy Markdown
Contributor

@Svetlana-plv Svetlana-plv commented Nov 19, 2025

Описание

  • Задача: Максимальное значение элементов матрицы
  • Вариант: 13
  • Технология: SEQ, MPI
  • Описание
    • SEQ,: Алгоритм поиска максимального значения в матрице основан на последовательном просмотре всех элементов с сохранением текущего максимального значения.
    • MPI: Параллельная версия использует блочное распределение элементов матрицы между MPI-процессами с помощью функции MPI_Scatterv.
      • Корневой процесс (ранг 0) передает общий размер матрицы matrix_size всем процессам через MPI_Bcast
      • Для каждого MPI-процесса рассчитывается количество элементов sendcounts[i] и смещение displs[i] в исходном массиве
      • Распределение учитывает возможный остаток при неравномерном делении: первые remainder процессов получают на один элемент больше
      • Используется MPI_Scatterv для распределения блоков матрицы по процессам
      • Каждый процесс получает свой блок данных local_data размером local_elements
      • Нулевой процесс передает данные, остальные процессы получают свои блоки
      • Каждый процесс независимо находит максимальный элемент в своем блоке. В результате каждый процесс формирует локальное значение максимума local_max.
      • Все процессы участвуют в операции MPI_Allreduce, которая одновременно выполняет редукцию по всем процессам с использованием операции MPI_MAX и распространяет результат глобального максимума на все процессы.

Чек-лист

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

allnes and others added 30 commits October 10, 2025 16:09
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 8.1.3 to 8.2.3.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/master/CHANGES.rst)
- [Commits](sphinx-doc/sphinx@v8.1.3...v8.2.3)

---
updated-dependencies:
- dependency-name: sphinx
  dependency-version: 8.2.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Updated project links and badges in README.md to reflect the new repository name.
cherry picked from commit 1680569ece6ce393f62851066a2d9b20580183f4

<!-- Solution for PR template choice:
https://stackoverflow.com/a/75030350/24543008 -->

Please go to the `Preview` tab and select the appropriate template:

* [Submit Student task
(English)](?expand=1&template=task_submission_en.md)
* [Submit Student task
(Russian)](?expand=1&template=task_submission_ru.md)
…ess#19)

Ported from upstream commit c83f0efd0e219c76ac4e8b94ec8c8284531df959.
- Force STBI to load RGB (3 channels)
- Update sample pic.jpg files
- Re-enable previously disabled threads test
… isolation (#669) (learning-process#20)

- MPI runs: propagate PPC_NUM_THREADS and OMP_NUM_THREADS via mpirun -x
…; fix
    gtest filters for _all_/_mpi_ across functional/perf runs.
- Per-test isolation: add ScopedPerTestEnv that sets PPC_TEST_UID and
PPC_TEST_TMPDIR; integrated into functional and performance test
runners.

Co-authored-by: Arseniy Obolenskiy <gooddoog@student.su>
- Sync gtest random_seed + filter across ranks
- Abort on worker failure; wrap RunAllTests with MPI_Abort on exceptions
- Make PPC_TEST_TMPDIR per MPI rank
- Pass env to mpiexec on Windows (-env), keep -x on *nix
@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Nov 19, 2025

Codecov Report

❌ Patch coverage is 98.41270% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 94.53%. Comparing base (92b24d3) to head (7e8e763).

Files with missing lines Patch % Lines
...asks/pylaeva_s_max_elem_matrix/seq/src/ops_seq.cpp 95.23% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master      #62      +/-   ##
==========================================
+ Coverage   94.03%   94.53%   +0.50%     
==========================================
  Files          15       17       +2     
  Lines         486      549      +63     
  Branches      181      205      +24     
==========================================
+ Hits          457      519      +62     
- Partials       29       30       +1     

☔ 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.

Comment thread tasks/pylaeva_s_max_elem_matrix/common/include/common.hpp Outdated
Comment thread tasks/pylaeva_s_max_elem_matrix/data/matrix_100x100.txt
@allnes

This comment was marked as outdated.

@allnes

This comment was marked as outdated.

@allnes

This comment was marked as outdated.

@allnes

This comment was marked as outdated.

@Svetlana-plv
Copy link
Copy Markdown
Contributor Author

Svetlana-plv commented Nov 24, 2025

ops_mpi.cpp: в RunImpl локальный максимум и глобальный редьюс инициализируются значением 0, после чего берётся максимум по полученному куску. Если вся матрица отрицательная, итогом всегда будет 0, хотя корректный максимум тоже отрицательный. Нужно инициализировать максимум первым элементом доступного буфера (после Scatter/Bcast) либо значением std::numeric_limits::min(), предварительно проверив, что размер входа не нулевой, и только потом выполнять Reduce.

Данное описание проблемы относится к промежуточной версии кода, в финальной реализации все переменные для хранения максимумов инициализировались с помощью std::numeric_limits::min().

@Svetlana-plv
Copy link
Copy Markdown
Contributor Author

Svetlana-plv commented Nov 24, 2025

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

@allnes allnes merged commit aef4392 into learning-process:master Dec 10, 2025
41 checks passed
AzotEye pushed a commit to AzotEye/ppc-2025-processes-informatics that referenced this pull request Dec 14, 2025
… матрицы. Вариант 13. (learning-process#62)

## Описание
<!--
Пожалуйста, предоставьте подробное описание вашей реализации, включая:
 - основные детали решения (описание выбранного алгоритма)
 - применение технологии параллелизма (если применимо)
-->

- **Задача**: Максимальное значение элементов матрицы
- **Вариант**: 13
- **Технология**: SEQ, MPI
- **Описание**  
- **SEQ,:** Алгоритм поиска максимального значения в матрице основан на
последовательном просмотре всех элементов с сохранением текущего
максимального значения.
- **MPI:** Параллельная версия использует блочное распределение
элементов матрицы между MPI-процессами с помощью функции `MPI_Scatterv`.
- Корневой процесс (ранг 0) передает общий размер матрицы `matrix_size`
всем процессам через `MPI_Bcast`
- Для каждого MPI-процесса рассчитывается количество элементов
`sendcounts[i]` и смещение `displs[i]` в исходном массиве
- Распределение учитывает возможный остаток при неравномерном делении:
первые `remainder` процессов получают на один элемент больше
- Используется `MPI_Scatterv` для распределения блоков матрицы по
процессам
- Каждый процесс получает свой блок данных `local_data` размером
`local_elements`
- Нулевой процесс передает данные, остальные процессы получают свои
блоки
- Каждый процесс независимо находит максимальный элемент в своем блоке.
В результате каждый процесс формирует локальное значение максимума
`local_max`.
- Все процессы участвуют в операции `MPI_Allreduce`, которая
одновременно выполняет редукцию по всем процессам с использованием
операции `MPI_MAX` и распространяет результат глобального максимума на
все процессы.
---

## Чек-лист

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

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Nesterov Alexander <nesterov.alexander@outlook.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Arseniy Obolenskiy <gooddoog@student.su>
AleksndrSakharov pushed a commit to AleksndrSakharov/ppc-2025-processes-informatics that referenced this pull request Dec 16, 2025
… матрицы. Вариант 13. (learning-process#62)

## Описание
<!--
Пожалуйста, предоставьте подробное описание вашей реализации, включая:
 - основные детали решения (описание выбранного алгоритма)
 - применение технологии параллелизма (если применимо)
-->

- **Задача**: Максимальное значение элементов матрицы
- **Вариант**: 13
- **Технология**: SEQ, MPI
- **Описание**  
- **SEQ,:** Алгоритм поиска максимального значения в матрице основан на
последовательном просмотре всех элементов с сохранением текущего
максимального значения.
- **MPI:** Параллельная версия использует блочное распределение
элементов матрицы между MPI-процессами с помощью функции `MPI_Scatterv`.
- Корневой процесс (ранг 0) передает общий размер матрицы `matrix_size`
всем процессам через `MPI_Bcast`
- Для каждого MPI-процесса рассчитывается количество элементов
`sendcounts[i]` и смещение `displs[i]` в исходном массиве
- Распределение учитывает возможный остаток при неравномерном делении:
первые `remainder` процессов получают на один элемент больше
- Используется `MPI_Scatterv` для распределения блоков матрицы по
процессам
- Каждый процесс получает свой блок данных `local_data` размером
`local_elements`
- Нулевой процесс передает данные, остальные процессы получают свои
блоки
- Каждый процесс независимо находит максимальный элемент в своем блоке.
В результате каждый процесс формирует локальное значение максимума
`local_max`.
- Все процессы участвуют в операции `MPI_Allreduce`, которая
одновременно выполняет редукцию по всем процессам с использованием
операции `MPI_MAX` и распространяет результат глобального максимума на
все процессы.
---

## Чек-лист

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

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Nesterov Alexander <nesterov.alexander@outlook.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Arseniy Obolenskiy <gooddoog@student.su>
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.

4 participants