Delen via


C. OpenMP C- en C++-grammatica

Meer informatie over de grammaticaregels en syntaxisextensies in C en C++ voor OpenMP, een parallel programmeerframework.

C.1-notatie

De grammaticaregels bestaan uit de naam van een niet-terminal, gevolgd door een dubbele punt, en vervolgens vervangingsopties op afzonderlijke regels.

De syntactische expressie term opt geeft aan dat de term optioneel is binnen de vervanging.

De syntactische expressietermoptseq is gelijk aan term-seqopt met de volgende aanvullende regels:

term-seq:
term
term-seq
term-seq,term

C.2-regels

De notatie wordt beschreven in sectie 6.1 van de C-standaard. Deze grammaticabijlage toont de extensies voor de basistaal grammatica voor de OpenMP C- en C++-instructies.

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

statement-seq:
verklaring
openmp-directive
statement-seq-instructie
statement-seq openmp-directive

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

verklaringenlijst:
verklaring
openmp-directive
instructie statement-list
statement-list openmp-directive

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

block-item:
verklaring
verklaring
openmp-directive

/* standaardverklaringen */

verklaring:
openmp-construct

openmp-construct:
parallel-construct
for-construct
secties-construct
single construct
parallel-for-construct
parallel-secties-constructie
master-construct
kritieke constructie
atomic-construct
geordende constructie

openmp-directive:
barrière-richtlijn
flush-directive

gestructureerd blok:
verklaring

parallelle constructie:
parallel-richtlijn gestructureerd-blok

parallelle richtlijn:
# pragma omp parallel parallel-componentoptseqnew-line

parallel-clausule:
unieke-parallelclausule
data-clausule

unieke-parallelle-clausule
if ( uitdrukking)
num_threads ( uitdrukking)

for-construct:
iteratie-instructie for-directive

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

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

unique-for-clause:
ordered
schedule ( planningstype)
schedule ( planningstype,uitdrukking)

planningstype:
static
dynamic
guided
runtime

secties-opbouw
secties-richtlijn sectie-scope

secties-richtlijn:
# pragma omp sections sections-clauseoptseqnew-line

sectieclausule:
data-clausule
nowait

sectiebereik:
{ section-sequence }

sectiereeks:
section-directiveoptstructured-block
sectie-sequentie sectie-richtlijn gestructureerd-blok

sectierichtlijn:
# pragma omp section nieuwe regel

één constructie:
gestructureerd blok met één instructie

één richtlijn:
# pragma omp single enkelvoudige clausuleoptseqnieuwe regel

enkelvoudige zin:
data-clausule
nowait

parallel-for-construct:
iteratie-instructie parallel-for-directive

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

parallel-voor-clausule:
unieke-parallelclausule
unique-for-clause
data-clausule

parallel-sections-construct
parallel-secties-richtlijn secties-bereik

parallelsectiesrichtlijn:
# pragma omp parallel sections parallel-sections-componentoptseqnew-line

parallel-sections-clausule:
unieke-parallelclausule
data-clausule

master-construct:
meester-directive gestructureerd-blok

master-directive:
# pragma omp master nieuwe regel

kritieke constructie:
kritiek-richtlijn gestructureerd-blok

kritieke richtlijn:
# pragma omp critical regio-uitdrukkingoptnew-line

regio-uitdrukking:
(identificator)

barrière-richtlijn:
# pragma omp barrier nieuwe regel

atomic-construct:
atomic-directive expression-statement

atomic-directive:
# pragma omp atomic nieuwe regel

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

flush-vars:
(variabele-lijst)

geordende constructie:
geordende richtlijn gestructureerd blok

opgelegde richtlijn
# pragma omp ordered nieuwe regel

/* standaarddeclaraties */

declaratie:
threadprivate-richtlijn

threadprivate-directive:
# pragma omp threadprivate ( variabelenlijst)nieuwe regel

gegevensclausule:
private ( variable-list)
copyprivate ( variable-list)
firstprivate ( variable-list)
lastprivate ( variable-list)
shared ( variable-list)
default ( shared )
default ( none )
reduction ( reductieoperator:variabelenlijst)
copyin ( variable-list)

reductieoperator:
 Een van de volgende: + \* - & ^ | && ||

/* in C */

variable-list:
identificatie
variable-list,identificator

/* in C++ */

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