C. OpenMP C- och C++-grammatik

Lär dig mer om grammatikregler och syntaxtillägg i C och C++ för OpenMP, ett parallellt programmeringsramverk.

C.1-notation

Grammatikreglerna består av namnet på en icke-terminal, följt av ett kolon, följt av ersättningsalternativ på separata rader.

Det syntaktiska uttrycket termopt anger att termen är valfri i ersättningen.

Det syntaktiska uttrycket termoptseq motsvarar term-seqopt med följande regler:

term-seq:
termer
term-seqterm
term-seq,term

C.2-regler

Notationen beskrivs i avsnitt 6.1 i C-standarden. Den här grammatikbilagan visar tilläggen till grundläggande språk grammatik för OpenMP C- och C++-direktiven.

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

statement-seq:
uttalande
openmp-directive
statement-seq-instruktion
statement-seq openmp-directive

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

uttalandelista:
uttalande
openmp-directive
statement-list-instruktion
statement-list openmp-directive

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

block-item:
deklaration
uttalande
openmp-directive

/* standarduttalanden */

uttalande:
openmp-construct

openmp-construct:
parallellkonstruktion
for-construct
sections-construct
singelkonstruktion
parallel-for-construct
parallel-sections-construct
master-construct
kritisk konstruktion
atomär konstruktion
ordnad struktur

openmp-directive:
förordning om barriärer
flush-directive

strukturerad-block:
uttalande

parallellkonstruktion:
parallell-direktiv strukturerad block

parallella direktiv:
# pragma omp parallel parallel-clauseoptseqnew-line

parallel-clause:
unique-parallel-clause
data-klausul

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

for-construct:
for-directive iteration-statement

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

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

unique-for-clause:
ordered
schedule ( schematyp)
schedule ( schematyp,uttryck)

schematyp:
static
dynamic
guided
runtime

sections-construct:
sektioner-direktiv sections-scope

avsnittsdirektiv:
# pragma omp sections sections-clauseoptseqnew-line

avsnittsklausul:
data-klausul
nowait

avsnitts-omfattning:
{ section-sequence }

section-sequence:
section-directiveoptstructured-block
sektion-sekvens sektions-direktiv strukturerad-block

avsnittsdirektiv:
# pragma omp section ny rad

enkel konstruktion:
strukturerad blockering med ett enda direktiv

enda direktiv:
# pragma omp single single-clauseoptseqnew-line

single-clause:
data-klausul
nowait

parallel-for-construct:
parallell-för-direktiv iterationsuttryck

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

parallel-for-clause:
unique-parallel-clause
unique-for-clause
data-klausul

parallell-sektionskonstruktion:
parallellsektion-direktiv sektionsomfång

direktiv för parallella sektioner:
# pragma omp parallel sections parallel-sections-clauseoptseqnew-line

parallellsektionerklausul:
unique-parallel-clause
data-klausul

master-construct:
mästerstyrande strukturerat block

huvuddirektiv:
# pragma omp master ny rad

viktig konstruktion:
kritisk-direktiv strukturerad-block

kritiskt direktiv:
# pragma omp critical region-frasoptnew-line

regionfras:
(identifierare)

barriärdirektiv:
# pragma omp barrier ny rad

atomic-construct:
atomisk-direktiv uttrycks-sats

atomdirektiv:
# pragma omp atomic ny rad

flush-directive:
# pragma omp flush flush-varsoptnew-line

flush-vars:
(variabellista)

ordnad konstruktion:
strukturerat block för beställningsdirektiv

order-directive:
# pragma omp ordered ny rad

/* standarddeklarationer */

deklaration:
threadprivate-directive

threadprivate-directive:
# pragma omp threadprivate ( variabellista)ny rad

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

reduktionsoperator:
 En av: + \* - & ^ | && ||

/* i C */

variable-list:
identifierare
variable-list,identifierare

/* i C++ */

variable-list:
id-uttryck
variabellista,id-uttryck