Клименко Владислав. Технология OMP. Повышение контраста полутонового изображения посредством линейной растяжки гистограммы. Вариант 28#229
Open
limdizz wants to merge 1 commit intolearning-process:masterfrom
Conversation
bbee0a0 to
405caad
Compare
ad5b4a9 to
405caad
Compare
36a0d97 to
405caad
Compare
Contributor
Author
|
Данный пул реквест включает в себя папку klimenko_v_lsh_contrast_incr_seq. Я делал фикс-пулреквест, который переименовывал её в klimenko_v_lsh_contrast_incr, в соответствующей ветке. В данной же ветке при попытке переименования/удаления klimenko_v_lsh_contrast_incr_seq и пуша изменений падают тесты clang-tidy у чужих работ на моей, и текст ошибки гласит, что не хватает объявления klimenko_v_lsh_contrast_incr_seq. Могу попробовать снова и сделать скриншот, если необходимо, однако хотел бы задать вопрос, можете ли вы убрать директорию klimenko_v_lsh_contrast_incr_seq на этапе мёржа, оставив только klimenko_v_lsh_contrast_incr? |
Ramzan8-88
pushed a commit
to Ramzan8-88/ppc-2026-threads
that referenced
this pull request
Mar 4, 2026
…а - разбиение только матрицы А - умножение матрицы на матрицу. Вариант 13 (learning-process#229) ## Описание - **Задача**: Ленточная горизонтальная схема - разбиение только матрицы А - умножение матрицы на матрицу - **Вариант**: 13 - **Технология**: SEQ | MPI ### Цель работы Разработка параллельной MPI-реализации алгоритма умножения матриц с использованием ленточной горизонтальной схемы разбиения, при которой распределяется только матрица A, а матрица B полностью доступна всем процессам, и сравнительный анализ её производительности с последовательной версией при различном количестве процессов. ### Базовый алгоритм (последовательная версия) **Входные данные:** две матрицы `A (N × M)` и `B (M × K)`, где размеры матрицы записаны в виде `(<число строк> × <число столбцов>)`. **Выходные данные:** матрица `C (N × K)`, где размеры матрицы записаны в виде `(<число строк> × <число столбцов>)`. **Алгоритм последовательной реализации:** 1. Сохранить исходные размеры матриц. 2. Преобразовать матрицу `A` в одномерный массив построчно. 3. Построить транспонированную матрицу `B` и преобразовать её в одномерный массив построчно. 4. Вычислить скалярное произведение каждой строки `i` (от `0` до `N-1`) матрицы `A` с каждым столбцом `j` (от `0` до `K-1`) матрицы `B` и записать в элемент `C[i][j]` результирующей матрицы `C`. **Сложность алгоритма:** `O(N×M×K)`, где `(N × M)` и `(M × K)` – размеры матриц `A` и `B` соответственно. ### Схема распараллеливания Параллельная версия реализует ленточную горизонтальную схему: матрица `A` делится на блоки строк и распределяется между процессами, матрица `B` передаётся целиком на все процессы. - **Инициализация:** Все процессы работают в `MPI_COMM_WORLD`. Процесс 0 владеет входными данными. - **Рассылка общих данных:** Процесс 0 рассылает исходные размеры матриц и транспонированную матрицу `B` с помощью операции `MPI_Bcast`. - **Распределение матрицы A:** Процесс 0 распределяет строки матрицы `A` между всеми процессами с помощью операции `MPI_Scatterv` с балансировкой нагрузки – первые `remainder` процессов получают одну дополнительную строку при неравномерном делении. - **Локальные вычисления:** Каждый процесс вычисляет свой блок строк результирующей матрицы `C` с использованием скалярных произведений. - **Агрегация результата:** Результирующая матрица `C` собирается на всех процессах в виде одномерного массива с помощью операции `MPI_Allgatherv`. - **Формирование итога:** Результирующая матрица `C` восстанавливается из одномерного массива. ### Структура отчёта 1. **Введение** – актуальность задачи и цели работы. 2. **Постановка задачи** – формальное определение алгоритма и ограничения. 3. **Базовый алгоритм** – описание последовательной реализации. 4. **Схема распараллеливания** – архитектура параллельной версии. 5. **Детали реализации** – организация проекта и основные компоненты. 6. **Тестовая инфраструктура** – конфигурация оборудования и методика тестирования. 7. **Результаты и обсуждение** – проверка корректности работы и анализ производительности. 8. **Выводы** – основные итоги работы. 9. **Источники** – использованные источники. ### Основные результаты - **Корректность:** Успешно пройдены 16 функциональных тестов с покрытием граничных случаев. - **Производительность:** MPI-реализация демонстрирует ускорение относительно последовательной версии 1.66x на 2 процессах и 2.17x на 4 процессах. - **Эффективность:** 83% на 2 процессах, 54% на 4 процессах. ## Чек-лист - [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, являются точными и достоверными
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Общее описание
Алгоритм выполняет линейное растяжение гистограммы изображения (контрастирование) путем масштабирования значений яркости пикселей из исходного диапазона в полный диапазон [0, 255].
Подробное описание
Валидация (ValidationImpl)
Проверяет, что входные данные не пустые.
Предварительная обработка (PreProcessingImpl)
Выделяет память под выходные данные того же размера, что и входные.
Основной алгоритм (RunImpl)
Шаг 1: Параллельный поиск минимального и максимального значений
Используется OpenMP редукция для параллельного поиска
Каждый поток обрабатывает свою часть данных
Результаты объединяются с помощью операций min и max
Шаг 2: Обработка частного случая
}
Если все пиксели имеют одинаковую яркость, выходное изображение копируется из входного (параллельно)
Шаг 3: Параллельное преобразование каждого пикселя
Каждый пиксель обрабатывается независимо в параллельном цикле
Формула преобразования:
Проверяет, что размер выходных данных соответствует размеру входных.
Особенности реализации
Эффективная обработка больших изображений.
Независимая обработка пикселей.
Минимизация накладных расходов на синхронизацию.
Реализация содержит OMP-версию алгоритма повышения контраста полутонового изображения посредством линейной растяжки гистограммы.
Чек-лист
klimenko_v_lsh_contrast_incrclang-formatлокально в моем форке (нет ошибок форматирования)clang-tidyлокально в моем форке (нет предупреждений/ошибок)(
klimenko_v_lsh_contrast_incr), а не вmasterдостоверными