Partilhar via


C. Gramática de OpenMP para C e C++

Saiba mais sobre as regras gramaticais e extensões de sintaxe em C e C++ para OpenMP, uma estrutura de programação paralela.

Notação C.1

As regras gramaticais consistem no nome de um não-terminal, seguido por dois pontos, seguido por alternativas de substituição em linhas separadas.

O termo de expressão sintáticaopt indica que o termo é opcional dentro da substituição.

A expressão sintática termooptseq é equivalente a term-seqopt com as seguintes regras adicionais:

termo-seq:
termo
termo-seqtermo
termo-seq,termo

C.2 Regras

A notação é descrita na secção 6.1 da norma C. Este apêndice gramatical mostra as extensões para a gramática da linguagem base para as diretivas OpenMP C e C++.

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

enunciado-seq:
Declaração
diretiva OpenMP
declaração-seq declaração
statement-seq openmp-directive

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

lista de declarações:
Declaração
diretiva OpenMP
declaração de lista de declarações
statement-list openmp-directive

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

bloco de itens:
Declaração
Declaração
diretiva OpenMP

/* Declarações normalizadas */

Declaração:
openmp construct

openmp-construir:
construção paralela
for-construct
seções-estrutura
construção única
paralelo para construção
Construção de seções paralelas
mestre-construtor
conceito crítico
construção atómica
construção ordenada

OpenMP Directive:
directiva-barreira
diretiva de limpeza

bloco-estruturado:
Declaração

construção paralela:
bloco estruturado com diretiva paralela

Diretiva paralela:
# pragma omp parallel cláusula paralelaoptseqnew-line

cláusula paralela:
Cláusula Única-Paralela
Cláusula de dados

Cláusula Única-Paralela:
if ( expressão)
num_threads ( expressão)

para-construir:
declaração de iteração do tipo 'for'

para a diretiva:
# pragma omp for cláusula-foroptseqnova-linha

cláusula for:
Cláusula única
Cláusula de dados
nowait

Cláusula exclusiva:
ordered
schedule ( tipo de agendamento)
schedule ( , expressão)

tipo de horário:
static
dynamic
guided
runtime

construção de seções:
secções-directiva secção-âmbito de aplicação

Seções-Diretiva:
# pragma omp sections secções-cláusulasoptseqnew-line

secções-cláusulas:
Cláusula de dados
nowait

Âmbito da secção:
{ sequência de secção }

seqüência de seção:
secção-diretivaopçãobloco-estruturado
seção-seqüência-seção-diretiva estruturada-bloco

secção-directiva:
# pragma omp section nova linha

construção única:
bloco estruturado de diretiva única

Diretiva única:
# pragma omp single cláusula únicaoptseqnova linha

cláusula única:
Cláusula de dados
nowait

paralelo para construção:
declaração de iteração paralela para diretiva

Paralelamente à diretiva:
# pragma omp parallel for cláusula para paralelizaçãooptseqnova-linha

cláusula de parallel-for:
Cláusula Única-Paralela
Cláusula única
Cláusula de dados

Construção de secções paralelas:
Secções paralelas-Directiva Âmbito de aplicação

Secção paralela-directiva:
# pragma omp parallel sections cláusula de seções paralelasoptseqnew-line

Cláusula de secções paralelas:
Cláusula Única-Paralela
Cláusula de dados

mestre de construção:
bloco estruturado da diretiva-mestra

directiva-mestre:
# pragma omp master nova linha

construção crítica:
Bloco estruturado de diretiva crítica

Directiva-crítica:
# pragma omp critical região-fraseopçãonova-linha

região-frase:
(identificador)

diretiva-barreira:
# pragma omp barrier nova linha

construção atómica:
declaração de expressão com diretiva atômica

diretiva atómica:
# pragma omp atomic nova linha

diretiva de esvaziamento:
# pragma omp flush flush-varsopçãonova-linha

limpar-variáveis:
(lista variável)

ordered-construct:
Bloco estruturado de diretiva ordenada

diretiva ordenada:
# pragma omp ordered nova linha

/* Declarações normalizadas */

Declaração:
ThreadPrivate-diretiva

ThreadPrivate-Diretiva:
# pragma omp threadprivate ( lista) de variáveisnova linha

Cláusula de dados:
private ( lista de variáveis)
copyprivate ( lista de variáveis)
firstprivate ( lista de variáveis)
lastprivate ( lista de variáveis)
shared ( lista de variáveis)
default ( shared )
default ( none )
reduction ( operador: de reduçãolista de variáveis)
copyin ( lista de variáveis)

operador de redução:
 Um dos seguintes: + \* - & ^ | && ||

/* em C */

lista de variáveis:
identificador
lista, de variáveisidentificador

/* em C++ */

lista de variáveis:
id-expressão
lista de variáveis,id-expressão