C. OpenMP C- och C++-grammatik

Lär dig mer om grammatikregler och syntaxtillägg i C och C++ för OpenMP, ett parallellt programmeringsramverk.

C.1-notation

Grammatikreglerna består av namnet på en icke-terminal, följt av ett kolon, följt av ersättningsalternativ på separata rader.

Det syntaktiska uttrycket termopt anger att termen är valfri i ersättningen.

Det syntaktiska uttrycket termoptseq motsvarar term-seqopt med följande regler:

term-seq:
  termer
  term-seqterm
  term-sekvens,term

C.2-regler

Notationen beskrivs i avsnitt 6.1 i C-standarden. Den här grammatikbilagan visar tilläggen till grundläggande språk grammatik för OpenMP C- och C++-direktiven.

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

statement-seq:
  uttalande
  openmp-directive
  statement-seq-instruktion
  statement-seq openmp-directive

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

uttalandelista:
  uttalande
  openmp-directive
  statement-list-instruktion
  statement-list openmp-directive

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

block-item:
  deklaration
  uttalande
  openmp-directive

/* standarduttalanden */

uttalande:
  openmp-construct

openmp-construct:
  parallellkonstruktion
  for-construct
  sections-construct
  singelkonstruktion
  parallel-for-construct
  parallel-sections-construct
  master-construct
  kritisk konstruktion
  atomär konstruktion
  ordnad struktur

openmp-directive:
  förordning om barriärer
  flush-directive

strukturerad-block:
  uttalande

parallellkonstruktion:
  parallell-direktiv strukturerad block

parallella direktiv:
  # pragma omp parallel parallel-clauseoptseqnew-line

parallel-clause:
  unique-parallel-clause
  data-klausul

unique-parallel-clause:
  if ( uttryck)
  num_threads ( uttryck)

for-construct:
  for-directive iteration-statement

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

for-clause:
  unique-for-clause
  data-klausul
  nowait

unique-for-clause:
  ordered
  schedule ( schematyp)
  schedule ( schematyp,uttryck)

schematyp:
  static
  dynamic
  guided
  runtime

sections-construct:
  sektioner-direktiv sections-scope

avsnittsdirektiv:
  # pragma omp sections sections-clauseoptseqnew-line

avsnittsklausul:
  data-klausul
  nowait

avsnitts-omfattning:
  { section-sequence }

section-sequence:
  section-directiveoptstructured-block
  sektion-sekvens sektions-direktiv strukturerad-block

avsnittsdirektiv:
  # pragma omp section ny rad

enkel konstruktion:
  strukturerad blockering med ett enda direktiv

enda direktiv:
  # pragma omp single single-clauseoptseqnew-line

single-clause:
  data-klausul
  nowait

parallel-for-construct:
  parallell-för-direktiv iterationsuttryck

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

parallel-for-clause:
  unique-parallel-clause
  unique-for-clause
  data-klausul

parallell-sektionskonstruktion:
  parallellsektion-direktiv sektionsomfång

direktiv för parallella sektioner:
  # pragma omp parallel sections parallel-sections-clauseoptseqnew-line

parallellsektionerklausul:
  unique-parallel-clause
  data-klausul

master-construct:
  mästerstyrande strukturerat block

huvuddirektiv:
  # pragma omp master ny rad

viktig konstruktion:
  kritisk-direktiv strukturerad-block

kritiskt direktiv:
  # pragma omp critical region-frasoptnew-line

regionfras:
  (identifierare)

barriärdirektiv:
  # pragma omp barrier ny rad

atomic-construct:
  atomisk-direktiv uttrycks-sats

atomdirektiv:
  # pragma omp atomic ny rad

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

flush-vars:
  (variabellista)

ordnad konstruktion:
  strukturerat block för beställningsdirektiv

order-directive:
  # pragma omp ordered ny rad

/* standarddeklarationer */

deklaration:
  threadprivate-directive

threadprivate-directive:
  # pragma omp threadprivate ( variabellista)ny rad

data-klausul:
  private ( variable-list)
  copyprivate ( variable-list)
  firstprivate ( variable-list)
  lastprivate ( variable-list)
  shared ( variable-list)
  default ( shared )
  default ( none )
  reduction ( reduce-operator:variable-list)
  copyin ( variable-list)

reduktionsoperator:
 En av: + \* - & ^ | && ||

/* i C */

variable-list:
  identifierare
  variable-list,identifierare

/* i C++ */

variable-list:
  id-uttryck
  variabellista,id-uttryck