Гусева Алена. Технология SEQ-MPI. Сумма элементов матрицы по столбцам. Вариант 12#11
Conversation
|
Отправила ПР, т.к. локально проверить не могу, по какой-то причине нет доступных раннеров: |
That could be related to the major outage of Microsoft Azure yesterday. Now that should be OK |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #11 +/- ##
==========================================
+ Coverage 94.03% 94.62% +0.59%
==========================================
Files 15 17 +2
Lines 486 540 +54
Branches 181 203 +22
==========================================
+ Hits 457 511 +54
Partials 29 29 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
5b308b8 to
b57dede
Compare
b57dede to
0c5de27
Compare
Update to current upstream after git reset
|
Подскажите, пожалуйста, как лишние Labels убрать? Делала git reset и push --force после pull'a хотфиксов. В списке измененных файлов только моя директория и мои файлы |
No worries, fixed manually |
There was a problem hiding this comment.
Added with the last commit
| if (rank == 0) { | ||
| GetOutput() = global_sums; | ||
| } else { | ||
| GetOutput() = {-1}; |
There was a problem hiding this comment.
Output is not actually required to be initialized for other ranks
Actualize repo's state
…termidiate vector for global sums
| local_sums[(i + shift) % columns] += local_buff[i]; | ||
| } | ||
|
|
||
| std::vector<double> global_sums(columns, 0.0); |
There was a problem hiding this comment.
Можно использовать MPI_Reduce сразу для GetOutput()
| auto &matrix = std::get<2>(GetInput()); | ||
| auto &columns = std::get<1>(GetInput()); | ||
| auto &rows = std::get<0>(GetInput()); |
There was a problem hiding this comment.
Можно распаковать кортеж в три переменные одной строкой
|
@allnes @aobolensk Запустите, пожалуйста, джобы |
…. Вариант 12 (#11) <!-- Требования к названию pull request: "<Фамилия> <Имя>. Технология <TECHNOLOGY_NAME:SEQ|OMP|TBB|STL|MPI>. <Полное название задачи>. Вариант <Номер>" --> ## Описание <!-- Пожалуйста, предоставьте подробное описание вашей реализации, включая: - основные детали решения (описание выбранного алгоритма) - применение технологии параллелизма (если применимо) --> - **Задача**: _Сумма элементов матрицы по столбцам_ - **Вариант**: _12_ - **Технология**: _SEQ, MPI_ - **Описание** вашей реализации и отчёта. _SEQ_: Создается вектор сумм столбцом входной матрицы. Итерируясь по матрице, каждый очередной ее элемент добавляется к соответствующей сумме. _MPI:_ Элементы входной матрицы поровну распределяются по процессам. Если число элементов не кратно числу процессов, нераспределенные `n` элементов дораспределяются по первым `n` процессам. Рассчитываются массивы количеств и смещений для `MPI_Scatterv()` и локальный сдвиг `shift` для корректного суммирования текущих элементов с соответствующими элементами локального результирующего вектора (для случаев, когда границы распределенных диапазонов не соответствуют границам строк матрицы). Когда локальные результаты вычислены, они собираются на корневом процессе функцией MPI_Reduce. --- ## Чек-лист <!-- Пожалуйста, убедитесь, что следующие пункты выполнены **до** отправки pull request'а и запроса его ревью: --> - [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, являются точными и достоверными <!-- ПРИМЕЧАНИЕ: Ложные сведения в этом чек-листе могут привести к отклонению PR и получению нулевого балла за соответствующую задачу. -->
…. Вариант 12 (learning-process#11) <!-- Требования к названию pull request: "<Фамилия> <Имя>. Технология <TECHNOLOGY_NAME:SEQ|OMP|TBB|STL|MPI>. <Полное название задачи>. Вариант <Номер>" --> ## Описание <!-- Пожалуйста, предоставьте подробное описание вашей реализации, включая: - основные детали решения (описание выбранного алгоритма) - применение технологии параллелизма (если применимо) --> - **Задача**: _Сумма элементов матрицы по столбцам_ - **Вариант**: _12_ - **Технология**: _SEQ, MPI_ - **Описание** вашей реализации и отчёта. _SEQ_: Создается вектор сумм столбцом входной матрицы. Итерируясь по матрице, каждый очередной ее элемент добавляется к соответствующей сумме. _MPI:_ Элементы входной матрицы поровну распределяются по процессам. Если число элементов не кратно числу процессов, нераспределенные `n` элементов дораспределяются по первым `n` процессам. Рассчитываются массивы количеств и смещений для `MPI_Scatterv()` и локальный сдвиг `shift` для корректного суммирования текущих элементов с соответствующими элементами локального результирующего вектора (для случаев, когда границы распределенных диапазонов не соответствуют границам строк матрицы). Когда локальные результаты вычислены, они собираются на корневом процессе функцией MPI_Reduce. --- ## Чек-лист <!-- Пожалуйста, убедитесь, что следующие пункты выполнены **до** отправки pull request'а и запроса его ревью: --> - [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, являются точными и достоверными <!-- ПРИМЕЧАНИЕ: Ложные сведения в этом чек-листе могут привести к отклонению PR и получению нулевого балла за соответствующую задачу. -->


Описание
SEQ: Создается вектор сумм столбцом входной матрицы. Итерируясь по матрице, каждый очередной ее элемент добавляется к соответствующей сумме.
MPI: Элементы входной матрицы поровну распределяются по процессам. Если число элементов не кратно числу процессов, нераспределенные
nэлементов дораспределяются по первымnпроцессам. Рассчитываются массивы количеств и смещений дляMPI_Scatterv()и локальный сдвигshiftдля корректного суммирования текущих элементов с соответствующими элементами локального результирующего вектора (для случаев, когда границы распределенных диапазонов не соответствуют границам строк матрицы). Когда локальные результаты вычислены, они собираются на корневом процессе функцией MPI_Reduce.Чек-лист
<фамилия>_<первая_буква_имени>_<короткое_название_задачи>clang-formatлокально в моем форке (нет ошибок форматирования)clang-tidyлокально в моем форке (нет предупреждений/ошибок)nesterov_a_vector_sum), а не вmaster