Как я могу узнать, использую ли я все свои ядра на максимальном уровне?

У меня есть критическое по времени приложение, которое обрабатывает последовательность изображений, поступающих с камеры. Он написан на C++ и использует библиотеки Qt, OpenCV и boost. Он будет работать на выделенном ПК.

В настоящее время графический интерфейс работает в основном потоке, и я открываю новый поток для обработки изображений. Я не удосужился разделить раздел процесса на потоки, потому что я думаю, что OpenCV уже делает это. Однако у меня возникли проблемы с поддержанием максимально допустимой задержки.

У меня вопрос, как я могу узнать, использует ли мое приложение все ядра на максимальном уровне? Когда я смотрю на монитор производительности, картина, которую я вижу, действительно странная. Загрузка процессора, вероятно, составляет%35-40, все ядра работают, но не на полную мощность.

Я делаю что-то неправильно?

1 ответ

Вы не делаете ничего плохого, однако вы можете изменить свой код, чтобы в полной мере использовать ядра процессора:

1 - установка соответствия ядра так, чтобы поток не переключался с одного ядра на другое, это может улучшить использование кэша (L1 и, возможно, L2)

2 - установка планирования потоков на FIFO, чтобы он не переключался на контекст перед завершением обработки

3 - запустить этот поток в процессе с более высоким приоритетом (для этого потребуется привилегия root)

ура

Другие вопросы по тегам