Condividi tramite


C. Grammatica OpenMP C e C++

Informazioni sulle regole grammaticali e sulle estensioni della sintassi in C e C++ per OpenMP, un framework di programmazione parallela.

Notazione C.1

Le regole grammaticali sono costituite dal nome di un non terminale, seguito da due punti, seguito da alternative di sostituzione su righe separate.

Il terminedi espressione sintattica opt indica che il termine è facoltativo all'interno della sostituzione.

Il terminedi espressione sintattica optseq equivale al termine-seqopt con le regole aggiuntive seguenti:

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

Regole C.2

La notazione è descritta nella sezione 6.1 dello standard C. Questa appendice grammaticale mostra le estensioni della grammatica del linguaggio di base per le direttive OpenMP C e C++.

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

statement-seq:
affermazione
direttiva openmp
istruzione statement-seq
statement-seq openmp-directive

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

elenco di dichiarazioni:
affermazione
direttiva openmp
istruzione di statement-list
statement-list openmp-directive

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

block-item:
dichiarazione
affermazione
direttiva openmp

Istruzioni standard /* */

dichiarazione:
openmp-construct

openmp-construct:
costrutto parallelo
for-construct
costrutto sezioni
costrutto singolo
parallel-for-construct
costrutto di sezioni parallele
master-construct
costrutto critico
atomic-construct
costrutto ordinato

openmp-directive:
direttiva barriera
direttiva flush-directive

structured-block:
affermazione

costrutto parallelo:
blocco strutturato di direttiva parallela

direttiva parallela:
# pragma omp parallel clausola parallelaoptseqnew-line

clausola parallela:
clausola-unica-parallela
clausola data

clausola-unica-parallela:
if ( espressione)
num_threads ( espressione)

for-construct:
istruzione for-directive iteration-statement

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

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

unique-for-clause:
ordered
schedule ( tipo di pianificazione)
schedule ( tipo di, pianificazione espressione )

tipo di pianificazione:
static
dynamic
guided
runtime

sections-construct:
section-directive section-scope

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

clausola-di-sezioni:
clausola data
nowait

ambito sezione:
{ section-sequence }

sequenza di sezioni:
section-directiveoptstructured-block
sequenza-sezione direttiva-sezione blocco-strutturato

sezione-direttiva:
# pragma omp section nuova riga

costrutto singolo:
blocco strutturato a direttiva singola

direttiva singola:
# pragma omp single clausola singolaoptseqnew-line

single-clause:
clausola data
nowait

parallel-for-construct:
istruzione iterazione parallel-for-directive

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

parallel-for-clause:
clausola-unica-parallela
unique-for-clause
clausola data

costrutto parallel-sections:
direttiva-sezioni-parallele ambito-sezione

direttiva parallel-sections-directive:
# pragma omp parallel sections clausola-sezioni-paralleleoptseqnuova-linea

parallel-sections-clause:
clausola-unica-parallela
clausola data

master-construct:
master-directive blocco strutturato

direttiva master:
# pragma omp master nuova riga

critical-construct:
blocco strutturato direttiva-critica

direttiva critical:
# pragma omp critical region-phraseoptnew-line

region-phrase:
(identificatore)

direttiva barriera:
# pragma omp barrier nuova riga

atomic-construct:
espressione-istruzione di direttiva atomica

direttiva atomic:
# pragma omp atomic nuova riga

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

flush-vars:
(variable-list)

ordered-construct:
blocco strutturato con direttive ordinate

direttiva ordered:
# pragma omp ordered nuova riga

Dichiarazioni standard /* */

dichiarazione:
threadprivate-directive

threadprivate-directive:
# pragma omp threadprivate ( variable-list)nuova riga

clausola data:
private ( variable-list)
copyprivate ( variable-list)
firstprivate ( variable-list)
lastprivate ( variable-list)
shared ( variable-list)
default ( shared )
default ( none )
reduction ( Operatore: di riduzionelista-variabili)
copyin ( variable-list)

Operatore di riduzione:
 Uno dei seguenti: + \* - & ^ | && ||

/* in C */

variable-list:
identificatore
identificatore variable-list,

/* in C++ */

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