병렬 프로그래밍 프레임워크인 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