Skip to content

Дорофеев Иван. Технология OMP. Поразрядная сортировка чисел (тип double) с четно-нечетным слиянием Бэтчера. Вариант 20.#264

Open
4elodoy-Molovek wants to merge 1 commit intolearning-process:masterfrom
4elodoy-Molovek:dorofeev_i_bitwise_sort_double_eo_batcher_merge_omp

Conversation

@4elodoy-Molovek
Copy link
Contributor

Описание

  • Задача: Поразрядная сортировка чисел (тип double) с четно-нечетным слиянием Бэтчера
  • Вариант: 20
  • Технология: OMP
  • Описание Реализована параллельная версия алгоритма сортировки с использованием технологии OpenMP.
    Основные детали решения и применение параллелизма:
    1. Разделение данных: Исходный массив (дополненный до ближайшей степени двойки фиктивными максимальными элементами) логически разбивается на N независимых блоков, где N — степень двойки, не превышающая количество доступных OMP потоков.
    2. Параллельная локальная сортировка: Каждый блок независимо сортируется с помощью алгоритма LSD Radix Sort (с предварительным побитовым преобразованием double в uint64_t). Для этого применяется директива #pragma omp parallel for. Для обхода ложных срабатываний статических анализаторов GCC 14 на разыменование нулевых указателей внутри OMP-блоков, работа с данными ведется через сырые указатели (double*).
    3. Параллельное слияние (Batcher Merge Tree): Отсортированные блоки попарно сливаются в единый массив. Слияние организовано в виде итеративного дерева: на каждом уровне размера size независимые пары блоков сливаются параллельно с помощью #pragma omp parallel for.
    4. Оптимизация кода: Логика итеративного четно-нечетного слияния (Odd-Even Merge) и обмена блоков вынесена в изолированные функции для соблюдения строгих требований линтера по когнитивной сложности (Cognitive Complexity < 15). Во всех директивах OpenMP строго прописано default(none) с явным указанием shared переменных.

Чек-лист

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

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.

1 participant