끄적끄적 블로그.
영상처리 개발업무를 하며 속도 최적화에 대한 고민을 많이 한다.
전역 변수 할당, 행단위 접근, 포인터 접근, 참조 전달, PipeLine Architecture, SIMD기법, Parallel Processing (OpenCL, CUDA, TBB)등.
기본 언어 최적화를 진행 하지만, 대규모 데이터에서 빠른 처리를 보이는 방법은 역시 Parallel Processing이다.
하지만, 모든 방법에는 그에 따른 비용이 발생하고 (ex. Context Switching, Overhead), 성능 목표와 목적간의 비용을 조절하는 과정이 필요하다.
SIMD와 CUDA 같은 병렬 기법은 상대적으로 개발기간이 길어지고, 적용할 수 있는 알고리즘이 제한적이다.
다시 최적화에 대한 이야기로 돌아와서, “if문은 성능을 저하시킨다” 라는 말을 들어왔다.
저 말의 진위는 분기문이 많아지면, 분기 예측을 더 많이하고, 조건에 따라 실패 확률이 증가 한다.
실패 시, 대기 명령을 flush시키고 fetch단계부터 다시 작성할 때 성능 손실이 생긴다.