У меня есть критическое по времени приложение, которое обрабатывает последовательность изображений, поступающих с камеры. Он написан на C ++ и использует библиотеки Qt, OpenCV и boost. Он будет работать на выделенном ПК.
В настоящее время графический интерфейс работает в основном потоке, и я открываю новый поток для обработки изображений. Я не удосужился разделить раздел процесса на потоки, потому что я думаю, что OpenCV уже делает это. Однако у меня возникают проблемы с поддержанием максимально допустимой задержки.
У меня вопрос, как я могу узнать, использует ли мое приложение все ядра на максимальном уровне?
Когда я смотрю на монитор производительности, картина, которую я вижу, действительно странная. Загрузка процессора, вероятно, составляет% 35-40, все ядра работают, но не на полную мощность.
Я делаю что-то неправильно ?
Вы не делаете ничего плохого, однако вы можете изменить свой код, чтобы в полной мере использовать ядра процессора:
1 — установка соответствия ядра так, чтобы поток не переключался с одного ядра на другое, это может улучшить использование кэша (L1 и, возможно, L2)
2 — установка планирования потоков на FIFO, чтобы он не переключался на контекст перед завершением обработки
3 — запустить этот поток в процессе с более высоким приоритетом (для этого потребуется привилегия root)
ура
Других решений пока нет …