본문 바로가기
멀티코어 프로그래밍/OpenMP

OpenMP Directives

by 기리의 개발로그 2022. 4. 9.

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()로 설정한 개수의 스레드를 생성

reduction clause

  • reduction(operator : list)
    • operator에는 다음과 같은 연산자를 넣을 수 있음
      • "+, - , *, /, &, &&, ^, |, ||"
    • list에는 shared 변수를 아규먼트로 넣음
    • Parallel block의 수행이 끝난 뒤 list의 변수들에 대해서 reduction을 수행

반응형

'멀티코어 프로그래밍 > OpenMP' 카테고리의 다른 글

OpenMP  (9) 2022.04.08
OpenMP 프로그래밍  (0) 2015.07.17

댓글