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