티스토리 뷰

Private/openCV

병렬 처리를 위한 openMP

익명132 2017. 7. 12. 17:34

OpenMP : API for multi-thread application

set of compiler directive, library function, environment variable


#pragma : 컴파일러 지시자의 시작

 -> 어느 부분부터 어느 부분까지를 병렬적으로 수행할 지 알아야 한다.

#pragma omp parallel{

}

이 부분을 벗어나도 바로 쓰레드를 종료하지 않는다.

적용은 어마무시하게 간단하다. (비주얼스튜디오를 쓰니까..)

프로젝트 속성창에서 C/C++ > Language > Open MP Support 를 Yes으로 설정해주고,

위의 문장을 추가하면 된다~~~~~정말 간단.

동기화 문제는 어떻게 해결하는가? 값을 갱신하는 부분을 동시에 수행하지 못하도록 락을 걸어야 겠다.

critical 이라는 construct를 사용해야한다. 하지만 접근을 제한하면 성능에 손해를 보기 때문에 reduction으로 변수를 선언하고,

한번에 재계산을 한다.


#pragma omp for

는 한계가 있다. iterator로 사용하는 변수는 부호가 있어야 하며, for 루프의 조건문은 부등호 중 하나, < 나 <= 에는 증감연산이 +여야한다.

iterator 변수는 루프내에서 값을 변경할 수 없다.


schedule 도 정해줄 수 있다.  (헤더파일 opm.h) 

#pragma omp parallel for schedule(kind, chunk size)

static(loop반복을 thread 수로 나눈 chuck 만큼 작업 , default), 

dynamic(각 작업을 queueing 해서 thread가 차례로 job을 가져가게 한다.), 

guided(점점 chuck size 줄인다), runtime(환경 변수에 지정된 값으로 스케쥴링)


참고 사이트 : http://himskim.egloos.com/3266925


'Private > openCV' 카테고리의 다른 글

영상처리 보간법들  (0) 2017.07.25
프로젝트 개인 정리  (0) 2017.07.15
[OpenCV] openCV3.2 Visual Studio setting (간단메모)  (1) 2017.02.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함