Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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