2017-04-05 23 views
3

인텔 IPP를 사용하여 OpenCV를 만들었으므로 가능할 때마다 (예 : 행렬 곱셈) 사용한다고 가정합니다.OpenCV에서 병렬 처리를 비활성화하는 방법은 무엇입니까?

병렬 응용 프로그램과 비교하여 병렬 응용 프로그램의 확장 성을 테스트하고 싶습니다. 그렇게하기 위해, 내가 할 때 :

그러나 CPU 사용량을 모니터링하면 여러 개의 CPU가 여전히 사용되는 것을 볼 수 있습니다. 왜 그런가요? 그리고 CPU를 하나만 사용하여 강제로 프로그램을 실행할 수 있습니까?

+1

인텔 TBB를 사용 중일 수 있습니다 ... 설정을 확인하십시오. getBuildInformation() –

+0

@MarkSetchell cv :: setNumThreads는이를 처리해야합니다 (여기 [http://en.wikipedia.org/wiki/stackoverflow.com])/질문/18478159/is-there-a-way-to-disable-tbb-in-opencv)) – justHelloWorld

+1

OpenCV 포크/개발자가 SO에 참여하고 있으며 이와 같은 심층적 인 질문에 답할 수있는 사람은 누구입니까? 어떤 OpenCV 기능에서 (SIMD, OpenMP, TBB, CUDA) 실제로 어떤 최적화가 사용되는지를 아는 방법은 항상 내게 미스터리였습니다 ... 또는 모든 OpenCV 기능에 대한 일반적인 성능 수치는 특정 하드웨어? 누군가? –

답변

0

코드에서 첫 번째 IPP 호출 전에 ippSetNumThreads(1);을 추가하십시오. 이것은 IPP의 OpenMP 스레드 수를 1로 설정해야합니다. 자세한 내용은 "Intel IPP 프리미티브의 OpenMP 스레딩"절에서 here을 참조하십시오.

0

다중 스레드에서 opencv를 사용하고 있습니까? 각 스레드에서 opencv의 멀티 스레딩을 사용하지 않도록 설정해야합니다.

Opencv 'parallel_for 함수는 여러 스레드를 생성하여 작업을 분산시킵니다.