Skip to content

Сompleted tasks 1 and 2#1

Merged
RodionovMaxim05 merged 26 commits intofeedbackfrom
main
Apr 26, 2025
Merged

Сompleted tasks 1 and 2#1
RodionovMaxim05 merged 26 commits intofeedbackfrom
main

Conversation

@RodionovMaxim05
Copy link
Owner

Реализованы задачи 1 и 2:

  1. Добавлена последовательная реализация обработки изображений.
  2. Добавлены параллельные реализации с поддержкой различных стратегий разделения изображения:
    • Попиксельное разделение;
    • Разделение по строкам;
    • Разделение по столбцам;
    • Разделение по произвольной прямоугольной решётке.
  3. Тестирование:
    • Написаны тесты для проверки корректности всех реализаций.
  4. Бенчмарки и анализ производительности:
    • Написаны бенчмарки для сравнения производительности последовательной и параллельных реализаций (измерение времени выполнения и анализ с помощью утилиты perf), а также композицинальности фильтров;
    • Проведён анализ результатов бенчмарков.

@qrutyy
Copy link

qrutyy commented Apr 19, 2025

Looks Nice

Copy link
Collaborator

@vkutuev vkutuev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В целом решение классное:

  • Код достаточно неплохо структурирован (main, конечно длинноват но в пользу остального кода это стоит простить)
  • Порадовали doxygen-комментарии
  • Круто, что сделали композицию фильтров
  • Достаточно аккуратно написан отчёт по экспериментам
  • Приличная история Git

Минусы мелкие и в основном относятся к использованию знакового int для размеров и инклюдов в тестах (без которых, как мне кажется, можно обойтись), а в остальном всё очень классно! Продолжайте в том же духе 👍

struct thread_data *data = (struct thread_data *)arg;

while (1) {
int block_index = atomic_fetch_add(data->next_block, 1);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

По идее можно избавиться от этой синхронизации: при запуске свёртки знаем, сколько всего потоков и размеры картинки (поэтому каждый поток, зная свой номер, может вычислить номера блоков, которые ему надо обработать)

Comment on lines +67 to +68
int block_width = (width + num_threads - 1) / num_threads;
int block_height = (height + num_threads - 1) / num_threads;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ещё бы круто было научить свёртку работать с блоками произвольного размера (но в целом ок)

@RodionovMaxim05 RodionovMaxim05 merged commit 87d8a3f into feedback Apr 26, 2025
1 check passed
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