Skip to content
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

Баранов Алексей. Задача 3. Вариант 15. Быстрая сортировка с четно-нечетным слиянием Бэтчера. #417

Closed

Conversation

Torcna
Copy link
Contributor

@Torcna Torcna commented Dec 1, 2024

1 MPI

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

  • Слияние выполняется по двум разным сценариям, если наш счетчик - четный, то все пары (0,1)... (n-1,n)обмениваются между собой данными и оставляют у себя нужную им часть. где n - это world.size()-1.
  • На нечетном тике пары (1,2)...(n-2,n-1) меняются данными, где n - это world.size()-1.

Пример:
Исходный массив {9,8,7,6}. 4 Процесса используются.
n(размер вектора) =4, p= n/world.size().

  1. На четной итерации процессы 0 и 1,а так же 2 и 3 обмениваются данными. процесс с меньшим rank оставляет у себя p наименьших элементов, а процесс со старшим рангом забирает p наибольших чисел.
  • Таким образом после первой итерации массивы выглядят вот так
  • {8}{9}{6}{7}
  1. На нечетной итерации процессы 1 и 2 обмениваются данными. Схема точно такая же
  • После второй итерации массивы выглядят вот так
  • {8}{6}{9}{7}
  1. Опять четная итерация. 0 и 1. 2 и 3
  • После третьей итерации массивы выглядят вот так
  • {6}{8}{7}{9}
  1. И нечетная заключительная итерация
  • После четвертой итерации массивы выглядят вот так
  • {6}{7}{8}{9}

2 Итог

Благодаря такой организации работы получается так что сливают два отсортированных массива 2 процесса, а не 1 как в simple merge

3 Какие проверки выполняются

В тестах проверяются четные и нечетные размеры векторов. На различных типах данных тестируется различное количество процессов.

4 Почему Can’t automatically merge.

В предыдущем задании на топологию сети кольцо в perf tests была допущена досадная ошибка, которая всплыла только сейчас. В этом PR я ее исправил и очень надеюсь, что не нужно будет revert`ить всю merged ветку c уже сделанным заданием.

@Torcna
Copy link
Contributor Author

Torcna commented Dec 1, 2024

@aobolensk Please read paragraph 4 and tell me, what should i do?

@korablev-vm
Copy link
Contributor

@aobolensk Please read paragraph 4 and tell me, what should i do?

Usually in such cases, we were told to create a separate PR with a bug fix, without linking it to another task.

@Torcna
Copy link
Contributor Author

Torcna commented Dec 1, 2024

Usually in such cases, we were told to create a separate PR with a bug fix, without linking it to another task.

this is no good
so i create a bug fix for 2 task and another PR for

@Torcna Torcna closed this Dec 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants