IPP와 TBB를 결합하여 이미지 리사이징 알고리즘을 더욱 개선하려고합니다.인텔 IPP와 TBB를 결합
- 사용 IPP
내 문제는 내가 응용 프로그램을 코딩했다고하는 parallel_for 루프 내부 TBB와 TBB
ippiResizeSqrPixel_8u_C1R(src, srcSize, srcStep, srcRoi, dst, dstStep, dstRoi,
m_nzoom_x,m_nzoom_y,0, 0, interpolation, pBufferWhole);
을 (알고리즘의 기본은 이미지 크기 조정에 대한 인텔 TBB 샘플 코드에서 차용되었다)과 parallel_for 루프는 다음과 같습니다
parallel_for(
blocked_range<size_t>(0,CHUNK),
[=](const blocked_range<size_t> &r){
for (size_t i= r.begin(); i!= r.end(); i++){
ippiResizeSqrPixel_8u_C1R(src+((int)(i*srcWidth*srcHeight)), srcSize,
srcStep, srcRoi, dst+((int)(i*dstWidth*dstHeight)), dstStep, dstRoi,
m_nzoom_x,m_nzoom_y,0, 0, interpolation, pBuffer);
}
}
);
src
및 dst
은 원본 이미지와 대상 이미지에 대한 포인터입니다. TBB를 사용하면 이미지는 CHUNKS
파트로 분할되고 parallel_for는 모두 CHUNKS
을 반복하며 IPP 함수를 사용하여 각 CHUNK의 크기를 독립적으로 조정합니다. dstHeight
, srcHeight
, srcRoi
및 dstRoi
의 값은 이미지의 분할을 수용하도록 수정되며 src+((int)(i*srcWidth*srcHeight))
및 dst+((int)(i*dstWidth*dstHeight))
은 소스 및 대상 이미지의 각 파티션의 시작을 나타냅니다.
분명히, IPP와 TBB는이 방법으로 결합 될 수 있습니다. 올바른 결과를 얻을 수는 있지만, IPP를 단독으로 사용할 때와 비교할 때 계산 시간이 단축된다는 것이 당황 스럽습니다. 어떤 일이 그 원인 일 수 있는지, 또는 어떻게이 문제를 해결할 수 있을까요?
감사합니다.
이미지 크기가 너무 커서 병렬 처리를 이용할 수 없다고 가정합니다. 테스트 한 입출력 이미지의 크기는 어느 정도입니까? – yohjp
그것은 처음 생각했지만, 원래 크기보다 몇 배나 큰 크기의 이미지를 테스트 한 후에도 개선되지 않았습니다. – SMir
이것을 프로파일 링 해 보셨습니까? 어떤 플랫폼을 사용하고 있습니까? – Rick