OpenMP Directives
#pragma omp
- OpenMP의 동작을 제어하는 지시어(Directive)는 다음과 같은 형식을 가짐
- #pragma omp [directive-name] [clause [[,] clause] ..]
- directive-name은 동작의 종류를 결정
- clause는 각 동작에 따른 option을 결정
[directive-name] : parallel
Directive-name으로 parallel을 사용
parallel
뒤이은 블록을 멀티 스레드로 수행
Parallel clauses
if(condition), private(list), shared(list), firstprivate(list), num_thread(integer), reduction(operator : variable)
f(condition) clause
뒤이을 블록을 병렬 실행할지의 여부를 결정
condition이 true일 경우 병렬 실행
condition이 false일 경우 순차적 실행
private(list) clause
list의 변수들은 thread private한 변수들로 제공
기본적으로 parallel block 내에서 선언된 변수는 private
값을 초기화하지 않음
firstprivate(list) clause
private와 같음
단, 기존의 변수 값으로 private 변수값들을 초기화 함
shared(list) clause
list의 변수들을 공유 변수로 설정
데이터 레이스를 피하기 위해 사용자가 적절한 처리를 해 주어야 함
num_threads(int) clause
num_threads(integer)
- 몇 개의 스레드로 block을 실행할지 결정
- 기본적으로 omp_se_num_threads()와 동일한 동작
- omp_set_num_threads()를 미리 호출하였어도 이를 무시함
- num_threads를 사용하지 않을 경우
- 가장 최근에 omp_set_num_threads()로 설정한 개수의 스레드를 생성
- 몇 개의 스레드로 block을 실행할지 결정
reduction clause
- reduction(operator : list)
- operator에는 다음과 같은 연산자를 넣을 수 있음
- "+, - , *, /, &, &&, ^, |, ||"
- list에는 shared 변수를 아규먼트로 넣음
- Parallel block의 수행이 끝난 뒤 list의 변수들에 대해서 reduction을 수행
- operator에는 다음과 같은 연산자를 넣을 수 있음
반응형
'멀티코어 프로그래밍 > OpenMP' 카테고리의 다른 글
OpenMP (9) | 2022.04.08 |
---|---|
OpenMP 프로그래밍 (0) | 2015.07.17 |
댓글