저번 글에 이어서 몇 가지 더 사용법 정리.
사용법
1. omp single
#pragma omp single // 하나의 thread만 실행한다. 다른 thread는 기다린다.
#pragma omp single nowait // 하나의 thread만 실행한다. 다른 thread는 기다리지 않는다.
하나의 쓰레드만 동작하게 한다. 초기화나 출력부처럼 병렬 처리가 필요 없는 부분에서 용이하다.
2. omp master
#pragma omp master // master thread만 실행한다. 다른 thread는 기다리지 않고 넘어간다.
single과 매우 유사하지만 master thread 하나만 동작한다. 또한, 다른 쓰레드는 기다리지 않고 다음 부분을 실행한다.
3. omp task
#pragma omp task // thread 하나에 task를 넘겨주고 넘어간다.
다음에 오는 코드를 다른 하나의 thread에 넘겨주고 넘어간다.
4. omp taskwait
#pragma omp taskwait // 이전에 발생된 task가 모두 완료되고 난뒤 다음 행에 진입한다.
task들이 모두 완료될 때까지 동기화가 필요할 때가 있다. 그럴 때 taskwait를 써서 완료되지 않은 thread를 기다려 줄 수 있다.
5. omp barrier
#pragma omp barrier // 모든 thread가 barrier에 도착한 후 이후 라인을 실행한다.
딥러닝 같이 task들의 stage가 명확하게 구분되어있고 이전 stage가 완료되어야만 다음 stage를 실행할 수 있는 경우 barrier로 먼저 끝난 thread를 기다리게 할 수 있다.
Reference
데이터 동기화나 task 쪽에 자주 쓰는 것들을 정리해보았다.
'Programming > C | C++' 카테고리의 다른 글
STL - Vector 삽입/삭제/정렬/복사 등 사용법 예제 (0) | 2021.03.10 |
---|---|
OpenMP(1) - 입문자용 주요 사용법 간단한 설명/정리(omp parallel, for, atomic,critical) (2) | 2020.07.24 |
댓글