Skip to content

Task3 pipeline#3

Open
DaryaNechaeva wants to merge 49 commits into
mainfrom
task3-pipeline
Open

Task3 pipeline#3
DaryaNechaeva wants to merge 49 commits into
mainfrom
task3-pipeline

Conversation

@DaryaNechaeva
Copy link
Copy Markdown
Collaborator

Описание

Реализован динамический конвейер для пакетной обработки нескольких RGB-изображений. Архитектура:
Reader → [bounded queue] → Convolver → [bounded queue] → Writer.

  • Reader – загружает изображения с диска, создаёт задачи (PipelineItem).
  • Convolver – применяет свёртку (любая из стратегий задачи 2) к полученному изображению.
  • Writer – сохраняет обработанные изображения.

Ключевые особенности

  • Динамическое перераспределение ролей: отдельный поток-диспетчер каждые 150 мс оценивает заполненность очередей и переключает свободные потоки между ролями Reader, Convolver, Writer для балансировки нагрузки.
  • Backpressure: фиксированная ёмкость очередей (кольцевые буферы) автоматически блокирует производителя при заполнении, предотвращая переполнение памяти.
  • Минимальное число потоков – 3 (1 читатель + 1 писатель + хотя бы 1 вычислитель). При передаче меньшего значения автоматически заменяется на 3.
  • Внутренняя параллелизация – каждый вычислитель использует OpenMP; в бенчмарках число потоков фиксировано (2), чтобы изолировать эффект масштабирования конвейера.

CLI для конвейера

./conv --pipeline --filter <name> --strategy <name> --workers N in1 out1 [in2 out2 ...]
  • --filter – фильтр (например, gaussian5).
  • --strategy – стратегия свёртки внутри каждого вычислителя (sequential, rows, cols, pixels, tiles).
  • --workers – общее число потоков конвейера (минимум 3, по умолчанию 4).

Тестирование корректности

  • Тест запускает конвейер на нескольких изображениях и сравнивает выходы с последовательной обработкой (свёртка одного изображения за другим). Результаты идентичны для любых параметров (число workers, стратегия).

Анализ производительности

Методика: измеряется общее время обработки пакета из 10 или 20 синтетических изображений 512×512 RGB (фильтр gaussian5).

  • Число workers: 3,4,6,10 → вычислителей 1,2,4,8 в начальной конфигурации.
  • Стратегии свёртки: sequential, per_pixel, by_rows, by_cols, tiles.
  • Фиксированный внутренний OpenMP: 2 потока на вычислитель.
  • Повторений: 10. Baseline – последовательная обработка (без конвейера).

Результаты: подробные таблицы (среднее, мин/макс, stddev, speedup) и графики зависимости времени и ускорения от числа worker'ов, стратегии и размера пакета приведены в benchmarks/pipeline_conv_bench.md.

Сборка и использование

  • Сборкаmake
  • Бенчмарк конвейераmake bench_pipelineresults/bench_pipeline.csv
  • Запуск конвейера./conv --pipeline --filter gaussian --workers 6 img1.png out1.png img2.png out2.png
  • Справка./conv --pipeline --help

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.

1 participant