Поделиться через


В. Грамматика OpenMP C и C++

Узнайте о правилах грамматики и расширениях синтаксиса в C и C++ для OpenMP, параллельной платформе программирования.

Нотация C.1

Правила грамматики состоят из имени для неконечного терминала, за которым следует двоеточие, а затем заменять альтернативные варианты на отдельных строках.

Термин синтаксического выраженияуказывает , что термин является необязательным в рамках замены.

Термин syntactic expression optseq эквивалентен варианту term-seq с помощью следующих дополнительных правил:

term-seq:
срок
термин term-seq
термин term-seq,

Правила C.2

Нотация описана в разделе 6.1 стандарта C. В этом приложении грамматики показаны расширения базовой грамматики языка для директив OpenMP C и C++.

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

statement-seq:
инструкция
директива openmp-
Оператор statement-seq
инструкция-seq openmp-директива

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

список операторов:
инструкция
директива openmp-
Оператор statement-list
инструкция-list openmp-директива

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

Block-item:
декларация
инструкция
директива openmp-

/* стандартные операторы */

заявление:
openmp-construct

openmp-construct:
параллельная конструкция
for-construct
sections-construct
одноконструкционная конструкция
parallel-for-construct
параллельные разделы-конструктор
master-construct
критическая конструкция
атомарная конструкция
упорядоченная конструкция

директива openmp-:
Директива barrier-
Директива flush-

структурированный блок:
инструкция

параллельная конструкция:
Структурированный блок параллельной директивы

параллельная директива:
# pragma omp parallel предложение parallel-optseqnew-line

предложение parallel-:
предложение unique-parallel-
предложение data-

предложение unique-parallel-:
if ( выражение)
num_threads ( выражение)

for-construct:
Оператор for-directive iteration-statement

for-директива:
# pragma omp for предложение for-clauseoptseqnew-line

предложение for::
уникальное предложение for-clause
предложение data-
nowait

unique-for-clause:
ordered
schedule ( Тип расписания)
schedule ( Тип, расписания выражение )

тип расписания:
static
dynamic
guided
runtime

sections-construct:
sections-directive section-scope

sections-directive:
# pragma omp sections предложение sections-clauseoptseqnew-line

sections-clause:
предложение data-
nowait

область раздела:
{ последовательность разделов }

последовательность разделов:
директива section-optstructured-block
последовательность-разделов директивы-раздела структурированный-блок

директива section-:
# pragma omp section новая строка

одноконструкционная конструкция:
структурированный блок с одной директивой

одноэлементная директива:
# pragma omp single одно предложениеoptseqnew-line

одно предложение:
предложение data-
nowait

parallel-for-construct:
оператор parallel-for-directive iteration-statement

Parallel-for-directive:
# pragma omp parallel for Предложение parallel-for-for-optseqnew-line

parallel-for-clause:
предложение unique-parallel-
уникальное предложение for-clause
предложение data-

конструкция параллельных секций:
область раздела parallel-sections-directive

Директива parallel-sections-:
# pragma omp parallel sections предложение parallel-sections-optseqnew-line

предложение parallel-sections-:
предложение unique-parallel-
предложение data-

master-construct:
главного директивного структурированного блока

master-директива:
# pragma omp master новая строка

критически важный конструктор:
структурированный блок критической директивы

критическая директива:
# pragma omp critical фраза регионавыборновой строки

фраза региона:
(идентификатор)

директива barrier-:
# pragma omp barrier новая строка

атомарная конструкция:
оператор atomic-directive expression-statement

атомная директива:
# pragma omp atomic новая строка

Директива flush:
# pragma omp flush flush-varsвыборновой строки

flush-vars:
(переменный список)

упорядоченная конструкция:
упорядоченная директива структурированная блокировка

упорядоченная директива:
# pragma omp ordered новая строка

/* Стандартные объявления */

объявление:
threadprivate-директива

threadprivate-директива:
# pragma omp threadprivate ( переменная списка)новая строка

предложение data-clause:
private ( переменная списка)
copyprivate ( переменная списка)
firstprivate ( переменная списка)
lastprivate ( переменная списка)
shared ( переменная списка)
default ( shared )
default ( none )
reduction ( список переменных операторов:сокращения)
copyin ( переменная списка)

оператор сокращения:
 Одно из следующих: + \* - & ^ | && ||

/* в C */

переменная списка:
идентификатор
Идентификатор списка,переменных

/* в C++ */

переменная списка:
выражение id-expression
выражение идентификатора переменной списка,