Partager via


Chapitre C. Grammaire OpenMP C et C++

Découvrez les règles de grammaire et les extensions de syntaxe en C et C++ pour OpenMP, une infrastructure de programmation parallèle.

Notation C.1

Les règles de grammaire se composent du nom pour un non-terminal, suivi d’un signe deux-points, suivi d’alternatives de remplacement sur des lignes distinctes.

L’expression syntaxique termopt indique que le terme est facultatif pour le remplacement.

L’expression syntaxique termoptseq équivaut à term-seqopt avec les règles supplémentaires suivantes :

term-seq :
terme
term-seqterm
term-seq,terme

Règles C.2

La notation est décrite dans la section 6.1 de la norme C. Cette annexe de la grammaire montre les extensions de la grammaire du langage de base pour les directives OpenMP C et C++.

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

séquence d'instructions :
déclaration
openmp-directive
séquence d'instructions instruction
séquence-instructions directive-openmp

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

statement-list :
déclaration
directive-openmp
declaration de liste d'instructions
liste-instructions directive-openmp

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

élément-bloc :
déclaration
déclaration
directive-openmp

/* déclarations standard */

déclaration :
constructeur OpenMP

openmp-construct:
construction-parallèle
structure for
sections-construction
constructeur unique
constructeur parallel-for
construction-sections-parallèles
master-construct
construction-critique
construction-atomique
structure ordonnée

directive OpenMP :
directive-barrière
directive-de-rinçage

bloc-structuré :
déclaration

construction-parallèle :
parallèle-directive bloc-structuré

directive-parallèle :
# pragma omp parallel clause-parallèleoptseqnouvelle-ligne

clause-parallèle :
clause-parallèle-unique
clause-données

clause-unique-parallèle :
if ( expression)
num_threads ( expression)

construction-for :
directive for instruction d'itération

for-directive :
# pragma omp for for-clauseoptseqnouvelle-ligne

for-clause :
clause-unique-pour
clause-données
nowait

unique-pour-clause :
ordered
schedule ( type-planification)
schedule ( type-planification,expression)

type de programme :
static
dynamic
guided
runtime

sections de construction :
directive-sections périmètre-section

sections-directive :
# pragma omp sections sections-clauseoptseqnouvelle-ligne

sections-clause :
clause-données
nowait

section d'étendue :
{ section-séquence }

section-séquence :
directive-sectionoptbloc-structuré
section-séquence directive-section bloc-structuré

section-directive :
# pragma omp section nouvelle-ligne

construction-unique :
bloc structuré à directive unique

directive-unique :
# pragma omp single clause simpleoptseqnouvelle-ligne

clause-unique :
clause-données
nowait

construction-parallèle-for :
directive pour parallèle instruction de boucle

directive-parallèle-for :
# pragma omp parallel for parallèle-pour-clauseoptseqnouvelle-ligne

clause-for-parallèle :
clause-parallèle-unique
unique-pour-clause
clause-données

construction-sections-parallèles :
directive-sections-parallèles portée de la section

directive-sections-parallèles :
# pragma omp parallel sections parallel-sections-clauseoptseqnouvelle-ligne

clause-sections-parallèles :
clause-parallèle-unique
clause-données

constructeur principal :
bloc structuré de directives principales

directive principale :
# pragma omp master nouvelle-ligne

construction-critique :
directive critique bloc structuré

directive critique :
# pragma omp critical expression-régionoptnouvelle-ligne

expression régionale :
(identificateur)

directive de barrière :
# pragma omp barrier nouvelle-ligne

construction-atomique :
directive atomique instruction d'expression

directive-atomique :
# pragma omp atomic nouvelle-ligne

directive de purge :
# pragma omp flush vider-variablesoptionnouvelle-ligne

variables-vidage :
(liste-variables)

construction-ordonnée :
directive ordonnée de bloc structuré

directive-ordonnée :
# pragma omp ordered nouvelle-ligne

/* déclarations standard */

declaration :
directive-threadprivate

directive privée au niveau du thread
# pragma omp threadprivate ( liste-variables)nouvelle-ligne

clause-données :
private ( liste-variables)
copyprivate ( liste-variables)
firstprivate ( liste-variables)
lastprivate ( liste-variables)
shared ( liste-variables)
default ( shared )
default ( none )
reduction ( opérateur-réduction:liste-variables)
copyin ( liste-variables)

opérateur de réduction :
 Un des éléments suivants : + \* - & ^ | && ||

/* en C */

liste-variables :
identificateur
liste-variables,identificateur

/* en C++ */

liste-variables :
id-expression
liste-variables,expression-id