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

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

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

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

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

0

Решение

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

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

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

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

ура

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]