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 dans 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-instructions :
instruction
directive-openmp
instruction séquence-instructions
directive-openmp séquence-instructions

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

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

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

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

/* instructions standard */

instruction :
construction-openmp

construction-openmp :
construction-parallèle
construction-for
construction-sections
construction-unique
construction-for-parallèle
construction-sections-parallèle
construction-maître
construction-critique
construction-atomique
construction-ordonnée

directive-openmp :
directive-cloisonnement
directive-vidage

bloc-structuré :
instruction

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

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

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

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

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

directive-for :
# pragma omp for clause-foroptseqnouvelle-ligne

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

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

type-planification :
static
dynamic
guided
runtime

construction sections :
étendue-section directive-sections

directive-sections :
# pragma omp sections clause-sectionsoptseqnouvelle-ligne

clause-sections :
clause-données
nowait

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

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

directive-section :
# pragma omp section nouvelle-ligne

construction-unique :
directive-unique bloc-structuré

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

clause-unique :
clause-données
nowait

construction-parallèle-for :
directive-for-parallèle instruction-itération

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

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

construction-sections-parallèles :
directive-sections-parallèles étendue-section

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

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

construction-maître :
directive-maître bloc-structuré

directive-maître :
# pragma omp master nouvelle-ligne

construction-critique :
directive-critique bloc-structuré

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

expression-région :
(identificateur)

directive-cloisonnement :
# pragma omp barrier nouvelle-ligne

construction-atomique :
directive-atomique instruction-expression

directive-atomique :
# pragma omp atomic nouvelle-ligne

directive-vidage :
# pragma omp flush variables-vidageoptnouvelle-ligne

variables-vidage :
(liste-variables)

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

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

/* déclarations standard */

declaration :
directive-threadprivate

directive-threadprivate :
# 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-réduction :
 Un des éléments suivants : + \* - & ^ | && ||

/* en C */

liste-variables :
identificateur
liste-variables,identificateur

/* en C++ */

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