Сначала у вас должна быть проблема, которую можно разбить на подзадачи. Обработка изображений является такой проблемой. Так хорошо для вас, вы можете подумать о разделении вашей проблемы.
Может ли ваша система выполнять более 1 потока одновременно - многоядерный, многопоточный или гиперпоточный, или что-то еще. Если я вас правильно понимаю, ваш Pi может обрабатывать до 4 потоков одновременно. Это хорошо, и вы настроены на многопоточную программу.
Отвечая на ваш вопрос: в основном потоке используются все 4 ядра? В основном нет, основной поток - это только один поток, который работает на одном ядре. Ваша измерительная нить будет работать на другом ядре.
Итак, вы хотите разделить обработку изображений на потоки. Вы не увидите почти никаких улучшений, если просто поместите обработку изображений в один дополнительный поток, помимо основного потока. Вы должны разделить свое изображение на части и поместить их как минимум в две темы. Я хотел бы предложить общий подход, при котором можно легко изменить количество потоков, чтобы вы могли поэкспериментировать с самой быстрой настройкой.
Я коротко, вы не можете ожидать от нас четкого ответа. Это зависит от вашей реализации и вашей системы, что еще она должна делать и где хранятся ваши данные ... и так далее, и так далее ... НО, если вы прочитаете несколько хороших книг и выберете мудро, как реализовать свои обработки изображений, я бы ожидал улучшения производительности.
Если вы хорошо разбираетесь в оценках, существует математический подход. Это объясняется более подробно в этой ССЫЛКЕ .
Формула распараллеливания:
S(n) = 1/( (1-P) + P/n )
- S (n) - теоретическое ускорение
- P - часть алгоритма, которая может быть сделана параллельной
- n - количество потоков процессора
В сущности, это говорит о том, что скорость ускорения, которую программа увидит, используя n ядер, зависит от того, какая часть программы является последовательной (может быть запущена только на одном ядре ЦП) и насколько она параллельна. (можно разделить между несколькими ядрами процессора).