Skip to content

Задача 2 — параллельная свёртка#2

Open
fUS1ONd wants to merge 13 commits into
dev/task-1from
dev/task2
Open

Задача 2 — параллельная свёртка#2
fUS1ONd wants to merge 13 commits into
dev/task-1from
dev/task2

Conversation

@fUS1ONd
Copy link
Copy Markdown
Collaborator

@fUS1ONd fUS1ONd commented Apr 30, 2026

Зависит от #1 (задача 1).

Параллельная свёртка grayscale-изображений с четырьмя стратегиями разделения работы.

Что сделано

  • Параллельная свёртка (core/ParallelConvolution.kt): 4 стратегии — per-pixel, by-rows, by-columns, grid
    (произвольная решётка с настраиваемым размером блока)
  • Механизм: ExecutorService (newFixedThreadPool), задачи пишут в непересекающиеся диапазоны IntArray — без
    синхронизации, happens-before через Future.get()
  • CLI (task2/Main.kt): флаги -s (стратегия), -t (число потоков), --block-width, --block-height
  • Тесты: property-based «параллельная == последовательная» для всех 4 стратегий на случайных изображениях и ядрах
  • JMH-бенчмарки (benchmarks/ParallelConvolutionBench.kt): сравнение стратегий, масштабируемость по числу потоков,
    sequential vs parallel на разных размерах изображения
  • Анализ производительности: 3 графика и выводы про cache locality в docs/task2.md
  • Makefile: параметр TASK=1|2|all для make bench и make plots — раздельные результаты по задачам

Как проверить

make test                           # все тесты, включая ParallelConvolutionTest                                               
make task2 ARGS="-s by-rows -t 8"   # запуск со стратегией by-rows на 8 потоках 
make task2 ARGS="-s grid --block-width=64 --block-height=64 -t 8"                                                              
make bench TASK=2                   # JMH-бенчмарки задачи 2 (20 минут примерно)                                                                  
make plots TASK=2                   # графики в docs/plots/ (используются результаты `make bench TASK=1` для построения графиков)

fUS1ONd added 13 commits April 30, 2026 18:29
TASK=1 и TASK=2 теперь пишут в свои файлы и не затирают друг друга,
так что plots TASK=2 может опираться на baseline из task1 без перезапуска
всех бенчмарков. resultsFile параметризован через -Pjmh.rff; plot.py
склеивает все доступные result-файлы и явно предупреждает об отсутствии
sequential baseline в графике parallel-vs-sequential.
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