Skip to content

Мельник Иван. Технология TBB. Поразрядная сортировка для целых чисел с простым слиянием. Вариант 17#524

Open
RealProstatus wants to merge 4 commits intolearning-process:masterfrom
RealProstatus:melnik_i_radix_sort_int_tbb
Open

Мельник Иван. Технология TBB. Поразрядная сортировка для целых чисел с простым слиянием. Вариант 17#524
RealProstatus wants to merge 4 commits intolearning-process:masterfrom
RealProstatus:melnik_i_radix_sort_int_tbb

Conversation

@RealProstatus
Copy link
Copy Markdown
Contributor

@RealProstatus RealProstatus commented Mar 29, 2026

  • Задача: Поразрядная сортировка для целых чисел с простым слиянием
  • Вариант: 17
  • Технология: TBB

Описание

Цель работы

Разработка параллельной TBB-реализации алгоритма поразрядной сортировки целых чисел с простым слиянием и сравнение ее производительности с последовательной версией.

Схема распараллеливания

Параллелизация реализована по схеме разбиения исходного массива на непрерывные диапазоны:

  1. Определяется количество диапазонов с учетом числа потоков и размера массива.
  2. Исходный массив делится на определенное количество диапазонов примерно одинакового размера.
  3. Независимая сортировка диапазонов запускается параллельно с помощью tbb::parallel_for.
  4. Для каждого диапазона выполняется локальная поразрядная сортировка.
  5. После завершения локальных сортировок отсортированные диапазоны сливаются попарно для получения одного итогового массива.

Если размер массива мал по сравнению с числом потоков, фактическое количество диапазонов может быть меньше числа запрошенных потоков. Это снижает накладные расходы на создание слишком мелких задач.

Особенности реализации

  • Для локальной сортировки и этапа слияния используется дополнительный буфер. Его размер равен размеру исходного массива
  • Для уменьшения накладных расходов введено ограничение на слишком мелкое разбиение массива на диапазоны.
  • Во время слияния независимые пары диапазонов одного уровня также могут обрабатываться параллельно средствами TBB.
  • Устойчивость сортировки сохраняется за счет устойчивой сортировки подсчетом и правила слияния, при котором при равенстве элементов сначала выбирается элемент из левого диапазона.

Эффективность

Сравнение SEQ и ТВВ реализаций на двух потоках показывает эффективность около 72%


Чек-лист

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

@codecov-commenter
Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 35.71429% with 72 lines in your changes missing coverage. Please review.
✅ Project coverage is 78.64%. Comparing base (97dd371) to head (179d365).

Files with missing lines Patch % Lines
tasks/melnik_i_radix_sort_int/tbb/src/ops_tbb.cpp 35.71% 68 Missing and 4 partials ⚠️

❌ Your patch status has failed because the patch coverage (35.71%) is below the target coverage (95.00%). You can increase the patch coverage or adjust the target coverage.

Additional details and impacted files
@@            Coverage Diff             @@
##           master     #524      +/-   ##
==========================================
- Coverage   79.16%   78.64%   -0.52%     
==========================================
  Files         267      268       +1     
  Lines        9325     9437     +112     
  Branches     3963     4008      +45     
==========================================
+ Hits         7382     7422      +40     
- Misses       1374     1442      +68     
- Partials      569      573       +4     

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

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.

2 participants