次の方法で共有


C: OpenMP C と C++ の文法

並列プログラミング フレームワークである OpenMP 用の C および C++ の文法規則と構文拡張について説明します。

C.1 表記

文法規則は、非ターミナルの名前に続いてコロン、別の行の置換代替で構成されます。

構文式用語 opt は、置換内で用語が省略可能であることを示します。

構文式 termoptseqterm-seqopt と同等で、次の追加規則があります。

term-seq:
用語
term-seqterm
term-seq,用語

C.2 ルール

表記は、C 標準のセクション 6.1 で説明されています。 この文法付録では、OpenMP C および C++ ディレクティブの基本言語文法の拡張機能を示します。

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

statement-seq:
陳述
openmp-directive
statement-seq ステートメント
statement-seq openmp-directive

/* C90 標準(ISO/IEC 9899:1990)内 */

ステートメントリスト:
陳述
openmp-directive
statement-list ステートメント
statement-list openmp-directive

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

block-item:
宣言
陳述
openmp-directive

/* 標準ステートメント */

ステートメント:
openmp-construct

openmp-construct:
parallel-construct
for-construct
sections-construct
single-construct
parallel-for-construct
並列セクション構造
master-construct
critical-construct
atomic-construct
順序付き構造

openmp-directive:
barrier-directive
flush-directive

structured-block:
陳述

parallel-construct:
並列指令構造化ブロック

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

並列節:
unique-parallel-clause
data-clause

ユニーク・パラレル・クローズ
if ( 表現)
num_threads ( 表現)

for-construct:
forディレクティブ反復文

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

for-clause:
特有の条件
data-clause
nowait

unique-for-clause:
ordered
schedule ( スケジュールの種類)
schedule ( スケジュールの種類,表現)

スケジュールの種類:
static
dynamic
guided
runtime

sections-construct:
セクション指示 セクション範囲

sections-ディレクティブ:
# pragma omp sections セクション条項オプションシーケンス新しい行

sections-clause:
data-clause
nowait

section-scope:
{ section-sequence }

セクションシーケンス:
セクション指示オプション構造化ブロック
セクションシーケンス セクション指令 構造化ブロック

section-directive:
# pragma omp section new-line

single-construct:
単一指令構造化ブロック

single-directive:
# pragma omp single 単一節オプションシーケンス改行

single-clause:
data-clause
nowait

parallel-for-construct:
parallel-for-directive 反復文

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

parallel-for-clause:
unique-parallel-clause
特有の条件
data-clause

並列セクション構造:
並列セクション指示 section-scope

parallel-sections-directive:
# pragma omp parallel sections パラレルセクションズクローズオプトシークニューライン

並列セクション条項:
unique-parallel-clause
data-clause

master-construct:
マスター指令構造化ブロック

マスター-ディレクティブ:
# pragma omp master new-line

critical-construct:
重要指示構造化ブロック

critical-directive:
# pragma omp critical 地域フレーズオプション改行

地域フレーズ:
(識別子)

バリアー命令:
# pragma omp barrier new-line

atomic-construct:
アトミック指令式ステートメント

atomic-directive:
# pragma omp atomic new-line

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

フラッシュ変数
(variable-list)

順序構造:
順序付きディレクティブ構造ブロック

ordered-directive:
# pragma omp ordered new-line

/* 標準宣言 */

宣言:
スレッドプライベート指令

スレッドプライベートディレクティブ:
# pragma omp threadprivate ( variable-list)new-line

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

reduction-operator:
 例: + \* - & ^ | && ||

/* C */

variable-list:
識別子
variable-list,識別子

/* C++ */

variable-list:
id-expression
variable-list,id-expression