다음을 통해 공유


C. OpenMP C 및 C++ 문법

병렬 프로그래밍 프레임워크인 OpenMP용 C 및 C++의 문법 규칙 및 구문 확장에 대해 알아봅니다.

C.1 표기법

문법 규칙은 비종결어의 이름과 콜론, 그리고 별도의 줄에 대체어를 나열하는 것으로 구성됩니다.

구문 표현식 용어opt는 대체 용어 내에서 선택 사항임을 나타냅니다.

구문 식 termoptseq는 다음 추가 규칙에 의해 term-seqopt와 동등합니다.

term-seq:
용어
term-seqterm
term-seq,용어

C.2 규칙

표기법은 C 표준의 섹션 6.1에 설명되어 있습니다. 이 문법 부록은 OpenMP C 및 C++ 지시어에 대한 기본 언어 문법의 확장을 보여줍니다.

/* C++ (ISO/IEC 14882:1998) 내 */

statement-seq:
성명서
openmp 지시문
문장 시퀀스 문
statement-seq openmp-directive

/* C90 (ISO/IEC 9899:1990) 내 */

문장 목록:
성명서
openmp 지시문
statement-list 문
statement-list openmp-directive

/* C99 (ISO/IEC 9899:1999) 내 */

블록 항목:
선언
성명서
openmp 지시문

/* 표준 문 */

:
openmp-construct

openmp-construct:
parallel-construct
for-construct
sections-construct
단일 구조
parallel-for-construct
병렬-섹션-구조
master-construct
critical-construct
atomic-construct
정렬된 구성

openmp 지시문:
배리어 명령
플러시 지시문

구조화된 블록:
성명서

parallel-construct:
병렬 지시문 구조화 블록

병렬 지시문:
# pragma omp parallel parallel-clauseoptseqnew-line

parallel-clause:
독창적인-병렬-절
data-clause

고유 병렬 절:
if ( )
num_threads ( )

for-construct:
for-지시문 반복문

for-directive:
# pragma omp for for-clauseoptseqnew-line

for-clause:
조건에 고유함
data-clause
nowait

조건을 위한 고유함:
ordered
schedule ( 일정 종류)
schedule ( 일정 종류,표현식)

일정 종류:
static
dynamic
guided
runtime

섹션 구성:
섹션 지시문 섹션 범위

sections-directive:
# pragma omp sections 항목-조항옵트시퀀스새로운-줄

섹션-조항:
data-clause
nowait

섹션 범위:
{ section-sequence }

섹션 순서:
section-directiveoptstructured-block
섹션 순서 섹션 지시자 구조적 블록

section-directive:
# pragma omp section 줄 바꿈

단일 구성:
단일 지시문 구조 블록

단일 지시문:
# pragma omp single single 절optseqnew-line

단일 절:
data-clause
nowait

parallel-for-construct:
병렬-포-지시문 반복문

parallel-for-directive:
# pragma omp parallel for parallel-for-clauseoptseqnew-line

parallel-for-clause:
독창적인-병렬-절
조건에 고유함
data-clause

병렬 섹션 구성:
병렬-섹션-지시문 섹션-범위

parallel-sections-directive:
# pragma omp parallel sections 병렬-섹션-클라우스옵트시퀀스새-라인

병렬 섹션 조항:
독창적인-병렬-절
data-clause

master-construct:
마스터 지침 구조화 블록

마스터 지시문:
# pragma omp master 줄 바꿈

critical-construct:
중요 지시 구조화 블록

중요 지시:
# pragma omp critical region-phrase optnew-line

region-phrase:
(식별자)

배리어 디렉티브:
# pragma omp barrier 줄 바꿈

atomic-construct:
원자 지시문 표현문

원자 지시문:
# pragma omp atomic 줄 바꿈

플러시 지시어:
# pragma omp flush flush-vars optnew-line

변수 초기화:
(variable-list)

순서화된-구조:
순서 지시문 구조 블록

명령된 지시문:
# pragma omp ordered 줄 바꿈

/* 표준 선언 */

선언:
threadprivate 지시문

스레드 전용 지시문:
# pragma omp threadprivate ( variable-list)줄 바꿈

data-clause:
private ( variable-list)
copyprivate ( variable-list)
firstprivate ( variable-list)
lastprivate ( variable-list)
shared ( variable-list)
default ( shared )
default ( none )
reduction ( reduction-operator:variable-list)
copyin ( variable-list)

reduction 연산자 :
 다음 중 하나: + \* - & ^ | && ||

/* C 내 */

variable-list:
식별자
variable-list,식별자

/* C++ 내 */

variable-list:
id-expression
variable-list,id-expression