2014-01-08 6 views
0

카메라에서 나오는 일련의 이미지를 처리하는 시간이 중요한 어플리케이션이 있습니다. 그것은 C++로 작성되었으며 Qt, OpenCV 및 부스트 라이브러리를 사용합니다. 전용 PC에서 실행됩니다.최대 레벨의 모든 코어를 사용하고 있는지를 어떻게 알 수 있습니까?

현재 gui는 주 스레드에서 작동하고 이미지 처리를 위해 새 스레드를 엽니 다. OpenCV가 이미 그렇게하고 있다고 생각하기 때문에 프로세스 섹션을 스레드로 나눌 필요가 없습니다. 그러나 최대 허용 지연을 유지하는 데 문제가 있습니다.

제 질문은, 최대 레벨의 모든 코어를 사용하는 응용 프로그램을 어떻게 배울 수 있습니까? 성능 모니터를 보면 내가 본 패턴이 정말 이상합니다. CPU 사용률은 % 35-40 일 가능성이 높습니다. 모든 코어가 작동하지만 전체 스로틀에서는 작동하지 않습니다.

내가 잘못 했나요?

+1

괜찮은 대답을 얻으려면 코드를 프로파일 링해야합니다. – 111111

+1

** 풀 스로틀로 달릴 필요가없는 ** 가능성을 고려 했습니까? 어쩌면 당신의 앱이 CPU 집약적 인 생각이 아니겠습니까? –

답변

1
당신이 잘못 작업을 수행하지 않는

는, 그러나 당신이하여 CPU 코어의 전체를 사용을 위해 코드를 변경할 수 :

1 - 스레드가 다른 하나 개의 코어에서 변경되지 않도록 핵심 선호도를 설정, 그것은 그 처리

3를 완료하기 전에 문맥 전환되지 않도록 FIFO에 스레드의 스케줄링을 설정 - - 이것은 캐시 사용 (L1 어쩌면 L2)

2를 향상시킬 수있는 더 높은 우선 순위에 해당 스레드를 실행 프로세스 (이 프로세스에 대해 루트 권한이 필요함)

건배