C. OpenMP C と C++ の文法

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

C.1 表記

文法規則は、非ターミナルの名前に続いてコロン、その後、別の行に各置換選択肢が記載されることで構成されます。

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

構文式 termoptseq は term-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 ステートメント
  ステートメントリスト openmp指令

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

ブロックアイテム
  宣言
  陳述
  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-clauseoptseq新しい行

並列節:
  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

並列セクション指令
  # pragma omp parallel sections パラレルセクションズクローズオプトシークニューライン

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

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

マスター-ディレクティブ:
  # pragma omp master 新しい行

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

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

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

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

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

atomic-directive:
  # pragma omp atomic ニューライン

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

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

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

ordered-directive:
  # pragma omp ordered ニューライン

/* 標準宣言 */

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

スレッドプライベートディレクティブ:
  # 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)

リダクション演算子
 例: + \* - & ^ | && ||

/* C で */

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

/* C++のコメント */

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