Я работаю над программой, которая манипулирует изображениями разных размеров. Многие из этих манипуляций считывают данные пикселя из ввода и записывают на отдельный вывод (например, размытие). Это делается на основе пикселов.
Подобные преобразования изображений очень напряжены в CPU. Я хотел бы использовать многопоточность, чтобы ускорить работу. Как мне это сделать? Я думал создать один поток на строку пикселей.
У меня есть несколько требований:
- Исполняемый размер должен быть сведен к минимуму. Другими словами, я не могу использовать массивные библиотеки. Какая самая легкая портативная библиотека для потоковой передачи для C/С++?
- Исполняемый размер должен быть сведен к минимуму. Я думал о функции forEachRow (fp *), которая запускает поток для каждой строки или даже forEachPixel (fp *), где fp работает на одном пикселе в своем потоке. Что лучше?
- Должен ли я использовать обычные функции или функторы или функциональные функции или некоторые лямбда-функции или... что-то еще?
- В некоторых операциях используются оптимизации, требующие обработки информации из предыдущего обработанного пикселя. Это делает EachRow благоприятным. Будет ли использовать forEachPixel лучше даже с учетом этого?
- Нужно ли мне блокировать мои только для чтения и только для записи массивы?
- Вход только считывается, но для многих операций требуется ввод из более чем одного пикселя в массиве.
- Вывод написан только один раз для каждого пикселя.
- Скорость также важна (конечно), но оптимизация размера исполняемого файла имеет приоритет.
Спасибо.
Дополнительная информация по этой теме для любопытных: Библиотеки параллелизма С++: OpenMP vs. Thread Building Blocks