-
Notifications
You must be signed in to change notification settings - Fork 78
Сизов Дмитрий. Технология SEQ-MPI. Сортировка пузырьком (алгоритм чет-нечетной перестановки). Вариант 21 #96
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Сизов Дмитрий. Технология SEQ-MPI. Сортировка пузырьком (алгоритм чет-нечетной перестановки). Вариант 21 #96
Conversation
Updated the formatting of equations for speedup and efficiency.
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #96 +/- ##
==========================================
- Coverage 94.58% 94.10% -0.48%
==========================================
Files 15 17 +2
Lines 480 577 +97
Branches 177 224 +47
==========================================
+ Hits 454 543 +89
- Misses 0 1 +1
- Partials 26 33 +7 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
|
||
| MPI_Scatterv(data_.data(), counts.data(), displs.data(), MPI_INT, local.data(), local_n, MPI_INT, 0, MPI_COMM_WORLD); | ||
|
|
||
| std::ranges::sort(local); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it bubble sort?
Описание
Основой решения является алгоритм Odd–Even Transposition Sort — вариация пузырьковой сортировки,
основанная на попарных обменах соседних элементов. Последовательная версия выполняет чередующиеся
чётные и нечётные фазы: в чётную фазу сравниваются пары (0,1), (2,3), (4,5), в нечётную — (1,2), (3,4) и т.д.
Постепенное выполнение таких фаз приводит массив к упорядоченному состоянию.
В параллельной MPI-версии исходный массив распределяется между процессами через
MPI_Scatterv.Каждый процесс получает свой фрагмент и работает с ним.
Каждая глобальная фаза включает два шага:
учитывая глобальную чётность фазы.
MPI_Sendrecv.Партнёр определяется по чётности фазы и ранга. Левый процесс сохраняет минимум, правый — максимум.
Всего выполняется
nфаз (гдеn— размер исходного массива), что обеспечивает корректное«всплывание» меньших значений влево и больших вправо по распределённому массиву.
После завершения фаз локальные блоки собираются на корневом процессе с помощью
MPI_Gatherv,формируя итоговую отсортированную последовательность.
Чек-лист
<фамилия>_<первая_буква_имени>_<короткое_название_задачи>clang-formatлокально в моем форке (нет ошибок форматирования)clang-tidyлокально в моем форке (нет предупреждений/ошибок)nesterov_a_vector_sum), а не вmaster