Freigeben über


C. C- und C++-Grammatik in OpenMP

Erfahren Sie mehr über die Grammatikregeln und Syntaxerweiterungen in C und C++ für OpenMP, ein paralleles Programmierframework.

C.1-Schreibweise

Die Grammatikregeln bestehen aus dem Namen für ein Nicht-Terminal, gefolgt von einem Doppelpunkt, gefolgt von Ersetzungsalternativen in separaten Zeilen.

Der Syntaktikausdrucksausdruckopt gibt an, dass der Ausdruck innerhalb des Ersetzungstyps optional ist.

Der syntaktische Ausdruck termoptseq entspricht term-seqopt mit den folgenden zusätzlichen Regeln:

term-seq:
Begriff
Begriff-SequenzBegriff
term-seq,Ausdruck

C.2-Regeln

Die Notation wird in Abschnitt 6.1 des C-Standards beschrieben. In diesem Grammatikanhang sind die Erweiterungen für die Grammatik der Basissprache für die OpenMP C- und C++-Direktiven aufgeführt.

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

statement-seq:
Anweisung
openmp-direktive
Statement-seq-Anweisung
statement-seq openmp-directive

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

Anweisungsliste:
Anweisung
openmp-direktive
statement-list-Anweisung
Anweisungsliste OpenMP-Direktive

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

Blockelement:
Erklärung
Anweisung
openmp-direktive

/* Standardanweisungen */

Aussage:
openmp-construct

openmp-construct:
Parallelkonstruktion
for-construct
Sections-Construct
Einzelkonstrukt
Parallel-für-Konstrukt
Parallelabschnittskonstrukt
Hauptkonstrukt
kritisches Konstrukt
Atomarer Konstrukt
geordnetes Konstrukt

openmp-direktive:
Barrieredirektive
Flush-Direktive

strukturierter Block:
Anweisung

Parallelkonstrukt:
Parallele Direktive-Blockstruktur

Paralleldirektive:
# pragma omp parallel Parallel-Klauseloptseqneue-Zeile

Parallel-Klausel:
einzigartige-parallele-Klausel
data-clause

unique-parallel-clause:
if ( Ausdruck)
num_threads ( Ausdruck)

for-construct:
Iterationsanweisung für direktive

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

for-clause:
unique-for-clause
data-clause
nowait

unique-for-clause:
ordered
schedule ( Zeitplanart)
schedule ( Zeitplanart,Ausdruck)

Zeitplanart:
static
dynamic
guided
runtime

sections-construct:
"sections-directive" Abschnittsumfang

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

sections-clause:
data-clause
nowait

Abschnittsbereich:
{ section-sequence }

Abschnittssequenz:
Abschnitts-Direktiveoptstrukturierter Block
Abschnitte-Sequenz Abschnitt-Direktive Strukturierter-Block

Abschnittsdirektive:
# pragma omp section Neue Zeile

Einzelkonstrukt:
Eindirektiver strukturierter Block

Einzeldirektive:
# pragma omp single single-clauseoptseqnew-line

Einzelklausel:
data-clause
nowait

Parallel-für-Konstrukt:
Parallel-für-Direktive-Iterationsanweisung

Parallel-für-Direktive:
# pragma omp parallel for Parallel-for-Clauseoptseqnew-line

Parallele-für-Klausel:
einzigartige-parallele-Klausel
unique-for-clause
data-clause

Parallelabschnittskonstrukt:
Parallelabschnitts-Direktive Abschnittsbereich

Parallelabschnittsdirektive:
# pragma omp parallel sections parallel-sections-clauseoptseqnew-line

Parallelabschnittsklausel:
einzigartige-parallele-Klausel
data-clause

Master-Konstrukt:
strukturierter Master-Direktive-Block

Hauptdirektive:
# pragma omp master Neue Zeile

kritisches Konstrukt:
Strukturierter Block mit kritischer Direktive

kritische Direktive:
# pragma omp critical region-phraseoptnew-line

Regionsausdruck:
(Bezeichner)

Barrieredirektive:
# pragma omp barrier Neue Zeile

Atomkonstrukt:
Ausdrucksanweisung für die Atomdirektive

Atomdirektive:
# pragma omp atomic Neue Zeile

Flush-Direktive:
# pragma omp flush flush-varsoptnew-line

Flush-Vars:
(Variablenliste)

geordnetes Konstrukt:
geordneter strukturierter Direktivenblock

ordered-directive:
# pragma omp ordered Neue Zeile

/* Standarddeklarationen */

Deklaration:
threadprivate-direktive

threadprivate-direktive:
# pragma omp threadprivate ( Variable-Liste)Neue Zeile

data-clause:
private ( Variable-Liste)
copyprivate ( Variable-Liste)
firstprivate ( Variable-Liste)
lastprivate ( Variable-Liste)
shared ( Variable-Liste)
default ( shared )
default ( none )
reduction ( Reduktionsoperator:Variable-Liste)
copyin ( Variable-Liste)

Reduktionsoperator:
 Eines der Folgenden: + \* - & ^ | && ||

/* in C */

Variable-Liste:
Bezeichner
Variable-Liste,Bezeichner

/* in C++ */

Variable-Liste:
ID-Ausdruck
Variable-Liste,ID-Ausdruck